Nouvelle version 0.9.0 de LaBox.
Le but de cette nouvelle version était principalement de régler ces histoires de lecture de Cv. On verra plus tard pour l'écriture !
- La nouvelle fonctionnalité de mise en route du DCC (powerOn() ) dès la demande de lecture a provoqué le premier problème : j'ai ajouté un délai de 200ms lors de l'alumage du DCC pour permettre au décodeur dans la loco de s'initialiser correctement. C'est ce qui expliquait la perte systématique du premier bit...
- J'ai transformé la routine d'aquisition du ack pour qu'elle dépende d'un temps au delà duquel le ack n'est pas validé (100ms) et non de la durée de deux boucles imbriquées.
- J'ai ajouté un affichage en debug du résultat plus parlant je pense, y compris pour la vérification de ce qui a été lu.
- Les routines DCCpp::readCvMain() et DCCpp::readCvProg() ont été crées pour forcer trois essais de lecture à chaque Cv lue. Dès qu'une vérification valide la lecture, on passe au CV suivant.
- J'ai supprimé le lissage effectué lors de la lecture du ack pour prendre les valeurs brutes...
- analogRead() a été remplacée par une fonction plus bas niveau de l'ESP32 et plus rapide.
Avec ces premières mesures, la lecture de l'adresse de la loco fonctionne à 99% (en tout cas sur ma vieille G2000 ...) .
- J'ai ajouté une fonction DCCpp::getDecoderInfo() qui est censée renvoyer les données du constructeur grace à la lecture des Cv 8 et 7. Une matrice constante a été créée à partir des fichiers de config de JMRI pour cette liste, plus complète que celle du NMRA.
Malgré ces avancées, il subsiste des problèmes :
- Justement, la lecture du Cv8 ne fonctionne pas du tout, et je n'ai pas d'explication... Donc getDecoderInfo a le mérite d'exister, mais elle n'est pas testée !
- Les timings renvoyés par l'affichage du résultat du ack sont fantaisistes. Un ack devrait durer en 4000 et 6500 micro-secondes d'après le NMRA, hors j'en trouve à plus de 20000 et à moins de 2000 ! J'ignore si le calcul de temps est le problème ou si c'est juste ma G2000 et son décodeur qui font des fantaisies. A noter que dans DCC++Ex pour Uno/Mega, le timing est précisément mesuré et ce qui en sort (entre 2000 et 8500us chez eux) n'est pas validé !
Voili, voilou.