LOCODUINO

Parlons Arduino => Le logiciel DCC++ => Discussion démarrée par: bobyAndCo le août 05, 2019, 07:14:01 am

Titre: Problème de lecture et programmation de CVs avec DCC++
Posté par: bobyAndCo 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.
Titre: Re : Problème de lecture et programmation de CVs avec DCC++
Posté par: fcot2002 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
Titre: Re : Problème de lecture et programmation de CVs avec DCC++
Posté par: MCPA 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

 
Titre: Re : Problème de lecture et programmation de CVs avec DCC++
Posté par: msport 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 ?
Titre: Re : Re : Problème de lecture et programmation de CVs avec DCC++
Posté par: MCPA 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
Titre: Re : Problème de lecture et programmation de CVs avec DCC++
Posté par: msport 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
Titre: Re : Problème de lecture et programmation de CVs avec DCC++
Posté par: MCPA 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
Titre: Re : Problème de lecture et programmation de CVs avec DCC++
Posté par: fcot2002 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...)
Titre: Re : Problème de lecture et programmation de CVs avec DCC++
Posté par: fcot2002 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
Titre: Re : Problème de lecture et programmation de CVs avec DCC++
Posté par: Daniel075 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
Titre: Re : Problème de lecture et programmation de CVs avec DCC++
Posté par: Dominique 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 (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.
Titre: Re : Problème de lecture et programmation de CVs avec DCC++
Posté par: Thierry 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.
Titre: Re : Problème de lecture et programmation de CVs avec DCC++
Posté par: Daniel075 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
Titre: Re : Re : Problème de lecture et programmation de CVs avec DCC++
Posté par: Erik84750 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 (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
Titre: Re : Problème de lecture et programmation de CVs avec DCC++
Posté par: Jean-Paul 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.
Titre: Re : Problème de lecture et programmation de CVs avec DCC++
Posté par: dmskd le avril 18, 2020, 03:24:34 pm
Bonjour,

Ma centrale est un Arduino Nano avec le driver LMD18200 et j'utilise la bibliothèque DCCpp.
Comme je n'avais pas de MAX sous la main, j'ai mis la détection de courant directement sur la broche 8 du LMD.
Sans modifier ACK_SAMPLE_THRESHOLD, la lecture de CV sur voie de programmation fonctionne très bien avec un décodeur Uhlenbrok, un Trix, un Zimo et un LaisDCC.
MAIS ça ne fonctionne pas avec mes décodeurs CT Elektronik (DCX74 et 75).

Quelqu'un saurait-il ce qui peut causer cette différence de comportement ?

Cordialement,
Dominique
Titre: Re : Problème de lecture et programmation de CVs avec DCC++
Posté par: Dominique le avril 18, 2020, 03:39:37 pm
Bonjour,

Moi non plus je n’arrive pas à lire les CVs de décodeurs CT Elektronic.

J’ai contacté la boîte, expliqué le problème, mais je n’ai pas eu de réponse.

La solution est de programmer les CVs sans réponse sur la voie principale en fournissant l’adresse du décodeur) et de vérifier à l’usage s’ils sont pris en compte .

Titre: Re : Re : Problème de lecture et programmation de CVs avec DCC++
Posté par: dmskd le avril 18, 2020, 04:21:09 pm
J’ai contacté la boîte, expliqué le problème, mais je n’ai pas eu de réponse.

Je leur ai également envoyé un mail ce matin.
On verra ...
Titre: Re : Re : Problème de lecture et programmation de CVs avec DCC++
Posté par: Tony04 le mai 17, 2020, 03:16:37 pm
J'ai modifié le code checkAcknowlegde  pour rester dans la boucle même quand le test est positif et tout ce passe bien.

Bonjour Jean Paul,

je suis loin de savoir modifier une librairie mais j'ai les mêmes problèmes de programmation ou de lecture de CVs sur certains décodeurs. J'ai essayé de trouver où mettre tes modifications mais je me retrouve avec des erreurs de compilation. Peut-être que quelqu'un d'autre a eu plus de chance que moi.

Aurais-tu la gentillesse de mettre le fichier PacketRegister.cpp (je pense que c'est bien lui que tu as modifié) en pièce jointe pour que je puisse faire un essai ?

Merci par avance et bon dimanche AM.

Cordialement
Antoine
Titre: Re : Re : Re : Problème de lecture et programmation de CVs avec DCC++
Posté par: Jean-Paul le mai 17, 2020, 10:47:16 pm
J'ai modifié le code checkAcknowlegde  pour rester dans la boucle même quand le test est positif et tout ce passe bien.

Bonjour Jean Paul,

je suis loin de savoir modifier une librairie mais j'ai les mêmes problèmes de programmation ou de lecture de CVs sur certains décodeurs. J'ai essayé de trouver où mettre tes modifications mais je me retrouve avec des erreurs de compilation. Peut-être que quelqu'un d'autre a eu plus de chance que moi.

Aurais-tu la gentillesse de mettre le fichier PacketRegister.cpp (je pense que c'est bien lui que tu as modifié) en pièce jointe pour que je puisse faire un essai ?

Merci par avance et bon dimanche AM.

Cordialement
Antoine

Bonsoir Antoine,

Je mets ci-joint le fichier en question avec mes modifications expliquées dans mon message précédent.

Malheureusement depuis, j'ai aussi reçu des décodeurs D&H ( il s'agit en fait de décodeurs prémontés sur des cartes VELMO 'facile' à installer dans des locos Marklin Z électriques ou diesel, pas les vapeurs - voir une autre discussion)

Et cela ne marche pas avec ces décodeurs même après mes modifications. Après beaucoup de recherche (il ya aussi des messages sur trainworld mentionnant ce problème), j'arrive à la conclusion qu'il y a un autre problème plus grave dans la librairie en ce qui concerne l'implementation du paramètre repeat dans la fonction loadPacket et la façon d'utiliser cette valeur dans la macro DCC_SIGNAL (fichier DCCpp.cpp). J'ai une version qui marche à présent pour ma configuration (UNO, motorshield, serial, programmation sur la voie prog uniquement) , mais ce n'est plus une librairie,  ce n'est plus générique et ce n'est pas testé sur d'autres décodeurs.
Je peux partager les modifications que j'ai faites si il y a un intérêt mais cela nécessiterait encore du travail si on veut remettre cela dans la librairie.

Cordialement
Jean-Paul

Titre: Re : Problème de lecture et programmation de CVs avec DCC++
Posté par: Tony04 le mai 17, 2020, 11:03:00 pm
Un grand merci à toi Jean-Paul, je vais tester ta solution mais cela prendra un peu de temps avant la réponse car c'est surtout toutes les personnes qui ont construit ma souris/centrale sans fil qui en ont besoin, chez moi tous mes décodeurs fonctionnent.

Bon début de semaine.
Cordialement
Antoine
Titre: Re : Problème de lecture et programmation de CVs avec DCC++
Posté par: Jeje_12_34 le août 15, 2020, 01:47:33 pm
Bonjour

Ci dessous copie de mon post sur le forum du N  :

Bonjour !

Ce matin , j'ai apporté les modifications préconisées.

Désormais, JMRI reconnait les décodeurs et leur versions. Je peux créer les nouvelles locos rien qu'en les posant sur la voie de programmation  Very Happy

Je peux lire en intégralité toutes les valeurs des CV de toutes les machines en ma possession.

Je peux  piloter toutes les machines sur la voie principale. Very Happy

MAIS  :
Les valeurs des décodeurs D&H récents restent immodifiables sur la voie de programmation. Alors que les anciens le sont à volonté.

Sur la voie principale, j'arrive à changer les CV1, malgré la réception d'un message d'erreur.
Je n'ai pas tenté de modifier d'autres CV sur la voie principale, j'ai vraiment trop peur de cramer quelque chose.

Je cherche donc encore.

Dans le fil de Trainboard, il est question à un moment donné de 2 "onglets" à modifier. Mais ils ne disent pas ce qu'il faut faire dans le 2e !
Malheureusement, je n'arrive pas à m'inscrire à Trainboard pour récupérer les zip censés regrouper toutes les modifications à effectuer.
Je ne reçois pas le mail pour activer mon compte ... bizarre.

Je continue à chercher.

Si l'un de vous est membre de Trainboard, peut-il m'envoyer les fichiers zip proposés dans le 12eme message de ce sujet ?
https://www.trainboard.com/highball/index.php?threads/dcc-issues-with-d-h-10c-resolved.106064/

Par avance merci !
Titre: Re : Problème de lecture et programmation de CVs avec DCC++
Posté par: bigboy le août 15, 2020, 01:59:23 pm
Bonjour,

Voilà le zip demandé.

Bien à vous.
Gérard
Titre: Re : Problème de lecture et programmation de CVs avec DCC++
Posté par: Jeje_12_34 le août 15, 2020, 04:10:34 pm
Milles merci

Yapuka essayer :)
Titre: Re : Problème de lecture et programmation de CVs avec DCC++
Posté par: Jeje_12_34 le août 15, 2020, 05:55:34 pm
Je me réponds au lieu d'éditer mon précédent message, pour éviter que ce post ne passe inaperçu

J'ai apporté les modifications décrites dans les deux fichiers précédemment communiqués par bigboy.
Pour mieux comprendre, au lieu de remplacer les fichiers, j'ai joué aux "8 erreurs".

Car oui, il n'y a que 8 modifications à faire, en tout, pour que TOUT FONCTIONNE ! correctement.

Je suis trop content, et en prime  ça m'a bien occupé mon 15 aout coincé à la maison  :)

Rappel de ma configuration  : LA "Centrale JMRI"  décrite sur ce site (qui n'utilise pas DCCpp mais le DCC++ original), liaison Ethernet  et des décodeurs D&H récents, mais récalcitrants ! Les anciens étant bien plus malléables ... ;)

Voici les modifications apportées :
Dans l'IDE ARDUINO :

dans  l'onglet "PacketRegister.cpp"
- modifier les lignes  238 et 262 en : loadPacket(0,bRead,3,1);
- "commenter" les lignes 303et 361 pour qu'elles ne s'exécutent pas.
- modifier les lignes  318 et 376 en : loadPacket(0,bWrite,3,1);

 dans l'onglet "PacketRegister.h" :
- Ligne  18  :  remplacer 500 par 250
- Ligne 20  :   remplacer 30 par 5


Jérôme, trop trop content !
Thierry, maintenant je vais essayer de comprendre pourquoi  ma petite centrale "DCDCC" ne veut pas afficher mes CV :)
Titre: Re : Problème de lecture et programmation de CVs avec DCC++
Posté par: Tony04 le août 16, 2020, 05:51:31 pm
Bonjour à tous,

Citer
Jérôme, trop trop content !

Antoine aussi trop trop content. Cela fait des semaines que je cherche une solution pour certain décodeurs récalcitrants sur ma centrale qui elle tourne sous DCCpp.
Jean-Paul avait proposé une solution que j'ai fini par tester sans résultat.

Par curiosité j'ai téléversé dans ma centrale la version DCC++ avec les 2 PacketRegister modifiés selon le message de Jérôme et bigboy, et là, miracle, aucun soucis pour programmer ce décodeur (loco américaine).

Je m'adresse donc aux "spécialistes" pour savoir si ces modifications apportées aux 2 registres PacketRegister de la version DCC++ ne pourraient pas être apportées aux registres de la version DCCpp. J'ai beau chercher, ce n'est pas du tout le même code dans les 2 versions et je n'ai pas le niveau pour le faire.

Merci par avance à cette âme charitable qui veut bien passer quelques heures à se casser les dents.

Cordialement
Antoine
Titre: Re : Problème de lecture et programmation de CVs avec DCC++
Posté par: Jeje_12_34 le août 16, 2020, 10:14:27 pm
Bonsoir Tony

Je pense que j'ai compris comment faire, mais je ne suis pas certain.

vois la page 5 ce post et la réponse de Thierry
https://forum.locoduino.org/index.php?topic=752.60

Je pense qu'il suffit de modifier ces fichiers (avec notepad)  dans ton répertoire  arduino/libraries/DCCpp/src

Je ne peux pas tester, n'ayant aucune centrale sous DCCpp mais demain je teste de faire les modifications pour DcDccNanoController




Titre: Re : Problème de lecture et programmation de CVs avec DCC++
Posté par: Tony04 le août 16, 2020, 10:42:31 pm
Merci pour ta réponse Jérôme mais chez moi le PacketRegister.ccp est bien différent dans les versions pp et ++, et n'arrive pas à trouver les endroits à modifier.

Peut-être que d'autres membres ont eu plus de chance...

Cordialement
Antoine
Titre: Re : Problème de lecture et programmation de CVs avec DCC++
Posté par: Dominique le août 17, 2020, 08:42:25 am
Je crois que je vais faire un point sur ce fichier PacketRegister qui contient les fonctions « DCC » essentielles, que j’ai souvent triturées et testées.

Mais je viens juste de rentrer de vacances reposantes avec mes 6 petits enfants  ???. Laissez moi le temps de me replonger dans le sujet.

Titre: Re : Problème de lecture et programmation de CVs avec DCC++
Posté par: Tony04 le août 17, 2020, 10:11:34 am
Bonjour à toi Dominique et bonne rentrée,

il n'y a aucune urgence, reprends notre rythme de retraité heureux bien tranquillement. Après des "vacances" avec 6 petits loups tu as bien mérité quelques jours de repos  :)

Amicalement
Antoine
Titre: Re : Problème de lecture et programmation de CVs avec DCC++
Posté par: Thierry le août 17, 2020, 09:05:32 pm
Attention aux sources à modifier. Le DCCpp présent dans DcDccNanoController que Jérôme a modifié n'a rien à voir avec le DCCpp dont parle Antoine. Ils portent le même nom mais sont vraiment très différents. C'est encore plus vrai depuis que DCCpp (celui d'Antoine, la bibliothèque DCCpp) est capable de tourner sur un ESP32, chose que ne sait pas faire DcDccNanoController. Donc oui, il faut reporter les modifications apportées par Jérôme dans DCCpp, mais non, le code n'est pas identique, même si la base reste Basestation DCC++, le travail original de Gregg.
Je voudrais pouvoir vous aider à reporter ces modifications, mais je n'ai pas beaucoup de temps à consacrer à Locoduino ces temps ci, et le peu que j'ai je le consacre au projet LaBox...
Titre: Re : Problème de lecture et programmation de CVs avec DCC++
Posté par: Jeje_12_34 le août 17, 2020, 10:54:09 pm
Bonsoir

Bien que je ne l'utilise pas encore, j'ai déjà installé DCCpp dans mon IDE
Je dispose de la  version  : 02/04/2020 V1.4.1

J'ai donc jeté un coup d'œil et je pense avoir identifié les 8 endroits à modifier.
En fait, ce sont à chaque fois trois ou quatre lignes qui se suivent et qui sont strictement identiques  à celles que j'ai déjà modifiées avec succès dans DCC++ et dans DcDccNanoController .

Dans les extras fournis avec la bibliothèque,  on trouve les sources src  et les lignes y sont numérotées.

dans le fichier PacketRegister.cpp
la 419 et la 433 à modifier en : loadPacket(0, bRead, 3, 1) au lieu de loadPacket(0, resetPacket, 2, 1);
la  521 et la 591 à commenter pour qu'elles ne s'exécutent pas. // loadPacket(0, resetPacket, 2, 1);
la 533 et la 603 à modifier en : loadPacket(0, bWrite, 3, 1) au lieu de  loadPacket(0, resetPacket, 2, 1); 

dans le fichier  PacketRegister.h
la ligne 18  : mettre la valeur 250 au lieu de 500
la ligne 20   : Attention, la constante en "dur" 30 a été remplacée par  : DCCpp::setAckThreshold
Je présume qu'il suffit de la définir quelque part dans votre  script à 5 , ce que je ne sais pas encore faire, mais vous surement oui :)
La documentation indique que DCCpp::setAckThreshold est définie par défaut à 30, mais je n'ai pas trouvé où c'était.

Jeudi, je pourrai vous joindre les fichiers modifiés, si vous le souhaitez.
MAIS JE NE GARANTIS RIEN :) Je ne peux pas tester.

Bonne soirée .
Jérôme, qui n'aime pas lâcher un os tant qu'il ne l'a pas rongé jusqu'au bout  8)
Titre: Re : Problème de lecture et programmation de CVs avec DCC++
Posté par: Dominique le août 17, 2020, 11:14:01 pm
Attention, pour la version qui supporte l’ESP32, j’ai aussi apporté des modifications qui permettent la lecture des CVs, notamment pour la lecture de l’adresse d’un décodeur.
Voir :  https://forum.locoduino.org/index.php?topic=922.msg10754#msg10754 (https://forum.locoduino.org/index.php?topic=922.msg10754#msg10754)

