Auteur Sujet: Signal DCC entre arduino  (Lu 18616 fois)

daufinsyd

  • Newbie
  • *
  • Messages: 10
    • Voir le profil
Signal DCC entre arduino
« le: juin 03, 2019, 07:37:44 pm »
Bonjour,

Je viens solliciter votre aide  :)
Je suis en train de monter un circuit DCC automatisé en utilisant la bibliothèque DCC++ BaseStation pour la centrale et les deux bibliothèques de Thierry : Commanders et Accessoires (un grand merci à lui !) pour les décodeurs.
J'ai beau relire les articles du site et parcourir le net, je ne comprends pas comment effectuer les branchements des décodeurs pour recevoir le signal DCC.

Si ça peu aider, voici un résumé de mon installation.
J'utilise deux Mega et souhaite faire passer le signal DCC entre les deux via les pins (et non le circuit, question de voltage, de puissance et de fiabilité).
La station DCC (BaseStation DCC++) est équipée d'un motorshield et d'après ce schéma (https://github.com/DccPlusPlus/Documentation/blob/master/Motor%20Shield%20Pin%20Mappings.pdf), le signal DCC passe sur le pin12.
J'ai donc relié le pin12 au pin 3 du décodeur (en me basant sur cette ligne de la bibliothèque :
DccCommander.begin(0x00, 0x00, digitalPinToInterrupt(3), true); ).

Pour "fermer" le circuit j'ai relié les pins GND du motorShield et de l'arduino décodeur.

Par ailleurs, le décodeur est alimenté par la station DCC (pin 5V côté stations vers le pin Vin côté décodeur).

La BUILTIN_LED passe son temps à clignoter et quand j'envoie une trame DCC (depuis le moniteur Série et en respectant la syntaxe donnée ici https://github.com/DccPlusPlus/BaseStation/wiki/Commands-for-DCCpp-BaseStation <T 15 1>) rien ne se passe  :-[

J'ai utilisé l'exemple "Deux aiguillages simples, et un rail de découplage" (https://www.locoduino.org/spip.php?article181) et lorsque j'utilise les boutons, le décodeur fonctionne correctement.

Merci pour votre aide  :)
Sur ce, je vais me présenter  ;D

Dominique

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 2889
  • 100% Arduino et N
    • Voir le profil
Re : Signal DCC entre arduino
« Réponse #1 le: juin 03, 2019, 10:30:38 pm »
J'utilise deux Mega et souhaite faire passer le signal DCC entre les deux via les pins (et non le circuit, question de voltage, de puissance et de fiabilité).
La station DCC (BaseStation DCC++) est équipée d'un motorshield et d'après ce schéma (https://github.com/DccPlusPlus/Documentation/blob/master/Motor%20Shield%20Pin%20Mappings.pdf), le signal DCC passe sur le pin12.
J'ai donc relié le pin12 au pin 3 du décodeur (en me basant sur cette ligne de la bibliothèque :
DccCommander.begin(0x00, 0x00, digitalPinToInterrupt(3), true); ).

Pour "fermer" le circuit j'ai relié les pins GND du motorShield et de l'arduino décodeur.

Par ailleurs, le décodeur est alimenté par la station DCC (pin 5V côté stations vers le pin Vin côté décodeur).

La BUILTIN_LED passe son temps à clignoter et quand j'envoie une trame DCC (depuis le moniteur Série et en respectant la syntaxe donnée ici https://github.com/DccPlusPlus/BaseStation/wiki/Commands-for-DCCpp-BaseStation <T 15 1>) rien ne se passe  :-[

Bonjour daufinsyd,

Sur un Mega, la sortie DCC (main) est bien sur la pin 12  :
#elif defined  ARDUINO_AVR_MEGA2560
  #define ARDUINO_TYPE    "MEGA"
  #define DCC_SIGNAL_PIN_MAIN 12          // Arduino Mega - uses OC1B
  #define DCC_SIGNAL_PIN_PROG 2           // Arduino Mega - uses OC3B

