BB 25200

La gare de LORMEDY

 

H0

Le générateur DCCpp ++ bus S88

DCCpp pour Arduino

Après avoir parcouru Internet et analysé de nombreuses conceptions faites par des amateurs éclairés dont certaines sont décrites sur Locoduino, je porte mon choix sur DCC++ et plus exactement sur la bibliothèque DCCpp pour Arduino. Celle-ci permet de piloter plusieurs locos simultanement, en adresse courte, longue et UM, offre une sortie DCC vers les voies principales et une sortie DCC vers une voie de programmation indépendante. La commande se fait par l'intermédiaire de fenêtres sur l'écran du PC/Tablette/Smartphone et du port COM ou Ethernet vers l'Arduino (avec l'ajout d'une carte interface Ethernet). Simultanement vous pouvez utiliser des tablettes ou des smartphones en WIFI avec une Box Internet qui sert de routeur WIFI, en même temps qu'un PC. Je n'ai jamais eu de problème depuis que je l'utilise.

J'ai ajouté la lecture de 2 ports de rétro-signalisation S88 dans cette bibliothèque qui s'appelle désormais : DCCpp_S88. Elle peut lire simultanement 2 bus S88 de 256 bits chacun au maximum donc avec 2 entrées RJ45 : DataL et DataR. Ce sont 2 ports S88 distincts pour simplifier le câblage des grands réseaux. Cette fonction S88-N a été testée avec un module RM-GB-8-N de Littfinski DatenTechnik et avec mes modules S88-N-16E décrit dans la page "Rétro-signalisation". La même fonction S88 a été integrée dans DCC++ par Xavier avec qui je l'ai co-écrite.

Cette bibliothèque DCC++ avec la lecture du bus de rétro-signalisation S88 est compatible avec les logiciels de commande de réseaux ferroviaires tel que CDM-Rail, CDT30, JMRI, Rocrail, etc...


Hardware

J'utilise un Arduino MEGA 2560 sur lequel je place une carte fille pour câbler un driver RS485/7, SN75LBC176 ou AM26C31 qui transforme la sortie PWM en 2 polarités inverses afin d'alimenter le module Booster L298N. L'Arduino est connecté par USB au PC. Cela suffit pour l'alimenter en 5VDC mais si nécessaire un chargeur 7,5VDC alimente la carte Arduino. Une alim 19VDC plus puissante alimente les Booster L298N qui fournissent le DCC, lesquels alimentent les rails. J'ajoute des modules MAX471 pour mesurer le courant sur le 19VDC. La réalisation est possible avec un Arduino UNO ou NANO et coûte 10 € environ, hors alimentation et boitier et à peine plus cher avec un Arduino MEGA. Coté pratique vous devrez connecter quelques fils et percer quelques trous pour assembler l'ensemble des éléments avec des vis afin de les solidariser ensemble.



    

    


Photo du montage


Une centrale DCC avec S88 pour quelques Euros + alim 18V + PC.

Schéma du montage




Firmware Arduino

Commande DCC :

J'installe le logiciel DCCpp avec option S88 qui se télécharge ici : la biliothèque DCCpp_S88 pour Arduino et j'ouvre l'IDE d'Arduino. Ensuite j'édite le fichier DCCpp_S88.ino pour vérifier la configuration avec l'interface série de l'Arduino à 115200 bauds. Enfin je compile les fichiers et j'obtiens :

Rapport de compilation pour un Arduino Mega 2560 :

- Le croquis utilise 20786 octets (8%) de l'espace de stockage de programmes. Le maximum est de 253952 octets.
- Les variables globales utilisent 726 octets (8%) de mémoire dynamique, ce qui laisse 7466 octets pour les variables locales. Le maximum est de 8192 octets.
Je connecte l'Arduino sur une entrée USB du PC qui sera automatiquement redirigé vers un port COMx et détecté par l'IDE Arduino. Après la compilation, je téléverse le code dans l'Arduino et j'ouvre le Moniteur série associé à l'IDE Arduino. Comme j'ai activé le DEBUG, je lis le rapport d'initialisation envoyé par l'Arduino et je peux déjà envoyer des commandes manuelles vers les locos qui réagissent immédiatement. Puis je ferme le Moniteur pour libérer le port COM. Important ! La suite se trouve dans le menu "Logiciel" et se passe maintenant dans votre PC.

Rétro-signalisation S88 :

J'ai intégré le programme maitre S88 dans la bibliothèque DCCpp_S88 décrite ici. En conséquence j'utilise un SEUL Arduino MEGA pour gérer tout mon réseau DCC : un seul et unique ! La rétro-signalisation est totalement integrée dans la bibliothèque DCCpp_S88 sans ralentir l'Arduino. Une trame de 512 bits maxi est lue en permanence par l'Arduino sur le bus S88-N en moins de 60ms.

