IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C++ Discussion :

Accès au Tx d'un port UART/COM sous WinCE


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2009
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2009
    Messages : 110
    Par défaut Accès au Tx d'un port UART/COM sous WinCE
    Bonjour,

    Je ne suis pas très doué en C++ et je cherche à savoir s'il est possible d'accéder directement à la broche Tx d'un port UART ou COM sans protocole. Je dois en effet envoyer des signaux sur cette broche sans start/stop-bits et à la cadence que je souhaite. J'ai déjà vu que c'était possible via une DLL particulière, mais la particularité de mon travail est qu'il doit tourner sur Windows CE. Existe-t'il une fonction (comme WriteFile) pour faire cela?

    Merci

    PS: j'utilise les MFC

  2. #2
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2009
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2009
    Messages : 110
    Par défaut
    Remarque, le but est de jouer avec une LED IR

    Bon, j'ai creusé un peu plus.
    J'ai trouvé ceci, d'où ma question: devrais-je travailler en asynchrone?
    Ici, si je comprends bien, il se sert de WriteFile pour jouer uniquement sur CTS et RTS. Est-ce que cette fonction me permettrait de "jouer" sur Tx?

  3. #3
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Par défaut
    Citation Envoyé par RTN14 Voir le message
    Est-ce que cette fonction me permettrait de "jouer" sur Tx?
    Non. TX est une broche conditionnée par le protocole RS-232, donc encodée, donc non pilotable directement.
    Les broches usuellement utilisées pour ça sont effectivement CTS/RTS.

    Après, peut-être que ton UART possède une fonction pour passer toutes les broches en mode TTL, mais en général, ce n'est jamais le cas. Cf. la datasheet de l'UART en question pour le savoir.

    Sinon, il te faut connaître l'encodage physique sur les fils (usuellement, c'est un [ame=http://fr.wikipedia.org/wiki/Codage_NRZ]codage NRZ[/ame] pour la RS-232), et faire la manip suivante :
    • Configurer le port pour n'utiliser aucun bit de parité, 8 bits de données et aucun contrôle de flux.
    • Régler la vitesse de transmission à un débit adéquat, usuellement le plus vite possible.
    • Mettre un seul bit de stop.
    • Lancer un thread qui va maintenir une émission constante de 0 ou de 1 (suivant l'état désiré) sur la liaison.
    • Lorsque tu voudras changer l'état de la broche TX, il te faudra modifier le pattern émis (en général un octet) : c'est pour que ce soit le plus rapide possible qu'il faut émettre à la vitesse maximale.
    • Dans tous les cas, les bits de start/stop vont te mettre la zone dans ta transmission. Ce n'est pas (trop) gênant pour allumer/éteindre une LED, mais c'est critique pour quelque chose qui compterait les fronts montants / descendants.
    Bref, à ta place, j'utiliserais plutôt CTS/RTS quand même... Ou le port parallèle si tu en as un, qui est très très nettement plus adapté à ce genre d'exercice.
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

  4. #4
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2009
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2009
    Messages : 110
    Par défaut
    Merci pour ta réponse.
    Malheureusement le port UART ne possède que Rx/Tx/GND et il n'y a pas de parrallèle. Et comme je dois déjà utiliser un PIC sur la carte externe, je vais finalement "simplifier" en me servant du PIC pour commander la LED et prendre un PIC avec un UART.
    Merci

  5. #5
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Par défaut
    Sinon, tu as aussi la solution de passer par un boitier USB<->RS-232C (le C indique en général explicitement qu'il y a les broches de contrôle), qui sera vu par ton WinCE exactement comme un port COM habituel.

    Autre solution, si tu as la possibilité de faire un montage électronique : utiliser le niveau du TX (comme je te l'ai indiqué précédemment) mais l'expédier sur un filtre hardware (genre monostable redéclenchable) afin de "lisser" le niveau, et donc d'effacer les bits de start/stop de tes trames. Il te suffit de régler la durée du filtre et la vitesse du bus de façon à avoir un délai de réaction adéquat pour ta led. En ce cas, tu auras en sortie du filtre, à la durée du filtre près, un niveau logique librement définissable.

    A toi de voir derrière quels sont tes besoins réels, le prix que tu es prêt à mettre dedans (ou le budget alloué), etc.
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

  6. #6
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2009
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2009
    Messages : 110
    Par défaut
    Il n'y a qu'un seul port usb de prévu sur le terminal et donc il doit pouvoir rester libre pour le client.
    Lisser les bits starts et stop peut être intéressant, mais étant donné que les signaux sont sur plusieur octets, cela va créer des "trous" dans les trames et j'ai donc de forte chance que le récepteur (non modifiable car TV) prennent des bits en trop, correspondant au temps desstart et stop bits

    Mais merci tout de même pour tes coneils, ça pourra peut-être me servir une autre fois!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comment ouvrire un Port Rs232 Com
    Par ..::snake::.. dans le forum Windows
    Réponses: 10
    Dernier message: 21/05/2007, 16h53
  2. Ouvrir les ports de com en R/W
    Par Master55 dans le forum C
    Réponses: 1
    Dernier message: 11/05/2007, 20h20
  3. configuration d'un accès Internet avec redirection de ports
    Par loopback dans le forum Windows Serveur
    Réponses: 1
    Dernier message: 02/03/2007, 07h21
  4. Réponses: 11
    Dernier message: 29/03/2006, 16h23
  5. Réactiver le port com sous DOS
    Par Poisson Rouge dans le forum Windows
    Réponses: 7
    Dernier message: 28/12/2005, 13h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo