Auteur Sujet: Problème de lecture et programmation de CVs avec DCC++  (Lu 107179 fois)

bobyAndCo

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 1116
  • HO avec DCC++
    • Voir le profil
Problème de lecture et programmation de CVs avec DCC++
« le: août 05, 2019, 07:14:01 am »
Bonjour à tous,

J’ouvre ce nouveau fil suite à un commentaire à l’article sur Une station DCC complète, polyvalente et économique avec JMRI : http://www.locoduino.org/spip.php?article253 où Jean évoque des problèmes de lecture et de programmation de CV avec JMRI, mais qui est en réalité relèvent de DCC++.

C’est un problème que j’avais soulevé il y a maintenant plus de trois ans, que Dominique aussi à rencontré, et puis comme on a toujours plus ou moins réussi à contourner le problème, c’est quelque chose que l’on a jamais approfondi et pour lequel, de fait, on n’a jamais trouvé de solution.

Si quelqu’un a la solution, nous sommes bien sûr preneur. Dans la négative, je souhaiterais que ceux qui connaissent ce problème puissent contribuer à établir un inventaire des marques de décodeurs concernés et éventuellement des modèles. Il semble bien que cela ne concerne que certains fabricants et pas d’autres.

Il est intéressant de savoir si ces problèmes sont cantonnés à la seule voie de programmation ou concernent aussi la voie principale, et de savoir également, sur la voie principale, quels sont les CVs qui peuvent être reprogrammées.

Enfin, toute proposition qui pourrait contribuer à trouver la réponse est bien sûr la bien venue.

Merci par avance.

fcot2002

  • Full Member
  • ***
  • Messages: 118
    • Voir le profil
Re : Problème de lecture et programmation de CVs avec DCC++
« Réponse #1 le: août 05, 2019, 01:34:04 pm »
Bonjour @ tous  8)

Le problème j'ai rencontré n'est pas lié à un type de décodeur, mais était identique avec plusieurs décodeurs testés.

J'étais en version DCC++ : Mega + shield Ethernet + shield Motor. Connexion Ethernet avec JMRI

La simple lecture / identification d'une machine via DecoderPro prenait......  5 minutes ! ! ! Avec aléatoirement des erreurs de lectures.

Je passe en version DCC++ : Mega + shield Motor. Connexion USB avec JMRI

Disparition totale du problème, lecture / identification <15 secondes.

Je me dis mon shied Ethernet est HS. Je monte une centrale DCC++ Mega + Ethernet + Motor complètement neuve : Lecture / identification problématique. On passe en USB sans enlever le shield Ethernet : aucun souci lecture / identification < 15 secondes.

J'ai arrêté de chercher, mais je n'aime pas ne pas comprendre.....

Voila Christophe ma contribution   ;) ;) ;)

Bonnes vacances @ ceux qui y sont, bon courage aux autres

MCPA

  • Newbie
  • *
  • Messages: 15
    • Voir le profil
Re : Problème de lecture et programmation de CVs avec DCC++
« Réponse #2 le: novembre 26, 2019, 06:56:58 pm »
Bonjour,

Je rencontre également un problème avec la lecture des Cv sur une centrale à base d'Arduino MEGA et de LMD18200 et un MAX471. J'ai des lectures aléatoires suivants les marques et modèles de décodeur. Le plus souvent cela me renvoie la valeur 255. Les locomotives ont le même comportement à savoir qu'en mettant un doigt sur la locomotive on ressent 2 légers soubresauts puis plus rien. J'ai essayé de modifier la valeur de ACK_SAMPLE_THRESHOLD, sans résultat, ainsi que la valeur CURRENT_SAMPLE_MAX , en faisant plusieurs essais de valeurs différentes à chaque fois mais sans succès.

Quelqu'un aurait-il une idée ? Pour ceux qui ont réalisé cette centrale, avez-vous réussi à faire fonctionner la lecture et l'écriture des Cv ?

PS : Je n'ai pas encore essayé l'écriture de Cv étant donné que la lecture ne fonctionne pas. Le programme pour la centrale est celui par défaut téléchargé sur GitHub


Merci d'avance pour votre aide.

