Auteur Sujet: Une station DCC compatible RailCom  (Lu 50326 fois)

bobyAndCo

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 1080
  • HO avec DCC++
    • Voir le profil
Une station DCC compatible RailCom
« le: janvier 09, 2022, 02:58:44 pm »
Bonjour à tous,

Ce nouveau fil pour la réalisation d’une centrale DCC compatible RailCom (oui je sais c’est déjà dans le titre).

Pour beaucoup de modélistes ferroviaires et en particulier à Locoduino, la découverte de DCC++ a été une véritable révélation. Que son concepteur Gregg E. Berman en soit une fois une nouvelle fois ici remercié.

Mais au fil des ans, DCC++ a montré ses limites. A Locoduino, Thierry en particulier, nous avons beaucoup travaillé à y apporter des améliorations. Ainsi est né par exemple DCCpp écrit sur la base de classes C++ rendant la programmation de base universelle et donc les utilisations potentielles plus larges et simplifiées.

Le projet La Box sur base d’ESP32 est aussi l’une de ces évolutions.

Récemment, à l’occasion de la sortie de la seconde édition du livre de Pascal Barlier, nous avons découvert une nouvelle centrale (non plus sur base de DCC++) mais qui m’a tout de suite intéressée car elle promet de permettre la détection RailCom (qui est aussi absente dans DCC++).

La licence GNU autorisant la modification et la publication du code modifié, j’ai souhaité « élargir » les utilisations de cette nouvelle centrale pour pouvoir la rendre compatible avec les multiples applications open source que nous avons développées ou adoptées autour de DCC++ comme JMRI par exemple.

L’objectif étant de pouvoir bénéficier à terme de la détection RailCom sans avoir à remettre en cause ces différentes configurations existantes.

Je mets en téléchargement un programme de test mais opérationnel qui permet de réaliser une station sur Arduino avec un LMD18200 (dans cet exemple) et qui peut (pour l’instant) être pilotée par le port série par JMRI par exemple mais aussi par toute application capable d’envoyer de informations par le port série.

Toujours pour des raisons de compatibilité, j’ai adopté le protocole de communication de DCC++ tellement connu du type <t 1 12 100 1>. Reportez-vous à l'entête du fichier principal plus d'informations.

L’ambition à ce stade du projet que je soumets n’est autre que de tester le retour d’information RailCom au travers des détecteurs également conçus par Pascal Barlier. Les PCB sont en fabrication et quelques uns d’entre nous se sont déjà proposés pour les tester.

L’autre espoir que j’ai est que la lecture et l’écriture des CVs soient améliorées par rapport à DCC++. Mais ce sera pour plus tard.

Si donc vous utilisez DCC++ et que vous souhaitez en plus pouvoir profiter de la détection RailCom, ce fil devrait vous intéresser et nous comptons sur vous pour nous aider à améliorer le projet.

Bien cordialement

Christophe

msport

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 2217
  • HO avec DCC++ en DIY Réseaux très éphémères
    • Voir le profil
Re : Une station DCC compatible RailCom
« Réponse #1 le: janvier 09, 2022, 11:12:28 pm »
Programme validé sur un UNO avec un LMD18200. Le DIR passé sur io 10
Pilotage par une manette via le serial.
Reste à tester le RailCom ...
Cordialement

bobyAndCo

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 1080
  • HO avec DCC++
    • Voir le profil
Re : Une station DCC compatible RailCom
« Réponse #2 le: janvier 15, 2022, 10:51:26 am »
Bonjour à tous,

Une avancée importante dans la réalisation de cette station DCC compatible RailCom avec l’implantation sur ESP32.

Les fonctions de throttle répondent bien, testées avec JMRI en liaison Serial avec différentes locomotives. J’ai fait les tests avec un ESU LokSound v5.0, un Lenz (basic) et, sur la vidéo, un décodeur MFX de Marklin (Trix). Malheureusement, les décodeurs Marklin ne sont pas compatibles RailCom.

N’ayant pas d’oscilloscope ni encore reçu le hard pour tester le RailCom, je ne peux pas encore me prononcer sur ce point.

Pour que la centrale soit opérationnelle, il me reste encore pas mal de travail dont le traitement des commandes de fonctions, la communication en WiFi et en CAN, la détection des surtensions et des courts-circuits...

Je n’ai pas prévu pour ma part de me servir de cette station pour la programmation des décodeurs, ayant déjà un banc pour cela qui fonctionne bien. Mais cela mériterait sans doute d’essayer pour voir si cela peut-être une solution pour ceux qui rencontrent des difficultés sur ce point avec DCC++ ou DCCpp.






DDEFF

  • Hero Member
  • *****
  • Messages: 760
    • Voir le profil
Re : Une station DCC compatible RailCom
« Réponse #3 le: janvier 15, 2022, 01:35:53 pm »
Belle vidéo, très beau banc d'essai.
Mais le principal est ailleurs.

Denis
"Ce n'est pas le puits qui est trop profond, c'est ta corde qui est trop courte" (proverbe chinois)

msport

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 2217
  • HO avec DCC++ en DIY Réseaux très éphémères
    • Voir le profil
Re : Une station DCC compatible RailCom
« Réponse #4 le: janvier 15, 2022, 01:58:22 pm »
Oui, dans l'ESP32 ...
Cordialement

bobyAndCo

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 1080
  • HO avec DCC++
    • Voir le profil
Re : Une station DCC compatible RailCom
« Réponse #5 le: janvier 15, 2022, 06:22:35 pm »
Voila un code opérationnel pour une centrale DCC sur ESP32 compatible RailCom.

Pour l'instant, seule la liaison Serial est opérationnelle.

Je précise à nouveau que pour des raisons de compatibilité, j'ai repris le protocole de communication de DCC++ du type <t 4 31 100 1> pour la traction ou <f 31 144> pour les fonctions (Fonctions FL à 12) pour le moment. Cela veut dire que toutes les stations de commandes qui sont compatibles avec DCC++ le sont avec ce programme. C'est particulièrement vrai pour JMRI qui a été utilisé pour les tests.

Attention, la gestion des surtensions et des courts circuits n'est pas implantée, soyez vigilants si vous faites des tests.

Railcom est opérationnel.

Ma prochaine étape sera d'implanter le WiFi.

Merci à ceux qui veulent bien tester et faire des retours.

trimarco232

  • Sr. Member
  • ****
  • Messages: 345
    • Voir le profil
Re : Une station DCC compatible RailCom
« Réponse #6 le: janvier 15, 2022, 08:13:02 pm »
Bonjour,
bravo !
2 questions :
- quel est le timing du cutout dans la séquence des bits du preamble (suis pas cap. de le lire précisément dans ton programme) ?
- quel dispositif pour lire les réponses des décodeurs ?

bobyAndCo

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 1080
  • HO avec DCC++
    • Voir le profil
Re : Une station DCC compatible RailCom
« Réponse #7 le: janvier 15, 2022, 08:55:17 pm »
Le cutout, comme toutes les trames DCC est généré dans la méthode sous interruption void IRAM_ATTR DCC::interrupt(void)

C'est une méthode callback passée à la fonction timerAttachInterrupt et appelée toutes les 28µs (Pascal Barlier suggère 29µs mais bon... dans mon cas ça fonctionne) 28µs correspond à 1/4 de trame pour le bit 1.

  timer = timerBegin(0, 80, true);
  timerAttachInterrupt(timer, &DCC::interrupt, true);

  timerAlarmWrite(timer, 28, true);
  timerAlarmEnable(timer);

Dans la méthode interrupt, toutes les 28µs, un compteur est décrémenté et, tant qu'il est supérieur à 0, la pin brake est maintenu à LOW

case DCC_CUT_1: // 1/2 bit : zone de coupure
      switch (m_dataMode)
      {
        case DCC_PACKET_CUTOUT :
          if (!--m_cutoutCount)
          {
            m_dataMode = DCC_PACKET_HEADER;
            m_headerCount = DCC_HEADER_SIZE;
            digitalWrite(PIN_BRAKE, LOW);
          }
          else
            digitalWrite(PIN_BRAKE, HIGH);
          break;
        default :
          m_cut = DCC_CUT_0;
      }

La méthode interrupt se comporte comme une machine d'état qui toutes les 28µs positionne les pins en fonction des combinaisons de variables.

Comme j'ai pu le préciser un peu plus haut, je n'ai pas implanté les fonctions pour lire ou écrire dans les décodeurs. Je cherche avant tout à réaliser des tests de détection RailCom.

Dans l'ensemble, les méthodes de mes classes sont du "copié-collé" de ce qu'a écrit Pascal Barlier avec des adaptations bien sûr. Il ne serait pas très compliqué d'adapter le code de lecture écriture de CV à mon propre code.

Et comme, je le rappelle, j'ai adopté la messagerie de DCC++, il suffit donc d'utiliser une application compatible DCC++ (comme JMRI) pour cela.
« Modifié: janvier 15, 2022, 08:57:00 pm par bobyAndCo »

trimarco232

  • Sr. Member
  • ****
  • Messages: 345
    • Voir le profil
Re : Une station DCC compatible RailCom
« Réponse #8 le: janvier 15, 2022, 09:05:02 pm »
ok, merci

msport

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 2217
  • HO avec DCC++ en DIY Réseaux très éphémères
    • Voir le profil
Re : Re : Une station DCC compatible RailCom
« Réponse #9 le: janvier 15, 2022, 09:06:38 pm »
... lire les réponses des décodeurs ?

 les réponses RailCom des décodeurs ? : le at-retour de Pascal Barlier
 les réponses CV des décodeurs ? : rien ici puisqu'on ne mesure pas le courant DCC
