Accueil

|

3D

|

DCC

|

Divers

|

ESP12-Car

|

Maquette

|

Principes

|

Téléchargement
 
DCC

>

Décodeur 6 feux ACK

>

Décodeur NMRA ACK

>

Un sniffer pour mon Ecos

>

Décodeur 8S8L

>

8S8L Matériel

>

Base d'un décodeur

>

Les annonces de gare

>

16L6SaPico

>

CV par smartphone
Recherche
le train de JC

>

6555 visites

>

Me contacter

>

Administration

-------Ici-------
Pas de cookies
Rien à accepter
Pas de pop-up
Pas de pub
 

Voici un décodeur d'accessoire sur une base de RASPBERRY PI PICO. Le décodeur possède 16 sorties amplifiées pour leds et 6 sorties pour servomoteurs. Cette configuration est facilement modifiable. L'avantage du PICO est son prix par rapport à ces possibilités (32 bits, 133 mhz..). Pour pouvoir l'utiliser dans l'IDE ARDUINO, il faut ajouter une carte. J'utilise celle de Earlephilhower.Je vous invite à faire des recherches pour cette préparation comme ici.

Pour la bibliothèque DCC, j'utilise celle d'Alex Shepherd. Je vous invite à (re)voir mon article ici.

Voici le schèma du décodeur. La partie "DCC" est obligatoire pour recevoir les ordres DCC. La partie "ACK" n'est pas obligatoire....mais vous ne pourrez pas discuter avec votre centrale DCC. L'avantage du PICO, c'est que les pins ne sont pas affectées. J'utilise les pins DCC et ACK en 28 et 27 ce qui me permet d'avoir 16 sorties sur un même coté de la puce.Rappel: le Pico ne fonctionne qu'avec du 3.3v seule la pin d'alimentation suporte le 5V. De plus, et ce n'est pas bien net ...sur le net  sad , les pins tolèrent de 4 ma à 10 ma en consommation électrique. D'ou la nécessité d'utiliser de ULN2803 qui en plus nous permet de grimper à 5v. Ne regarder pas trop les pins 22 et 26 que je garde pour une évolution futur du décodeur. ( programmation assistée à l'aide d'un Nano+Nextion)

Ce qui donne, toujours avec mes plaques d'essais à bandes. Attention les bandes sont vues en transparence.

Attention, il faut enlever des picots des connecteurs du Pico comme ceci (c'est un exemple, j'ai oublié de les photographier avant de les souder) Il y a 4 picots a enlever sur la barette du haut et aussi 4 sur la barette du bas. Tous les straps sont sur la surface "composants" mais il y a 3 straps coté "soudure"

Ce qui donne après quelques soudures. A gauche, on voit les 3 straps coté soudure. A droite, ne pas faire attention au picots dans le cercle qui sont des tests pour une évolution. On remarque que l'optocoupleur est sous le Pico qui a l'avantage de ne pas avoir de composant au dessous.

Le programme

Vous pouvez le trouver le programme ici. Vous aurez besoin de LedV2.H et de ma bibliothèque ServoPico.h. En ce qui concerne ma bibliothèque d'effets led, Je vous invite à voir à voir des explications ici. Le programme est très commenté, je vais donc éclaircir quelques points.

Pour les servos, je trouve sur internet pleins d'exemples (des copies des exemples du créateur dans github). C'est vrai qu'apparement ca marche. Mais le servo ne va visuellement que de 45 à 135° malgré une commande de 0 à 180 degré. De plus il doit y avoir conflit entre NMRA.H et SERVO.H (timer1 peut-être...). Ce conflit empêche plus de 3 déclarations de servos... après NMRA.H ne détecte plus les ordres DCC. J'ai remarqué qu'on peut facilement se passer de SERVO.H. Pour piloter un servo, il faut envoyer une impulsion de 1 à 2 ms tous les 20 ms. Il y une commande qui permet de régler le PWM: analogWriteFreq. Il suffit de le régler à 20ms pour qu'il impulse tous les 20 ms donc analogWriteFreq(50); Ensuite il faut varier la longueur de l'impulsion de 1 à 2ms, Après essai, il faut faire une digitalWrite(pin,15 à 65) et de visu le servo va bien de 0 à 180 degré. De plus NMRA.H fonctionne très bien. J'ai fait des essais avec 8 servos et ca marche. Vous verrez tout cela dans ma bibliothèque SERVOPICO.H.

