LOCODUINO
Discussions Générales => Bus DCC => Discussion démarrée par: Rob1 le juillet 16, 2025, 07:23:08 pm
-
Bonsoir à tous
Je suis en quête d'information sur le calcul du cheksum en DCC. Est-ce bien un XOR entre chaque octet
byte cheksum = b1 ^ b2 ^ b3 ^ b4 ;
Cette syntaxe est-elle correcte ?
J'ai croisé cette proposition: byte cheksum = sum/256 + sum%256
sans conviction
Merci de votre aide
-
Il faut faire un Xor (^) entre chaque octet ( Avec une boucle)
Et le résultat doit être zéro.
Si non rejeter la trame.
-
La syntaxe exacte est : (((b1 ^ b2) ^ b3 )^ b4)
Voici un extrait d'un programme que nous avons réalisé avec Marcel :
// Calcul du checksum utilisé pour vérifier l'intégrité des données.
byte_1 = (dccPacket.data & 0x000000001FE) >> 1;
byte_2 = (dccPacket.data & 0x0000003FC00) >> 10;
byte_3 = (dccPacket.data & 0x00007F80000) >> 19;
byte_4 = (dccPacket.data & 0x00FF0000000) >> 28;
byte_5 = (dccPacket.data & 0x1FE000000000) >> 37;
bool send = false;
switch (dccPacket.count) {
case 28:
crc = byte_1 ^ byte_2;
if (byte_3 == crc) {
Serial.println("send 28 bits");
send = true;
}
break;
case 37:
crc = (byte_1 ^ byte_2) ^ byte_3;
if (byte_4 == crc) {
Serial.println("send 37 bits");
send = true;
}
break;
case 46:
crc = ((byte_1 ^ byte_2) ^ byte_3) ^ byte_4;
if (byte_5 == crc) {
send = true;
Serial.println("send 46 bits");
}
break;
}
-
Merci de vos deux réponses complémentaires et cohérentes :)
En fait je suis en train de construire une centrale très très light qui serai pilotée par 3 potentiomètres linéaires avec chaque un commutateur pour choisir l'adresse P1 = adr1,2,3,4 - P2 = adr5,6,7,8 - P3 = adr9,10,11,12.
Le destinataire de ce montage est un nouveau venu dans le monde du modélisme mais totalement réfractaire à l'informatique. ::)
J'ai fini par le faire adhérer au Dcc et accepter de convertir ces anciennes loco. L'argument décisif à été le questionnement autour du cantonnement et son pilotage. :-\
Encore merci.
-
Ok !
Bon tu as une autre solution qui pourrait être de prendre une centrale comme la Box qui est déjà développée car ce n'est tout de même pas une simple affaire et de ne développer que les commandes.
Tu trouveras ici un exemple de manette pour commander la Box avec des commandes CAN :
(https://media.3rails.fr/optimized/3X/7/7/77bc2346dfda71c59faf93e7fcd3747d94162474_2_666x500.jpeg)
https://forum.3rails.fr/t/table-de-commande-pour-6-locomotives-ou-plus/28608
Bon courage
Christophe
-
Si tu aimes les potentiomètres, j'en ai mis 12 !
(http://www.locoduino.org/IMG/jpg/ac5da181-b91b-47fe-81c5-dd73a5207ed0.jpg)
https://forum.locoduino.org/index.php?topic=290.msg4005#msg4005 (https://forum.locoduino.org/index.php?topic=290.msg4005#msg4005)