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

bobyAndCo

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 1116
  • HO avec DCC++
    • Voir le profil
Re : LaBox" : Une Centrale DCC polyvalente et abordable
« Réponse #405 le: décembre 08, 2024, 08:54:59 am »
Bonjour PAT95,

Tu n'as normalement rien à faire du point de vue matériel sur laBox pour le CAN. Si ce n'est bien sur de souder les prises.

Si tu as la dernière version logicielle, les principales commandes CAN sont présentes. J'ai réalisé un petit programme de test qui permet de voir comment on active ces différentes fonctions, roulages et fonctions. Il est ici : https://github.com/BOBILLEChristophe/Test_CommCan_LaBox

Ce programme doit être "joué" sur une autre carte que laBox sur le bus CAN. Un Uno avec un shield CAN conviendra parfaitement. Tu trouveras dans le readme du Github les régalges à faire pour les pins CAN TX et RX ainsi que l'adresse DCC de la locomotive que tu souhaites piloter. Faire bien attention également que la vitesse soit bien identique sur les deux cartes. L'idéal étant bien sur 1000 Kbs mais cela dépend de tes équipements.

Pour les commandes CAN, j'avais proposé que celles-ci respectent "rigoureusement" le protocole CAN de Marklin qui est selon moi le plus complet et le mieux documenté. Ce qui fait que j'ai par exemple piloté laBox avec une MS2 et ça fonctionne. Cela doit aussi permettre une compatibilité maximal avec les différents équipement commerciaux de la marque ou autres. Mais attention, Marklin utilise une communication à 250Kbs pour le CAN.

Tu n'hésites surtout pas à revenir vers moi si tu rencontres des difficultés.

Christophe
« Modifié: décembre 08, 2024, 08:57:07 am par bobyAndCo »

Dominique

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 3055
  • 100% Arduino et N
    • Voir le profil
Re : LaBox" : Une Centrale DCC polyvalente et abordable
« Réponse #406 le: décembre 08, 2024, 10:32:14 am »
Sur le plan matériel, tout le Can est intégré dans la 02c3 : le contrôleur Can est dans l’esp32, l’ampli mcp2562 en CMS est soudé au verso. Si vous avez mis les RJ12 et le strap pour la résistance de 120 ohm, c’est prêt à fonctionner.

Il ne reste que du logiciel à faire.
Il existe déjà dans la dernière livraison logicielle pour le protocole Marklin (voir BobyAndCo).

Mais si tu veux faire juste un test simple avec « que du Can », essayes les exemples de la bibliothèque ACAN-ESP32.
« Modifié: décembre 08, 2024, 02:00:20 pm par Dominique »
Cordialement,
Dominique

PAT95

  • Newbie
  • *
  • Messages: 25
  • PAT95
    • Voir le profil
Re : LaBox" : Une Centrale DCC polyvalente et abordable
« Réponse #407 le: décembre 08, 2024, 05:31:54 pm »
Bonsoir Christophe & Dominique
Merci pour votre rapide réponse. Je passe en revue mon matériel disponible plusieurs ESP32, de nombreux MCP2515, Unos et Megas pas de Shield Can. Pour mes essais je pense raccorder Labox actuel à un ESP32 via le MCP2515 et utiliser le programme test de Christophe après configuration des débits et quartz. C'est l'aventure pour moi mais excitent.

PAT95

  • Newbie
  • *
  • Messages: 25
  • PAT95
    • Voir le profil
Re : LaBox" : Une Centrale DCC polyvalente et abordable
« Réponse #408 le: décembre 08, 2024, 06:24:05 pm »
Je m'interroge j'ai bien trouvé le JP2 de Labox pour CANH et CANL mais après réflexion je vais avoir sans doute un petit problème avec la librairie MCP2515!!.
Bonsoir. A bientôt.

Dominique

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 3055
  • 100% Arduino et N
    • Voir le profil
Re : Re : LaBox" : Une Centrale DCC polyvalente et abordable
« Réponse #409 le: décembre 08, 2024, 07:33:21 pm »
Je m'interroge j'ai bien trouvé le JP2 de Labox pour CANH et CANL mais après réflexion je vais avoir sans doute un petit problème avec la librairie MCP2515!!.
Bonsoir. A bientôt.