Cordialement

msport

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 2217
  • HO avec DCC++ en DIY Réseaux très éphémères
    • Voir le profil
Re : Re : Une station DCC compatible RailCom
« Réponse #10 le: janvier 15, 2022, 10:15:36 pm »
tester et faire des retours.

Testé avec le montage sur table comme avec le UNO ci-dessus. HO en 12V
On voit le RailCut à l'oscillo.
le DCC est  bien digéré par un ZIMO d'usine (je crois) dans une loco LENZ
peut être un peu de bruit (??) avec une LOCO ROCO avec un décodeur LAISDCC basique

A noter : l'initialisation du DCC serait à améliorer, les locos démarrent tant que le montage n'a pas reçu le <1>

On va regarder de plus près demain.
Cordialement

bobyAndCo

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 1080
  • HO avec DCC++
    • Voir le profil
Re : Une station DCC compatible RailCom
« Réponse #11 le: janvier 15, 2022, 10:47:19 pm »
A noter : l'initialisation du DCC serait à améliorer, les locos démarrent tant que le montage n'a pas reçu le <1>


Euhhhh, c'est que y a pas encore de <0> ni de <1>, sniff !!!

bobyAndCo

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 1080
  • HO avec DCC++
    • Voir le profil
Re : Re : Re : Une station DCC compatible RailCom
« Réponse #12 le: janvier 16, 2022, 01:42:35 pm »
A noter : l'initialisation du DCC serait à améliorer, les locos démarrent tant que le montage n'a pas reçu le <1>

Pour être agréable avec sa Seigneurie, voici le programme modifié qui place dans le setup() la pin ENABLE sur LOW (coupant ainsi l'alimentation des rails) La commande pour mettre sous tension est <1> (la réponse est <p1>). Pour couper l'alimentation, la commande est <0> (la réponse est <p0>). Comme je l'ai dit, ce sont les commandes de DCC++. Elles ne sont pas toutes implantées, loin s'en faut, mais celles qui le sont sont compatibles.

En prime, j'ai ajouté la lecture de la consommation de courant sur la pin 15 #define CURRENT_MONITOR_PIN_MAIN    GPIO_NUM_15

J'ai déterminée que la tension max sur la pin serait de 2,7v, ce qui correspond à une valeur de 3200 sur 4096 (3,3v)

#define CURRENT_SAMPLE_MAX 3200 // 2,7 V

Au delà de cette valeur 3200, la pin ENABLE est placée à LOW

La protection contre les courts circuits fonctionne, cependant, je n'ai pas étalonné ces mesures et il sera prudent de placer CURRENT_SAMPLE_MAX à 500 ou 1000 pour commencer
« Modifié: janvier 16, 2022, 02:10:01 pm par bobyAndCo »

msport

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 2217
  • HO avec DCC++ en DIY Réseaux très éphémères
    • Voir le profil
Re : Une station DCC compatible RailCom
« Réponse #13 le: janvier 16, 2022, 05:11:02 pm »
Il n'y a qu'à Locoduino qu'on est servi comme ça !

Fonctionnement sans problème avec mes deux locos fétiches.

Et les premières photos du cutout nouveau né :

Pour le contrôle du courant, l'utilisation de la broche 8 du LMD18200 a été rappelée récemment.
En connectant, par exemple, une résistance de 2,7 K Ohm entre cette broche 8 et et GND on a une sensibilité d’environ 1V/A.
Ce qui donne avec la valeur de 2,7V, une protection à 2,7A.
Néanmoins cette sortie peut atteindre 12V si on a un courant de court-circuit de 12A, il faut donc prévoir une limitation à 3,3V pour ne pas détruire l'entrée de l'ESP32.
« Modifié: janvier 16, 2022, 05:14:00 pm par msport »
Cordialement

bobyAndCo

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 1080
  • HO avec DCC++
    • Voir le profil
Re : Une station DCC compatible RailCom
« Réponse #14 le: janvier 16, 2022, 05:19:24 pm »
Le signal est propre !

Par contre, ici, ça mériterait un petit schéma :

Pour le contrôle du courant, l'utilisation de la broche 8 du LMD18200 a été rappelée récemment.
En connectant, par exemple, une résistance de 2,7 K Ohm entre cette broche 8 et et GND on a une sensibilité d’environ 1V/A.
Ce qui donne avec la valeur de 2,7V, une protection à 2,7A.
Néanmoins cette sortie peut atteindre 12V si on a un courant de court-circuit de 12A, il faut donc prévoir une limitation à 3,3V pour ne pas détruire l'entrée de l'ESP32.

... car en fonction de l'age du capitaine dont la belle sœur couche avec le boulanger qui a trois enfants dont deux d'une première noce, alors on peut en déduire que la mer sera haute à 17 H 23 !!!