D'habitude ce signal est "amplifié" par une double pont en H genre LMD18200 ou L298 et appliqué sur les rails.
Deux types de décodeurs sont reliés aux rails : les décodeurs dans les locos et les décodeurs d'accessoires.

Si votre décodeur d'accessoire est Commander (de Thierry), relier la pin 12 du Mega DCC++ avec la pin 3 du Mega Commander n'est pas aberrant mais voyez avec Thierry (qui va surement lire cette contribution) pour savoir si c'est un cas sui marche.

Par contre, il faut relier le 5V du Mega DCC++ avec le 5V du Mega décodeur et non pas le VIn (si je comprends bien votre montage est alimenté par l'USB du PC relié au Mega DCC++).

Il me semble d'après votre dernière ligne que le programme fonctionne à partir des boutons.

Il reste donc à vérifier que le programme reçoit bien les ordres DCC : mettez le mode Debug en service.

Bon courage.
Cordialement,
Dominique

daufinsyd

  • Newbie
  • *
  • Messages: 10
    • Voir le profil
Re : Signal DCC entre arduino
« Réponse #2 le: juin 04, 2019, 06:58:22 pm »
Bonjour Dominque et merci pour votre réponse rapide,

J'ai effectivement un motorshield encapsulé sur l'arduino "encodeur" pour amplifer le signal et l'envoyer sur les rails.
Pour ne pas devoir réguler la tension et pour avoir quelque chose de "propre" je souhaite faire un circuit DCC séparé pour les décodeurs des accessoires (j'ai un régulateur de tension 5V mais comme je ne sais pas d'avantage comment relier les fils je n'ai pas essayé).

Ah d'accord, merci ! Je vais voir si ça change quelque chose :)
Oui la station DCC est reliée via l'USB.

En fait les boutons ne servent qu'à tester si j'arrive à actionner l'aiguillage d'une quelconque manière (ce qui est le cas) ; la dernière étape consiste donc à me passer des boutons et utiliser le signal DCC ( le but étant de pouvoir gérer le tout avec JMRI).

Oui capitaine  ;D (bon malheureusement je n'ai qu'un seul câble USB B du coup soit je peux envoyer les commandes DCC soit je peux lire ce qu'il se passe sur le décodeur, il me reste plus qu'à en acheter un  :P)

Merci !

daufinsyd

  • Newbie
  • *
  • Messages: 10
    • Voir le profil
Re : Signal DCC entre arduino
« Réponse #3 le: juin 04, 2019, 08:04:59 pm »
J'ai parlé un peu trop vite, en cherchant bien, j'ai fini par trouver un câble fonctionnel, ce qui me permet de récupérer ces infos :

19:36:40.535 -> ⸮RI&⸮⸮⸮⸮^
19:36:41.962 -> Accessories V1.1.4
19:36:41.962 -> Developed by Thierry Paris.
19:36:41.962 -> (c) Locoduino 2016-2018
19:36:41.962 ->
19:36:41.962 -> *** Setup Accessories started.
19:36:41.962 -> *** Setup Accessories Finished.

suivi de :

19:35:50.488 ->
19:35:50.488 -> Accessories V1.1.4
19:35:50.488 -> Developed by Thierry Paris.
19:35:50.488 -> (c) Locoduino 2016-2018
19:35:50.488 ->
19:35:50.488 -> *** Setup Accessories started.
19:35:50.521 -> 38 / 39 PortTwoPins MoveRightDir()
19:35:50.521 -> *** Setup Accessories Finished.
19:35:50.521 -> ActionPending : Cant move !
19:35:50.521 -> Action 0 added !
19:35:50.588 -> 38 / 39 PortTwoPins MoveStop()
19:35:50.621 -> 38 / 39 PortTwoPins MoveLeftDir()
19:35:50.621 -> Action 0 deleted !
19:35:50.721 -> 38 / 39 PortTwoPins MoveStop()

J'avoue ne pas savoir qu'en penser.  On dirait que le décodeur reçoit en permanance des messages DCC alors même que je n'envoie aucun signal. D'ailleurs quand j'enlève le pin 3, j'obtiens toujours ces messages.
Mon code se limite à ces lignes :

    #include <Accessories.h>
    #include <Commanders.h>

    ButtonsCommanderSwitch boutonAiguillageGauche;
    AccessoryMotorTwoWays aiguillageGauche;

    PortTwoPins portAiguillageGauche;
    void setup()
    {
      Serial.begin(115200);
      Commanders::begin(LED_BUILTIN);

      Accessories::begin(0, 500);

      DccCommander.begin(0x00, 0x00, digitalPinToInterrupt(3), true);
      boutonAiguillageGauche.begin();
      boutonAiguillageGauche.AddEvent(DCCINT(15, 0), 2);
      boutonAiguillageGauche.AddEvent(DCCINT(15, 1), 7);

      portAiguillageGauche.begin(38, 39, DIGITAL_INVERTED);

      aiguillageGauche.beginTwoWays(&portAiguillageGauche, DCCINT(15, 0), DCCINT(15, 1), 255, 400);
    }
     
    void loop()
    {
      unsigned long id = Commanders::loop();
     
      if (id != UNDEFINED_ID)
      {
        // Renvoie l'événement reçu de Commanders, vers les accessoires...
        Accessories::RaiseEvent(id, (ACCESSORIES_EVENT_TYPE) Commanders::GetLastEventType(), Commanders::GetLastEventData());
      }
     
      Accessories::loop();
    }

Aurais-je mal configuré la bibliothèque ?

Thierry

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 745
    • Voir le profil
Re : Signal DCC entre arduino
« Réponse #4 le: juin 04, 2019, 11:39:56 pm »
Bonsoir

Tout semble configuré comme il faut, mais je suis sceptique sur l'analyse du flux DCC par Commanders. Je ne vois pas son copyright, ce qui me fais penser qu'il n'est pas lancé, ou qu'il n'est pas configuré en mode debug. Ce serait peut être intéressant de le faire, parce que lui va dire tous les paquets DCC qu'il identifie...

daufinsyd

  • Newbie
  • *
  • Messages: 10
    • Voir le profil
Re : Signal DCC entre arduino
« Réponse #5 le: juin 06, 2019, 07:13:12 pm »
Merci ! effectivement je n'avais décommenté la ligne de débug que pour les accessoires.
J'obtiens maintenant ce message

18:40:49.600 -> Commanders V2.00
18:40:49.600 -> Created by Thierry Paris.
18:40:49.633 -> (c) Locoduino 2016-2018
18:40:49.633 ->
18:40:49.633 -> *** Setup Commanders started.
18:40:50.132 ->
18:40:50.132 -> Accessories V1.1.4
18:40:50.132 -> Developed by Thierry Paris.
18:40:50.132 -> (c) Locoduino 2016-2018
18:40:50.132 ->
18:40:50.132 -> *** Setup Accessories started.
18:40:50.132 -> This switch button have no ID defined : begin() must be called AFTER AddEvent !
18:40:50.132 -> *** Setup Commanders Finished.
18:40:50.132 -> Commander event : Address : 15 / MOVEPOSITIONID
18:40:50.132 -> 38 / 39 PortTwoPins MoveRightDir()
18:40:50.132 -> *** Setup Accessories Finished.
18:40:50.164 -> Commander event : Address : 10015 / MOVEPOSITIONID
18:40:50.164 -> ActionPending : Cant move !
18:40:50.164 -> Action 0 added !
18:40:50.197 -> Commander event : Address : 15 / MOVEPOSITIONID
18:40:50.197 -> ActionPending : Cant move !
18:40:50.197 -> Action 1 added !
18:40:50.197 -> Commander event : Address : 10015 / MOVEPOSITIONID
18:40:50.197 -> ActionPending : Cant move !
18:40:50.197 -> Action 2 added !
18:40:50.530 -> 38 / 39 PortTwoPins MoveStop()
18:40:50.563 -> 38 / 39 PortTwoPins MoveLeftDir()
18:40:50.563 -> Action 0 deleted !
18:40:50.962 -> 38 / 39 PortTwoPins MoveStop()
18:40:50.962 -> 38 / 39 PortTwoPins MoveRightDir()
18:40:50.962 -> Action 1 deleted !
18:40:51.360 -> 38 / 39 PortTwoPins MoveStop()
18:40:51.360 -> 38 / 39 PortTwoPins MoveLeftDir()
18:40:51.360 -> Action 2 deleted !
18:40:51.758 -> 38 / 39 PortTwoPins MoveStop()

En changeant de place le boutonAiguillageGauche.begin(); puis en supprimant tous les boutonAiguillageGauche je n'ai plus de problème et la BUILDIN_LED ne clignote plus en continue (sauf qu'elle ne clignote plus du tout).

18:51:31.296 -> Commanders V2.00
18:51:31.296 -> Created by Thierry Paris.
18:51:31.296 -> (c) Locoduino 201
18:51:32.183 -> Commanders V2.00
18:51:32.183 -> Created by Thierry Paris.
18:51:32.216 -> (c) Locoduino 2016-2018
18:51:32.216 ->
18:51:32.216 -> *** Setup Commanders started.
18:51:32.714 ->
18:51:32.714 -> Accessories V1.1.4
18:51:32.714 -> Developed by Thierry Paris.
18:51:32.714 -> (c) Locoduino 2016-2018
18:51:32.714 ->
18:51:32.714 -> *** Setup Accessories started.
18:51:32.714 -> *** Setup Commanders Finished.
18:51:32.714 -> *** Setup Accessories Finished.

Comme les deux arduinos sont connectés par USB, je n'ai pas ajouté de lien GND entre les deux (à défaut de savoir si ça ne risque rien) mais du coup j'imagine que le circuit pin12 --> pin3 n'est pas complet. Je vais me renseigner sur la liaison GND-GND + USB.

daufinsyd

  • Newbie
  • *
  • Messages: 10
    • Voir le profil
Re : Signal DCC entre arduino
« Réponse #6 le: juin 07, 2019, 10:53:34 pm »
J'ai essayé en reliant les GND (bien que je suppose que les deux ports USB partagent le même commun) mais pas de résultats, quelque soit le signal DCC envoyé.
La station fonctionne bien, j'arrive à contrôler des locomotives sur le circuit.
« Modifié: juin 07, 2019, 11:09:06 pm par daufinsyd »

daufinsyd

  • Newbie
  • *
  • Messages: 10
    • Voir le profil
Re : Signal DCC entre arduino
« Réponse #7 le: juin 22, 2019, 11:39:21 am »
Finalement ça ne donne toujours rien pour l'instant, même après avoir re-téléversé les projets arduino.
Je vais tester avec le signal des rails (avec un régulateur pour ramener la tension à 3.3V).
Mais avant que je commencer à tout griller (en en particulier mon pc  ;D), est-il correct de brancher le signal des rail régulé sur une prise GND de l'arduino (celui-ci étant simultanément branché à l'USB du pc) ?

daufinsyd

  • Newbie
  • *
  • Messages: 10
    • Voir le profil
Re : Signal DCC entre arduino
« Réponse #8 le: août 31, 2019, 08:00:14 pm »
Histoire de ne pas s'arrêter en si bon chemin, j'ai acheté un décodeur sur ebay et après quelques jours de debug ça marche ! :D
Entre temps j'ai également découvert une autre biblio D18 https://github.com/ullysse/d18 qui marche parfaitement (du moins en banc de test avec des leds :) ).
Je posterai un message sur le forum pour d18 un de ces jours et je réessaierai la biblio de Thierry, sans doute m'y suis-je mal pris mais maintenant que je vois comment je dois contrôler la bête ... ;)

msport

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 2218
  • HO avec DCC++ en DIY Réseaux très éphémères
    • Voir le profil
Re : Signal DCC entre arduino
« Réponse #9 le: août 31, 2019, 09:27:55 pm »
On peut peut-être donner l'adresse du site qui présente le projet Décodeur d'accessoires DCC D18 avec des schémas :
http://udelmas.e-monsite.com/pages/decodeur-d18.html
Cordialement