LOCODUINO
Parlons Arduino => Vos projets => Discussion démarrée par: lebelge2 le juillet 18, 2024, 01:37:43 pm
-
Bonjour.
Pour les détenteurs de la centrale DCC nommée : La Box, une légère modification hardware et software est possible pour la rendre compatible RailCom.
Les trames DCC produites par l’ESP32 sont d’une très grandes précisions grâce au module RMT.
Le CutOut est généré très précisément 29µs après le bit de stop.
Modification hardware.
La Box utilise un L6203 comme driver.
L’entrée IN1 reçois le signal DCC et l’entrée IN2 reçois le signal DCC inversé.
Les concepteurs de La Box ont utilisé un transistor pour inverser le signal, or ce signal inversé est disponible notamment sur la pin n°27 de l’ESP32.
On simplifie le montage en supprimant T1, R1, R2. et relier la Pin n°27 à IN2. (voir schéma modifié et photo)
Modification software.
- Créer le symbole RMT du CutOut et l’insérer dans la trame.
- Utiliser un Timer en mode scheduler pour adapter les signaux de sorties.
Les fichiers suivants sont à modifier ou à remplacer :
- CommandStation-EX-LaBox.ino
- DCCPRMT.cpp
- DCCPRMT.h
- config.h
Toute la doc. pour upgrader votre Box se trouve sur mon GitHub :
https://github.com/Lebelge2/Upgrade-La-Box
-
Bonjour Mr Lebelge 2
Bravo & merci de cette upgrade.
Cordialement
Marcel
-
Merci Lebelge2
Il me reste 1 ou 2 circuits imprimés non équipés. J’espère tester prochainement cette modification.
As-tu contacté les développeurs de DCC-EX sur Discord pour leur soumettre cette modification du RMT ?
-
Dominique, la modif CutOut est postée sur le forum de DCC-EX, ça a l'air d'intéresser d'autres personnes et demande de modif pour le LMD18200T
-
Bonsoir lebelge2,
Pourrais-tu me donner le lien vers le forum DCC-EX qui traite du sujet (Railcom et cutout), source de ta publication sur Github et de cette contribution.
J’en était resté à un abandon du Railcom sur ESP32 par l’équipe DCC-ex, mais j’avoue que je n’ai pas suivi leurs discussions sur discord depuis un bon moment.
En tout cas merci d’avoir déniché ça 🎉
Cette évolution “purement” logicielle, en complément de la suppression du transistor inverseur et l’utilisation de la pin io27 de l’esp32, rend complètement obsolète l’intégration d’un ATtiny proposée par ailleurs.
D’où l’importance de tester à fond puis de faire une mise à niveau des articles sur LaBox après intégration et validation.
Qu’en pense Thierry ?
-
Merci @lebelge2 pour cet excellent travail.
-
Dominique; Tu devrais rentrer dans le forum et ton compte avec ce lien:
https://discord.com/channels/@me
-
Ok j’ai un compte.
J'ai vu ta question d'hier "Good morning . I inserted the CutOut into the DCC RMT frames for RailCom. I would like to show it to you. Do you agree ?
See my GitHub:
https://github.com/Lebelge2/Upgrade-La-Box"
Mais je ne vois pas de réponse des gars de DCC-EX (peut-être Mike d'Atanysoft, mais je ne comprend pas tout).
Je comprends donc que c'est toi qui a trouvé cette implémentation du cutout, pas les gars de DCC-EX. Si oui bravo, bravo 👍
Me trompe-je ?
-
D’où l’importance de tester à fond puis de faire une mise à niveau des articles sur LaBox après intégration et validation.
Qu’en pense Thierry ?
Effectivement, ça mérite de mettre à jour le soft, peut etre le hard, et les articles pour que tout soit clair. J'attends juste la validation du bon fonctionnement par des gens équipés Railcom comme Christophe, Marcel ou toi, et je ferai une nouvelle version Labox avec les modifications.
-
Bonsoir à tous,
Dominique m'a envoyé de quoi réaliser une nouvelle laBox selon les modifications préconisées par leBelge.
J'ai pu tester quatre locos, dont une avec adresse longue et je vous confirme que cela fonctionne !
Bravo tout d'abord à leBelge ! Et je pense que beaucoup d'entre nous attendions cela avec intérêt. Cela va en particulier débloquer d'autres projets comme celui des satellites autonomes avec le pilotage en CAN.
Je pense que cela devrait aussi relancer la modification du PCB pour pouvoir disposer des toutes nouvelles versions.
Y a plus qu'à.
Christophe
-
L'analyse des trames DCC générées pas le montage de Lebelge se révèle à mons sens favorable avec environ 7% de trames hors spécification NMRA. Certe avec un DCC-Ex "natif", 100% des trames sont dans les clous. A titre de comparaison, la centrale que j'avais réalisée avec le Railcom avait environ 25% des trames hors spécification et pourtant, toutes les locomotives fonctionnaient parfaitement.
-
Bonjour
Excellente nouvelle!
Peut être même que les 7/100 sont encore challengeables en ajustant certains des timings?
A défaut c est déjà opérationnel.
Ltr
-
a quoi correspond le tableau dcc-sniffer3 ?
Peut-être que le 522 bit > 140 µS correspondent aux cutout qui durent plusieurs stops et la perte de synchro bit qui va avec ?
Ca correspond à peu près aux 488 paquets valides détectés, avec quelques bits de plus sans doute parce que le sniffer ne détecte pas les cutouts
-
Grosso modo le tableau 2 montre les trames autour de 56us (bit1) et le troisième tableau autour de 100us (bit 0)
-
Une branche 'Labox-Railcom' a été créée sur Github, et les modifications Railcom sont poussées. J'y ai apporté ma touche personnelle, surtout pour isoler toute la partie Railcom dans un Railcom.cpp accompagné d'un Railcom.h . De nouveaux define sont apparus dans config.h pour utiliser Railcom (ENABLE_RAILCOM) et pour en configurer les broches. Ca compile avec ou sans Railcom, mais je n'ai pas testé le fonctionnement. J'espère ne pas avoir fait de bétises...
-
@Thierry, je vais tester ton code sans doute avant la fin du WE et je te redis.
Merci à tous pour le travail réalisé
Christophe
-
Bonjour.
Il y a quelques lignes à ajouter ou modifier (Voir les commentaires : Ajouté ou Modifié)
(Les deux premières corrections sont indispensables si on n'utilise pas RailCom //#define ENABLE_RAILCOM)
- Dans le fichier : config.h (écrire 27 au lieu de UNUSED_PIN)
#define LABOX_MAIN_MOTOR_SHIELD F("LABOXMAIN"), \
new MotorDriver(32, 33, 27, UNUSED_PIN, 36, 0.80, 2500, UNUSED_PIN) // Modifié
#define LABOX_PROG_MOTOR_SHIELD F("LABOXPROG"), \
NULL, \
new MotorDriver(32, 33, 27, UNUSED_PIN, 36, 0.80, 2500, UNUSED_PIN) // Modifié
- Dans le fichier: DCCRMT.cpp
RMTChannel::RMTChannel(pinpair pins, bool isMain) {
byte ch;
byte plen;
byte dp; // * Ajouté
if (isMain) {
ch = 0;
plen = PREAMBLE_BITS_MAIN; // 16
} else {
ch = 2;
plen = PREAMBLE_BITS_PROG; // 22
}
// preamble
preambleLen = plen + 2; // plen 1 bits, one 0 bit and one EOF marker
preamble = (rmt_item32_t*)malloc(preambleLen * sizeof(rmt_item32_t));
dp = 0; // * Ajouté
#ifdef ENABLE_RAILCOM
dp = 1; // * Ajouté
setDCCBitCutOut(preamble); // * Symbole CutOut
#endif
for (byte n = dp; n < plen; n++) // * Modif
setDCCBit1(preamble + n); // preamble bits
- Dans le fichier: Railcom.cpp
void IRAM_ATTR timer_isr_CutOut() {
p++;
switch (p) {
case 1:
break;
case 2:
gpio_matrix_out(RAILCOM_PININV, 0x100, false, false);
gpio_set_level(RAILCOM_PININV, 1);
break;
case 3:
gpio_matrix_out(RAILCOM_PININV, RMT_SIG_OUT0_IDX + rmt_channel, true, false);
gpio_matrix_out(RAILCOM_PIN, RMT_SIG_OUT0_IDX + rmt_channel, true, false);
break;
default:
gpio_set_level(RAILCOM_PIN, 1); // * Ajouté
gpio_matrix_out(RAILCOM_PIN, RMT_SIG_OUT0_IDX + rmt_channel, false, false);
timerAlarmWrite(TimerCutOut, 160, false);
break;
}
}
-
Corrections poussées dans la version 2.5.1 .
-
Bon, je venais juste de faire le test de la version que tu as publiée le 9 aout. Pourtant tout fonctionnait bien avec !!!
Je vais donc charger la nouvelle version.
Qu'apporte- t'elle de plus ???
Christophe
-
Juste les corrections demandées plus haut, qui permettent notamment de fonctionner correctement si le Railcom n'est pas activé. Les autres corrections concernent la génération du signal qui ne devait pas être optimal et pour lesquelles je laisserai lebelge répondre.
-
Tout fonctionne correctement si on utilise RailCom
Si on coupe RailCom ( //#define ENABLE_RAILCOM), il y a un grave dysfonctionnement.
Vu les corrections mais manque toujours celle-ci dans fichier :
config.Labox.h (écrire 27 au lieu de UNUSED_PIN)
#define LABOX_MAIN_MOTOR_SHIELD F("LABOXMAIN"), \
new MotorDriver(32, 33, 27, UNUSED_PIN, 36, 0.80, 2500, UNUSED_PIN) // Modifié
#define LABOX_PROG_MOTOR_SHIELD F("LABOXPROG"), \
NULL, \
new MotorDriver(32, 33, 27, UNUSED_PIN, 36, 0.80, 2500, UNUSED_PIN) // Modifié
-
Bon, pour ce qui me concerne, c'est à dire avec ENABLE_RAILCOM, je confirme que le lis bien les adresses (4 locos testées) que le comportement des loco est parfait et que le sniffer DCC me donne environ 5% de trames hors spécification ce qui me semble très satisfaisant.
J'ai passé la moitié de la matinée à me mélanger les pinceaux avec les différentes versions, maintenant je pars à la plage, il fait déjà 28° !
Christophe
-
Et je viens de pousser la modif de config.labox.h . J'avais bien fait la modif dans mon config.h et j'ai zappé la version labox...
-
Mais est-ce que j’ai bien compris dans la version 2.5.1 (dernière) ?:
1) soit on est en mode RAILCOM et alors il faut utiliser la GPIO27 connectée au IN2 du L6203, ça c’est clair.
2) soit on n’est pas en mode RAICOM et il y a 2 cas de figure :
-a- le cas où la GPIO27 est connectée au IN2 du L6203 (evolution à faire du PCB)
-b- le cas où le IN2 est relié à l’inverseur à transistor (version 2c3 actuelle du PCB)
Dans quel cas 2a ou 2b la version 2.5.1 fonctionne ?
-
Les deux cas fonctionneront.
-
Bonjour
Vous pourriez svp donner le raccourcis pour accéder au programme.
-
Bonjour
Vous pourriez svp donner le raccourcis pour accéder au programme.
Bonjour
Voici le liens:
https://github.com/Locoduino/CommandStation-EX-LaBox/tree/Labox-Railcom (https://github.com/Locoduino/CommandStation-EX-LaBox/tree/Labox-Railcom)
-
Et je viens de pousser la modif de config.labox.h . J'avais bien fait la modif dans mon config.h et j'ai zappé la version labox...
Petits détails mineurs (du genre tétracapilosectomie !) :
Je viens de compiler cette dernière version sans fichier "config.h" pour voir si le fichier "config.labox.h" est utilisé à la place.
Je n'ai aussi changé aucune option de cette configuration, donc avec Railcom et en mode AP (WIFI_FORCE_AP true) avec le SSID "Labox" et password "YourPassword" parceque je trouve que c'est le meilleur jeu d'options possible pour quelqu'un qui démarre "sans échec".
Et bien l'IDE me dit :
exit status 1
Compilation error: #error Your config.h must include a LABOX_MAIN_MOTOR_SHIELD and a LABOX_PROG_MOTOR_SHIELD definition. If you see this warning in spite not having a config.h, you have a buggy preprocessor and must copy config.example.h to config.h
Je pense qu'il faut remplacer "config.example.h" par "config.labox.h"
Je n'ai pas retrouvé l'endroit ou il est écrit que si le config.h est absent, alors le config.example.h est pris à la place, ce qui génére cette erreur.
-
Il faut renommer le fichier: config.labox.h en config.h
C'est écrit ici:
https://www.locoduino.org/spip.php?article341
Configuration
Vous avez maintenant une version installée du projet, mais vous devez y apporter votre touche. Rien de bien compliqué, rassurez vous.
Le seul fichier que vous devez créer est le config.h . Ce fichier contient la configuration de CommandStation-EX. Quelles broches, quel wifi, quelles options... Pour vous simplifier la tâche un fichier d’exemple est inclus, config-labox.h, qui contient déjà l’essentiel du paramétrage bien configuré. Copiez le sous le nom config.h au même endroit. Ouvrez le avec un notepad ou assimilé, et configurez le Wifi comme vous le souhaitez ...
-
Oui c'est écrit dans l'article, mais si quelqu'un récupère le code sur Github, autant qu'il sache quoi en faire... Dans la prochaine version les config.example.h sont renommés en config.Labox.h . D'autre part, J'ai modifié le readme pour y ajouter en prélude une partie Labox, avec cette même manip expliquée. On pourra le voir sur la page principale du Github de Labox. J'essaie aussi de maintenir les branches CAN et Railcom au même niveau.
-
Les deux cas fonctionneront.
Après avoir attendu la livraison des résistances de 500mΩ que j'avais oubliées à la maison (commandées chez Manomano pour avoir 10 résistances pour 11€ port compris et livrées en 3 jours, via RS qui ne prend commande que par grosses quantités, ou Aliexpress en 3 semaines ou TME avec 10€ de port, c'est bon à savoir), je confirme donc que ça marche bien :
testé sans Railcom (//#define ENABLE_RAILCOM)
- carte modifiée IN2/6203 relié à l'IO27
- carte non-modifiée (l'IO27 n'est pas connecté mais le transistor inverse l'IO33 pour l'IN2)
testé avec Railcom (#define ENABLE_RAILCOM)
- carte modifiée IN2/6203 <-> IO27
- carte non-modifiée (l'IO27 n'est pas connecté mais le transistor inverse l'IO33 pour l'IN2)
pour les tests du Railcom avec du matériel Railcom, il faut se référer aux tests de Christophe
Bien-entendu c'est avant tout un test de non-régression.
Bravo à lebelge2 ;D pour ce progrès décisif et à Thierry ;D pour l'intégration.