Je vais regarder ces modifications de Jérôme.

Et je pourrai les tester sur la platine LaBox dès que j’aurai un moment la semaine prochaine.
Titre: Re : Problème de lecture et programmation de CVs avec DCC++
Posté par: Jeje_12_34 le août 17, 2020, 11:23:42 pm
Moi, je ne touche plus a rien .  je vais sagement attendre que Dominique teste  8)
Titre: Re : Problème de lecture et programmation de CVs avec DCC++
Posté par: Tony04 le août 18, 2020, 10:00:39 am
Bonjour à tous,

un grand bravo à toi Jérôme pour tes conseils éclairés. Je viens de faire un essai avec les 2 PacketRegister modifiés selon tes explications et la loco américaine qui refusait d'être modifiée accepte maintenant les modifications de CVs.

Citer
a ligne 20   : Attention, la constante en "dur" 30 a été remplacée par  : DCCpp::setAckThreshold
Je présume qu'il suffit de la définir quelque part dans votre  script à 5 , ce que je ne sais pas encore faire, mais vous surement oui :)
La documentation indique que DCCpp::setAckThreshold est définie par défaut à 30, mais je n'ai pas trouvé où c'était.

C'est tout simplement en tout début de PacketRegister.cpp (ligne 13 chez moi)

Maintenant reste à tester au club les autres décodeurs récalcitrants mais on avance, on avance, et c'est la première fois depuis des mois ce qui laisse un peu d'espoir.

