Pages: [1]   Go Down
Author Topic: Arduino Uno : Problème de communication série  (Read 998 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 3
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonjour à vous,

Je m'inscris et expose mes difficultés après avoir passé un moment à parcourir ce forum sans trouver de solution à mon problème.
Je vais essayer de faire au plus clair et au plus concis.
Je suis un électronicien en herbes, j'apprends en essayant, mais là je bloque.


Je dispose d'une carte Arduino Uno. Je souhaite me servir de cette carte pour commander un appareil et donc envoyer des informations via la liaison série.
J'écris mon code à l'aide de l'environnement de développement arduino.exe, jusque là aucun soucis.
Je test mon programma via l'interface "Serial monitor" aucun soucis non plus.
Je décide par la suite de faire communiquer directement (pour essayer) l'Arduino avec l'appareil, rien ne se passe.

Je décide de revenir en arrière dans ma démarche en ajoutant l'étape "communication série Arduino/PC" pour visualiser le message envoyé par liaison série.
J'utilise une petit application de type "hyperterminal windows" pour tester ma liaison série.
Là commence mon problème..

Lorsque je programme et test la carte, j'utilise la connexion USB définie comme "port série 3" sur mon PC.
La carte est alors uniquement branchée via le port USB au PC.

Lorsque j'essaye ma communication "en condition" pour délivrer mon message série j'utilise un connecteur DB9 directement connecté à l'arduino.
(Broches Rx,Tx et GND, reliées).
Il est défini comme "port série 1". Ma carte est alors reliée via ce DB9 au PC et la carte est alimentée par une alimentation 12V standard, le câble USB est débranché.

Et là je me rend compte que :

Lorsque la carte est reliée par USB, elle me délivre le message attendu.
Lorsque la carte est reliée via le connecteur DB9, elle délivre un message erroné.

Mon hyperterminal pour lire l'information est configuré exactement de la même façon, je lui change juste le port de lecture (1 ou 3).
Dans un cas la carte est reliée par USB, dans l'autre par DB9 + ALIM 12V.

D'après ce que j'ai cru comprendre, cette liaison série est censée être identique, pourquoi le message reçu est-il différent ?
(J'ai déjà testé d'inverser le câblage de mon connecteur DB9 (Rx/Tx), dans un cas je reçois des informations erronées, dans l'autre cas je ne reçois rien.)

Je n'ai peu être pas délivré assez d'information, mais est-ce que quelqu'un aurait une idée pour m'aider ?


Voici le code programmé sur la carte (un peu simplifié pour l'occasion mais le principe y est) :

Quote
void setup ()
{
  Serial.begin(9600);

}

void loop()
{
 Serial.print("{STX}0T025.0F000.0R1000000000000000FE{ETX}");
 delay(1000);

}


Voici le résultat lu par USB :
Quote
{STX}0T025.0F000.0R1000000000000000FE{ETX} (le message attendu)
codage en hexadécimal :
Quote
7B 53 54 58 7D 30 54 30 32 35 2E 30 46 30 30 30 2E 30 52 31 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 46 45

Je ne peux pas copier le code lu via la connexion DB9 (caractères spéciaux)
Codage en hexadécimal :
Quote
42 56 D5 AA 9F 57 9 9B 95 A3 9F 73 9F 9F A3 9F 5B 9D 9F 9F 9F 9F 9F 9F 9F 9F 9F 9F 9F 9F 9F 9F 9F 73 75 09 75 57 4F 05 00

On reconnait le format des données (reproduction des 15 "9F" images des 15 "0" que je désire transmettre), mais il semblerait que le format ne soit pas correct, je ne sais pas pourquoi....


En vous remerciant par avance pour vos conseils.
Cordialement.
Logged

Ales
Offline Offline
Faraday Member
**
Karma: 39
Posts: 3733
Do or DIY
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Normal, la liaison série au borne de l'Atmega est de type TTL (ou UART) alors qu'un PC est en RS-232. C'est quasiment la même chose mais il y a quelques différences, notamment au niveau des tensions employées.
Logged


Offline Offline
Newbie
*
Karma: 0
Posts: 3
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Merci pour cette réponse rapide.

(Je scrute très régulièrement le forum puisque ce problème m'empêche d'avancer dans mon projet..)

Mon soucis est que l'appareil que je dois commander ne dispose que d'un port DB9, il doit donc être de type RS232 lui aussi.

Est-il possible d'imaginer raccorder l'USB de l'Arduino à un port DB9 ?
Je ne sais pas si un tel cordon existe déjà ou bien s'il faut prévoir de le fabriquer..
Logged

Ales
Offline Offline
Faraday Member
**
Karma: 39
Posts: 3733
Do or DIY
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Facile smiley-wink http://www.coolcircuit.com/circuit/rs232_driver/
Logged


Offline Offline
Newbie
*
Karma: 0
Posts: 3
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Merci pour votre aide, je pense qu'avec ça je vais pouvoir me débrouiller.

Bonne continuation.
Logged

France
Offline Offline
Faraday Member
**
Karma: 55
Posts: 5347
Arduino Hacker
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Salut,

Normal, la liaison série au borne de l'Atmega est de type TTL (ou UART) alors qu'un PC est en RS-232. C'est quasiment la même chose mais il y a quelques différences, notamment au niveau des tensions employées.

Petite précision qui a son importance :
TTL : niveau logique 0v 5v
RS232 : niveau logique -12v +12v

Il faut toujours manipuler un port RS232 par le biais d'un CI spécialisé (type MAX232 par exemple) car le +-12v les broches de l'ATmega (cœur de l'arduino) n'apprécie pas vraiment.
(Tu as de la chance que rien n'est cramé, les ATmega ont de bonne protections contre ce genre de fausses manip occasionnelle)
Logged

Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

Pages: [1]   Go Up
Jump to: