analyse des trames

Rubrique dédiée au Centre de Programmation DCC

Animateur: ClaudeF

analyse des trames

Messagepar philguen
27 Fév 2024, 07:24

Bonjour,

je reviens vers vous avec mon apprentissage du DCC sous "Centre de Programmation DCC" et Sprog3.

En utilisant le sketch exemple DCC Monitor, j'arrive maintenant à bien lire les trames.

Mais je n'arrive à rien en essayant un tas de sketch (dont celui donné en exemple avec la bibliothèque) pour faire un décodeur d'accessoire basique (par exemple allumer/éteindre une led sur l'adresse 100).

Ma question du jour .... Y a-t-il une spécificité dans l'utilisation de l'ensemble Sprog3 / C_P_DCC comme centrale DCC (genre le décalage d'adresse des z21 .... si j'ai bien compris ce que j'ai lu). Déjà, je ne comprends pas bien pourquoi il y a des lignes affichées avec 4 octets et d'autres avec 3 seulement quand on utilise l'exemple DCC Monitor .



Je suis désolé pour ces questions basiques en espérant que quelqu'un aura un peu de temps pour m'aider.

Bonne journée à tous
philguen
 
Messages: 23
Âge: 74
Enregistré le: 23 Mai 2019, 11:40
Localisation: Cuzion (36)

Re: analyse des trames

Messagepar philguen
27 Fév 2024, 17:31

Pour avancer un peu,

les trames à 4 octets concernent les décodeurs de locomotives, celles à 3 octets concernent les accessoires.

En utilisant le logiciel "espion" je vois bien que tout fonctionne normalement au niveau de la détection et de l'analyse.

Si Monsieur Ferrari passe ici, un petit regret ... lorsqu'on active une action, le décodage s'affiche puis s'éteint dans la fenêtre. Les nuls comme moi n'ont pas le temps d'analyser le contenu de la trame brute. L'utilisation serait plus simple si chaque ligne restait affichée ... soit jusqu'au prochain changement, soit définitivement avec un effet de scrolling.

Donc, maintenant que tout semble être normal, je comprends encore moins pourquoi les codes comme celui pris ici
https://www.modelisme-ferroviaire-rouen.fr/pratique-et-tutoriels/arduino-modelisme-ferroviaire/decoder-trames-dcc/

ne fonctionne pas chez moi.

Merci de votre aide précieuse.
philguen
 
Messages: 23
Âge: 74
Enregistré le: 23 Mai 2019, 11:40
Localisation: Cuzion (36)

Re: analyse des trames

Messagepar Jeanmi67
27 Fév 2024, 17:46

 
Bonjour,

philguen a écrit:...je comprends encore moins pourquoi...

Qu'est-ce qui ne fonctionne pas ? Impossible à compiler ? Le programme plante une fois compilé ? Il affiche des chose aberrantes ? ....
Difficile de diagnostiquer un problème à distance sans un minimum d'éléments...

Jean-Michel :coucou:
Jeanmi67
Membre AMFN Nice et AFAN :yin
Avatar de l’utilisateur
Jeanmi67
 
Messages: 861
Âge: 71
Enregistré le: 27 Oct 2010, 02:49
Localisation: PACA

Re: analyse des trames

Messagepar philguen
28 Fév 2024, 08:26

Bonjour Jeanmi .. je suppose Jean-Michel

Merci de votre aide

Effectivement je n'ai pas été assez explicite. Je vous prie de m'en excuser. Je suis le premier à râler quand c'est le cas.

Tout se déroule correctement au niveau de la compilation et du transfert mais, par exemple avec le sketch donné en référence, l'adresse 100 est sensée modifier l'état de 2 leds (rouge et verte). L'une doit s'allumer et l'autre s'éteindre et inversement (en bascule) ... et moi, rien ne se produit. La led rouge est bien allumée au départ (donc les connections sont bonnes) mais pas de basculement avec l'appui sur aucune des fonctions de l'adresse 100.

Je vais essayer de transporter mon ordi sur le réseau pour voir ce que ca donne avec la z21 au lieu de l'ensemble sprog3/DCC Center.

Bonne journée à tous et merci à ceux qui prennent le temps de m'aider.
philguen
 
Messages: 23
Âge: 74
Enregistré le: 23 Mai 2019, 11:40
Localisation: Cuzion (36)

Re: analyse des trames

Messagepar PaulXpress
28 Fév 2024, 08:56

Bonjour,
Pour la Z21, n'oublie pas d'enlever le commentaire sur cette ligne :
//address = address - 4; // cette ligne devra être décommentée si centrale RocoMouse et/ou z21
Jean-Paul

HO Fleischmann Profi. RocRail. ECoS (locos) et DR5000 (accessoires). EcosDetector (occupation), Uhlenbrock 63330 et Hall (passage). SwithPilot Servo (aiguillages) et Digikeijs DR4018 (éclairage et signalisation).
Avatar de l’utilisateur
PaulXpress
Bavard
 
Messages: 1016
Enregistré le: 22 Juin 2020, 16:51
Localisation: Pays de Retz

Re: analyse des trames

Messagepar philguen
28 Fév 2024, 12:43

Oui Paul, j'y pensais ... mais vous avez bien fait de le souligner.
philguen
 
Messages: 23
Âge: 74
Enregistré le: 23 Mai 2019, 11:40
Localisation: Cuzion (36)

Re: analyse des trames

Messagepar philguen
29 Fév 2024, 23:30

bonsoir tous,

Bon, j'ai testé directement sur le réseau avec la z21 et l'appli.

La seule chose de positive est que le sketch DCCDecoder (en version francisée par mes soins pour essayer de mieux comprendre) "récupère" bien les trames ... au moins mon montage électrique est bon.



On voit bien les "réactions" aux commandes sur les locos et à celles sur les accessoires via l'onglet "accessoires" de l'appli.

Par contre, le sketch "simple décodeur" ne donne rien. Rien ne s'affiche sur le port serie et aucune réaction des leds ...

Je ne suis pas ingénieur en programmation donc il y a sans aucun doute un "truc" que je n'ai pas compris ... mais une chose m'étonne au plus haut point. Pourquoi un sketch de décodage comme DCCDecoder n'a-t-il pas de fonctions explicites permettant simplement d'extraire adresses et autres parties de la trame en langage naturel? ... comme le fait le logiciel espion de Claude Ferrari.

J'ai essayé de mettre des Serial.print pour "pister" le fonctionnement mais pour l'instant sans succès.

Si quelqu'un a un montage et un sketch de décodeur qui fonctionne chez lui, avec une z21 ou sous Sprog, je suis preneur.

J'ai trouvé cet article ... https://www.locoduino.org/spip.php?article39 je vais l'étudier un peu mieux demain.

Merci de vos conseils ... en attendant, je vous souhaite une bonne nuit.
philguen
 
Messages: 23
Âge: 74
Enregistré le: 23 Mai 2019, 11:40
Localisation: Cuzion (36)

Re: analyse des trames

Messagepar Jeanmi67
01 Mar 2024, 12:35

 
Bonjour,

Je ne sais pas si cela pourra répondre à vos interrogations mais vous pouvez trouver chez Arcomora (http://www.arcomora.com) un petit programme en libre accès ayant pour nom DCCmonitor.ino.
Voici une copie écran des informations affichées par ce programme.

Au démarrage, il faut répondre par Y/N en fonction de la centrale utilisée. Ensuite, chaque commande d'un accessoire provoquera l'affichage de l'adresse en "langage naturel" de l'accessoire et l'état demandé (0 ou 1, en fonction de la position de l'aiguille par exemple). Accessoirement, il affiche le nombre de trames envoyées pour commander cet accessoire.

Dans cette copie écran, on voit que j'ai déclaré utiliser une Multimaus, l'adresse 0 est celle qui s'est affichée à la mise sous tension et j'ai ensuite manœuvré les accessoires 6, 12 et 125.

Ce programme est court (114 lignes). Il est paramétré pour utilise le terminal Putty mais les Serial.print peuvent être facilement modifiés (il suffit d'enlever les caractères de contrôle destinés à Putty). Il peut également être facilement francisable.
Il vous permettra peut-être de comprendre ses fonctionnalités.

Pour vous faciliter un éventuel essai de ce programme, je le joins à ce message. Comme il utilise la bibliothèque NmraDcc.h, celle-ci est à installer préalablement bien entendu.

Jean-Michel :coucou:

Code: Tout sélectionner
// Arcomora
/*
  DCC_Monitor tool
*/
#include <NmraDcc.h>
#define kDCC_INTERRUPT 0
#define kONE_Max 80         // for compliance with Digikeijs DR5000;
#define  DCCPIN              2
#define  DCCINT              kDCC_INTERRUPT
#define VERSION_ID  30

NmraDcc  Dcc;

int lastaddress;
int address;
bool output;
bool lastoutput;
byte offset;
int count;
unsigned long lastmillis;
bool on13;
//*************************
void setup()
{
  Serial.begin (57600);
  Serial.println("\e[2J\e[1;1HArcomora Accessory monitor (V3.0)started");
  pinMode(2,INPUT_PULLUP); //DCC input
  pinMode(13,OUTPUT);
  Serial.print(F("\nDo you use a ROCO MultiMaus or z/Z21 Y/N ? (N) "));
  if (askyn()=='Y') offset=5; else offset=1;
 
  // Setup which External Interrupt, the Pin it's associated with that we're using and disable the Pull-Up
  Dcc.pin(DCCINT, DCCPIN, 0);
 
  // Call the main DCC init function to enable the DCC Receiver
  Dcc.init(MAN_ID_DIY, VERSION_ID, FLAGS_OUTPUT_ADDRESS_MODE | FLAGS_DCC_ACCESSORY_DECODER, CV_MULTIFUNCTION_EXTENDED_ADDRESS_MSB);

  Serial.println("\nStart sending DCC accessorie addresses\n");
  digitalWrite (13,LOW);
  on13=false;
}

static uint16_t buildLinearAddress(uint16_t BoardAddr, uint8_t OutputAddr)
{
//  Serial.print('B'); Serial.print(BoardAddr); Serial.print(" O"); Serial.print(OutputAddr); Serial.print(" L"); Serial.println((BoardAddr << 3) + OutputAddr);
  return (BoardAddr << 3) + OutputAddr;
}

//
// This function is called whenever a normal DCC Turnout Packet is received
//
void notifyDccAccState(uint16_t Addr, uint16_t BoardAddr, uint8_t OutputAddr, uint8_t State)
{
    uint16_t incomingAddr = buildLinearAddress(BoardAddr, OutputAddr);

    BasicAccDecoderPacket_Handler(incomingAddr >> 1, State != 0, incomingAddr et 1);
}

void loop ()
{
   Dcc.process();
   if (millis()>lastmillis+250)
   {
      digitalWrite (13,1-digitalRead(13));
      lastmillis=millis();
   }
}
void BasicAccDecoderPacket_Handler(int address, boolean activate, byte data)
{
  // Convert NMRA packet address format to human address

    output = (data et 0x01) ? 1 : 0;
 
    if (offset==5) address=address+1;
    if (offset==1) address=address-3;
 //   address += (data et 0x06) >> 1;
   
  if ((address!=lastaddress || lastoutput!=output) etet (count>0))
  {
        Serial.print("Address ");
        Serial.print(lastaddress);
        Serial.print(" with data ");
        Serial.print(lastoutput);
        Serial.print(" was sent ");
        Serial.print(count);
        Serial.println(" times");
        count=1;
        digitalWrite (13,HIGH);
        on13=true;
        lastmillis=millis();
       Serial.print("Address: ");
       Serial.print(address);
       Serial.print("   Data: ");
       Serial.println(output);
         lastaddress=address;
        lastoutput=output;
  } else count++;
}

//---------------------------------- askyn
char askyn()
{
    flushwait();
    byte Command = Serial.read();
    if (Command=='y') Command = 'Y';
    if (Command!='Y') Command=' ';  //default no
    Serial.println ("");
    return Command;
}
void flushwait()
{
  while(Serial.available());  Serial.read();
  while (!Serial.available());   //Wait for new input
}
Jeanmi67
Membre AMFN Nice et AFAN :yin
Avatar de l’utilisateur
Jeanmi67
 
Messages: 861
Âge: 71
Enregistré le: 27 Oct 2010, 02:49
Localisation: PACA

Re: analyse des trames

Messagepar philguen
01 Mar 2024, 13:27

Merci beaucoup. Je vais le tester rapidement.

Bonne journée.
philguen
 
Messages: 23
Âge: 74
Enregistré le: 23 Mai 2019, 11:40
Localisation: Cuzion (36)

Re: analyse des trames

Messagepar philguen
04 Mar 2024, 15:55

Bonjour tous,

Par respect pour ceux qui m'ont aidé et ca pourra peut-être servir à d'autres débutants, voici enfin un retour positif.

J'ai téléchargé ce code locoduino https://www.locoduino.org/spip.php?article161

J'ai ajouté cette ligne après le décodage de l'adresse

Code: Tout sélectionner
 Serial.print(F("Adresse : "));Serial.println(address);


pour enfin arriver à comprendre ce qu'il se passait.

Avec la z21, j'avais bien le décalage de 4 adresses ... mais dans l'autre sens et donc la ligne de correction n'est pas
Code: Tout sélectionner
 address = address - 4;
mais
Code: Tout sélectionner
address = address + 4;
. En appliquant cette modification mon montage fonctionne ... mes leds rouge/verte s'éteignent/s'allument correctement à l'adresse 100 et 101.

Sous Sprog3 et Centre de programmation DCC, alors là, c'est un décalage de 297 adresses avec le code initial. Ca ne risquait pas de fonctionner !!!!!!!!



En corrigeant de cette manière
Code: Tout sélectionner
 //address = address + 4; // test avec la z21 => ok
  address = address - 297; // test avec la Sprog => OK




J'ai bien sur l'adresse 100 ma led verte qui s'allume avec F0 et rouge avec F1

Si quelqu'un, en particulier Monsieur Ferrari, peut me dire si c'est "normal" ....

Encore merci à tous

Bonne fin de journée
philguen
 
Messages: 23
Âge: 74
Enregistré le: 23 Mai 2019, 11:40
Localisation: Cuzion (36)

Suivante

Retourner vers Centre de Programmation DCC

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 30 invités