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

Dominique

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 3039
  • 100% Arduino et N
    • Voir le profil
Re : LaBox" : Une Centrale DCC polyvalente et abordable
« Réponse #285 le: septembre 09, 2024, 06:59:54 pm »
OK ça compile bien maintenant avec ce fichier XpressNet.cpp récupéré du Git dans BBEdit et copié/collé dans l'éditeur de l'IDE Arduino.
Cordialement,
Dominique

dmskd

  • Newbie
  • *
  • Messages: 48
  • Arduino et N
    • Voir le profil
Re : LaBox" : Une Centrale DCC polyvalente et abordable
« Réponse #286 le: septembre 12, 2024, 09:39:17 am »
Bonjour,

Je suis cette discussion avec intérêt depuis quelques temps car l'association RAILCOM et CAN m'intéresse pour mon futur réseau.
Je n'ai pas de hardware Labox mais j'ai voulu voir si je pouvais compiler et charger le programme dans un de mes ESP32 (ESP-32 DevKit C V4 de AZ-Delivery).

La compilation se passe bien (j'utilise PlateformIO).
Quand je teste le signal DCC avec RAILCOM sans CAN, la trame est correcte avec interruption RAILCOM.
Quand je teste le signal DCC avec CAN sans RAILCOM, la trame est correcte sans interruption RAILCOM.
Mais quand les deux sont activés, je vois passer la trame DCC (avec interruption) une fraction de seconde, puis le programme plante, l'ESP reboote, et ça recommence indéfiniment.

Le terminal affiche ceci :
09:31:44.566 > <* License GPLv3 fsf.org (c) Locoduino.org *>
09:31:44.571 > <* LaBox             : 2.6.3 *>
09:31:44.573 > <* CommandStation-EX : 5.0.9 *>
09:31:44.576 > <* LaBox Main mode. *>
09:31:44.577 > <* Pin 36 Max 2249mA (2823) *>
09:31:44.580 > <= A MAIN>
09:31:44.581 > <* new MAIN channel with pins 33 27 *>
09:31:44.585 > <* Channel 0 DCC signal for MAIN start *>
09:31:44.588 > finGuru Meditation Error: Core  1 panic'ed (LoadProhibited). Exception was unhandled.
09:31:44.596 >
09:31:44.596 > Core  1 register dump:
09:31:44.598 > PC      : 0x400ddb9f  PS      : 0x00060033  A0      : 0x800d70a9  A1      : 0x3ffbf38c 
09:31:44.607 > A2      : 0x00000000  A3      : 0x00000003  A4      : 0x000000a0  A5      : 0x00000000 
09:31:44.614 > A6      : 0x00000001  A7      : 0x003fffff  A8      : 0x0000000f  A9      : 0x00000000 
09:31:44.621 > A10     : 0x00ff0000  A11     : 0xff000000  A12     : 0x3ffc6bf0  A13     : 0x3ffc6bd0 
09:31:44.629 > A14     : 0x00000000  A15     : 0x3ffc376c  SAR     : 0x00000020  EXCCAUSE: 0x0000001c 
09:31:44.637 > EXCVADDR: 0x00000001  LBEG    : 0x00000000  LEND    : 0x00000000  LCOUNT  : 0x00000000 
09:31:44.645 > Backtrace: 0x400ddb9c:0x3ffbf38c |<-CORRUPTED
09:31:44.650 > ELF file SHA256: 4a4635deba44289e
09:31:44.767 > Rebooting...

Est-ce que ça parle à quelqu'un ?
Cordialement,
Dominique

bobyAndCo

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 1081
  • HO avec DCC++
    • Voir le profil
Re : LaBox" : Une Centrale DCC polyvalente et abordable
« Réponse #287 le: septembre 12, 2024, 09:57:27 am »
Bonjour dmskd, (un prénom peut-être ?)

Je joins à ce message une version de laBox (c'est un projet PIO) qui fonctionne parfaitement chez moi avec Railcom et CAN. C'est une version 2.6.1.

Je précise que je n'utilise pas les fonctions de programmation.

Ca m'intéresse de savoir si cette version fonctionne chez toi.

PS : j'ai supprimé les bibliothèques et les éxecutables pour limiter le poids du fichiers mais ceux-ci seront chargés ou re-créés à l'ouverture du projet et à a compilation.

Christophe

Thierry

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 810
    • Voir le profil
Re : LaBox" : Une Centrale DCC polyvalente et abordable
« Réponse #288 le: septembre 12, 2024, 11:18:40 am »
Je confirme que sur certains ESP j'ai toujours le plantage. Il n'y a peut être pas de lien, mais les deux ESP qui se plantent chez moi sont des 38 broches, donc le format long. Sur mon ESP 30 broches pas de plantage...

dmskd

  • Newbie
  • *
  • Messages: 48
  • Arduino et N
    • Voir le profil
Re : LaBox" : Une Centrale DCC polyvalente et abordable
« Réponse #289 le: septembre 12, 2024, 12:23:53 pm »
Merci Christophe,

(mon prénom est dans la signature)

J'ai continué les tests, avec ton programme et avec l'autre, sur plusieurs "boards", tous les mêmes.
Parfois ça fonctionne, parfois non.
Parfois ça fonctionne après chargement du programme, mais plus après un redémarrage.
Parfois c'est l'inverse.
Avec ton programme, la trame DCC avec Railcom semble plus stable.

J'avoue que je n'y comprends plus rien.
Cordialement,
Dominique

bobyAndCo

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 1081
  • HO avec DCC++
    • Voir le profil
Re : LaBox" : Une Centrale DCC polyvalente et abordable
« Réponse #290 le: septembre 12, 2024, 01:32:45 pm »
Bon je viens de refaire des tests pendant 2 heures et tout fonctionne vraiment bien chez moi. J'ai fais le test avec 2 locos, une Roco avec adresse 3 et une Trix avec adresse 78 (Cette loco avec décodeur Trix génère le Railcom!!!).

Pas de problème de commande en CAN. J'utilise pour cela une MS2. On ne peut pas être plus CAN Marklin !

Pas de problème pour la lecture Railcom !

J'en ai profité pour apporter quelques nouvelles améliorations sur les fichiers CanMarklin (en particulier sur le filtre des messages). Les fichiers sont joints. Il faut juste remplacer les anciens par ceux-ci.

J'ai aussi réalisé un petit programme de test qui fonctionne sur un Arduino UNO avec un shield SEEED STUDIO relié à la Box bien sûr et qui pilote ma locomotive adresse 78 (qui allume laBox, envoie la loco en avant, arrière, changement de vitesse etc...)

Il suffit de mettre l'adresse de la loco que vous voulez piloter à la ligne 39 : const uint32_t addressLoco = 78;  // Renseigner l'adresse de votre locomotive
Selon le module CAN que vous utilisez, assurez-vous des bonne pins pour CS et INT. Chez moi c'est :

static const byte MCP2515_CS = 10;  // CS input of MCP2515 (adapt to your design)
static const byte MCP2515_INT = 2;  // INT output of MCP2515 (adapt to your design)

Voici le programme dans son ensemble :


#include <ACAN2515.h>

static const byte MCP2515_CS = 10;  // CS input of MCP2515 (adapt to your design)
static const byte MCP2515_INT = 2;  // INT output of MCP2515 (adapt to your design)

//——————————————————————————————————————————————————————————————————————————————
//  MCP2515 Driver object
//——————————————————————————————————————————————————————————————————————————————

ACAN2515 can(MCP2515_CS, SPI, MCP2515_INT);

//——————————————————————————————————————————————————————————————————————————————
//  MCP2515 Quartz: adapt to your design
//——————————————————————————————————————————————————————————————————————————————

static const uint32_t QUARTZ_FREQUENCY = 16UL * 1000UL * 1000UL;  // 16 MHz

enum : bool {
  off,
  on
};

enum : uint8_t {
  setPower,
  setSpeed,
  setDirection,
  setfunction
};

struct Loco {
  uint32_t address;
  uint16_t speed;
  uint8_t direction;
  byte fn[28];
};

Loco *loco = new Loco;
const uint32_t addressLoco = 78;  // Renseigner l'adresse de votre locomotive

class LaBoxCmd {
private:
  uint32_t mID;
  bool mDebug;
  bool mPower;
public:
  LaBoxCmd(uint32_t);
  void setup();
  void setPower(bool power) {
    mPower = power;
  }
  bool getPower() {
    return mPower;
  }
};

LaBoxCmd::LaBoxCmd(uint32_t id)
  : mID(id) {}

uint32_t thisId = 0x1811;  // Identifiant de cet expéditeur
LaBoxCmd laBox(thisId);



void canSendMsg(uint8_t commande, uint8_t function = 0) {
  CANMessage frame;
  frame.ext = true;  // Utiliser un identifiant étendu

  uint32_t ok;
  frame.id = thisId;  // Identifiant de la trame

  switch (commande) {
    case setPower:
      frame.len = 5;  // Nombre d'octets de data
      frame.id |= (uint32_t)0x00 << 17;
      frame.data32[0] = thisId;
      frame.data[4] = laBox.getPower();
      break;
    case setSpeed:
      frame.len = 6;  // Nombre d'octets de data
      frame.id |= (uint32_t)0x04 << 17;
      frame.data32[0] = loco->address;
      Serial.print("speed : ");
      Serial.println(loco->speed);
      frame.data[4] = (loco->speed & 0xFF00) >> 8;
      frame.data[5] = loco->speed & 0x00FF;
      //frame.data16[4] = loco->speed;
      break;
    case setDirection:
      frame.len = 5;  // Nombre d'octets de data
      frame.id |= (uint32_t)0x05 << 17;
      frame.data32[0] = loco->address;
      frame.data[4] = loco->direction;
      break;
    case setfunction:
      frame.len = 6;  // Nombre d'octets de data
      frame.id |= (uint32_t)0x06 << 17;
      frame.data32[0] = loco->address;
      frame.data[4] = function;
      frame.data[5] = loco->fn[function];
      break;
  }

  ok = can.tryToSend(frame);
  if (ok)
    Serial.println("envoi ok");
}

//——————————————————————————————————————————————————————————————————————————————
//   SETUP
//——————————————————————————————————————————————————————————————————————————————

void setup() {
  //--- Switch on builtin led
  pinMode(LED_BUILTIN, OUTPUT);
  digitalWrite(LED_BUILTIN, HIGH);
  //--- Start serial
  Serial.begin(115200);
  //--- Wait for serial (blink led at 10 Hz during waiting)
  while (!Serial) {
    delay(50);
    digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN));
  }
  //--- Begin SPI
  SPI.begin();
  //--- Configure ACAN2515
  Serial.println("Configure ACAN2515");
  ACAN2515Settings settings(QUARTZ_FREQUENCY, 250UL * 1000UL);  // CAN bit rate 250 kb/s
  const uint16_t errorCode = can.begin(settings, [] {
    can.isr();
  });
  if (errorCode == 0) {
    Serial.print("Configuration CAN ok");
  } else {
    Serial.print("Configuration error 0x");
    Serial.println(errorCode, HEX);
  }
  loco->address = addressLoco;
}


