TTL full duplex -> Half duplex

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 :wink:

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

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

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.

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.

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

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.

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 :

      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 :

      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 :slight_smile: