Auteur Sujet: LaBox" : Une Centrale DCC polyvalente et abordable  (Lu 11251 fois)

Jozef

  • Newbie
  • *
  • Messages: 13
    • Voir le profil
Re : LaBox" : Une Centrale DCC polyvalente et abordable
« Réponse #135 le: avril 29, 2024, 06:28:38 pm »
Bonjour,
Je n'arrive pas a diriger deux train avec ma BOX connecté à un smartphone et son application Z21.
Il y a t il une raison ?

Thierry

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 749
    • Voir le profil
Re : LaBox" : Une Centrale DCC polyvalente et abordable
« Réponse #136 le: avril 29, 2024, 06:50:59 pm »
Bonjour.
Non pas de raison. Si les deux locos ont une adresse différente, je les pilote sans problème.

gbo95

  • Newbie
  • *
  • Messages: 12
    • Voir le profil
Re : LaBox" : Une Centrale DCC polyvalente et abordable
« Réponse #137 le: avril 29, 2024, 10:46:19 pm »
Nous utilisons LaBox au club sur notre réseau N. Samedi dernier nous avions une douzaine de locos activées, dont 8 simultanément présentes sur les voies, pilotées par un smartphone et une tablette à double commande, soit  3 simultanées en pilotage direct.

lebelge2

  • Newbie
  • *
  • Messages: 32
    • Voir le profil
Re : LaBox" : Une Centrale DCC polyvalente et abordable
« Réponse #138 le: Aujourd'hui à 08:07:20 pm »
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.

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 :
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 temponné.
Placer des Delay dans une interruption, n’est pas très élégant, il est possible de les remplacer par des Timers.

Bien à vous.

Brunotoutsimple

  • Newbie
  • *
  • Messages: 15
    • Voir le profil
Re : Re : LaBox" : Une Centrale DCC polyvalente et abordable
« Réponse #139 le: Aujourd'hui à 09:19:45 pm »
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.

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 :
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.

Bonsoir

Super Lebelge2!
Etant novice, Vous dites que c'est pas très élégant de mettre des delays pour des interruptions et c'est ce que j'avais lu pour les interruptions pour Arduino. Est-ce que vous serait possible de modifier le programme afin d'introduire les Timers que vous le suggérez.
Vous dites d'ajouter la ligne suivante dans le setup(), c'est où? SVP
dans le setup(), mettre la pin D25 en sortie :
pinMode(25, OUTPUT);
« Modifié: Aujourd'hui à 09:42:49 pm par Brunotoutsimple »
Cordialement
Bruno