//——————————————————————————————————————————————————————————————————————————————

void loop() {
  CANMessage frame;

  // Power on
  laBox.setPower(on);
  canSendMsg(setPower);
  delay(1000);

  // Test des differentes fonctions du decodeur

  // for (byte i = 0; i <= 28; i++) {
  //   // Activation
  //   loco->fn[i] = on;
  //   canSendMsg(setfunction, i);
  //   delay(1000);

  //   // Desactivation
  //   loco->fn[i] = off;
  //   canSendMsg(setfunction, i);
  //   delay(1000);
  // }

  loco->fn[0] = on;
  canSendMsg(setfunction, 1);
  delay(10);

  loco->fn[1] = on;
  canSendMsg(setfunction, 1);
  delay(10);

  // Vers l'avant
  loco->direction = 1;
  canSendMsg(setDirection);
  delay(10);

  loco->speed = 500;  // 500 / 1000 = 50% de la vitesse max
  canSendMsg(setSpeed);
  delay(1000ul * 50ul);

  loco->fn[2] = on;
  canSendMsg(setfunction, 2);
  delay(1000);

  loco->fn[2] = off;
  canSendMsg(setfunction, 2);
  delay(10);

  loco->speed = 100;  // 100 / 1000 = 10% de la vitesse max
  canSendMsg(setSpeed);
  delay(1000ul * 50ul);

  // Vers l'arriere
  loco->direction = 2;
  canSendMsg(setDirection);
  delay(10);

  loco->speed = 500;  // 300 / 1000 = 30% de la vitesse max
  canSendMsg(setSpeed, 0);
  delay(1000ul * 50ul);

  loco->fn[3] = on;
  canSendMsg(setfunction, 2);
  delay(3000);

  loco->fn[3] = off;
  canSendMsg(setfunction, 3);
  delay(10);

  loco->speed = 50;  // 50 / 1000 = 5% de la vitesse max
  canSendMsg(setSpeed);
  delay(10000);

  //Power off
  laBox.setPower(off);
  canSendMsg(setPower);
  delay(1000);
}