Non, c’est ACAN_ESP32
Cordialement,
Dominique

Thierry

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 814
    • Voir le profil
Re : LaBox" : Une Centrale DCC polyvalente et abordable
« Réponse #410 le: décembre 08, 2024, 08:23:27 pm »
Je précise qu'il faut prendre la version 1.1.2 de cette librairie ACAN_ESP32. En tout cas pour LaBox.

bobyAndCo

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 1116
  • HO avec DCC++
    • Voir le profil
Re : Re : LaBox" : Une Centrale DCC polyvalente et abordable
« Réponse #411 le: décembre 09, 2024, 09:53:56 pm »
Merci pour votre rapide réponse. Je passe en revue mon matériel disponible plusieurs ESP32, de nombreux MCP2515, Unos et Megas pas de Shield Can. Pour mes essais je pense raccorder Labox actuel à un ESP32 via le MCP2515 et utiliser le programme test de Christophe après configuration des débits et quartz. C'est l'aventure pour moi mais excitent.

Voici un code plus facile à mettre en œuvre que celui que je t'avais précédement donné pour tester facilement les principales fonctions du CAN de Marklin sur la Box. Il est écrit pour ESP32 mais peut-être facilement adapté à d'autres cartes. Le code est commenté pour mieux comprendre. Il est testé !

Les choses auxquelles il faut faire attention sont la vitesse identique sur toutes les cartes du bus static const uint32_t DESIRED_BIT_RATE = 1000UL * 1000UL;  // 1 Mb/s et les broches CAN. Ici j'utilise GPIO_NUM_22 et GPIO_NUM_23
  settings.mRxPin = GPIO_NUM_22;  // Optional, default Tx pin is GPIO_NUM_4
  settings.mTxPin = GPIO_NUM_23;  // Optional, default Rx pin is GPIO_NUM_5

N'hesite pas si tu as besoin de précisions.

//----------------------------------------------------------------------------------------
//  Board Check
//----------------------------------------------------------------------------------------

#ifndef ARDUINO_ARCH_ESP32
#error "Select an ESP32 board"
#endif

//----------------------------------------------------------------------------------------
//   Include files
//----------------------------------------------------------------------------------------

#include <ACAN_ESP32.h>
#include <esp_chip_info.h>
#include <esp_flash.h>
#include <core_version.h>  // For ARDUINO_ESP32_RELEASE

//----------------------------------------------------------------------------------------
//  ESP32 Desired Bit Rate
//----------------------------------------------------------------------------------------

static const uint32_t DESIRED_BIT_RATE = 1000UL * 1000UL;  // 1 Mb/s


uint16_t addressLoco = 65;
byte prio = 0;
byte cmde = 0x00;
bool resp = false;
uint16_t thisNodeId = 0x18400;

void sendMsg(byte cmde, byte resp, byte data0, byte data1, byte data2, byte data3, byte data4) {
  CANMessage frame;
  frame.id |= prio << 25;  // Priorite 0, 1, 2 ou 3
  frame.id |= cmde << 17;  // commande appelée
  frame.id |= resp << 16;  // Réponse
  frame.id |= thisNodeId;  // ID expediteur
  frame.ext = true;
  frame.len = 5;
  frame.data[0] = data0;
  frame.data[1] = data1;
  frame.data[2] = data2;
  frame.data[3] = data3;
  frame.data[4] = data4;
  const bool ok = ACAN_ESP32::can.tryToSend(frame);
  if (ok) {
    //gSentFrameCount += 1;
    Serial.println("Sent: ");
    //Serial.println(gSentFrameCount);
  }
}

void sendMsg(byte cmde, byte resp, byte data0, byte data1, byte data2, byte data3, byte data4, byte data5) {
  CANMessage frame;
  frame.id |= prio << 25;  // Priorite 0, 1, 2 ou 3
  frame.id |= cmde << 17;  // commande appelée
  frame.id |= resp << 16;  // Réponse
  frame.id |= thisNodeId;  // ID expediteur
  frame.ext = true;
  frame.len = 6;
  frame.data[0] = data0;
  frame.data[1] = data1;
  frame.data[2] = data2;
  frame.data[3] = data3;
  frame.data[4] = data4;
  frame.data[5] = data5;
  const bool ok = ACAN_ESP32::can.tryToSend(frame);
  if (ok) {
    //gSentFrameCount += 1;
    Serial.println("Sent: ");
    //Serial.println(gSentFrameCount);
  }
}

