Bonjour,
Je reste bluffé qu'une simple résistance de 33kΩ arrive à formater à 0-5V le niveau du signal DCC pour le PIC.
On a plus l'habitude de voir un optocoupleur accompagné de plusieurs composants annexes faire ce travail.
Ou bien un pont diviseur avec une diode.
J'ai commencé à me plonger dans le code source par curiosité.
J'ai repotassé le cours sur les PICs de Bigonof d'il y a 20 ans pour me réimprégner des mnémoniques assembleur.
Le code est plutôt bien documenté dans l'ensemble (merci encore Antoine pour la traduction du japonais).
La gestion PWM de la vitesse est claire et rendue facile grâce aux propiétés du PIC12F1822 expliquées au chapitre 24 du datasheet.
Par contre le décodage des trames DCC est plus difficile à apréhender.
Le PIC travaille à une fréquence de 16 MHz. Ce qui donne 16/4 = 4 Millions de cycles d'instructions par seconde.
Soit une durée de 0.25 µs par instruction.
J'ai dessiné au propre l'organigramme des lignes de code de la détection du préambule de 14 bits consécutifs à 1 (58µs).
Et j'avoue que je n'ai pas encore tout compris... On est loin de la librairie NMRA pour Arduino.
L'auteur utilise une valeur "magique" de 0x20, soit 32 en décimal pour CNT pour le réglage du timing de réception.
Cela reste un peu mystérieux pour l'instant. En tout cas ça fonctionne plutôt bien.
Je sens qu'il va falloir passer encore pas mal d'heures de "Reverse Engineering" sur le code pour tout comprendre.