//——————————————————————————————————————————————————————————————————————————————

« Modifié: septembre 12, 2024, 01:47:26 pm par bobyAndCo »

bobyAndCo

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 1081
  • HO avec DCC++
    • Voir le profil
Re : Re : LaBox" : Une Centrale DCC polyvalente et abordable
« Réponse #291 le: septembre 12, 2024, 01:46:23 pm »
Le terminal affiche ceci :
09:31:44.566 > <* License GPLv3 fsf.org (c) Locoduino.org *>
09:31:44.571 > <* LaBox             : 2.6.3 *>
09:31:44.573 > <* CommandStation-EX : 5.0.9 *>
09:31:44.576 > <* LaBox Main mode. *>
09:31:44.577 > <* Pin 36 Max 2249mA (2823) *>
09:31:44.580 > <= A MAIN>
09:31:44.581 > <* new MAIN channel with pins 33 27 *>
09:31:44.585 > <* Channel 0 DCC signal for MAIN start *>
09:31:44.588 > finGuru Meditation Error: Core  1 panic'ed (LoadProhibited). Exception was unhandled.
09:31:44.596 >
09:31:44.596 > Core  1 register dump:
09:31:44.598 > PC      : 0x400ddb9f  PS      : 0x00060033  A0      : 0x800d70a9  A1      : 0x3ffbf38c 
09:31:44.607 > A2      : 0x00000000  A3      : 0x00000003  A4      : 0x000000a0  A5      : 0x00000000 
09:31:44.614 > A6      : 0x00000001  A7      : 0x003fffff  A8      : 0x0000000f  A9      : 0x00000000 
09:31:44.621 > A10     : 0x00ff0000  A11     : 0xff000000  A12     : 0x3ffc6bf0  A13     : 0x3ffc6bd0 
09:31:44.629 > A14     : 0x00000000  A15     : 0x3ffc376c  SAR     : 0x00000020  EXCCAUSE: 0x0000001c 
09:31:44.637 > EXCVADDR: 0x00000001  LBEG    : 0x00000000  LEND    : 0x00000000  LCOUNT  : 0x00000000 
09:31:44.645 > Backtrace: 0x400ddb9c:0x3ffbf38c |<-CORRUPTED
09:31:44.650 > ELF file SHA256: 4a4635deba44289e
09:31:44.767 > Rebooting...