//----------------------------------------------------------------------------------------
//   SETUP
//----------------------------------------------------------------------------------------

void setup() {
  //--- Start serial
  Serial.begin(115200);
  delay(100);
  //--- Display ESP32 Chip Info
  esp_chip_info_t chip_info;
  esp_chip_info(&chip_info);
  Serial.print("ESP32 Arduino Release: ");
  Serial.println(ARDUINO_ESP32_RELEASE);
  Serial.print("ESP32 Chip Revision: ");
  Serial.println(chip_info.revision);
  Serial.print("ESP32 SDK: ");
  Serial.println(ESP.getSdkVersion());
  Serial.print("ESP32 Flash: ");
  uint32_t size_flash_chip;
  esp_flash_get_size(NULL, &size_flash_chip);
  Serial.print(size_flash_chip / (1024 * 1024));
  Serial.print(" MB ");
  Serial.println(((chip_info.features & CHIP_FEATURE_EMB_FLASH) != 0) ? "(embeded)" : "(external)");
  Serial.print("APB CLOCK: ");
  Serial.print(APB_CLK_FREQ);
  Serial.println(" Hz");
  //--- Configure ESP32 CAN
  Serial.println("Configure ESP32 CAN");
  ACAN_ESP32_Settings settings(DESIRED_BIT_RATE);
  //settings.mRequestedCANMode = ACAN_ESP32_Settings::LoopBackMode ;
  settings.mRxPin = GPIO_NUM_22;  // Optional, default Tx pin is GPIO_NUM_4
  settings.mTxPin = GPIO_NUM_23;  // Optional, default Rx pin is GPIO_NUM_5
  const uint32_t errorCode = ACAN_ESP32::can.begin(settings);
  if (errorCode == 0) {
    Serial.print("Bit Rate prescaler: ");
    Serial.println(settings.mBitRatePrescaler);
    Serial.print("Time Segment 1:     ");
    Serial.println(settings.mTimeSegment1);
    Serial.print("Time Segment 2:     ");
    Serial.println(settings.mTimeSegment2);
    Serial.print("RJW:                ");
    Serial.println(settings.mRJW);
    Serial.print("Triple Sampling:    ");
    Serial.println(settings.mTripleSampling ? "yes" : "no");
    Serial.print("Actual bit rate:    ");
    Serial.print(settings.actualBitRate());
    Serial.println(" bit/s");
    Serial.print("Exact bit rate ?    ");
    Serial.println(settings.exactBitRate() ? "yes" : "no");
    Serial.print("Distance            ");
    Serial.print(settings.ppmFromDesiredBitRate());
    Serial.println(" ppm");
    Serial.print("Sample point:       ");
    Serial.print(settings.samplePointFromBitStart());
    Serial.println("%");
    Serial.println("Configuration OK!");
  } else {
    Serial.print("Configuration error 0x");
    Serial.println(errorCode, HEX);
  }
}

//----------------------------------------------------------------------------------------



//----------------------------------------------------------------------------------------
//   LOOP
//----------------------------------------------------------------------------------------

