Le réseau du Mesnil-sur-Jorg

Bloc utilisateur

3 visiteur(s) et 0 membre(s) en ligne.
Se connecter

Arduino : Décodeur DCC embarqué à base de ATtiny85

Tout d'abord, pour transmettre le signal DCC à l'Arduino et/ou à l'ATtiny, on utilise le montage habituel dit "de Minabay".

minabay_270pf.png

On envoie le signal sur le pin affecté à l'interruption INT0 (D2 sur les Uno, Nano, pro Mini, Mega2560 et PB2 sur les ATtiny85). J'ai essayé en utilisant INT1 sur D3 avec une Mega 2560 et ca fonctionne également.

 

attiny85_pinout.png


Au niveau du code, on utilise la bibliotèque "DCC_Decoder.h"

(https://github.com/MynaBay/DCC_Decoder/blob/master/DCC_Decoder.h).

Mon code personnel est disponible sur demande, mais on trouve sur le net un tas d'exemples de code Arduino pour faire un décodeur d'accessoires.

Passons maintenant à la partie qui m'a posé problème par manque de connaissances de ces petites bêtes que sont les ATtiny. 😢

Pour téléverser le code dans ces puces qui ne possèdent pas de prise USB, j'utilise depuis longtemps un programmateur ISP de ma conception
(voir ma page ./article.php?sid=256 ).

On considère donc que le Tiny85 est installé correctement sur le programmateur ISP.

Il faut ég
alement que les cartes ATtiny soient installées dans l'IDE. Ceci se fait en ajoutant dans  "préférences / URL de gestionnaire de cartes supplémentaires" la ligne suivante :
https://raw.githubusercontent.com/damellis/attiny/ide-1.6.x-boards-manager/package_damellis_attiny_index.json

Screen

Vous aurez ainsi accès au choix des cartes Tiny dans les outils de l'IDE

Screen
Dans le cas de la conception d'un décodeur DCC, il est obligatoire que l'horloge du Tiny85 soit à 16Mhz. Il faut donc modifier le bootloader dans ce sens et il faut le faire AVANT d'envoyer le code.


Dans l'IDE Arduino, on paramètre ainsi :
Screen

Pour flasher le bootloader du Tiny, c'est finalement très simple. Le Tiny étant installé correctement dans le programmateur ISP et convenablement paramétré dans l'IDE comme sur les copies d'écran ci-dessus (en particulier clock : Interne 16MHz), il suffit de cliquer sur "Graver la séquence d'initialisation".
Screen

Vous verrez la led bleue du programmateur "travailler" puis un message s'affichera en bas à gauche de l'IDE indiquant la bonne fin du procéssus. Bon !!!! ici j'ai un message d'erreur car rien n'est branché sur le port.😎

Sans rien toucher, il suffira alors de cliquer sur l'icone "Téléverser" de l'IDE pour "envoyer" le code.  La led bleue "travaille" un moment puis message de l'IDE et ..... c'est fini.

Vous pourrez enlever votre Tiny et l'utiliser avec les bonnes connexions. Notez qu'en changeant la position d'un inverseur, vous pourrez  tester le Tiny directement à partir de la carte programmateur ISP (voir sa notice).

Voici les vidéos des tests. Comme à l'ordinaire les tests sont effectués à l'aide d'une centrale Sprog3 (ce qui nécessite une modification du code de l'adresse du signal DCC) et du logiciel Centre de programmation DCC de Claude Ferrari.

Sur la première on se consacre au montage avec un nano. On visualise bien le test de connexions des leds pendant le setup. On vérifie également que la dernière position de la sortie est mémorisée et reprise lors d'un nouveau démarrage.

 

Voici le PCB que j'ai dessiné à cette fin. Pour ma part, j'utilise 8 pins en sorties via 1 ULN2803 et  2 pins en entrée analogique pour régler l'adresse DCC de départ de la carte. Bien sur D2 est réservé au décodage du signal DCC. Il pourrait être intéressant d'offrir le choix pour que le + commun des sorties soit en 5V ou en 12V.

Decodeur

 

Decodeur


Sur la deuxième vidéo, on se concentre sur le fonctionnement du Tiny85. On constate bien le test des connexions du setup, puis le clignotement d'une des leds que j'ai ajouté au test pour vérifier le bon transfert du code. La mise en mémoire des dernières positions fonctionne également très bien.

 


Voici le PCB que j'ai dessiné à cette fin. Pour ma part, j'utilise 3 pins en sorties et  1 pin en entrée analogique pour pouvoir régler l'adresse DCC de départ de la carte (montage indépendant à venir). Bien sur PB2 est réservé au signal DCC. 

ATTENTION, le fonctionnement de ce PCB n'est pas testé.
PCB_Decodeur_embarque1.png

 

PCB_Decodeur_embarque2.png


 Application du décodeur d'accessoire à base de Tiny85 dans un fourgon INOX TEE.

 On peut commander l'éclairage intérieur, les feux de fin de convoi et il reste une autre sortie. L'allumage de l'éclairage est relié sur la sortie 3 donc réglable en intensité.

 Il ne me reste qu'à me "brancher" sur les décodeurs de fonction qui seront plus appropriés à une utilisation embarquée.

 

 

Je me suis également amusé à faire deux petits PCB pour faciliter les tests et réglages qui viennent s'enficher sur les décodeur d'accessoires.

20250719_142737.jpg


     20250719_142829.jpg

 

                           20250719_143014.jpg


Egalement, création d'un PCB le plus fin et petit possible pour intégrer ce décodeur de fonction dans des voitures (Inox / Capitole / Forestier / etc.). 

20250719_144125.jpg

 

EDIT du 19/10/2024

J'ai modifié le code afin de pouvoir paramétrer les sortie de 3 façons différentes :

1) -  Fonctionnement par implusion : l'activation de l'adresse DCC envoie sur la sortie une impulsion de durée paramétrable, initialisée à 180 ms. On peut utiliser cette option pour commander un accessoire à bobine.

/! IL EST NECESSAIRE DE PASSER PAR UN MONTAGE A TRANSISTOR, LE COURANT DE SORTIE D'UN ARDUINO N'ETANT PAS ASSEZ FORT. ON RISQUERAIT DE DETERRIORER LA PUCE /!

2) - Fonctionnement "normal" ON/OFF.

3) - Fonctionnement en clignotement. Une led branchée sur la sortie clignotera quand la sortie est activée. Si la sortie est PWM, le clignotement se fera de manière progressive. La fréquence de clignotement est de 70 Hz (comme la norme SNCF)

 

Sur les décodeurs 8 sorties à base d'arduino, je vais essayer d'implémenter un choix pour faire fonctionner un servomoteur. Ce ne devrait pas être difficile pour ce qui concerne le code puisque j'ai déjà ma gestion d'aiguillages à servomoteur qui fonctionne également en DCC. Ce sera plus compliqué pour le PCB si on veut que chaque sortie soit paramétrable. Mais on peut très bien définir un montage avec des sorties dédiées. A voir.

Voici la version pour un décodeur d'accessoires à 8 sorties à base d'arduino.


Liens relatifs

Fidèle à NPDS depuis 2004.
Charte - Contact  
Les descriptions techniques des matériels Jouef et certaines photos proviennent du site lestrainsjouef.free.fr.
Les renseignements sur les locomotives BB 9200 et certaines photos viennent de http://letraindalain.free.fr

Sincères remerciements aux auteurs.
Tous les Logos et Marques sont déposés, les commentaires sont sous la responsabilité de ceux qui les ont publiés.