Pour l'utilisation des bibliothèques:

1-Il faut dire que l'on va utiliser les biblio:

  • #include
  • #include

2-Déclarer les objets (objet LedV2 ou objet ServoPico)

  • LedV2 sortie15;
  • ServoPico sortie16;

3-Initialiser les objets  .begin(n°de la sortie) Même commande pour les leds et les servos

  • sortie0.begin(0);

4-Mettre à jour mes variables avec les CV  .get_NumAcc()    (en retour j'ai le numéro de l'accessoire)

  • NumAcc[0]=sortie0.get_NumAcc();

5- Indiquer à l'objet l'ordre DCC .set(Direction);

  •   if(Addr==NumAcc[0]) sortie0.set(Direction);

6- faire tourner la bibliothèque .loop A faire le plus souvent.... donc dans le loop du programme.

  • sortie0.loop();

IMPORTANT

Un copain qui  à fait mon décodeur, a eu difficulté. Je n'ai pas assez insisté sur la première utilisation de l'eeprom. Avant toute chose, il faut que j'explique l'eeprom du pi pico. Il y en a pas elle est émulée et cela change notre façon de l'utiliser. Les données CV sont en 3 endroit différents.

Le PI PICO a deux types de mémoire (je le dis avec mes mots de non électronicien)

la FLASH qui est comme une carte SD. Elle garde en mémoire le programme une fois le courant coupé

La SRAM qui est la mémoire vive ( la RAM) elle perd les données une fois le courant coupé.

L'émulation de l'eeprom consiste à copier les données en bas de la FLASH pour qu'elles soient mémorisées une fois éteind. Mais pour pouvoir les utiliser, il faut que les données soient en SRAM. Cela se complique, mais pas de panique c'est la librairie qui gère.

Les connées des CV sont dans 3 endroits

Dans mon programme (dans la procédure RAZ). Une fois téléchargé c'est en haut de la FLASH

En bas de la FLASH , c'est le principe de l'émulation afin de garder les données une fois éteind

En SRAM une fois allumé pour pouvoir utiliser les données.

Pour une utilisation normale on fait un EEPROM.BEGIN(256) qui permet de copier les données en SRAM. Puis on peut utiliser les données avec des EEPROM.READ(addr). Pour les modification EEPROM.WRITE(addr, data), il y a un piège.....on modifie en SRAM (donc perte des modifications une fois éteind. D'ou le EEPROM.COMMIT() qui copie les données SRAM dans le bas de la FLASH.

Je vous invite à lire cette page

Mais à la première utilisation les données sont dans le programme, pas en bas de la SRAM.

CONCLUSION

Pour faire court même si vous n'avez pas tout suivi

A chaque modification dans votre programme procédure RAZ, il faut faire 2 téléchargements

le premier avec un passage dans la procédure RAZ (décommenter RAZ() dans le setup) pour copier vos données dans l'eeprom

le deuxième sans passage dans la procédure RAZ (mettre en commentaire RAZ() dans le setup) pour ne pas faire écraser vos modifications par la central DCC ou smartphone d'une part et surtout de préserver votre FLASH.


 Et si vous voulez un boitier


Et naturellement, vous pouvez mettre à jour les CV à l'aide de votre Centrale DCC. Je m'avance peut-être, mais je peux vous dire que cela fonctionne avec une ECOS ESU et un LOKPROGRAMMER (ESU)

Voilà donc un décodeur de 22 accessoires pour une quinzaine d'euro.

Bon montage

5.6.34