Est-ce que ça parle à quelqu'un ?

Sur un ESP32, c'est la plus part du temps un pointeur. Il faut s'assurer au préalable que le pointeur est non NULL.

if(pointeur != nullptr)
{
...
}

Parfois aussi en cas d'utilisation de freeRTOS, quand une tâche préempte les autres. La pause n'existe pas ou elle est vraiment trop courte.

bobyAndCo

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 1081
  • HO avec DCC++
    • Voir le profil
Re : Re : LaBox" : Une Centrale DCC polyvalente et abordable
« Réponse #292 le: septembre 12, 2024, 01:50:10 pm »
Je confirme que sur certains ESP j'ai toujours le plantage. Il n'y a peut être pas de lien, mais les deux ESP qui se plantent chez moi sont des 38 broches, donc le format long. Sur mon ESP 30 broches pas de plantage...

Sur les 38 pins, il y a des broches "réservées". C'est le cas par exemple pour les WROM de 16 et 17 (TX2 et RX2) qui servent je crois à des extensions mémoire. Mais de là à faire planter ?

Thierry

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 810
    • Voir le profil
Re : LaBox" : Une Centrale DCC polyvalente et abordable
« Réponse #293 le: septembre 12, 2024, 01:54:51 pm »
Un pointeur nul planterai à peu près tout le temps au même endroit. Ce n'est pas le cas ici. Les broches 16 et 17 ne sont utilisées que par SPROG. Même si SPROG n'est pas activé, ça se plante...
J'ai déjà tenté de changer de pin pour Railcom, ça ne change rien. J'essaierai ce soir de changer l'interruption utilisée par RAILCOM, passer de la 3 à la 1 pour voir.

