Comment piloter trains et accessoires en DCC avec un Arduino (4)
Les pourquoi et comment des modules logiciels
. Par : Dominique
Vous répondez à :
Bonjour,
Potentiomètre linéaire : choisissez la qualité, un modèle qui ne crache pas !
décodeur : je n’ai pas de préférence, je prend ce que je trouve (même les moins chers) : on ne se sert que des fonctions bien standard (vitesse, direction, lumière).
Cela ne vous empêche pas de regarder et ajuster les valeurs des CVs. Pour le moment je programme les CVs avec une MS2 de Marklin, en attendant que je fasse mon programmateur. La bibliothèque le permet en grande partie.
49 Messages
-
Comment piloter trains et accessoires en DCC avec Arduino (4) 12 avril 2015 20:57, par DDEFF
Bravo Dominique !
C’est un régal de lire de tels programmes.
Bien sûr, je n’ai pas tout compris (mais ça viendra).
C’est le plus long article du site (!), mais tout est détaillé et même commenté par le menu.
Je pense que, justement, il était essentiel que ce programme ne soit PAS optimisé pour qu’on le comprenne. Et ce sera un excellent exercice de l’optimiser. -
Comment piloter trains et accessoires en DCC avec Arduino (4) 13 avril 2015 09:13, par dominique
Merci beaucoup Denis,
Cet article est le fruit d’une expérience qui a abouti à un résultat qui marche. J’ai noté dès le départ mes recherches et raisonnements pour expliquer le logiciel.
La configuration en particulier a été un gros problème au début jusqu’à ce que je trouve l’astuce de déclarer les chaînes en Flash pour décharger la Ram.Ensuite la bibliothèque CmdrArduino nécessite de forcer des répétitions car elle ne remplit pas le temps de commandes répétées. Je vais essayer de l’améliorer (vive l’open source).
-
Comment piloter trains et accessoires en DCC avec Arduino (4) 15 avril 2015 16:40, par jp
Super !! enfin du DCC pas chère ..et libre !
n’étant pas équipé en DCC,
vous avez un programme pour "programmer les locos" ?
je passerai bien au DCC mais si il faut que j’achète une centrale pour programmer les locos .. aie ! -
Comment piloter trains et accessoires en DCC avec Arduino (4) 15 avril 2015 17:27, par dominique
Merci pour votre question : la partie programmation viendra évidemment prochainement mais je ne peux dire quand exactement.
En attendant vous avez 2 possibilités :
aller dans un club : ils ont tous une centrale faite pour cela ;
utiliser la bibliothèque CmdrArduino qui contient des fonctions de programmation que j’avoue ne pas avoir testé pour le moment.
-
Comment piloter trains et accessoires en DCC avec Arduino (4) 17 juin 2015 10:03, par Zebulon91
En réponse aux deux messages ci-dessus, je confirme que la bibliothèque CmdrArduino est fonctionnelle. J’ai pu faire mes débuts sans centrale "du commerce" avec.
Une autre solution abordable est le petit boitier SPROG. Très bon marché, open source, et déjà très bien intégré avec JMRI. Après plus d’un an de développement de ma centrale, j’ai fini par opté pour cette solution !
-
Comment piloter trains et accessoires en DCC avec Arduino (4) 18 juin 2015 11:18, par Dominique
Merci Zebulon91,
Je suis d’accord qu’il existe des modules tout faits comme le SPROG qui sont abordables. Mais ce n’est pas le sujet ici :je démontre principalement qu’on peut générer du DCC avec un Arduino, ce que vous confirmez et je vous en remercie.
par la même occasion on peut construire un système complet, ici un va et vient qui est simple : c’est beaucoup moins cher qu’avec une centrale du commerce
on n’a pas besoin de PC
je ne suis pas certain qu’on mette moins de temps à maitriser JMRI que la programmation Arduino !! (On peut rêver !)
Toute la question est dans l’architecture que l’on choisit pour son réseau.
La presse et le Web abondent de sujets relatifs aux solutions commerciales toutes faites.
Ici on tente de réaliser tout ou partie par soi-même, d’abord parce que c’est gratifiant et aussi pour en faire plus en payant moins !
Des discussions sur l’architecture sont d’ailleurs ouvertes sur le Forum.Amicalement
-
Comment piloter trains et accessoires en DCC avec Arduino (4) 30 juin 2015 01:00, par jac56
Bonjour,
J’ai lu avec grand profit tous les articles du site ; en particulier ceux sur le DCC. Ils sont tous d’une très grande qualité et remplis d’informations précieuses. Bravo et merci aux auteurs.Sur la base de ce qui a été présenté (bibliothèque Cmdr Arduino, booster LM18200), je me suis lancé dans le DCC : j’ai d’abord fait une maquette, puis un montage ’propre’ de générateur DCC (un seul montage pour piloter 8 locos ; interface homme machine ’hard’ avec encodeurs rotatifs et boutons-poussoirs). Tout fonctionne très bien, à l’exception d’un phénomène transitoire à la mise sous tension du montage (et/ou lors d’un reset soft, sans re-démarrage électrique - en ré-ouvrant le moniteur USB de l’IDE Arduino, par exemple) : la locomotive présente sur le circuit (je fais les tests avec une seule loco, pour l’instant) se met en marche à pleine vitesse pendant un court instant (parfois elle change de sens). Le phénomène se produit très tôt, peut-être même avant le début du setup (qui dure assez longtemps, avec traces sur le moniteur USB et sur un écran LCD - on voit très bien que le transitoire se produit très tôt).
Ceci m’étonne d’autant plus que n’ayant pas acheté un montage LM18200 tout fait, j’ai ajouté, sur le circuit, des portes logiques pour gérer en dur la sécurité (alarme de t°) et la mise en action de la sortie (signal de sortie actif si Brake = Low et PWM = High ; sortie désactivée dans le cas contraire).
Evidemment, le plus tôt possible dans le setup(), bien avant de faire le dps.setup(), je positionne correctement (à Low) la pin Arduino qui, par l’intermédiaire des portes mentionnées, désactive la sortie du LM18200. (Cette commande de marche-arrêt fonctionne d’ailleurs parfaitement, ultérieurement. La tension de sortie est correcte en régime établi, et tout fonctionne, etc…) De plus, à ce moment, la vitesse est positionnée à zéro, mais on n’a pas encore émis de dps.setSpeed, ni même de dps.update().
Mais rien n’y fait.
Il est vraiment étonnant que le générateur DCC, avant même d’être configuré, arrive non seulement à produire un signal ’correct’, indiquant de plus une vitesse très grande, avec une adresse ad’hoc pour le décodeur, mais, de plus, ’force’ le LM18200 à émettre ce signal amplifié ! C’est vraiment difficile à imaginer.
Je n’ai pas encore regardé à l’oscillo ce qui se passe pendant ce transitoire (s’il est possible de voir quelque chose). Mais j’ai déjà vérifié circuits et programme.Hypothèse : Je ne connais pas bien le DCC. Le décodeur ESU que j’utilise doit pouvoir fonctionner en DCC et en analogique. Lors de sa configuration, j’ai dû laisser cette option par défaut. Au démarrage, le LM18200 émettrait, pendant un court instant, une tension continue suffisante pour mettre en marche le moteur (en mode analogique) ?
Une telle impulsion de tension, capable de produire un tel effet, n’est pas rassurante non plus (pour la tenue à long terme du matériel stationnant sur les voies, et des décodeurs de celui-ci).Qu’en pensez-vous ?
Avez-vous déjà constaté de tels phénomènes ?
Je n’avais, jusqu’ici, pas constaté de comportement chaotique des pins Arduino lors d’un démarrage ou d’un reset.
Cela peut-il venir du LM18200 ? En cas de reset, il reste tout le temps alimenté en 12V stabilisé. Il n’y a que les pins de commande qui peuvent voir leur tension varier.
Dans ce cas, il faudra couper la sortie du LM18200 pendant
le setup (relais commandé par une pin Arduino, par exemple ?).
D’avance merci. -
Comment piloter trains et accessoires en DCC avec Arduino (4) 30 juin 2015 09:24, par Dominique
Bonjour Jacques,
Les décodeurs DCC permettent un fonctionnement soit Digital, soit Analogique. Dans ce dernier cas, la vitesse est proportionnelle à la tension.
Ce qui se passe dans votre cas, c’est la présence d’une tension analogique continue (positive ou négative suivant le sens, au hazard, de conduction des transistors du LMD18200) à la mise sous tension (ou au reset de l’Arduino, quand on lance le moniteur), avant que le signal DCC ne soit généré, après le Setup.
Cela provoque un lancement de la loco à vitesse max dans un sens ou un autre.
Ce phénomène ne se produit pas avec la réalisation que j’ai décrite, mais il est souvent constaté avec la MS2 de Marklin.
Ce qu’il faut faire est simple : empêcher le LMD18200 d’émettre une tension continue au démarrage, en veillant à ce que le signal PWM reste LOW jusqu’à la fin du Setup.
Jetez un oeil (à l’oscillo) sur la tension des rails à l’init et dites nous si cette hypothèse est bonne ou pas !
Cordialement
Dominique-
Merci de cette réponse rapide.
Elle conforte les hypothèses invoquées pour expliquer ce comportement surprenant. Cela rassure un peu d’avoir confirmation que ce type de phénomène a déjà été observé.
Et avec l’oscilloscope, il n’y a plus de doute.Le problème surgit avant le setup ; c’est net.
Le LM18200 débite parce que la pin Arduino chargée de l’activer passe à 1.2V pendant un peu moins de 2s (1.2, c’est suffisant pour faire un niveau haut sur les portes logiques). La tension émise est continue et stable à 12V (ou -12V), en synchronisme avec la pin de commande (une tension continue ? normal : à ce moment le signal DCC pour l’entrée Dir n’a pas encore été activé). Une fois le setup commencé, la pin Arduino est bien à zéro, conformément à la programmation, et la sortie DCC est bloquée.J’avais couplé directement la pin Arduino à l’entrée des portes logiques contrôlant PWM et Brake du LM18200 : il doit se produire un phénomène de ’tirage’ non sollicité. Le remède est donc simple : une résistance de tirage de 2,2k entre la pin et la terre est suffisante pour faire chuter cette tension résiduelle non désirée sous le seuil ’haut’, sans nuire au fonctionnement ultérieur (niveau haut voisin de 5V) et tout marche merveilleusement bien.
J’aurais dû le deviner ; mais si on parle toujours des résistances de tirage pour les entrées, pour les sorties … c’est nettement plus rare. D’où cette fatale omission. Il est vrai que ça ne doit vraiment compter que pendant le reset, période pendant laquelle les pins ne sont plus ’pilotées’, semble-il.
Il n’est donc pas inutile, non plus, de prévoir un circuit de contrôle de l’activation du LM18200 qui ne sollicite qu’une pin Arduino.J’en ai profité pour regarder la sortie de mesure de l’intensité du LM18200. Il sera difficile d’en faire quelque chose : la tension est une suite de pics à fréquence élevée fluctuant dans une grande plage de valeurs, avec une ligne de base de -20mV. Il faudrait filtrer énergiquement, mais la ’sortance’ du circuit ne le permet certainement pas de façon passive. Et pourquoi cet offset ?
Que peut mesurer une entrée analogique dans de si défavorables conditions ? C’est inexploitable.Le petit Uno s’avère donc capable :
de contrôler 4 expandeurs d’entrées-sorties (4x16 E/S) pilotés par I2C (rien que l’interface pour les 8 locos en utilise 8x6 : encodeurs rotatifs et boutons-poussoirs),
de tenir à jour, en liaison directe, un afficheur LCD à 4 lignes de 20 caractères,
de générer le signal DCC avec CmdrDCC pour 8 locos (au moins) en le répétant très régulièrement pour contourner la lacune signalée de cette bibliothèque,
et de réaliser de petits traitements annexes (rampes de démarrage, de freinage [simulation d’une inertie, mais instantanément ’activable’ ou ’débrayable’, quelle que soit la vitesse], gestion du couplage de deux locos sur le même convoi).
Et il reste encore une bonne marge sur les mémoires (sram et programme) !Il n’y a pas de temps perdu : tout les évènements sont gérés par interruption, certains rebonds sont évités en utilisant le timer2, DCC utilisant le timer1.
Les encodeurs sont gérés au travers des expandeurs : il a fallu adapter plusieurs librairies existantes.
Je n’ai pas eu de problèmes de perturbation de l’I2C par le bruit électronique environnant ; il est vrai que j’ai pris beaucoup de précautions (séparation de la partie logique et de la partie puissance [LM18200] dans des boîtiers distincts, blindage complet des boîtiers et des câbles de liaison entre modules, alimentation de puissance séparée).Et Locoduino m’a fourni nombre d’informations utiles, claires et fiables. Encore merci aux auteurs.
-
Je poursuis les essais de mon système DCC.
Avec la maquette sur breadboard, j’avais constaté une anomalie.
Sur le montage final, sur circuits imprimés, le même défaut réapparaît :
l’utilisation de l’arrêt d’urgence, en version générale ou pour une seule loco, produit des effets gênants.Après l’appel à dps.eStop(), l’arrêt est très ’énergique’, mais les locos ne redémarrent pas normalement. Elles restent au ralenti.
L’anomalie peut disparaître progressivement, mais le plus souvent, il faut arrêter tout le système, une désactivation du LM18200 ne suffisant pas.
Ensuite, tout redevient normal.
A noter : Les mêmes décodeurs (ESU) réagissent normalement à un arrêt d’urgence collectif ou individuel élaboré par un ensemble JMRI+ Sprog.Que peut-il se passer ?
Un effet de la contre-fem de freinage (probable vu l’effet ’énergique’) sur le décodeur ?
Mais pourquoi faut-il aller jusqu’à l’arrêt de tout le système pour obtenir sa restauration, la désactivation du LM18200 privant tout aussi bien les décodeurs de toute tension ?Un effet sur le LM18200 ? Comment le décodeur pourrait-il lui renvoyer une contre-fem suffisante pour le perturber ? D’autant que je travaille seulement sous 12V. Et que l’effet n’est pas toujours aussi net sur toutes les locos.
Un bug de mon code ? Le remplacement de l’eStop par un arrêt simple (commande de vitesse à 0, ie cran 1 sur les locos concernées) supprime toute perturbation. Et comment s’opérerait un retour progressif à la normale ?
Un bug dans la librairie CmdrDCC ? C’est peu vraisemblable qu’il n’ait pas déjà été découvert.
Bon, on peut se passer d’un tel arrêt d’urgence, la désactivation du LM18200 finissant par arrêter tout le monde, mais moins rapidement, il est vrai.
Un expert aurait-il une idée ?
D’avance merci.
-
-
-
Comment piloter trains et accessoires en DCC avec Arduino (4) 8 juillet 2015 09:53, par Dominique
Bonjour,
Je n’utilise jamais l’arrêt d’urgence de la bibliothèque car j’estime qu’on n’en a pas besoin :
un arrêt normal respecte l’inertie et est plus réaliste.
en cas de problème majeur, on coupe le PWM du LMD18200, mais ça ne devrait pas arriver
De ce fait, je n’ai pas testé l’arrêt d’urgence de la biblio.
Je vais tâcher de regarder cela à la rentrée. -
Comment piloter trains et accessoires en DCC avec Arduino (4) 29 juillet 2015 23:02, par jac56
Pour faciliter l’analyse du phénomène constaté avec les e-stop, j’ai étudié le code de CmdrDCC.
On peut rapprocher les e-stop d’autres commandes émises à l’initialisation du générateur DCC : reset packet et idle packet qui, eux, ne posent pas de difficultés.
Un tableau permet de mieux comparer les caractéristiques de ces différentes commandes.
NB : il y a un pb de présentation, tabulations ou blancs sont mal gérés à l’affichage.Nom du packet : reset packet idle packet e stop packet (global) e stop packet
Data : 0x00 0x00 0x71 0x41
Adress : 0x00 0xFF 0x00 adress_loco
Repeat : 20 10 10 10
Kind : reset_packet_kind idle_packet_kind e_stop_packet_kind e_stop_packet_kindLes spécialistes de DCC sauront dire si les data 0x71 ou 0x41 associées aux deux types de e-stop sont appropriées.
D’avance merci à eux. -
Comment piloter trains et accessoires en DCC avec Arduino (4) 30 juillet 2015 08:07, par Dominique
Merci pour ces précisions :)
Pour commencer, une comparaison avec la norme NMRA est nécessaire.
Mais je n’ai pas les outils sous la main pour le moment et je reviendrai un peu plus tard sur cette réponse.cordialement
Dominique -
Comment piloter trains et accessoires en DCC avec Arduino (4) 31 juillet 2015 00:24, par Dominique
Sur le forum Arduino, il y a eu une discussion sur ce sujet avec l’auteur de la bibliothèque Don Goodman-Wilson :
-
Comment piloter trains et accessoires en DCC avec Arduino (4) 7 août 2015 22:37, par jac56
La discussion du forum Arduino vient d’être relancée ce 06/08 !
Un pb avec eStop constaté sur Uno, mais pas de détails pour l’instant… -
Comment piloter trains et accessoires en DCC avec Arduino (4) 7 août 2015 23:05, par Dominique
Je viens de le voir en effet.
Mais je me demande toujours dans quel(s) cas on peut avoir besoin du eStop !!!
Couper tous les trains revient à couper le courant au booster.
Couper un train : quels cas d’urgence le nécessite ? S’il n’y a pas de cantonnement, ni de block system, ni de gestion des trains plus ou moins élaborée, je comprend qu’il puisse y avoir des situations de type "accident".C’est pour cela que j’étudie le "cerveau" qu’il faut pour éviter les eStop.
Neanmoins c’est mieux sans bug !
-
Comment piloter trains et accessoires en DCC avec Arduino (4) 1er novembre 2015 14:33, par Tanguy
Bonjour Dominique,
merci pour ces articles dont les concepts m’intéressent beaucoup.
Je m’interroge sur l’utilité du calcul de la vitesse réelle (entre les deux capteurs) :
est-ce que la vitesse réelle d’une locomotive est proportionnelle à la consigne transmise en DCC ?
après étalonnage, pourrait-on déduire la vitesse réelle de la locomotive à partir de la seule consigne de vitesse transmise en dcc ?
est-ce que votre mesure de vitesse vient palier un manque de fiabilité entre la vitesse de consigne et la vitesse réelle, ou est-ce que votre mesure de vitesse est en quelque sorte un étalonnage permanent ?
merci beaucoup.
-
Comment piloter trains et accessoires en DCC avec Arduino (4) 1er novembre 2015 20:34, par Dominique
Bonjour Tanguy et merci pour votre intérêt à cet article.
La vitesse réelle en km/h c’est à dire la vitesse réelle en cm/s multipliée par le facteur d’échelle, est toujours une information qui intéresse le modélisme. Quand on peut la mesurer, on le fait ! Ici la présence des 2 capteurs permet de l’obtenir avec seulement un peu de logiciel.
Maintenant, le rapport entre les crans DCC et la vitesse réelle sont plus compliqués car la relation est rarement linéaire, elle n’est jamais valable sur toute la plage DCC entre 2 et 126.
Pour obtenir une relation fiable il faut étalonner chaque machine. C’est à dire gérer une table de correspondance avec quelques points caractéristiques comme la vitesse minimum, maximum, 30km/h et 60 km/h. Ensuite il faut faire des interpolations.
j’y reviendrai prochainement dans d’autres articles à venir.
Cordialement.
-
Comment piloter trains et accessoires en DCC avec Arduino (4) 15 janvier 2016 21:28, par Stephan
Bonjour,
J’ai lu que vous avez de problème de la lecture du courant. J’ai construit un circuit pareille et j’ai utilisé une resistence de 2,2 k a la broche de mesure de courant. J’ai arrivé a cette valeur avec ce calcul :
Imax = 0,000377 A/ A of output current * 6 A of output current
Imax = 0,002262 A
R = Umax/Imax = 5 V/ 0,002262 A = 2210 OhmDonc 2,2 k Ohm. Avec cette valeur, si on consomme 1 A, ça devra donne 0,8294 V sur le pin d’arduino. J’ai testé avec un decodeur et un moteur et la valeur donnée est 0,062 V pour une consommation de au moins 300 mA (0,248 V). Est-ce que vous avez faire d’autres essais ?
Merci,
Stephan -
Comment piloter trains et accessoires en DCC avec Arduino (4) 15 janvier 2016 22:25, par Dominique
Bonsoir Stephan,
J’ai renoncé finalement à utiliser la broche C/S (current sense) du LMD18200 car les mesures que je trouve ne sont pas cohérentes et même aléatoires.
J’ai eu une meilleure idée : on trouve facilement sur Internet des petits circuits (breakout) à base de Max471 avec la recherche "3A Range Current Sensor Module Professional MAX471 Module For arduino" :
Il en existe avec des calibres de 5A, 10A, etc..
On insère ce circuit en série avec l’alimentation continue du LMD18200 (RS+ coté +12V, RS-coté LMD18200, GND au GND). A cet endroit c’est du courant continu et la mesure est fiable.
Il suffit de lire la sortie OUT sur une broche analogique :
- Courant = aRead * 5; // conversion en mA
Une valeur de courant maximum me permet même de désactiver le LMD18200 en cas de dépassement de cette valeur, ce qui arrive en cas de court-circuit. C’est très utile et très simple !
-
Comment piloter trains et accessoires en DCC avec un Arduino (4) 9 février 2016 16:10, par gerard31
J’ai lu avec intérêt votre réalisation.
Deux questions simples :
potentiomètres linéaires ou logari1thmiques ?
quels décodeurs simples conseillerez-vous ?
Avec mes remerciements anticipés
Gérard
-
Comment piloter trains et accessoires en DCC avec un Arduino (4) 9 février 2016 19:16, par Dominique
Bonjour,
Potentiomètre linéaire : choisissez la qualité, un modèle qui ne crache pas !
décodeur : je n’ai pas de préférence, je prend ce que je trouve (même les moins chers) : on ne se sert que des fonctions bien standard (vitesse, direction, lumière).
Cela ne vous empêche pas de regarder et ajuster les valeurs des CVs. Pour le moment je programme les CVs avec une MS2 de Marklin, en attendant que je fasse mon programmateur. La bibliothèque le permet en grande partie. -
Comment piloter trains et accessoires en DCC avec un Arduino (4) 1er juin 2016 11:12, par LAURENCE
Bonjour,
J’ai chargé le fichier .zip du programme complet de la centrale mais au moment de la compil j’ai le message d’erreur suivant :
compilation terminated.Utilisation de la bibliothèque CmdrArduino-master prise dans le dossier : C :\Users\laurence\Documents\Arduino\libraries\CmdrArduino-master (legacy)
Utilisation de la bibliothèque EEPROM version 2.0 dans le dossier : C :\Program Files\Arduino\hardware\arduino\avr\libraries\EEPROM
exit status 1
Error compiling for board Arduino/Genuino Uno.j’ai bien la bibliothèque EEPROM dans IDE Arduino, je ne comprends pas.
Pouvez m’aider ?-
Bonjour,
je ne vois pas bien de quelle erreur il s’agit. Il doit y avoir plus de détails que ça.
Pouvez-vous faire un copier-coller de la fenêtre en bas de l’IDE Arduino et indiquer la version de cet IDE.a tout hazard, vous devez garder uniquement le nom "CmdrArduino" sans le "-master" pour la bibliotheque
-
C’est sympa de répondre aussi rapidement, tellement rapidement que je n’ai pas eu le temps de formuler en réponse la solution à propos de mon erreur.
J’ai découvert que le problème ne venait pas de la bibliothèque EEPROM mais de la modification de la bibliothèque Bounce1 en Bounce2. J’ai corrigé et ça marche.
Désolé et merci.
J’aurai sans doute d’autres besoins plus tard car je débute avec Arduino et j’ai un réseau train en DCC MultiMaus avec beaucoup de composants électroniques que je compte diminuer et me passer des commandes DCC MultiMaus.-
Merci du retour, surtout quand c’est positif avec les explications ;)
Pour un débutant en Arduino, c’est courageux de se lancer dans un tel projet.
Bien amicalement
-
-
-
-
Comment piloter trains et accessoires en DCC avec un Arduino (4) 11 juillet 2016 14:53, par LAURENCE
Bonjour,
C’est de nouveau moi. J’exécute petit à petit le programme de la centrale vers B3 j’en suis arrivé à contrôler la vitesse,la direction et maintenant je souhaite inscrire l’adresse de la loco en EEPROM.
Je rencontre une difficulté avec la lecture sur mon afficheur LCD 16x2. je n’ai pas d’erreur de compil mais pas d’affichage !! Ci dessous mon petit programme.
#includepgmspace.h> // librairie de gestion memoire Flash
#include <SoftwareSerial.h>
#include <serLCD.h> // librairie de gestion d’un LCD 16x2 via port Tx#define Pin_Tx 2 //
/////////////////////
// afficheur LCD
serLCD lcd(Pin_Tx) ;
const char string_0[] PROGMEM = "DCC V DIR AV AR " ; // Mode_EnCours = 0
const char string_1[] PROGMEM = "V DIR Canton Pas" ; // Mode_EnCours = 1
const char string_2[] PROGMEM = "Vit Km/h Cm/s " ; // Mode_EnCours = 2const char *const string_table[] PROGMEM = // table des adresses
string_0,
string_1,
string_2,
;
char buffer[16] ; // tampon de recopie en RAM
void setup()
//Serial.begin(9600) ;
lcd.setBrightness(25) ;
lcd.clear() ;
lcd.selectLine(1) ;
delay(1000) ;
void loop()
strcpy_P(buffer, (char*)pgm_read_word(&(string_table[0]))) ; // adresse DCC
//Serial.print(buffer) ;// affichage 1ere ligne
lcd.print(buffer) ;// affichage 1ere ligne
lcd.setCursor(2, 3) ;
delay(2000) ;
}}}Mon afficheur ne fonctionne pas avec la PIN TX 1 mais pas de problème avec les PINS 2 à 8. Je peux afficher le contenu du "buffer" en mode Serial mais pas avec la commande "strcpy" de PROGMEM !!
Merci de m’aider.-
Comment piloter trains et accessoires en DCC avec un Arduino (4) 13 juillet 2016 20:57, par Dominique
Désolé pour le retard, voyages et vacances, pas toujours connecté …
Je n’ai pas regardé attentivement votre programme qui doit s’inspirer du mien, mais je vous recommande de ne pas utiliser les pins 0 et 1 réservées pour la liaison USB (port série standard). La pin Tx 1 est toujours utilisée par le port USB donc ne l’utilisez pas pour l’afficheur, il y aurait un risque de conflit par moments (notamment lors des téléversements de logiciel).
Je ne vois pas dans votre sketch de déclaration du port série destiné au LCD avec la bibliothèque SoftwareSerial, ça peut expliquer …
Quand au strcpy… je vous conseille de regarder le site Arduino.cc consacré à PROGMEM
Bon courage
Voir en ligne : http://https://www.arduino.cc/en/Re…
-
-
Comment piloter trains et accessoires en DCC avec un Arduino (4) 19 juillet 2016 14:40, par LAURENCE
Bonjour,
Je progresse, j’arrive enfin à afficher le contenu de la mémoire Flash sur un lcd. Merci pour votre réponse mais après beaucoup d’essais j’ai simplement augmenté la capacité du buffer de [16] à [18] et ça marche.Pourtant j’avais beaucoup lu. A titre d’infos la capacité du buffer dans votre programme ne passait pas avec mon afficheur !!! et je suis branché sur la pin 2 et non sur la pin TX 1. Je poursuis mon initiation à bientôt sans doute.-
Comment piloter trains et accessoires en DCC avec un Arduino (4) 19 juillet 2016 21:25, par Dominique
Merci pour vos bonnes nouvelles.
Sachez que nous avons passé aussi beaucoup de temps à faire des essais avant d’acquérir l’expérience que nous avons. Les articles sont le fruit de ces essais lorsqu’ils deviennent fructueux. Nous n’aimons pas diffuser des informations qui n’ont pas été vérifiées.
Si vous trouvez des résultats différents, c’est que les conditions dans lesquelles vous vous trouvez sont différentes, parfois très peu. Si vous comparez soigneusement, vous allez finir par trouver la raison.
Je serais très intéressé de savoir pourquoi vous trouvez cette différence. Quelles sont les longueurs de vos chaines de caractères (les textes enregistrés en flash que vous affichez sur LCD). Je suis prêt à parier qu’il y en a un qui fait plus de 16 caractères.
Bon courage
-
-
Comment piloter trains et accessoires en DCC avec un Arduino (4) 20 juillet 2016 10:34, par LAURENCE
Bonjour,
Je vous remercie de garder le contact malgré mes questions de débutant.
J’ai de nouveau testé mon petit programme, j’ai remis le BUFFER à [16] et ça ne marche pas en revanche à [17] ça marche !! toujours sur la PIN 2 alors que sur TX1 ça ne marche pas et dans tous les cas il n’y a pas d’erreur de compil. J’utilise les trois textes suivants : "DCC V DIR AV AR " - "V DIR Canton Pas" -
"Vit Km/h Cm/s " .
Mon afficheur un modèle tout nouveau 16x2 avec trois connexions montées d’origine (VCC, GND RX). Maintenant je vais tester la mémoire EEPROM.
Bien amicalement. -
Comment piloter trains et accessoires en DCC avec un Arduino (4) 20 juillet 2016 10:54, par Dominique
Vous devriez commencer par mettre le même nombre de caractères dans toutes vos chaines, exactement comme dans l’article, en prenant soin d’aligner les chaines verticalement pour que les " (guillemets) soient bien les uns au dessous des autres.
Si vous avez modifié le programme de l’article, cela peut expliquer le problème. Je ne connais pas votre programme, donc je ne peux que supposer.
-
Comment piloter trains et accessoires en DCC avec un Arduino (4) 20 juillet 2016 11:05, par Dominique
Un autre conseil : coupez votre problème en deux :
essayez d’abord de récupérer les chaines de caractères de la Progmem en les affichant d’abord sur le moniteur avec un Serial.println()
ensuite, si c’est concluant, affichez les sur votre LCD
Dans ma réalisation j’ai utilisé un afficheur équipé d’une interface série nécessitant la bibliothèque SerialLCD
On trouve plus facilement maintenant des afficheurs équipé d’une interface I2C qui s’utilisent simplement comme ceci :
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2); // set the LCD address to 0x27 for a 16 chars and 2 line display
void setup()
{
lcd.init(); // initialize the lcd
// Print a message to the LCD.
lcd.backlight();
lcd.print("Hello, world!");
}
void loop()
{
}-
Comment piloter trains et accessoires en DCC avec un Arduino (4) 14 novembre 2021 13:14, par Didier Largillier
Bonjour je crois que vous avez réussi à remplacer l’afficheur série par un afficheur i2C mais que faut il faire ?
Je ne sais pas programmer à ce niveau !
Cordialement
Didier-
Comment piloter trains et accessoires en DCC avec un Arduino (4) 14 novembre 2021 15:16, par Dominique
C’est quasiment pareil dans les 2 bibliothèques.
utilisez les exemples de la bibliothèque pour comprendre les différences et faire l’adaptation.-
Bonsoir et merci pour votre réponse. Je vais essayer de m’en sortir !
Bien cordialement
Didier-
Comment piloter trains et accessoires en DCC avec un Arduino (4) 14 novembre 2021 20:05, par Dominique
En cas de bloquage, posez des questions precises, de préférence sur le forum où vous pouvez joindre un bout de programme. Ce sera plus facile pour vous aider.
-
-
-
-
-
-
Comment piloter trains et accessoires en DCC avec un Arduino (4) 27 juillet 2016 11:29, par LAURENCE
Bonjour,
Le programme fonctionne, j’ai par contre supprimé tout ce qui avait un rapport avec le mode automatique ce sera pour plus tard. J’ai tout de même rencontré un petit problème que j’ai résolu mais sans bien comprendre le pourquoi. Mon afficheur indiquait à l’adresse DCC : 27135, alors que l’EEPROM était encore vierge sans adresse DCC !!! J’ai donc modifié la ligne de code ==255 par 27135 et j’ai eu accès et codé l’adresse 3 de ma loco. J’ai ensuite rétabli la ligne de code avec la valeur ==255 et tout fonctionne normalement et l’afficheur indique bien DCC : 3. Je n’ai pas trouvé dans le programme une entrée pour saisir une première fois l’adresse DCC d’une loco il y a certainement quelque chose qui m’échappe. Je vais maintenant finaliser mon boitier de commande faire des essais sur mon réseau et passer ensuite à l’étude pour commander plusieurs locos et là j’ai besoin de pistes car mon réseau est déjà configuré en cantons et sécurisé. J’ai le projet de refaire un TCO et d’adapter à Arduino la rétro-signalisation et çà ce n’est pas un problème. Je suis emballé par votre démarche et je suis le forum avec attention mais je ne peux pas m’en mêler je suis pas assez ferré en programmation. Pensez aux tuyaux pour commander plusieurs locos.A bientôt. -
Lecture des variables de configuration 23 novembre 2018 12:53, par SAVORNIN Pierre
Bonjour !
Tout d’abord, merci et bravo pour tous ces articles.
Je suis sur le point d’attaquer sérieusement la question Arduino, pour passer en digital un réseau HO que je monte pour mes petits enfants (j’ai 75 balais…). Or j’avais acheté il y a deux ans un système Roco avec Multimaus 10810 (rouge), qui a fonctionné, mais qui ne permet pas de lire les CV. Je pense qu’une centrale Arduino doit pouvoir combler cette lacune.
Question 1 : peut-on se passer de lire les CV, par exemple au prix d’une reprogrammation complète des locos ?
Question 2 : pourriez-vous m’indiquer une référence précise d’article Locoduino décrivant une centrale munie de cette fonction lecture ? Je possède un Arduino Uno qui n’attend qu’une utilisation !
Merci d’avance !-
Merci pour vos encouragements ;)
Vous trouverez toutes les réponses dans les articles Réalisation de centrales DCC avec le logiciel libre DCC++ (1), Réalisation de centrales DCC avec le logiciel libre DCC++ (2), Réalisation de centrales DCC avec le logiciel libre DCC++ (3), Bibliothèque DCCpp et tous ceux qui s’en inspirent, tant sur ce site que sur le forum.
En général on n’a pas besoin ni de lire tous les CVS, ni de reprogrammer une loco, les valeurs par défaut du constructeur ne sont pas idiotes. Seule l’adresse doit être programmée car les locos doivent toutes avoir des adresses différentes.
-
La question posée (lecture des CV par un petit outil à base d’Arduino) me semble pertinente pour au moins un CV : l’adresse du décodeur d’une loco (comme vous l’indiquez d’ailleurs dans votre réponse).
Cependant, et sauf erreur, je ne trouve pas dans Locoduino un article dédié qui permettrait (facilement ?) de réaliser ce petit outil. Existe-t-il ou faudrait-il l’écrire ?
PS : (Gérard, ancien du CMFA, m’a parlé ce soir de celui que vous lui aviez réalisé pour ses locos en N !).Je me joins au concert de louanges adressées au site Locoduino qui est une pure merveille. Bravo !
-
Vous avez un montage de Thierry qui permet de lire et écrire les CV :
Bibliothèque DcDccNanoController sous-titré Une petite centrale toute prête… article224Par ailleurs, Dominique a publié Réalisation d’un va-et-vient automatique et réaliste dont la première action est lire l’adresse de la loco posée sur la voie.
Le plus dur sera de choisir.
Voir en ligne : Réalisation d’un va-et-vient automatique et réaliste
-
Bonjour Patrick,
ça fait un sacré bout de temps qu’on sait faire ça à Locoduino. Le premier est celui qui se trouve dans la centrale du va et vient du réseau N d’expo du CMFA. Depuis il y a eu les articles sur le va et vient, sur DCCpp et le dernier est dans LaBox sur le forum. En réalité il y a plusieurs CVs à lire pour les adresses courtes et longues. A ta disposition pour plus de détails. Dominique.
-
-
Et d’ailleurs encore plus simple : une BaseStation composée d’un UNO, d’un shield moteur, d’une alimentation 12V (décrite dans les articles ci-dessus) et de deux straps. Avec le sketch éponyme elle permet de lire et écrire les CV sur la voie de programmation à partir du Serial Monitor. Voir les commandes ci-dessous.
Voir en ligne : Commands for DCCpp BaseStation
-
-
-
-
Comment piloter trains et accessoires en DCC avec un Arduino (4) 9 avril 2019 22:43, par Pierre Meynier
Bonsoir,
J’ai un soucis je désire passer les broches A4, A5 en A6, A7 et ca ne fonctionne pas !!!
J’ai bien changer au niveau des déclarations #define
#define Pin_AutoManu A6
#define Pin_SW_FL A7Mais sans succès.
La raison est que j’ai un LiquidCrystal_I2C qui fonctionne uniquement sur A4 & A5.
Bien cordialement
Pierre-
Bonjour,
c’est un peu normal, l’interface I2C est sur A4 / A5 et pas ailleurs. Sur A6 et A7 vous n’avez que des entrées analogiques.
-
Bonjour,
Laissez tomber la bibliothèque Cmdrarduino et préférez maintenant DCCpp et la réalisation de l’article Réalisation d’un va-et-vient automatique et réaliste
-
-
Comment piloter trains et accessoires en DCC avec un Arduino (4) 13 octobre 2019 18:57, par paul reisch
Bonjour
J’ai 80 ans ,je viens de débuter sur l’Arduino il y a une semaine et je suis intéressé par la commande multiple de trains pour débuter un nouveau circuit de train que je dois encore construire. Dans un premier temps ,uniquement 4 locos qui doivent circuler indépendamment sur le circuit. J’ai lu avec intérêt votre rubrique précitée et l’on parle de décodeurs à installer dans les machines (machine 2,3,) .Est ce des décodeurs du commerce ou bien des fabrication "maison" ?.
Avant un déménagement ,qui ne m’a pas permis de "récupérer" mon ancien circuit que j’avais conçu comme électronicien de l’ancienne école (commande de chaque loco par émission/réception). Je constate que l’informatique me permettra beaucoup plus de souplesse.Merci-
Comment piloter trains et accessoires en DCC avec un Arduino (4) 13 octobre 2019 19:32, par dominique
Bonsoir Paul,
Pour réaliser votre centrale DCC, aller à l’article Réalisation de centrales DCC avec le logiciel libre DCC++ (3)
Il faut effectivement mettre des décodeurs dans les loco ( s’il n’y en a pas déjà) et nous vous déconseillons d’en fabriquer vous-même, ceux-ci coûtent de 20 a 30€, ça ne vaut pas le coup et c’est de l’electronique miniature .
-