-
Port série synchrone
Bonjour!
J'ai déjà posté ce message sur le forum C#, qui est mon langage "de prédilection" on va dire :p
Mais vu que j'ai eu très peu de retours, et qu'apparemment, .NET n'est pas la plateforme idéale pour ce genre de programme, je me permets de reposter ici, étant donné que j'ai une maigre connaissance de C++ :
Dans le cadre d'un projet d'interface d'un capteur, j'ai fabriqué un circuit délivrant une tension créneau +/-5 ou 12V. J'ai besoin d'interpréter le signal sur un ordinateur.
Je souhaiterais utiliser une liaison série pour transmettre ces données sous forme de bits (le signal sous sa forme actuelle correspond, si j'ai bien compris, à la norme RS232), ne disposant pas de port parallèle.
Le seul problème est que je n'ai de loin pas le niveau pour intercaler les fameux bits de start et de stop nécessaires à une communication asynchrone.
D'après ce que j'ai pu lire, se priver de ces bits de régulation revient à créer une communication synchrone.
Cependant, je n'ai pu trouver nulle part de librairie, et à fortiori d'exemple de code c#/c++, pour ce type d'applications.
Ma question serait donc de savoir si cela est possible, et si oui, comment?
Merci d'avance,
Immerczeck
-
Petites questions ...
Salut Immerczeck.
Tu précises que tu as fait un circuit qui délivre une tension créneau de +/-5 ou 12V, est ce que c'est ton circuit qui génère les signaux ou alors il sert juste à alimenter ton capteur ?
Tu as écris que ce serait la norme RS232 pour la communication, celà veut dire que tu ne doit pas te tracasser pour les "start" et "stop" bit car le capteur envoie déjà les trames dans le format RS232, tu dois juste regarder dans la data sheet de ton capteur quel est le format par défaut (c'est souvent "9600, N, 8, 1", ce qui signifie 9600 bauds, pas de parité, 8 bit de données, 1 start/stop bit).
Si tu veux créer une communication synchrone entre ton ordinateur et ton capteur, tu vas demander beaucoup de ressources système à ton ordinateur.
Et puis je ne pense pas qu'il est possible de configurer ton capteur pour qu'il envoie en synchrone en RS232.
Si tel est le cas alors ce n'est pas du RS232, ce serait plutôt du RS485, de l'I2C, du SPI, ... quelque chose dans ce goût là, car un signal synchrone signifie qu'on doit transmettre un signal d'horloge entre le capteur et l'ordinateur et à ma connaisance ce n'est pas possible en RS232.
Pour lire les données sur le port série tu dois utiliser un thread qui va lire périodiquement le port et entre chaque lecture tu le mets en pause pendant environ 100ms pour ne pas surcharger ton ordinateur.
Voilà j'espère t'avoir éclairé, si t'as d'autres questions ...
Johan
-
Merci beaucoup pour ta réponse.
Lorsque j'ai parlé de RS232 j'ai simplement voulu dire que les tensions correspondaient à ce que j'avais lu concernant ceux en vigueur pour le port série, j'ai un peu poussé en parlant de norme, ça doit être l'élan lyrique :P
Le capteur quant à lui est un capteur électrochimique délivrant un signal créneau d'amplitude 700-800mV, de composante continue avoisinant les 500mV. Donc aucune norme en ce qui concerne le capteur. D'où mon montage, qui redresse et transforme le signal en quelque chose de censément exploitable pour l'ordinateur (le fameux +-5 ou +-12V).
Ce que je cherche à faire est d'envoyer par quelque moyen que ce soit ce créneau transformé sur le pc pour pouvoir exploiter les résultats. J'ai un adaptateur série/usb et parallele/usb mais je n'arrive pas à adresser le port parallele pour l'utiliser, bien que son utilisation me soit environ mille fois plus accessible apparemment :P
D'où l'affaire du port série ^^
Je commence à me demander si tout cela n'est pas au dessus de mes moyens en tant qu'apprenti électronicien/programmeur....
Immerczeck
-
Tout dépend également e que tu veux faire de ton signal : est-ce que tu veux détecter des créneaux ? (passage > 5V et inversement) ou bien obtenir la trace de ton signal (montée, plateau, redescente)
si c'est obtenir ton signal complet :
Je pense que le plus "simple" (vu que tu à l'air d'avoir quelques connaissance en électronique ^^) serait de rajouter sur ta carte un mincrocontroleur possédant un convertisseur A/N (perso j'ai bossé sur des atmel, mais je ne suis plus trop à la page...), couplé à un composant de communication série (de mémoire MAX232 par exemple), ou alors carrément une communication série intégrée au microcontrolleur (je pense que ca existe vu que la plupart sont programmable in-situ).
Ton microcontroleur peut alors lire et stocker la valeur de ton signal, que ton PC lui demande via la liaison série. Ces petites betes travaillent vite, et la plupart du temps tu peux travailler par interruption (quand un conversion A/N est finie apr exemple), ce qui te garanti un échantillonnage de ton signal correct...
-
Capter tout le signal dans ses moindres détails n'est pas nécessaire, j'ai effectivement juste besoin des sauts de tension (c'est pour cela qu'un simple signal "binaire" me suffisait)
Mais si les solutions le permettant s'avèrent aussi compliquées que le convertisseur A/N (j'avais déjà lu quelques documents là dessus), autant passer par celui-ci, mais alors tout mon montage perdrait de son intérêt...
-
Et autre question, que fait exactement le MAX232? Ne se contente-t-il pas d'adapter les tensions?
-
Oui, le RS232 permet l'adaptation de tensions entre le montage et le PC. La gestion de la communication série reste à ta charge (je ne suis plus très sûr, mais je crois qu'il gère uen partie et que tu peux avoir le résultat d'une communication en consultant les registres, comme pour un PC).
Si tu bases ta carte sur un microcontroleur, cela aura l'avantage de pouvoir fonctionner en détecteur de niveaux (c'est ton microntroleur qui positionne une variable a 1 si c'est vrai par exemple, et le PC ne fait que lui demander cette valeur), ou alors en enregistrement du signal...
Maintenant, sans composant, la liaison série c'est pas gagné, la liaison parallèle serait mieux :avec un ampli op en détecteur de seuil (http://pagesperso-orange.fr/michel.h...tm#comparateur) tu positionne direcement un 5V sur une broche du connecteur parallèle quand ton seuil est dépassé...
-
C'est à peu près ce que j'ai fait, sauf que j'ai ajouté une hystérésis dans un montage trigger de Schmitt pour les perturbations....
Bon il va falloir que je vole un portable avec port parallèle je pense :P
-
Je pense que c'est le plus simple ^^ (enfin si tu peux l'avoir légalement, c'est encore mieux :P:P)
Si tu veux faire une communication série, tu n'auras de toute façon pas le choix, il va falloir un composant qui gère cette communication du côté de ta carte capteur...
-
Salut,
Apparemment te voilà parti pour devoir changer ta carte, alors ce que je ferais je prend un µC (chez Atmel ils sont pas mal et en plus il y a beaucoup de forums disponibles), je connecte le capteur à une broche du convertisseur analogique/digital en passant par une résistance pour protéger le port contre les pics de courant et un Max232 (ou un FT232) pour les datas vers le pc.
Ta plage de tension variant de 500 à 800mV max, l'ADC pourra lire sans problème la tension.
Par soft dans le µc du définis le seuil de tension à partir duquel tu génères un "1" et hop on place ça en mémoire.
Comme ça si en cours de dévloppement tu te rends compte que au lieu de 650mV t'as besoin de 730mV tu modifie juste dans ton soft du µC et le tour est joué ; et comme ça t'as pas besoin de modifier ton hardware.
Enfin avec le pc tu demandes quand tu veux les données au µC.
A plus