1
Vos projets / Re : Éclairage voitures
« Dernier message par trimarco232 le Aujourd'hui à 09:02:09 am »Bonjour , pour une ligne de train , 2 fils suffisent
Le forum LOCODUINO est consacré aux discussions ayant trait à l'utilisation de l'Arduino dans les automatismes et les animations pour le train miniature. Nous avons eu récemment quelques inscriptions de personnes ayant des projets plus généraux mais surtout inapplicables au train miniature. Si votre projet ou vos questions ne concernent pas le modélisme ferroviaire, ne vous inscrivez pas, vous perdriez votre temps et nous aussi.
Trimarco.bien , alors on saura
Je vais tester la fiabilité de mon système dans les prochains jours.
Il y a quand même une tolérance de 6µs (26 à 32µs après le bit de stop).
Je vais mesurer si je reste dans cette fenêtre avec le µp en charge (WiFi)
Bonjour.
Je viens de recevoir un ESP32 pour construire « La Box »
Pressé d’explorer le code pour la rendre compatible RailCom.
La modification est très simple, ajout de deux delay au bon endroit.
Dans le fichier DCCRMT.cpp, chercher :
void IRAM_ATTR interrupt(rmt_channel_t channel, void *t) {
La modifier comme ci-dessous.Code: [Sélectionner]void IRAM_ATTR interrupt(rmt_channel_t channel, void *t) {
et dans le setup(), mettre la pin D25 en sortie :
delayMicroseconds(22);
digitalWrite(25,1);
delayMicroseconds(412); // ___________---___________
digitalWrite(25,0);
RMTChannel *tt = channelHandle[channel];
if (tt) tt->RMTinterrupt();
if (channel == 0)
DCCTimer::updateMinimumFreeMemoryISR(0);
}
pinMode(25, OUTPUT);
L’introduction du CutOut dans la trame DCC se fait de manière matérielle avec un circuit TTL logique 7400 (4 portes Nand) , voir les photos en pièces jointes.
De cette façon le signal DCC original n’est pas altéré, que du contraire, il est tamponné.
Placer des Delay dans une interruption, n’est pas très élégant, il est possible de les remplacer par des Timers.
Bien à vous.
dans le setup(), mettre la pin D25 en sortie :
pinMode(25, OUTPUT);
void IRAM_ATTR interrupt(rmt_channel_t channel, void *t) {
delayMicroseconds(22);
digitalWrite(25,1);
delayMicroseconds(412); // ___________---___________
digitalWrite(25,0);
RMTChannel *tt = channelHandle[channel];
if (tt) tt->RMTinterrupt();
if (channel == 0)
DCCTimer::updateMinimumFreeMemoryISR(0);
}
et dans le setup(), mettre la pin D25 en sortie :