void loop() {

  byte data0, data1, data2, data3, data4, data5 = 0;
  uint16_t speed = 0;

  // LaBox power on
  cmde = 0x00;
  data4 = 1;
  sendMsg(cmde, resp, data0, data1, data2, data3, data4);
  delay(1000);

  // Allumage des feux
  cmde = 0x06;
  data2 = addressLoco >> 8;
  data3 = addressLoco & 0x00FF;
  data4 = 0;  // Feux
  data5 = 1;  // Allumé
  sendMsg(cmde, resp, data0, data1, data2, data3, data4, data5);
  delay(100);

    // Bruit moteur
  cmde = 0x06;
  data2 = addressLoco >> 8;
  data3 = addressLoco & 0x00FF;
  data4 = 1;  // Bruit moteur
  data5 = 1;  // On
  sendMsg(cmde, resp, data0, data1, data2, data3, data4, data5);
  delay(100);

  // Loco direction avant
  cmde = 0x05;
  data2 = addressLoco >> 8;
  data3 = addressLoco & 0x00FF;
  data4 = 1;  // Sens avant
  sendMsg(cmde, resp, data0, data1, data2, data3, data4);
  delay(100);

  // Loco vitesse 500 (50%)
  speed = 500;
  cmde = 0x04;
  data2 = addressLoco >> 8;
  data3 = addressLoco & 0x00FF;
  data4 = speed >> 8;
  data5 = speed & 0x00FF;
  sendMsg(cmde, resp, data0, data1, data2, data3, data4, data5);
  delay(20000);

  // Bruit klaxon
  cmde = 0x06;
  data2 = addressLoco >> 8;
  data3 = addressLoco & 0x00FF;
  data4 = 2;  // Klaxon
  data5 = 1;  // On
  sendMsg(cmde, resp, data0, data1, data2, data3, data4, data5);
  delay(2000);

   // Bruit klaxon
  cmde = 0x06;
  data2 = addressLoco >> 8;
  data3 = addressLoco & 0x00FF;
  data4 = 2;  // Klaxon
  data5 = 0;  // off
  sendMsg(cmde, resp, data0, data1, data2, data3, data4, data5);
  delay(100);

  // Loco direction arrière
  cmde = 0x05;
  data2 = addressLoco >> 8;
  data3 = addressLoco & 0x00FF;
  data4 = 2;  // Sens arrière
  sendMsg(cmde, resp, data0, data1, data2, data3, data4);
  delay(5000);

    // Loco vitesse 200 (20%)
  speed = 200;
  cmde = 0x04;
  data2 = addressLoco >> 8;
  data3 = addressLoco & 0x00FF;
  data4 = speed >> 8;
  data5 = speed & 0x00FF;
  sendMsg(cmde, resp, data0, data1, data2, data3, data4, data5);
  delay(20000);

      // Loco vitesse 0 (0%)
  speed = 0;
  cmde = 0x04;
  data2 = addressLoco >> 8;
  data3 = addressLoco & 0x00FF;
  data4 = speed >> 8;
  data5 = speed & 0x00FF;
  sendMsg(cmde, resp, data0, data1, data2, data3, data4, data5);
  delay(5000);

  // LaBox power off
  cmde = 0x00;
  data4 = 0;
  sendMsg(cmde, resp, data0, data1, data2, data3, data4);
  delay(5000);
}

//----------------------------------------------------------------------------------------


PAT95

  • Newbie
  • *
  • Messages: 25
  • PAT95
    • Voir le profil
Re : LaBox" : Une Centrale DCC polyvalente et abordable
« Réponse #412 le: décembre 13, 2024, 11:00:31 am »
Bonjour Christophe
Je suis sur IO j'ai relié par USB LaBox et une carte ESP32 chargé de ton programme test,
CANH LaBox  GPIO23 ESP Test et
CANL LaBox GPIO22 ESP Test .
 
J'ai ce genre de message dans le terminal de LaBox

<* LCD3:Ready *>
<p0>
<* LCD2:Power Off *>
<* LCD3:Free RAM=207836b *>
<* LCD3:Free RAM=207664b *>

et dans le terminal ESP Test

Actual bit rate:    1000000 bit/s
Exact bit rate ?    yes
Distance            0 ppm
Sample point:       70%
Configuration OK!
Sent:
Sent:

Là s'arrête mes compétences comment tester CANBUS?
Merci de ton aide.

PAT95

  • Newbie
  • *
  • Messages: 25
  • PAT95
    • Voir le profil
Re : LaBox" : Une Centrale DCC polyvalente et abordable
« Réponse #413 le: décembre 13, 2024, 01:30:42 pm »
Re bonjour Christophe
Quel idiot je fais mes branchements sont n'importe quoi je dois passer par un MCP 2515 ou un MCP 2562.

Donc liaisons USB ordinateur LaBox et ESP Test.

Labox ->CANH MCP 2515 ->ESP Test GPIO 23
Labox ->CANL MCP 2515 ->ESP Test GPIO 22
MCP 2515 ->ESP Test ->CS->GPIO5      SO->GPIO19     SI->GPIO23    SCK->GPIO13    INT->GPIO4
Maintenant je vais tester je croise les doigts.

