Arduino Uno: communication via le port série, quel "protocole"?

Bonjour à tous,

Je suis nouveau dans le monde des board arduino et j'ai (déjà) des problèmes... :drooling_face:

Je suis sous Linux (Debian Wheezy) et j'utilise le programme Arduino 1.0.

Je voulais tester le port série, du coup, je charge l'exemple Serial et je l'upload. En utilisant le Serial Monitor, tout fonctionne parfaitement (je peux envoyer/recevoir du texte sans aucun problème de représentation). Par contre, si j'utilise mon adaptateur USB->RS232 (je connecte GND,RX et TX de mon câble à la board sur les pins 0/1) et je lance screen/minicom/kermit/cat sur mon périphérique (/dev/ttyUSB0), je reçois des caractères bizarre ( si dans mon code je fais Serial.println("a"), je reçois "0y= " correspondant aux codes hexa [0x4F, 0x79, 0x3D, 0x00] ).

Je me suis dit que peut-être les pins 0/1 ne fonctionnaient pas correctement vu qu'ils sont utilisés pour dialoguer avec le programme arduino a travers le câble USB.

Du coup, j'ai utilisé l'exemple SoftwareSerial sur les pins 7/8, j'ai à nouveau câblé gnd,rx,tx de mon RS232 sur les pins 7/8 de la board. Pourtant, je reçois toujours les mêmes caractères bizarres dans mes terminaux.

À noter qu'avec Serial.write("a") je reçois uniquement le caractère "O" (0x4F).

Je suis complètement perdu... mon adaptateur RS232->USB fonctionne pourtant bien vu que je l'utilise où je travaille pour du développement embarqué (avec Kermit).

Est-ce que quelqu'un a une idée? Y a-t-il une sorte "d'encapsulation" ou de protocole qui fait que le caractère "a" soit changé en "O" quand il est envoyé?

Ma board est une Uno R2, j'ai commandé une R3 pour voir si le problème persiste...

Merci d'avance car je sèche (sur un truc tout simple pourtant)... =(

Salut,

ça ressemble à une mauvaise configuration du port série. As-tu vérifie le baudrate, le nombre de bits de données ou de stop, la parité ?

++

Merci pour ta réponse.

Oui j'ai déjà essayé de changer plusieurs fois. J'ai cherché dans les sources de l'IDE pour voir quels sont les paramètres utilisés pour le port série, mais je n'ai pas trouvé. J'utilise normalement une configuration (8N1) avec 8 bits, pas de parité, 1 bit de stop, est-ce juste?

Pour le baudrate, j'en ai essayé plusieurs. D'ailleurs, j'ai aussi essayé de changer le baudrate du Serial Monitor pour voir si j'arrivais à recevoir ce fameux 0x4F (ce qui prouverait une erreur au niveau du baudrate) mais après 3-4 changements, le port série plante (une exception Java dans la console).

Merci d'avance.

Il n'y a pas de configuration juste ou pas juste, tant que c'est la même côté Arduino et côté PC... Après, 8N1 est le plus courant. Si tu mets le baudrate à 9600 des deux côtés, ça donne quoi ?

gagou7:
Par contre, si j'utilise mon adaptateur USB->RS232 (je connecte GND,RX et TX de mon câble à la board sur les pins 0/1)

Tu parle d'un vrai adaptateur RS232 avec une Sub-D 9 ou 25 Popints ?

Pshhhhh fait l'Arduino qui crame doucement.... ]:smiley:

Le RS232 est un signal à niveau -12V/+12V qui NE DOIT PAS être connecté directement à une Arduino qui n'accepte que du 0V/5V - Niveau TTL.

Rappel :

  • Liaison série en sortie direct d'un micro-processeur : 0/5V : "1" logique = +5V, "0" logique = 0V
  • RS232 : -12V/+12V : "1" logique = -12V, "0" logique = +12V

Il faut donc :

  1. Inverser les signaux
  2. Mettre à niveau

On utilise pour cela soit un circuit intégré dédié type MAX232 et toute la ribambelle dérivée
Ou bien un simple circuit à transistor comme sur l'ArduinoSerial, ancien modèle de carte Arduino équipée directement d'un port RS232 :

et le schéma
http://webzone.k3.mah.se/k3dacu/arduino/releases/serial_v1/arduino_serial_v1.png

Tu peux utiliser Kermit tout autant que le SerialMonitor en gardant la connexion USB.
Pas besoin d'un adaptateur USB/RS23, car la carte Arduino UNO intègre un adaptateur USB/TTL.

Bonjour,

Je suis complètement perdu... mon adaptateur RS232->USB fonctionne pourtant bien vu que je l'utilise où je travaille pour du développement embarqué (avec Kermit).

Si c'est du vrai RS232 j'espère que tu t'ai pas trop acharné avec !

Le RS232 c'est du +12 / -12v, l'arduino c'est du 0v / 5v ...

Pour interfacer un port RS232 avec une carte arduino il faut un CI spécialisé comme le MAX232 par exemple, ou alors faire un petit montage à base de transistor :

Bref débranche ton RS232 avant de tout cramer :wink:

Edit: Je me suis fait grilled en beauté par barbudor :grin:

Aïe, je n'avais pas percuté sur l'adaptateur USB -> RS232 :sweat_smile:

Comme ci-dessus, tu peux utiliser un MAX232. Ou alors ce genre d'adaptateur : http://www.sparkfun.com/products/718.

++

Mais as tu vraiment besoin de cela ?

Tu as déjà un adaptateur USB/TTL sur l'Arduino sous la forme soit d'un ATmegaU32 (Arduino Uno) soit d'un FTDI232.

Merci beaucoup !!! Le problème doit venir de là ! Bon, j'ai vite essayé de faire le schéma avec des composants que j'ai trouvé par-ci par-là, mais n'étant pas électronicien, ça ne fonctionne absolument pas :slight_smile: Il faudra que j'aille acheter exactement les bons.

Sinon, merci aussi pour la précision concernant l'ATmegaU32, en effet, avec Kermit je me connecte et les caractères sont affichés correctement.

L'utilisation du port série n'avait pas de but en soit si ce n'est pouvoir avoir un retour (debug) concernant l’exécution du code pour mes prochains essais.

En tout cas merci beaucoup !