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 simultanément, 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). Simultanément 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 : DCCppS88. Elle peut lire 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é intégré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 CDT30, JMRI, CDM-Rail, Rocrail, etc...


Synoptique simplifié de ma centrale DCCppS88

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 tous les éléments avec des vis afin de les solidariser ensemble.



Attention : Certains MAX471 sont défectueux. Avant de les connecter, vérifier avec un multimètre que la résistance lue entre RS+ et RS- soit proche de zéro Ohms. Sinon vous risquez d'endommager le MEGA.


Plus 2 connecteurs RJ45 pour le bus S88-N :

Adieu aux forêts de fils qui partent de l'Arduino, un simple câble RJ45 suffit. Les infos des capteurs seront rassemblées sur place par une carte de rétro-signalisation puis transmises par le câble RJ45 vers la carte suivante et ainsi de suite le long du réseau jusqu'à l'Arduino. Pas besoin de boitier d'interface supplémentaire, tout est inclus. Le câble RJ45 du bus S88-N télé-alimente aussi les cartes, donc pas besoin d'alimenter séparément les cartes de rétro-signalisation. Sur le bus S88-N, ce logiciel permet le mélange des cartes à 8 entrées avec celles à 16 entrées.

Interface Ethernet :


En option, pour remplacer de la liaison USB.

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 DCCppS88 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. Choisir les interfaces utilisées indiquées par les commentaires encadrés par *****. Enfin je compile les fichiers et j'obtiens :

Rapport de compilation pour un Arduino Mega 2560 :

COMM série:
- Le croquis utilise 20806 octets (8%) de l'espace de stockage de programmes. Le maximum est de 253952 octets.
- Les variables globales utilisent 730 octets (8%) de mémoire dynamique, ce qui laisse 7462 octets pour les variables locales. Le maximum est de 8192 octets.

COMM Ethernet:
- Le croquis utilise 34878 octets (13%) de l'espace de stockage de programmes. Le maximum est de 253952 octets.
- Les variables globales utilisent 1712 octets (20%) de mémoire dynamique, ce qui laisse 6480 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 incorporé le programme maitre S88 dans la bibliothèque DCCppS88 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 intégrée dans la bibliothèque DCCppS88 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 simultanément 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 (MEGA connecté en USB seulement)

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

*** Attention : l'utilisation du bus S88 n'a pas été testée avec Ethernet, ni mise au point. ***

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)
(pour calculer le nombre N, prenez le plus grand nombre de groupes de 8 capteurs que vous avez connectés sur l'un des 2 connecteurs du bus S88 et multipliez par 2. Exemple 3 à gauche et 1 à droite : N = 3 x 2 = 6)

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. (LSB first)
La réponse sera ‹y 0A0147405801CE..40›

F = 2 pour une réponse en hexadecimal pur, 7 fois plus rapide utilisé par CDT3x. (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 car une résistance pulldown est 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 résistance pulldown de 1 à 10k entre S88-DATA (pin 2) et la masse (pin 3 et 5) et insérer 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 car une résistance pulldown est 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 résistance pulldown de 1 à 10k entre S88-DATA (pin 2) et la masse (pin 3 et 5) et insérer ce connecteur RJ45 dans l'entrée libre du dernier module.

*** Attention : l'utilisation du bus S88 avec une liaison Ethernet n'a pas été complétement téstée, ni mise au point. ***

JMRI : L'utilisation du bus S88 avec JMRI est expliquée sur le site de Locoduino dont j'ai extrait le Mode d'emploi en PDF. J'ai implémenté la fonction S88 dans la bibliothèque DCCppS88 pour être compatible avec JMRI. Je fourni les fichiers (Serial) modifiés "S88_Sensor_Scan.py" et "SerialClose.py" que vous devrez utiliser avec JMRI en les plaçant dans 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 sur USB se fait à 115200 bauds. Je n'ai pas encore de version Ethernet opérationnelle.

Rocrail : L'utilisation du bus S88 avec Rocrail est expliquée dans le Mode d'emploi en PDF. La fonction S88 de la bibliothéque DCCppS88 est compatible avec Rocrail. La communication Tx/Rx sur USB se fait à 115200 bauds. Je n'ai pas de version Ethernet opérationnelle.

 PC 10/08/2018. Mise à jour du 22/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