Pages: [1]   Go Down
Author Topic: TTL full duplex -> Half duplex  (Read 1009 times)
0 Members and 1 Guest are viewing this topic.
0
Offline Offline
Jr. Member
**
Karma: 0
Posts: 79
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonjour à tous

Je cherche à convertir le full duplex serial d'une arduino mega en un flux half duplex à destination d'un servo de type Bioloid.

Pour ça j'ai utilisé un 74HC126 comme préconisé dans la doc du servo.

Mais ça ne marche pas comme prévu : j'arrive à transmettre ma trame (high level = 5V, low level = 0V), mais pas à recevoir la trame de retour du servo (high level = 5V, low level = 3.3V environ).
Je pense que le low level est trop haut pour le 74HC126, du coup il ne laisse pas passer la trame...

Pour contourner le problème, je me demande si l'on risque quelque chose à se passer du 74HC126, c'est à dire à relier entre eux les TX et RX pour faire un half duplex "cheap" ?

Il suffirait de faire un Serial3.flush(); au bon moment pour récuperer la réponse du servo.

Mais bon je ne suis pas trop sur de mon coup. Est ce que je risque de tout cramer en faisant ça ?

Merci d'avance pour vos réponses  smiley-wink
Logged

Geneva
Offline Offline
Faraday Member
**
Karma: 30
Posts: 3230
Yoplait... le pt'it suisse
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Normalement pas si tu restes dans la fourchette 0-5V.
Logged

MacBook intel core 2 duo  os X snow Leopard 10.6<br/> eMac PPc G4  os X Leopard 10.5<br/>powerbook G4 os X Leopard 10.5
imac PPC G3 os X Pa

0
Offline Offline
Jr. Member
**
Karma: 0
Posts: 79
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Merci de ta réponse,

Etant limite limite en électronique, j'aimerai comprendre ce qui se passe lorsque le servo et la sortie Tx forcent en même temps l'état haut 5V ???
En précisant que le 5V du servo est différent de celui de l'arduino.

Quel serait le résultat sur Rx ?

Merci encore
Logged

Geneva
Offline Offline
Faraday Member
**
Karma: 30
Posts: 3230
Yoplait... le pt'it suisse
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Il me semble qu'il ne devrait rien se passer, mais au pire tu mets une diode de protection sur la pin Rx de l'Arduino.
Logged

MacBook intel core 2 duo  os X snow Leopard 10.6<br/> eMac PPc G4  os X Leopard 10.5<br/>powerbook G4 os X Leopard 10.5
imac PPC G3 os X Pa

France
Online Online
Faraday Member
**
Karma: 38
Posts: 3508
There is an Arduino for that
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
Etant limite limite en électronique, j'aimerai comprendre ce qui se passe lorsque le servo et la sortie Tx forcent en même temps l'état haut 5V ???
Le risque c'est quand l'un force +5 et l'autre 0V car cela fait un court-circuit.
Logged

Geneva
Offline Offline
Faraday Member
**
Karma: 30
Posts: 3230
Yoplait... le pt'it suisse
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Donc, avec un diode ça pourrait aller ? pas de court-jus  :-?
Logged

MacBook intel core 2 duo  os X snow Leopard 10.6<br/> eMac PPc G4  os X Leopard 10.5<br/>powerbook G4 os X Leopard 10.5
imac PPC G3 os X Pa

France
Online Online
Faraday Member
**
Karma: 38
Posts: 3508
There is an Arduino for that
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
Donc, avec un diode ça pourrait aller ? pas de court-jus
Ben cela dépend lequel des deux force le +5V et le 0 il y a toujours un sens où la diode est passante.

En fait en relisant ton premier post je suis surpris par le niveau 0 tu mets bien le HC126 en haute impédance lorsque tu veux recevoir les infos du servo? Car ce niveau 0 à 3,3V ressemble assez à un conflit sur la ligne de communication. Avec les valeurs par défaut il faut que la ligne qui commande la direction des HC126 soit changée dans les 160µs qui suivent l'envoi du message.
« Last Edit: January 07, 2011, 05:57:43 pm by fdufnews » Logged

0
Offline Offline
Jr. Member
**
Karma: 0
Posts: 79
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Aie, court-circuit, ça raisonne pas bien à mes oreilles...
Le coup de la diode c'est pas bete effectivement mais il faut etre sur de la polarité d'au moins un coté, c'est bien ca ??

Pour le HC126, effectivement c'est bizarre, parce que ça a l'air tout bete sur le principe. Mais c'est 5v à 3.3V, pas 0 à 5, si ça change quelque chose...

En fait je ne vous ai pas tout dit : je controle effectivement l'ouverture des portes logiques alternativement pour Rx puis Tx à l'aide de 2 lignes de controle (AN6 et AN7 utilisées en digital, c'est à dire digital 60 et 61).
Donc j'ai essayé en OUTPUT :
Code:
     pinMode(PIN_DIGITAL_ENABLE_RX, OUTPUT);
      pinMode(PIN_DIGITAL_ENABLE_TX, OUTPUT);

Je voyais correctement sortir le signal sur mon oscillo de poche, mais pas de réponse des servos, et coté Rx, le temps de la transmission je passe en 0V, puis dès que je passe en Tx, 5V continu (faut dire qu'il n'y a pas de réponse aussi...

Alors j'ai fait :
Code:
     pinMode(PIN_DIGITAL_ENABLE_RX, INPUT);
      pinMode(PIN_DIGITAL_ENABLE_TX, INPUT);
Et la ça fonctionne, les servos répondent... Deja je pige pas trop la logique. En dehors de la resistance interne en INPUT HIGH je vois pas trop la différence.

Donc les servos répondent correctement immédiatement après la commande mais c'est la que ça ne passe plus en direction de l'arduino, surement à cause du low level à 3.3V.

Autre précision importante : lorsque je suis en transmission :
- porte logique Tx INPUT HIGH
- porte logique Rx INPUT LOW
Normalement je ne devrai rien capter sur Rx, et pourtant j'ai le même signal que sur Tx (les bits envoyés depuis l'arduino donc).

J'ai vérifié la forme du signal de porte logique INPUT Tx et Rx, et c'est moins propre (signal pas vraiment carré contrairement au mode OUTPUT). Mais même si c'est moins immédiat, je suis sur que je devrai capter au moins quelques bytes, et la : nada !  :-/

J'ai un deuxième circuit HC126 de rechange, vous pensez que ca pourrait venir d'un circuit daubé ? Je le change ?

Merci de votre aide  smiley      
Logged

Pages: [1]   Go Up
Jump to: