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

Thierry

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 621
    • Voir le profil
Re : Problème de lecture et programmation de CVs avec DCC++
« Réponse #30 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...

Jeje_12_34

  • Jr. Member
  • **
  • Messages: 78
  • Double ovale N
    • Voir le profil
Re : Problème de lecture et programmation de CVs avec DCC++
« Réponse #31 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)
« Modifié: août 17, 2020, 11:04:28 pm par Jeje_12_34 »
Le néophyte de service !
Adhérent AFAN

Dominique

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 2107
  • 100% Arduino et N
    • Voir le profil
Re : Problème de lecture et programmation de CVs avec DCC++
« Réponse #32 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

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.
« Modifié: août 17, 2020, 11:15:43 pm par Dominique »
Cordialement

Jeje_12_34

  • Jr. Member
  • **
  • Messages: 78
  • Double ovale N
    • Voir le profil
Re : Problème de lecture et programmation de CVs avec DCC++
« Réponse #33 le: août 17, 2020, 11:23:42 pm »
Moi, je ne touche plus a rien .  je vais sagement attendre que Dominique teste  8)
Le néophyte de service !
Adhérent AFAN

Tony04

  • Sr. Member
  • ****
  • Messages: 370
    • Voir le profil
Re : Problème de lecture et programmation de CVs avec DCC++
« Réponse #34 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

Thierry

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 621
    • Voir le profil
Re : Re : Problème de lecture et programmation de CVs avec DCC++
« Réponse #35 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.

Dominique

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 2107
  • 100% Arduino et N
    • Voir le profil
Re : Re : Problème de lecture et programmation de CVs avec DCC++
« Réponse #36 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

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.
« Modifié: août 18, 2020, 02:25:08 pm par Dominique »
Cordialement

Jeje_12_34

  • Jr. Member
  • **
  • Messages: 78
  • Double ovale N
    • Voir le profil
Re : Problème de lecture et programmation de CVs avec DCC++
« Réponse #37 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.

 :)



Le néophyte de service !
Adhérent AFAN

Dominique

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 2107
  • 100% Arduino et N
    • Voir le profil
Re : Re : Problème de lecture et programmation de CVs avec DCC++
« Réponse #38 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.
Cordialement

Chris

  • Newbie
  • *
  • Messages: 9
    • Voir le profil
Re : Problème de lecture et programmation de CVs avec DCC++
« Réponse #39 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

Jeje_12_34

  • Jr. Member
  • **
  • Messages: 78
  • Double ovale N
    • Voir le profil
Re : Problème de lecture et programmation de CVs avec DCC++
« Réponse #40 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  :(
« Modifié: août 26, 2020, 08:00:21 pm par Jeje_12_34 »
Le néophyte de service !
Adhérent AFAN

Chris

  • Newbie
  • *
  • Messages: 9
    • Voir le profil
Re : Problème de lecture et programmation de CVs avec DCC++
« Réponse #41 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


msport

  • Hero Member
  • *****
  • Messages: 1086
  • 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 #42 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.
Cordialement

Chris

  • Newbie
  • *
  • Messages: 9
    • Voir le profil
Re : Problème de lecture et programmation de CVs avec DCC++
« Réponse #43 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 !

msport

  • Hero Member
  • *****
  • Messages: 1086
  • 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 #44 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.
Cordialement