Philippe

 
« Modifié: novembre 26, 2019, 06:58:43 pm par MCPA »

msport

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 2217
  • HO avec DCC++ en DIY Réseaux très éphémères
    • Voir le profil
Re : Problème de lecture et programmation de CVs avec DCC++
« Réponse #3 le: novembre 26, 2019, 07:13:19 pm »
Trois questions de plus :

interrogation via le serial monitor ?

sur rail de programmation seul ou circuit complet ? (donc avec capacités réparties)

Quelle tension pour la BaseStation ?
Cordialement

MCPA

  • Newbie
  • *
  • Messages: 15
    • Voir le profil
Re : Re : Problème de lecture et programmation de CVs avec DCC++
« Réponse #4 le: novembre 26, 2019, 07:18:50 pm »
Trois questions de plus :

interrogation via le serial monitor ? Non via une commande externe développée avec un Arduino mini.

sur rail de programmation seul ou circuit complet ? (donc avec capacités réparties)  Sur rail de programmation seul.

Quelle tension pour la BaseStation ? Environ 15,5 Volts pour l'alimentation de la Base Station

Bonjour,

Mes réponses ci-dessus à côté de vos questions.

Philippe

msport

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 2217
  • HO avec DCC++ en DIY Réseaux très éphémères
    • Voir le profil
Re : Problème de lecture et programmation de CVs avec DCC++
« Réponse #5 le: novembre 26, 2019, 08:43:49 pm »
interrogation via le serial monitor ? A tester en direct.

sur rail de programmation seul ou circuit complet ? (donc avec capacités réparties)
le circuit de Mynabay améliore ses performances avec 270pF en parallèle en entrée, pourquoi pas essayer. Ou sur un réseau étendu.
Vous pouvez également essayer le Va-et-Vient de Dominique qui m'a lu le CV1 de tout ce que je lui ai soumis sur voie principale.

Quelle tension pour la BaseStation ? A tester à 18V et à 12V.
Environ 15,5 Volts pour l'alimentation de la Base Station
Cordialement

MCPA

  • Newbie
  • *
  • Messages: 15
    • Voir le profil
Re : Problème de lecture et programmation de CVs avec DCC++
« Réponse #6 le: novembre 27, 2019, 07:31:52 am »
Bonjour,

J'ai trouvé la solution à mon problème. Lors de mes essais précédents j'avais modifié la valeur de ACK_SAMPLE_THRESHOLD en la diminuant. Mais c'était le contraire qu'il fallait faire. J'ai doublé cette valeur donc 60 au lieu de 30 et tout fonctionne correctement pour la lecture des Cv. Il me reste maintenant à confirmer les résultats avec d'autres marques de décodeur et ensuite de tester l'écriture des Cv.

Philippe

fcot2002

  • Full Member
  • ***
  • Messages: 118
    • Voir le profil
Re : Problème de lecture et programmation de CVs avec DCC++
« Réponse #7 le: novembre 27, 2019, 07:19:13 pm »
Bonsoir @ tous

Merci beaucoup MCPA !

Je teste avec ma machine MTH (décodeur inconnu MTH mais lequel...)

fcot2002

  • Full Member
  • ***
  • Messages: 118
    • Voir le profil
Re : Problème de lecture et programmation de CVs avec DCC++
« Réponse #8 le: novembre 28, 2019, 06:08:33 pm »
Bonsoir,

J'ai appliqué la méthode MCPa et ça va nettement mieux.

La lecture impeccable, il trouve même le type de décodeur MTH alors qu'avant non.

Ecriture sans problème aussi de mon coté.

Le tout via Decoder Pro de JMRI

Daniel075

  • Newbie
  • *
  • Messages: 25
    • Voir le profil
Re : Problème de lecture et programmation de CVs avec DCC++
« Réponse #9 le: décembre 05, 2019, 11:33:44 am »
Bonjour , Une question de néophyte qui cherche à s'améliorer. MCPA (Philippe d'après la signature) mentionne la modification de ACK_SAMPLE_THRESHOLD. Mais comment effectuer cette modification  lorsque pour toute relation avec le logiciel DCC++ , on ne dispose que de  la visibilité #include<DCCpp.h>. Cette partie du logiciel nous est inaccessible.
Par avance merci - Daniel