Encore merci à toi et aux autres contributeurs et bonne journée à tous.

Cordialement
Antoine
Titre: Re : Re : Problème de lecture et programmation de CVs avec DCC++
Posté par: Thierry le août 18, 2020, 10:04:50 am
Citer
a ligne 20   : Attention, la constante en "dur" 30 a été remplacée par  : DCCpp::setAckThreshold
Je présume qu'il suffit de la définir quelque part dans votre  script à 5 , ce que je ne sais pas encore faire, mais vous surement oui :)
La documentation indique que DCCpp::setAckThreshold est définie par défaut à 30, mais je n'ai pas trouvé où c'était.

Pour changer pour tout le monde, il faut modifier DCCpp.cpp, fonction DCCpp::begin(), ligne 190.
Titre: Re : Re : Problème de lecture et programmation de CVs avec DCC++
Posté par: Dominique le août 18, 2020, 02:14:59 pm
Attention, pour la version qui supporte l’ESP32, j’ai aussi apporté des modifications qui permettent la lecture des CVs, notamment pour la lecture de l’adresse d’un décodeur.
Voir :  https://forum.locoduino.org/index.php?topic=922.msg10754#msg10754 (https://forum.locoduino.org/index.php?topic=922.msg10754#msg10754)

Je vais regarder ces modifications de Jérôme.