Les données des capteurs S88 sont lues sur 2 entrées simultanement pour ne former qu'un seul buffer, les données DataL sont rangées au debut du buffer et les données DataR sont rangées à la fin du buffer. Cette configuration permet l'utilisation de 2 bus S88-N, un à gauche et un à droite ayant la même taille et limité à 256 capteurs maximum chacun. A la demande du PC qui contrôle le réseau, celui-ci lit jusqu'à 10 fois par seconde les paquets de données recueillies sur le bus S88 par l'Arduino qui lui transmet en moins de 15ms, sans que l'Arduino MEGA ne soit ni perturbé ni ralenti dans son fonctionnement. Cependant à chaque changement d'état des capteurs, les dernières données lues sur le bus S88 sont envoyées au PC Maitre pour l'informer du changement.

Cette fonction utilise 5 pins de l'Arduino : Reset, Ps/Load, Clock, DataL et DataR. Voir la page rétro-signalisation.


Compatibilité avec les logiciels de commande de réseaux ferroviaires

Les commandes DCC++ sont toutes reconnues par cette bibliothèque et utilisées par les logiciel qui contrôle vos trains.

La commande DCC utilisée pour lire le bus S88 avec CDT30 ou CDM-Rail est décrite ci-dessous :

‹Y N F› avec N = groupes de 8 capteurs à lire sans dépasser 64 (2x32x8=512) et

F = 0 pour une réponse en binaire (msb first),
La réponse sera ‹y 00001010000101000111010000......................................00›

F = 1 pour une réponse en hexadecimal 4 fois plus rapide utilisé par CDM-Rail. (MSB first)
La réponse sera ‹y 0A0147405801CE..40›

F = 2 pour une réponse en hexadecimal pur, 7 fois plus rapide. (MSB first)
La réponse sera ‹y XXXXX......›

F = 3 pour une réponse du type SENSOR utilisé par JMRI
La réponse sera ‹Q ID› si le capteur est actif (1), ‹q ID› si le capteur est inactif (0). ID est le muméro du capteur.

En cas de commande non reconnue et selon le type d'erreur, les réponses sont :
‹x Bad Argument count›
‹x Bad Argument value›
‹x S88 disconnected›

Note : si le bus S88 est totalement déconnecté, tout les bits lus sont à 0 grâce à une résistance pulldown connectée à sur chaque entrée S88-DATA.
Note : si vous lisez des modules esclaves qui ne sont pas connectés, les bits correspondants seront à 0. Si vos modules réagissent différement, prendre un connecteur RJ45, placer une resistance pulldown de 1 à 10k entre S88-DATA (pin 2) et la masse (pin 3 et 5) et inserer ce connecteur RJ45 dans l'entrée libre du dernier module.

La commande DCC utilisée pour lire le bus S88 avec Rocrail ou JMRI est décrite ci-dessous :
‹Q› avec 64 groupes de 8 capteurs à lire initialisés (2x32x8=512)

La réponse est du type SENSOR utilisé par JMRI et Rocrail.
La réponse sera ‹Q ID› si le capteur est actif (1), ‹q ID› si le capteur est inactif (0). ID est le muméro du capteur.

En cas de commande non reconnue et selon le type d'erreur, les réponses sont :
‹x Bad Argument count›
‹x Bad Argument value›
‹x S88 disconnected›

Note : si le bus S88 est totalement déconnecté, tout les bits lus sont à 0 grâce à une résistance pulldown connectée à sur chaque entrée S88-DATA.
Note : si vous lisez des modules esclaves qui ne sont pas connectés, les bits correspondants seront à 0. Si vos modules réagissent différement, prendre un connecteur RJ45, placer une resistance pulldown de 1 à 10k entre S88-DATA (pin 2) et la masse (pin 3 et 5) et inserer ce connecteur RJ45 dans l'entrée libre du dernier module.

JMRI : L'utilisation du bus S88 avec JMRI est expliquée sur le site de Locoduino dont j'ai extrait ici le Mode d'emploi en PDF.
J'ai implementé la fonction S88 dans la bibliothèque DCCpp_S88 pour être compatible avec JMRI. Je fourni les fichiers modifiés "S88_Sensor_Scan.py" et "SerialClose.py" que vous devrez utiliser avec JMRI en les placant votre répertoire "jython". Il faut les éditer pour indiquer le nom de votre port COM ==> USB. La valeur par défaut est "COM5", elle se trouve vers la fin des 2 fichiers. Vous devez remplacer cette valeur par votre port COMn. La communication Tx/Rx se fait à 115200 bauds.

Rocrail : L'utilisation du bus S88 avec Rocrail est expliquée ici, Mode d'emploi en PDF. J'ai implementé la fonction S88 dans la bibliothèque DCCpp_S88 pour être compatible avec Rocrail. La communication Tx/Rx se fait à 115200 bauds.

 PC 10/08/2018. Mise à jour du 06/06/2019    

Contact : Envoyer un e-mail    (Remplir le champ "adresse" avec le nom de la gare en minuscule sans guillemet)

  Texte, photos, conception et réalisation :  Lormedy © 2017-2019 visiteurs