Dominique

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 3055
  • 100% Arduino et N
    • Voir le profil
Re : Problème de lecture et programmation de CVs avec DCC++
« Réponse #10 le: décembre 05, 2019, 09:39:46 pm »
Effectivement il n’est pas conseillé de modifier la bibliothèque DCCpp qui est maintenue par Thierry : seul il a le droit de la modifier.
Par contre vous pouvez utiliser le logiciel DCC++ disponible ici : https://github.com/DccPlusPlus/BaseStation et tout le code sera dans des onglets de l’IDE et vous avez accès à la totalité du code pour tester cette modification.

Si cette modif marche, nous devrons la valider à plusieurs après de nombreux test sur divers décodeurs et c’est Thierry qui fera son intégration. C’est nécessaire d’être sérieux et vous le comprenez sans doute.
Cordialement,
Dominique

Thierry

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 814
    • Voir le profil
Re : Problème de lecture et programmation de CVs avec DCC++
« Réponse #11 le: décembre 06, 2019, 05:52:34 pm »
Sur la bibliothèque DCCpp (la version 1.3.7 présente sur Github, la modif date du mois d'aout...), il y a une fonction que tout le monde peut appeler dans son setup : DCCpp::setAckThreshold(60); par exemple. Si cette valeur se révèle meilleure, effectivement je la poserai comme valeur par défaut de la bibliothèque, mais c'est déjà possible de tester avec DCCpp sans modifier la bibliothèque.
« Modifié: décembre 06, 2019, 05:56:24 pm par Thierry »

Daniel075

  • Newbie
  • *
  • Messages: 25
    • Voir le profil
Re : Problème de lecture et programmation de CVs avec DCC++
« Réponse #12 le: décembre 09, 2019, 11:20:07 am »
Merci à Thierry et à Dominique  pour vos réponses. Je reste attentif à la suite de vos essais.  - Daniel

Erik84750

  • Newbie
  • *
  • Messages: 31
    • Voir le profil
Re : Re : Problème de lecture et programmation de CVs avec DCC++
« Réponse #13 le: décembre 11, 2019, 03:06:12 pm »
Bonjour @ tous  8)

Le problème j'ai rencontré n'est pas lié à un type de décodeur, mais était identique avec plusieurs décodeurs testés.

J'étais en version DCC++ : Mega + shield Ethernet + shield Motor. Connexion Ethernet avec JMRI

La simple lecture / identification d'une machine via DecoderPro prenait......  5 minutes ! ! ! Avec aléatoirement des erreurs de lectures.

Je passe en version DCC++ : Mega + shield Motor. Connexion USB avec JMRI

Disparition totale du problème, lecture / identification <15 secondes.

Je me dis mon shied Ethernet est HS. Je monte une centrale DCC++ Mega + Ethernet + Motor complètement neuve : Lecture / identification problématique. On passe en USB sans enlever le shield Ethernet : aucun souci lecture / identification < 15 secondes.

J'ai arrêté de chercher, mais je n'aime pas ne pas comprendre.....

Voila Christophe ma contribution   ;) ;) ;)

Bonnes vacances @ ceux qui y sont, bon courage aux autres

Bonjour,

il y a des problèmes de termination des signaux ethernet sur certaines modules ethernet shield pour Arduino: https://forum.arduino.cc/index.php?topic=389325.0

Changer ces résistances n'est pas un travail ordinaire, mais faisable avec un fer à souder pour des SMD.

Salutations,
Erik

Jean-Paul

  • Newbie
  • *
  • Messages: 31
  • Z
    • Voir le profil
Re : Problème de lecture et programmation de CVs avec DCC++
« Réponse #14 le: avril 08, 2020, 06:33:29 pm »
Bonjour,