bobyAndCo

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 1081
  • HO avec DCC++
    • Voir le profil
Re : LaBox" : Une Centrale DCC polyvalente et abordable
« Réponse #294 le: septembre 12, 2024, 02:01:12 pm »
@Thierry

J'ai, chargé mon programme sur un 38 pins et je n'ai pas de problème non plus (pas de plantage au démarrage). Il n'est pas sur une box bien sûr car je n'ai pas de PCB adapté.

Tu peux me faire passer ton programme comme j'ai fait, c'est à dire le projet PIO sans les biblio et sans les fichiers complilés ?

Thierry

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 810
    • Voir le profil
Re : LaBox" : Une Centrale DCC polyvalente et abordable
« Réponse #295 le: septembre 12, 2024, 02:14:28 pm »
Je te fais ça ce soir. Comme je n'ai plus internet depuis le 3, c'est mon téléphone qui fait le modem en 5G et qui épuise mon forfait... Et je l'ai branché sur mon PC boulot pour le moment... Mais ma version c'est celle de Github.

Brunotoutsimple

  • Jr. Member
  • **
  • Messages: 69
    • Voir le profil
Re : LaBox" : Une Centrale DCC polyvalente et abordable
« Réponse #296 le: septembre 12, 2024, 02:39:28 pm »
Bonjour à tous
Voici une version de "LaBox" avec un Esp32 avec 38 Pins, comprenant:
- Railcom
- Xpressnet
- Sprog
- HC-12
- CAN


« Modifié: septembre 12, 2024, 04:14:23 pm par Brunotoutsimple »
Cordialement
Bruno

Dominique

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 3039
  • 100% Arduino et N
    • Voir le profil
Re : LaBox" : Une Centrale DCC polyvalente et abordable
« Réponse #297 le: septembre 12, 2024, 02:44:47 pm »
Et CAN !
« Modifié: septembre 12, 2024, 02:46:18 pm par Dominique »
Cordialement,
Dominique

bobyAndCo

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 1081
  • HO avec DCC++
    • Voir le profil
Re : LaBox" : Une Centrale DCC polyvalente et abordable
« Réponse #298 le: septembre 12, 2024, 03:16:41 pm »
Bon, j'ai des nouvelles qui devraient vous rassurer. J'ai chargé la version actuelle sur le github de locoduino sur ma propre Box. https://github.com/Locoduino/CommandStation-EX-LaBox