PAT95

  • Newbie
  • *
  • Messages: 25
  • PAT95
    • Voir le profil
Re : LaBox" : Une Centrale DCC polyvalente et abordable
« Réponse #414 le: décembre 13, 2024, 01:43:37 pm »
Suite non
c'est n'importe quoi, je dois réfléchir.
Mille excuses.

bk4nt

  • Full Member
  • ***
  • Messages: 105
    • Voir le profil
Re : Re : LaBox" : Une Centrale DCC polyvalente et abordable
« Réponse #415 le: décembre 13, 2024, 05:20:14 pm »
je dois passer par un MCP 2515 ou un MCP 2562.

Bonjour,

Le MCP 2515 ou un MCP 2562 sont deux composants aux rôles différents.

Le MCP 2515 (contrôleur CAN) est à compléter par un 2562 (transceiver CAN). Sur la carte "MCP2515", ce sont U2 et U1.
Et il faut plus de deux fils pour raccorder l'ESP à ce genre de carte MCP2515.

L'ESP32 intègre un contrôleur CAN. Si on l'utilise, avec 2 fils, on a alors besoin que du 2562 ou équivalent, le transceiver.

Il existe aussi des cartes avec juste le transceiver.
« Modifié: décembre 13, 2024, 05:46:03 pm par bk4nt »

PAT95

  • Newbie
  • *
  • Messages: 25
  • PAT95
    • Voir le profil
Re : LaBox" : Une Centrale DCC polyvalente et abordable
« Réponse #416 le: décembre 13, 2024, 08:42:52 pm »
Bonsoir
Merci de participer à mes difficultés, en résumé je veux utiliser le programme test de Christophe entre Labox et un ESP32 tout simple de l'autre avec je crois un MCP2515 qui me semble nécessaire le tout avec le librairie ACAN_ESP32.

C'est tout simple mais je bloque sur GPIO 22 et GPIO 23 du programme test ces PINS sont raccordées à quoi?
Merci.

bobyAndCo

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 1116
  • HO avec DCC++
    • Voir le profil
Re : LaBox" : Une Centrale DCC polyvalente et abordable
« Réponse #417 le: décembre 13, 2024, 08:45:08 pm »
Pin 22 au RX du module et 23 au TX

Attention, est-ce que ces petits modiules fonctionnent à 1Mbps ? Sinon, il faut baisser à 500Kbps mais sur la box ET l'ESP32 de test
« Modifié: décembre 13, 2024, 08:47:26 pm par bobyAndCo »

Dominique

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 3055
  • 100% Arduino et N
    • Voir le profil
Re : LaBox" : Une Centrale DCC polyvalente et abordable
« Réponse #418 le: décembre 13, 2024, 09:01:25 pm »
Je précise (encore) que l’ESP32 n’a pas besoin du contrôleur Can MCP2515 : il intègre sont propre contrôleur Can. Il ne faut donc qu’un transceiver genre MCP2562 ou CJMCU230 (à éviter quand même).

Voir le sujet “Can et LaBox”
https://forum.locoduino.org/index.php?topic=1682


On avait lancé ce sujet "projet centrale "LaBox" wifi DCC++ Can" en 2020. Il a cumulé 55 pages jusqu'à ce qu'on publie les articles dont le titre est le même que ce sujet :
https://forum.locoduino.org/index.php?topic=922


Mine de rien on arrive déjà à 28 pages et je constate que pas mal de questions élucidées dans le premier sujet resurgissent inexorablement. Mon conseil est d'utiliser le plus possible la "Recherche" en haut de page. Elle marche très bien  ;D
« Modifié: décembre 13, 2024, 09:29:23 pm par Dominique »
Cordialement,
Dominique

bobyAndCo

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 1116
  • HO avec DCC++
    • Voir le profil
Re : LaBox" : Une Centrale DCC polyvalente et abordable
« Réponse #419 le: décembre 15, 2024, 07:23:42 pm »
Bonsoir à tous,

Un nouvelle Box v0.3 cette fois toujours en version minimaliste. C'est la carte à gauche



Cependant, il me manque un régulateur. Est-ce que quelqu'un en a 1 à me céder !!!



Christophe