(J'ajoute ce message dans un fil existant car le titre me semble convenir parfaitement)

J'ai réalisé une simple station DCC++ basée sur un UNO + motorshield 'Deek-Robot' (clone Arduino genuine shield ) + librairie DCCPP v1.3.7
Les commandes de base moteur <t...> et fonction <f... > ont été directement OK.
J'ai par contre rencontré beaucoup de difficultés avec la lecture / écriture des CV.

Pour éviter tout effet parasite, je suis revenu à tester une situation de base : commande texte directe par le serial monitor + conection USB , décodeur ( j'ai utilisé un LAIS 860010 bon marché) hors locomotive , connecté directement à la sortie de prog (comme une voie de programmation 'propre' sans autre charge, ni résistance, ni condensateur) , moteur simulé par une résistance (avec assez de W !) + 2 leds tête bêche avec une résistance de protection.

J'ai modifié la librairie pour ajouter plus de messages de debug et en particulier regarder la valeur de 'base' pour la mesure de courant et la durée de l'impulsion de courant de la réponse du décodeur.
Je m'attends dans cette configuration à obtenir base toujours pratiquement = 0 (ou 1)

Dans le cas de readCV  c'est le cas lors de la comparison du premier bit , mais ensuite non. Si 2 bits = 1 se suivent (par exemple CV1 = 3 = 11000000) la lecture du 2eme rate car base est alors beaucoup trop grand. 
En fait si le décodeur ne répond pas par une pointe de courant , alors on execute toujour les 500 AnalogRead. Si on a une réponse positive la boucle est interrompue dans checkAcknowlegde par le test
      if (c > ACK_SAMPLE_THRESHOLD)
         return 1;
Ceci semble être apparu dans le version 1.3.7 avec la création de la fonction checkAcknowlegde . Dans le code original de Gregg E. Berman et dans les versions antérieures de la librairie cele me semble OK. Dans la nouvelle version 1.4.1, le problème est le même.
J'ai modifié le code checkAcknowlegde  pour rester dans la boucle même quand le test est positif et tout ce passe bien.

int RegisterList::checkAcknowlegde(int inMonitorPin, int inBase) volatile
{
   int c = 0; int d = 0;

   for (int j = 0; j < ACK_SAMPLE_COUNT; j++)
   {
      int val = (int)analogRead(inMonitorPin);
      c = (int)((val - inBase) * ACK_SAMPLE_SMOOTHING + c * (1.0 - ACK_SAMPLE_SMOOTHING));
          if (c > ACK_SAMPLE_THRESHOLD){
      //    remain in the loop for ACK_SAMPLE_COUNT read !!
            d = 1;
      }
   }
   return d;
}


Dans le cas de WriteCvByte j'ai un problème similaire: lors de vérification qui suit l'écriture la valeur n'est pas du tout nulle. Dans mon cas le décodeur 'répond' à l'écriture par l'implusion de courant mais le code n'essaie de le lire et passe donc trop vite à la vérification. Je ne sais pas ce que d'autres décodeurs font . Dans le standard de NMRA on trouve : "Upon completion of all write operations, the Digital Decoder may respond with an   acknowledgment" Les décodeurs sont donc libres de répondre ou pas.
En fait dans mon cas l'écriture marche toujours mais j'ai du modifier le code de WriteCvByte  (et WriteCvBit) pout avoir la vérification correcte. J'essaie de lire la réponse du décodeur et j'ignore le résultst car on fait de toute façon la vérification ensuite.

======= begin modif code
// define base for reading response
  if (DCCppConfig::CurrentMonitorProg != UNDEFINED_PIN)  base = RegisterList::buildBaseAcknowlegde(DCCppConfig::CurrentMonitorProg);
 
   bWrite[0] = 0x7C + (highByte(cv) & 0x03);   // any CV>1023 will become modulus(1024) due to bit-mask of 0x03
   bWrite[1] = lowByte(cv);
   bWrite[2] = bValue;

   loadPacket(0, resetPacket, 2, 1);
   loadPacket(0, bWrite, 3, 4);
   loadPacket(0, resetPacket, 2, 1);
   loadPacket(0, idlePacket, 2, 10);

 // try to read answer + ignore results (anyhow we verify afterwards)
  if (DCCppConfig::CurrentMonitorProg != UNDEFINED_PIN) ret = RegisterList::checkAcknowlegde(DCCppConfig::CurrentMonitorProg, base);
======== end modif code


J'espère que ceci peut aider un peu les problèmes rencontrés pour lire / écrire des CV.

Jean-Paul.