Parlons Arduino > Bibliothèques

Signal DCC entre arduino

(1/2) > >>

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

--- Code: ---DccCommander.begin(0x00, 0x00, digitalPinToInterrupt(3), true);
--- Fin du code ---
).

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:

--- Citation de: daufinsyd le juin 03, 2019, 07:37:44 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 :

--- Code: ---DccCommander.begin(0x00, 0x00, digitalPinToInterrupt(3), true);
--- Fin du code ---
).

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

--- Fin de citation ---

Bonjour daufinsyd,

Sur un Mega, la sortie DCC (main) est bien sur la pin 12  :

--- Code: ---#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

--- Fin du code ---

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.

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


--- Code: ---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.

--- Fin du code ---

suivi de :


--- Code: ---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()

--- Fin du code ---

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 :


--- Code: ---    #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();
    }

--- Fin du code ---

Aurais-je mal configuré la bibliothèque ?

Thierry:
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...

Navigation

[0] Index des messages

[#] Page suivante

Utiliser la version classique