GPLv3 fsf.org (c) Locoduino.org *>
<* LaBox             : 2.6.3 *>
<* CommandStation-EX : 5.0.9 *>
E (4632) wifi_init_default: netstack cb reg failed with 12289
..<* Wifi STA IP 192.168.1.38 *>
<* Server will be started on port 2560 *>
<* LaBox Main mode. *>
<* Pin 36 Max 2249mA (2823) *>
<= A MAIN>
<* Channel 0 DCC signal for MAIN start *>
<iDCC-EX V-5.0.9 / ESP32 / LABOXMAIN G-3bddf4d>
<* [Z21] UDP Connection started port 21105. Z21 apps are available. *>
<* Configure ESP32 CAN *>
<* CAN id = 253  Bitrate = 2500 Kb/s  CANH:4  CANL:5 *>
[CanMsg 74] : config with filter
<* CAN Configuration OK ! *>

- Un premier téléversement sans rien modifier -> Pas de plantage !

- Je mets mes propres fichier config.h et config.Labox.h -> pas de plantage, laBox se connecte bien à mon WiFi domestique.

- Je fais un test de pilotage de ma loco adresse 78 avec DecoderPro, tout fonctionne, la loco avance, recule, et les fonctions aussi s'activent.

- Je remplace les fichiers CanMarklin.h et CanMarklin.cpp par les derniers que j'ai postés ci-dessus -> Tout fonctionne, la loco 78 et commandée à la fois par DecoderPro et la MS2 de Marklin, en CAN donc !

Railcom aussi fonctionne :
[ConsoCourant 55] Busy = true
[Main 155] Railcom - Numero de loco : 78

J'ai juste une erreur de compilation mais c'est de l'affichage, rien de fondamental :

Building in release mode
Compiling .pio/build/ESP32/src/CanMarklin.cpp.o
Compiling .pio/build/ESP32/src/CommandStation-EX-LaBox.ino.cpp.o
CanMarklin.cpp: In static member function 'static void CanMarklin::loop()':
CanMarklin.cpp:126:15: error: 'CANDIAG' is not a member of 'Diag'
     if (Diag::CANDIAG)
               ^~~~~~~
*** [.pio/build/ESP32/src/CanMarklin.cpp.o] Error 1

Le problème est réglé provisoirement en commentant les deux lignes 126 et 127 de CanMarklin.cpp :

  //if (Diag::CANDIAG)
     // DIAG(F("[CanMarklin]------ Sender %d : Command 0x%0X %s"), exped, cmde, cmdName);

Je suis sur PlateformIO. Ma Box est la dernière avec L6203, et modifications de hard comme préconisé par LeBelge,

J'invite donc ceux qui ont la possibilité de faire exactement les mêmes opérations pour voir si l'on a des résultats différents.

Christophe

PS: Je constate que dans version sur le github que SPROG est désactivé (par défaut) dans config.Labox.h
#ifdef ENABLE_SPROG
// Z21 define is the last one in LABOX_EXCOMMS and dont have a comma at its end !
#define SPROGCOMM new SProg(16, 17)
#else
#define SPROGCOMM NULL
#endif

Quand j'active SPROG, je n'ai toujours pas de plantage sur la propre Box et le CAN commande bien ma loco. Quand je copie ce même programme sur un ESP 38 pins, je n'ai pas de plantage non plus ! Mais je ne peux tester le fonctionnement.
« Modifié: septembre 12, 2024, 03:32:21 pm par bobyAndCo »

Brunotoutsimple

  • Jr. Member
  • **
  • Messages: 69
    • Voir le profil
Re : Re : LaBox" : Une Centrale DCC polyvalente et abordable
« Réponse #299 le: septembre 12, 2024, 04:15:08 pm »
Et CAN !
Bien sûr, j'ai modifié mon post.
Cordialement
Bruno