Et je pourrai les tester sur la platine LaBox dès que j’aurai un moment la semaine prochaine.

J'ai eu un moment de répits (les enfants dorment) et regardé la modification de Thomas Peterreins du 28.5.2018 (sur trainboard) :
Il me semble que j'avais testé ce remplacement de loadPacket(0, resetPacket, 2, 1); par loadPacket(0,bRead,3,1); sur la version LaBox, donc pour l'ESP32 et je n'avais pas constaté d'amélioration (impossible de lire aucun CV, quelque soit le décodeur, la lecture du courant de l'impulsion de réponse ne tombant pas au moment où elle a lieu, mais c'est spécifique l'ESP32 et j'ai mis en place une ruse pour l'attraper à tous les coups).
Par acquis de conscience, je vais regarder cette modification à nouveau, bien que je n'ai pas de décodeur D&H.

En ce qui concerne la constante ACK_SAMPLE_COUNT, j'ai conservé la valeur de 500, après plusieurs tests avec une valeur inférieure et sans succès, probablement parce que l'ESP32 est bien plus rapide.
Titre: Re : Problème de lecture et programmation de CVs avec DCC++
Posté par: Jeje_12_34 le août 18, 2020, 06:16:09 pm
Bonjour Dominique

Les seules modifications de Thomas ne m'avaient pas suffit pour résoudre mon problème.

C'est bien l'ensemble des 8 modifications proposées dans les fichiers  (fournis me semble t il  par le service technique de D&H, avec l'aide de Thomas) qui m'ont aidé.

Je n'ai pas trop compris pourquoi il désactivait deux lignes en les commentant, par exemple.

 :)



Titre: Re : Re : Problème de lecture et programmation de CVs avec DCC++
Posté par: Dominique le août 18, 2020, 06:40:31 pm
C'est bien l'ensemble des 8 modifications proposées dans les fichiers  (fournis me semble t il  par le service technique de D&H, avec l'aide de Thomas) qui m'ont aidé.
Je n'ai pas trop compris pourquoi il désactivait deux lignes en les commentant, par exemple.
 :)

Ce qui est vrai pour l'ATMega328P ou 2560 n'est pas forcément vrai pour l'ESP32 pour lequel Thierry nous prépare une version spécifique, bien plus riche que l'original DCC++ de Gregg.
Tant mieux si ça apporte l'amélioration que tu souhaitais.
Mais je te remercie pour tous ces détails que je vais analyser et qui sont peut-etre utiles aussi pour l'ESP32.
Titre: Re : Problème de lecture et programmation de CVs avec DCC++
Posté par: Chris le août 26, 2020, 07:33:11 pm
Bonjour Jeje,
D'abord, merci pour ta proposition d'aide.
j'ai effectué les modifs que tu préconises, mais rien à faire ; pas de réponse du décodeur. :(
J'ai imprimé les retours ( variable "c") je n'ai que des 0, 1, 2 ou 3
y a t-'il autre chose que j'ai raté ?
Christian
Titre: Re : Problème de lecture et programmation de CVs avec DCC++
Posté par: Jeje_12_34 le août 26, 2020, 07:57:35 pm
Bonjour Chris

Hélas, si la rustine ne fonctionne pas alors qu'elle est correctement installée, je ne peux t'aider, cela dépasse mes compétences  :'(

Tu as bien modifié les 8 lignes concernées et tout reversé après la compilation?

Si oui ... je ne sais pas. Ma proposition d'aide était juste pour aider à faire les modifications  :(
Titre: Re : Problème de lecture et programmation de CVs avec DCC++
Posté par: Chris le août 28, 2020, 04:23:17 pm
Bonjour à tous,
Voici les résultats actuels de mes investigations :
Avec les modifications proposées par Jéjé ( Merci à toi), que j'ai légèrement modifiées de la façon suivante :
 - j'ai gardé les resetpacket et passé le bRead précédent à 6 au lieu de 5 (ce qui revient au même que de rajouter une ligne)
 - les init suivants dans le ".h" :
         #define  ACK_BASE_COUNT            100     
         #define  ACK_SAMPLE_COUNT          500       
         #define  ACK_SAMPLE_SMOOTHING      0.2     
         #define  ACK_SAMPLE_THRESHOLD       5     

Je peux lire et écrire des CVs dans mon vieux décodeur Arnold   ;D  depuis la console arduino avec de commandes R et W. Ça fonctionne aussi en programmation avec JMRI  :D, mais quand je passe sur le régulateur sur voie principale, rien ne se passe :'(
j'ai tracé le retour de courant et il tourne autour de 11 pour un seuil à 5.
Quant à mon décodeur LockPilot Micro V4.0 toujours pas de réponse.
Quelqu'un utilise t-il ces décodeurs ?
Par ailleurs je précise que je suis en N ; cela explique-t-il le niveau de courant ? est-ce que DCC++ est bien calibré pour du HO et du N ?

Pour ceux que ça intéresse,  le  ACK_SAMPLE_SMOOTHING est un paramètre de filtrage (filtre passe-bas de la forme Sn = a*En + (1-a)*Sn-1).
Le coefficient de 0,2 est un coefficient de filtrage important pour éliminer vraisemblablement les pics fr courant parasites.
Si vous avez des suggestions ou des expériences pour m'aider à m'en sortir...
Cordialement
Christian

Titre: Re : Problème de lecture et programmation de CVs avec DCC++
Posté par: msport le août 30, 2020, 02:48:15 pm
Une remarque : j'ai moins de difficultés sur la voie de programmation. Un grand circuit crée des capacités parasites qui peuvent influer sur la forme du signal DCC. Phénomène connu des décodeurs DIY qui ont besoin pour certains d'un petite capacité (100-270pF pour Mynabay) pour fonctionner.
Par ailleurs, il vaut mieux faire un reset des récalcitrants avant tout ( valeur à chercher dans la notice pour le CV 8 ).
Certains décodeurs ont des CV de verrouillage (LAISDCC en 15 et 16) qu'il faut déverrouiller avant le reset.
Si la loco frémit mais aucune valeur n'est lue, c'est une piste à explorer.
Titre: Re : Problème de lecture et programmation de CVs avec DCC++
Posté par: Chris le septembre 02, 2020, 12:09:12 pm
Bonjour msport,
Je pense que le problème n'est pas là.
Ma voie principale est pour le moment un tronçon de 1m de voie relié directement en sortie du booster et 20cm pour la voie secondaire.
Avec la Led branchée en sortie du booster j'ai une tension de base renvoyée (sur A0) de 143. sans la Led, j'ai bien 0 (pas de courant consommé).
Mais quand j"envoie un ordre vers le décodeur, la tension retournée (qui en principe correspond à la consommation de courant de la loco) est de 2 ou 3 par rapport au courant de base, soit quasiment rien....
Est-ce lié au N ???
Et pourtant ça fonctionne avec ma centrale Arnold d'il y a 30 ans !
Titre: Re : Problème de lecture et programmation de CVs avec DCC++
Posté par: msport le septembre 02, 2020, 03:11:55 pm
Comme il s'agit d'impulsions, on ne voit pas grand chose au multimètre. Il faudrait investir dans un mini oscilloscope genre https://fr.aliexpress.com/item/32826369650.html?spm=a2g0o.productlist.0.0.466545a25xA8F4&algo_pvid=48acc1ac-a1f2-448f-be18-a7de75e54c98&algo_expid=48acc1ac-a1f2-448f-be18-a7de75e54c98-3&btsid=0b0a187915990516330815210e1622&ws_ab_test=searchweb0_0,searchweb201602_,searchweb201603_

Curieux cette tension sur A0 : 143/1023*5V = 0,7V soit 700mA ???

Je ferais un test avec un montage volant avec un décodeur et un moteur de récupération (type 5V de CD), donc sans rails. La consommation sera plus importante.
Titre: Re : Problème de lecture et programmation de CVs avec DCC++
Posté par: Chris le septembre 04, 2020, 11:36:23 am
Un autre essai avec une carte Pololu MC33926 : Ça marche en programmation et sur voie principale :D
mais seulement avec la console de l'IDE.
Avec JMRI, ça fonctionne sur voie principale mais pas en programmation... Mais je ne sais pas ce que fait JMRI.
En tout cas, sur 4 MAX471 achetés, 3 sont défectueux. Ces circuits ne valent pas grand chose (au propre comme au figuré) et au moins la pololu a sa protection intégrée.
Quant à la L9110S je finis par la mettre en doute aussi...
Ces cartes qui viennent de Chine me semblent n'avoir aucune fiabilité, et si elle ne valent pas cher ça fini quand même par  avoir un certain coût.
Finalement, la fiabilité a un prix.
Donc je vais tester ce soir avec un ami qui a une config qui fonctionne en HO avec JMRI si il peut programmer ma loco. Je vous donnerai le résultat.
Cordialement
Titre: Re : Re : Problème de lecture et programmation de CVs avec DCC++
Posté par: Dominique le septembre 04, 2020, 12:46:24 pm
Bonjour à tous,
Voici les résultats actuels de mes investigations :
Avec les modifications proposées par Jéjé ( Merci à toi), que j'ai légèrement modifiées de la façon suivante :
 - j'ai gardé les resetpacket et passé le bRead précédent à 6 au lieu de 5 (ce qui revient au même que de rajouter une ligne)
 - les init suivants dans le ".h" :
         #define  ACK_BASE_COUNT            100     
         #define  ACK_SAMPLE_COUNT          500       
         #define  ACK_SAMPLE_SMOOTHING      0.2     
         #define  ACK_SAMPLE_THRESHOLD       5     

Je peux lire et écrire des CVs dans mon vieux décodeur Arnold   ;D  depuis la console arduino avec de commandes R et W. Ça fonctionne aussi en programmation avec JMRI  :D, mais quand je passe sur le régulateur sur voie principale, rien ne se passe :'(
j'ai tracé le retour de courant et il tourne autour de 11 pour un seuil à 5.
Quant à mon décodeur LockPilot Micro V4.0 toujours pas de réponse.
Quelqu'un utilise t-il ces décodeurs ?
Par ailleurs je précise que je suis en N ;
Christian

Bonjour Christian,
Tes tests sont intéressants et j’avoue être perplexe quand aux modifications des commandes bRead-Reset (avec ou sans). Pour les seuils, sûrement ça joue et le circuit de mesure de courant est très important (il y a des alternatives au Max471, voir  http://forum.locoduino.org/index.php?topic=1038.msg10994#msg10994 (http://forum.locoduino.org/index.php?topic=1038.msg10994#msg10994))

J’ai l’hypothèse qu’il faut de toute façon lire l’impulsion de courant au bon moment après la réception par le décodeur de la commande bRead, et il y a sûrement des dispersions de caractéristiques des décodeurs. Dans le cas de l’Esp32, la méthode avec un AVR ne marchait pas du tout. Ajouter un délai ne garantit rien. J’ai donc intégré une vingtaine de fenêtres de mesures (au lieu d’une seule) et je regarde s’il y a une impulsion dans une de ces fenêtres (ou aucune si pas d’impulsion). Sur l’ESP32 ça a l’air de marcher ( http://forum.locoduino.org/index.php?topic=922.msg10754#msg10754 (http://forum.locoduino.org/index.php?topic=922.msg10754#msg10754))

J’essayerai d’appliquer cette méthode sur l’AVR. mais à mon retour de vacances.

Par ailleurs il ne faut pas oublier que les ordres de programmation sur voie principale sont SANS réponse du décodeur (sauf la recherche d’adresse dans DCCpp). Beaucoup de modélistes programment l’adresse ainsi et font juste le test pour voir si ça marche.

Enfin je peux dire que ma petite MS2 marklin arrive parfois à lire les CVS quand DCCpp échoue, mais ça prend un temps fou donc elle essaye plusieurs méthodes (mais lesquelles, mystère).

Conclusion : on a encore du pain sur la planche (breadboard📎).

Dominique
Titre: Re : Problème de lecture et programmation de CVs avec DCC++
Posté par: dbdu78 le novembre 05, 2020, 03:06:40 pm
Hello messieurs

j'ai aussi des problèmes de programmation des CV.
J'ai un Arduino Mega, DCC++ original, LMD18200 sur les deux voies.
J'ai bien modifier les deux PacketRegister mais mes décodeurs Lenz ne veulent rien savoir.

En tout cas félicitation pour le travail accomplis ! je comprend a peine 5% de vos postes  ;D
Titre: Re : Problème de lecture et programmation de CVs avec DCC++
Posté par: msport le novembre 05, 2020, 05:33:12 pm
Bonjour et bienvenue.

Hors programmation des CV, tout fonctionne ? Qui produit les codes DCC++ ?
Titre: Re : Re : Problème de lecture et programmation de CVs avec DCC++
Posté par: Dominique le novembre 06, 2020, 09:08:18 am
J'ai bien modifier les deux PacketRegister mais mes décodeurs Lenz ne veulent rien savoir.

En tout cas félicitation pour le travail accomplis ! je comprend a peine 5% de vos postes  ;D

Modifier une partie sensible d’une bibliothèque sans la comprendre à 100% vous expose à de nombreux problèmes. C’est ce qu’il ne faut jamais faire mais plutôt chercher la réponse dans les nombreux sujets traités ou expliquer en détail le problème constaté avec tout l’environnement qui l’a révélé. Bon courage.
Titre: Re : Problème de lecture et programmation de CVs avec DCC++
Posté par: dbdu78 le novembre 09, 2020, 09:33:17 am
@msport. Oui tout fonctionne hormis la programmation par Jmri. Je referai des essais avec des nouveaux MAX471 car ceux que j'ai ont une résistance interne beaucoup trop importante mon problème vient potentiellement de la.

Merci
Titre: Re : Problème de lecture et programmation de CVs avec DCC++
Posté par: msport le novembre 09, 2020, 10:08:09 am
Les MAX471 qui restent en vente semblent souvent défectueux : on a proposé un circuit de remplacement à MAX472 :

https://forum.locoduino.org/index.php?topic=1038.msg11032#msg11032