14
« le: septembre 14, 2022, 11:46:49 pm »
les différents signaux peuvent avoir de 1 à 8 feux (les ralentissement et rappels comptent pour 1 feu, car leurs 2 leds jaunes sont câblées en série)
avec les variantes, ça me fait 14 types de signaux différents, c'est peut-être suffisant
la configuration de chaque arduino se fait au moniteur (arduino ou émulation terminal), je trouve dommage de devoir configurer des CV depuis une centrale quand on dispose de l'USB !
il y a un petit menu ; on saisit une lettre pour dire qu'on veut configurer, puis on saisit :
- l'adresse de base
- le type (parmi 14) du 1er signal raccordé
- puis le type des signaux suivants, j'usqu'à ce que toutes les sorties soient occupées
au fur et à mesure des saisies s'affichent les types, l'adresse de chaque indication, le branchement de chaque led, le nombre de leds qui peuvent encore être branchées
dans mon exemple, à la fin, il restait une sortie libre, j'y ai représenté une led, qui peut servir dans le décor, par exemple, en utilisant une adresse ; on peut aussi configurer en sortie permanente, HIGH ou LOW, donc pas besoin d'adresse
quand la config est terminée, le menu propose d'appuyer sur une touche pour sauvegarder la config ... is that simple
il y a quelques sorties CV (commun voltage, en orange sur le dessin) réparties le long des borniers
au démarrage l'arduino va rechercher la config dans l'eeprom et la place dans la ram
après mûre réflexion, et lecture studieuse du réglement S1A, j'ai retenu l'odre suivant pour les indications :
Ve,Se, Vc,Av, Sc,Ac, Ca,Cv, Pe,Pc, Ra,Rc, M,Mc (Pe c'est le rapPel 30 et Pc le rappel 60, c pour clignotant)
on a donc 14 indications, soit 7 adresses pour le signal le + complexe
Et que c'est pas fini
bien entendu, l'oeilleton est géré, il s'alume et s'éteind en fonction des indications
il y a aussi les indications combinées : Pa+Av, Pa+Ac, Pc+Av, Pc+Ac, et Rc+Ac, ; elles s'obtiennent simplement en commandant à leur tour les indications compatibles, par exemple si on veut le rapPel 60 + l'Avertissement, on commande d'abord le Pc, puis on commande l'Av, et on obtient Pc+Av
Pc+Av peut aussi être obtenu en commandant d'abord Av, puis Pc
si maintenant on commande le rappell 30, Pe, on obtient Pe+Av, car les 2 indications sont compatibles, il n'y a pas lieu d'effacer l'Av
par contre, si on commande par la suite, par exemple le Ralentissement 30, Ra, le R s'affiche tandis que le A doit s'éteindre progressivement
progressivement ? of course ! alors un peu de technique
bien qu'il doit être possible de lui adapter mon code, j'ai laissé de côté le nano classique au profit du LGT8F328P, car il permet de faire + pour moins cher
j'ai notamment besoin de + de vitesse (32MHz) et d'un 2ème timer à 16 bits, le timer 3
le timer3 me sert à piloter le pwm des leds (19 ou 32 leds suivant le modèle) , selon une rampe de type exponentielle avec une précision de 10 bits sur 45 pas
le timer1 me sert à mesurer les durées des impulsions DCC, avec une précision de 1/2us ; j'utilise l'entrée capture du timer : cela me permet d'avoir une mesure exacte, même si une autre interruption est en cours au moment de la transition du signal DCC, et aussi de disposer d'un filtre qui élimine automatiquement les éventuels parasites du signal ; la suite du décodage se fait selon la bibliothèque d'Aiko Pras, que j'ai adaptée (facilement) pour avoir la fonction capture sur un AVR de type classique
en vrac :
l'ordre de câblage des feux des signaux est le suivant (ça suit peu ou prou l'ordre des indications) : V, S, A, C(ouCv), O, P, R, M ; dans l'exemple , j'ai des signaus de type S,A,V, R (ou S,A,R,V, je ne sais pas, en tous cas chez moi c'est V,S,A,R) : si on suit l'odre des feux comme indiqué ci avant, il faudrait laisser libres les sorties correspondant aux feux C(carré) et O(oeilleton) : j'ai donc créé un type (le 42), qui permet d'éviter ça et de câbler le R directement à la suite du A (on économise 4 sorties dans l'exemple)
j'ai laissé tomber le choix alim par DCC ou dédiée par cavalier : comme le montre l'illustration, si on veut alimenter par le DCC, il suffit de ponter les sorties DCC et alim sur le dernier bornier en bas (notons que chez trimarco232, le câblage des modules suivants est évident, pas besoin de faire de dérivation...)
pour avoir des feux qui s'allument alors que d'autres s'éteignent sur un même signal, on peut avoir jusqu'à 5 leds qui s'alument ou s'éteignent simultanément et progressivement (par exemple, l'indication Ca qui suit l'indication Pe+Av : on a les feux P+A+O qui s'éteignent progressivement, alors que les feux S+C s"allument pareil) ; j'ai donc 5 tableaux de 8 lignes (le nombre de feux) et 19 colonnes (le nombre d'indications), en PROGMEM, qui me donnent instantanément ce que chacune des 5 leds doit faire, sans que l'AVR n'ait à effectuer le moindre calcul ; c'est un peu fastidieux, mais comme la CPU doit aller vite c'est la bonne méthode ; en principe perso, alors que certains en sont à l'intelligence artificielle, je programme complètement à plat, c'est l'intelligence zéro, tous les cas sont listés, puis pour chaque cas j'ordonne au cpu ce qu'i doit faire
on va terminer par un petit quizz :
dans l'illustration il y a une petite erreur au niveau du câblage, laquelle ?
dans l'ordre des indications, j'ai mis Vc (vert clignotant) dès la 3ème position (2ème adresse, 1ère position), pourquoi ?