LOCODUINO

Le microcontrôleur ATtiny45

Le microcontrôleur ATtiny45 (3)

Un chenillard de travaux routiers et une enseigne d’hôtel

.
Par : Christian

DIFFICULTÉ :

Certaines applications pour un réseau de trains miniatures ne requièrent pas toute la puissance d’un module Arduino/Genuino Uno et on peut trouver dommage de monopoliser un tel module pour si peu. La solution est de les confier à un microcontrôleur moins puissant, donc moins coûteux. Cette série d’articles vous présente le microcontrôleur ATtiny45 du constructeur Atmel et ses possibilités dans le domaine du modélisme ferroviaire.

Avec les deux premiers articles (Le microcontrôleur ATtiny45 (1) et Le microcontrôleur ATtiny45 (2)), nous avons appris à mieux connaître les µC ATtiny25/45/85 et surtout appris à les programmer. Il est maintenant temps de passer à la pratique et de réaliser de petites animations qui prendront place sur votre réseau de trains miniatures. Comme premier exercice, je vous propose de réaliser un petit chenillard.

Le principe d’un chenillard

Le principe d’un chenillard a été décrit dans l’article Chenillard de DEL : le microcontrôleur allume un court instant des DEL les unes après les autres. L’effet obtenu est un flash lumineux qui semble se propager de DEL en DEL. On trouve de tels montages le long des routes lorsqu’une voie est fermée pour cause de travaux et que les automobilistes doivent se rabattre.

Le montage de l’article Chenillard de DEL faisait appel à un module Arduino/Genuino Uno dont six sorties étaient utilisées pour allumer 6 DEL. Ce montage a été adapté, ainsi que son programme, à un µC ATtiny45 qui ne dispose que de 5 sorties numériques. Voici une vidéo pour montrer ce que cela donne.

Liste des composants nécessaires pour le chenillard

Un ATtiny45 que vous aurez programmé.
Cinq DEL jaunes ou oranges.
Cinq résistances de 220 Ω.

Programme pour l’ATtiny45

Téléchargez ce programme puis téléversez-le dans une puce ATtiny en suivant la procédure décrite dans l’article Le microcontrôleur ATtiny45 (2).

// Chenillard_ATtiny.ino
/*
Ce programme réalise un chenillard.
Il fait flasher successivement cinq LED oranges reliées aux sorties 0 à 4
Puis il réalise une pause de 500 millisecondes avant de recommencer
*/

// Initialisation des lignes 0 à 4 en sortie
void setup () {
  pinMode (0, OUTPUT) ;
  pinMode (1, OUTPUT) ;
  pinMode (2, OUTPUT) ;
  pinMode (3, OUTPUT) ;
  pinMode (4, OUTPUT) ;
  // Extinction de toutes les LED au départ du programme
  for (byte i = 0 ; i <= 4 ; i++) {
    digitalWrite (i, LOW) ; // éteint la LED reliée à la broche i
  }
}

// Fonction loop
void loop () {
    // Boucle pour faire flasher les LED
  for (byte i = 0 ; i <= 4 ; i++) {
    digitalWrite (i, HIGH) ; // allume la LED sur broche i
    delay (50) ; // durée du flash 50 millisecondes
    digitalWrite (i, LOW) ; // éteint la LED
  }
    // délai de 500 millisecondes
  delay (500) ;
    // Recommence la séquence
}

Montage des composants sur une platine d’essai

La figure 1 montre comment monter les composants sur une platine d’essai.

Figure 1
Figure 1
Montage du chenillard

L’alimentation en 5 V peut se satisfaire d’un bloc de pile délivrant 4,5 V ou bien être fournie par un module Arduino/Genuino Uno en récupérant le 5 V présent sur les connecteurs. Bien entendu, cette dernière solution ne se conçoit que pour essayer le montage ; lorsque celui-ci est à poste sur le réseau, une alimentation autonome est préférable. Nous verrons en fin d’article comment réaliser ce montage en soudant les composants sur une plaque à bandes cuivrées.

Enseigne d’hôtel

Le principe d’une enseigne de commerçant à 6 lampes a été décrit dans l’article Enseigne de magasin ; le microcontrôleur allume des DEL suivant une séquence définie par le programmeur pour donner un certain rythme à l’enseigne. Au final, toutes les lampes sont allumées en même temps, ce qui permet de lire le nom du magasin, comme BISTRO ou bien GARAGE pour des exemples à 6 lettres. Le programme donné dans l’article Enseigne de magasin fait appel à des fonctions définies par le programmeur pour créer des séquences d’allumage des DEL.

Montage et programme ont donc été adaptés au µC ATtiny45 qui ne dispose que de 5 sorties numériques, ce qui est tout de même suffisant pour écrire le mot HOTEL. Voici une vidéo pour montrer ce que cela donne.

Liste des composants nécessaires pour l’enseigne HOTEL

Un ATtiny45 que vous aurez programmé.
Cinq DEL de la couleur de l’enseigne.
Cinq résistances de 220 Ω.

Programme pour l’ATtiny45

Téléchargez ce programme [1] puis téléversez-le dans une puce ATtiny en suivant la procédure décrite dans l’article Le microcontrôleur ATtiny45 (2).

/*
Ce programme réalise le clignotement d'une enseigne publicitaire.
Il fait clignoter selon un certain rythme des LED.
La première LED est reliée à la sortie led1.
nbre_led indique le nombre de LED à faire clignoter.
Il utilise des fonctions pour alterner les rythmes.
-----------------------------------------------------------------
sequence_Quatre a été corrigée (évite boucle infinie)- FEV 2020
*/

int led1 = 0 ;         // Position de la première LED
int nbre_led = 5 ;     // Nombre de LED dans l'enseigne
int nbre_chen = 3 ;    // Nombre de fois pour le chenillard
int nbre_cligno = 5 ;  // Nombre de clignotement

void setup () {
// Initialisation des lignes de LED en sortie
for (byte i = 0; i <= (nbre_led - 1) ; i++)      // Moins 1 car on part de zéro
{
  pinMode ((i + led1), OUTPUT) ;
}
  // Extinction de toutes les LED au départ du programme
  for (byte i = 0 ; i <= (nbre_led - 1) ; i++) 
  {
    digitalWrite ((i + led1), LOW) ; // éteint la LED reliée à la broche i + led1
  }
}

// Fonction loop
void loop () {
    
  // Séquence N°1 ; chenillard
  sequence_Un () ;
  delay (500) ; //delai de 500 millisecondes

  // Séquence N° 2 : cumul sur la gauche du mouvement de LED
  sequence_Deux () ;
  delay (500) ;  // délai de 500 millisecondes
  
  // Séquence N°3 : clignotement de l'ensemble 3 fois
  sequence_Trois () ;
  delay (2000) ;  // délai de 2 secondes

  // Séquence 4 : extinction successive de la gauche vers la droite
  sequence_Quatre () ;
  delay (2000) ; 
  
  // Recommence la séquence
}

void sequence_Un ()
{
  // Séquence N°1 ; chenillard
  
  for (byte n = 1 ; n <= nbre_chen ; n++)
  {
    for (byte i = 0 ; i <= (nbre_led - 1) ; i++)
    {
      digitalWrite ((i + led1), HIGH) ;    // allume la LED sur broche i
      delay (200) ;                        // durée du flash 200 millisecondes
      digitalWrite ((i + led1), LOW) ;     // éteint la LED
      delay (100) ;
    }
  }
}

void sequence_Deux ()
{
  // Séquence N° 2 : cumul sur la gauche du mouvement de LED
  
  for (byte n = 0 ; n <= (nbre_led - 1) ; n++)
  {
    for (byte i = led1 ; i <= ((led1 + nbre_led - 1)-n) ; i++)
    {
      digitalWrite (i, HIGH) ;   // allume la LED sur broche i
      delay (200) ;              // durée du flash 150 millisecondes
      digitalWrite (i, LOW) ;    // éteint la LED
    }
    digitalWrite ( ((led1 + nbre_led - 1) - n) , HIGH ) ; //dernière LED reste allumée
  }
}

void sequence_Trois ()
{
  // Séquence N°3 : clignotement de l'ensemble
  
  for (byte j = 1 ; j <= nbre_cligno ; j++) 
  {
    for (byte k = 0 ; k <= (nbre_led - 1) ; k++) 
    {
      digitalWrite ((k + led1) , LOW) ;
    }
    delay (500) ;
    for (byte l = 0 ; l <= (nbre_led - 1) ; l++) 
    {
      digitalWrite ((l + led1), HIGH) ;
    }
    delay (500) ;
  }
}

void sequence_Quatre ()
{
  // Séquence 4 : extinction successive de la gauche vers la droite

  const byte derniereLed = led1 + nbre_led - 1;
  for (byte i = led1 ; i <= derniereLed ; i++) 
  {
    digitalWrite ((derniereLed - i), LOW) ;
    delay (200);
  }
}

Montage des composants sur une platine d’essai

La figure 2 montre comment monter les composants sur une platine d’essai.

Figure 2
Figure 2
Montage de l’enseigne HOTEL

L’alimentation en 5 V peut se satisfaire d’un bloc de pile délivrant 4,5 V ou bien être fournie par un module Arduino/Genuino Uno en récupérant le 5 V présent sur les connecteurs. Bien entendu, cette dernière solution ne se conçoit que pour essayer le montage, lorsque celui-ci est à poste sur le réseau, une alimentation autonome est préférable.

Si vous êtes attentif, vous avez dû remarquer que ce montage est strictement le même que celui du chenillard ; dans un cas, on met la DEL avant la résistance, dans l’autre cas, on met la DEL après la résistance, mais cela revient au même. C’est là toute la puissance de l’électronique programmable : il suffit de changer le programme pour changer complètement le comportement d’un montage ! Nous allons voir maintenant comment reproduire les deux montages sur une plaque à bandes cuivrées, montages qui seront donc les mêmes dans les deux cas.

Montage sur une plaque cuivrée

Pour le montage sur une plaque à bandes cuivrées, nous avons modifié un petit peu l’implantation des composants, mais le schéma revient au même ; en fait, les sorties de l’ATtiny sont reliées aux résistances qui sont reliées à un bornier à 5 contacts (en rouge). Ce bornier accueille les anodes des LED. Les cathodes des LED sont reliées à un bornier à 3 contacts (en bleu) lui-même relié à la masse du montage. Comme il y a 5 LED pour un bornier à trois contacts, on doit mettre un ou deux fils dans un même contact. Cela revient à avoir placé la résistance avant la LED dans le montage dans le sens du courant sortant de l’ATtiny. La taille du circuit (65 x 58 mm) fait que l’implantation est aisée et ne pose aucun problème.

La figure 3 donne le montage sur une plaque à bandes cuivrées de 24 x 22 trous. À gauche l’implantation des composants, à droite le côté cuivre où on peut repérer les coupures (en vert) et les soudures (en gris). Attention à bien souder sur la bande sans déborder sur les bandes d’à côté, car sinon, il y aura des courts circuits ; en effet, la plaque cuivrée est prévue pour nécessiter que très peu de coupures, chaque bande horizontale étant conductrice tout du long. Les trous sont repérés en partant du trou le plus en haut et à gauche quand on regarde le côté cuivre. Les deux vues sont bien entendu en miroir.

Figure 3
Figure 3
Montage recto-verso des composants sur une plaque à bandes cuivrées

Commencez par couper les bandes cuivrées où c’est nécessaire (repéré en vert) ; le mieux est d’utiliser une petite fraise sur une miniperceuse. Si vous n’avez pas de fraise, utilisez un foret et faites l’ébauche d’un trou (inutile de traverser la plaque !). Vérifiez bien que la coupure des bandes est franche et que la continuité électrique n’a plus lieu en utilisant un multimètre en position ohm-mètre.

Percez les 4 trous de fixation puis coupez la plaque aux bonnes dimensions avec une scie à denture très fine. Bien retirer toute poussière de fraisage, de perçage ou de découpage avec une brosse ou de l’air comprimé. Les vis de fixation pour ces quatre trous ne doivent pas créer de court-circuits entre bandes cuivrées. Plusieurs procédés sont possibles : isoler les zones de la vis, intercaler une rondelle en plastique entre la vis et la plaque, utiliser de la visserie nylon ou bien encore faire les trous ailleurs pour que les vis n’interfèrent pas avec des bandes cuivrées conductrices. Choisissez ce qui vous convient le mieux.

Soudez en premier le support de CI (2 x 4) devant recevoir l’ATtiny en positionnant son encoche du bon côté pour se rappeler du sens de l’ATtiny.

Soudez les borniers (5 contacts et 3 contacts) ; on peut réaliser un bornier à 5 contacts en assemblant ensemble grâce à la petite rainure adéquate un bornier à 3 contacts et un à 2 contacts.

Soudez les deux straps (violets sur le schéma) puis les 5 résistances. Terminez en soudant deux fils pour l’alimentation de 5 V.

La figure 4 vous montre le circuit côté composant tout en laissant apparaître les bandes cuivrées comme si le support était transparent (le trou (1,1) est donc en haut à droite).

Figure 4
Figure 4

Une fois tous les composants soudés, vérifiez bien que vous n’avez pas fait d’erreur puis insérez l’ATtiny programmé dans son support en respectant bien son orientation. Montez les LED dans les borniers comme indiqué plus haut (montage à cathodes communes). Enfin, alimentez le montage avec une alimentation stabilisée de 5 V ou bien à partir de votre module Arduino puisqu’on peut récupérer +5 V et GND dessus.

Photo 1
Photo 1
Le montage terminé

Vous voilà en possession de deux animations lumineuses pour votre réseau, un chenillard de travaux routiers et une enseigne pour un hôtel. Ces deux animations n’ont pas besoin de la puissance d’un module Arduino/Genuino Uno pour fonctionner et le montage pour les deux animations revient moins cher que le prix du module Uno que vous pouvez consacrer à autre chose. Et si vous avez besoin de plus de sorties pour écrire RESTAURANT par exemple, et bien utilisez le µC de la famille ATtiny24/44/84, bien similaire à l’ATtiny45 mais disposant de plus de sorties numériques. On ne va quand même pas vous mâcher le travail à chaque fois !

[1Ce programme a été modifié depuis la publication de l’article car le programme initial ne fonctionnait qu’avec certaines version de l’IDE et pas avec d’autres

14 Messages

  • Le microcontrôleur ATtiny45 (3) 13 septembre 2017 00:37, par Lappo

    Bonjour,
    Le ATtiny45 est un bon produit qui permet de faire des projets ludiques. J’ai testé l’"Enseigne Hôtel" : impeccable, un grand Merci à Mr Christian Bézanger pour son travail et toutes ses explications ! Concernant le programme : après avoir fait la "sequence Quatre" le programme s’arrête. Je n’ai pas les moyens de visualiser le "pas-a-pas" du programme afin de pouvoir le modifier, pourriez vous m’indiquer le changement à effectuer pour que le pgm s’enchaîne continuellement. Cordialement jml

    Voir en ligne : affichage hôtel

    Répondre

    • Le microcontrôleur ATtiny45 (3) 18 février 2020 11:59, par Christian

      NOUVELLE REPONSE FAITE LE 18 FEVRIER 2020
      Bonjour Lappo,
      Je ne sais si cette réponse vous parviendra, depuis le temps, mais je l’espère tout de même puisqu’il n’est jamais trop tard pour bien faire.
      En réutilisant le programme dernièrement, j’ai obtenu la même chose que vous (une seule séquence et rien de plus) et j’ai alors compris que ce programme avait été mal conçu. Son fonctionnement dépendait de la version de l’IDE, donc en fait de la version du compilateur avr-gcc utilisé par l’IDE. Je ne comprends toujours pas pourquoi il a fonctionné avec la version d’IDE que j’ai utilisé à l’époque (comme le montre la vidéo) ; sans doute un bug sur avr-gcc !
      Bref, afin de résoudre ce problème, j’ai réécrit la fonction sequence_Quatre et cela devrait donc fonctionner pour toutes les versions d’IDE.
      Désolé de n’avoir pas compris plus tôt (deux erreurs qui se compensent c’est plutôt rare, je devrais peut-être jouer au loto !)
      Cordialement.

      Christian

      Répondre

      • Le microcontrôleur ATtiny45 (3) 20 février 2020 12:16, par Lappo

        Bonjour Christian !
        J’ai bien reçu votre message et c’est avec grand plaisir que je vais me remettre à ATtiny45 ! Merci d’avoir pensé a moi lors de la résolution de ce ce bug ! Bien Cordialement JML

        Répondre

  • Le microcontrôleur ATtiny45 (3) 13 septembre 2017 10:36, par Christian Bézanger

    Bonjour Lappo,
    Le bouclage du programme vient de la fonction loop() qui est répétée indéfiniment ; le programme devrait donc se répéter indéfiniment, comme cela est le cas pour le montage de la vidéo (je teste toujours tous les montages que je propose).
    Néanmoins, ce cycle peut être perturbé si le montage du µC est mal fait, par exemple un court circuit entre deux broches. Je ne sais pas si votre montage est réalisé sur une breadboard ou bien soudé sur une plaque veroboard. Dans le cas du veroboard, il faut bien contrôler que les vis de fixation ne font pas un court-circuit entre deux bandes (ceci est expliqué dans le texte).
    Si tout est correct pour le montage, il faut revoir la programmation de la puce. Pour cela, il faut l’extraire de son support, puis reprendre la procédure de programmation complètement en s’assurant de bien utiliser le programme donné dans l’article sans le modifier. Bien penser aussi à graver la séquence d’initialisation avant de faire cette programmation (ceci peut être refait même si cela a déjà été fait).
    En dehors de ces deux vérifications, je ne vois pas pourquoi votre montage ne fonctionne pas comme le mien. Une fois ces deux vérifications faites, tenez-moi au courant.
    Christian

    Répondre

  • Le microcontrôleur ATtiny45 (3) 14 septembre 2017 13:35, par jm lappo

    Bonjour Christian,
    Pas de solution pour l’instant à mon problème.
    J’ai fait les tests suivants :
    Utilisation de l’Atmega328 et AVRisp comme programmateur (en fait la carte Arduino) puis tests avec les Leds sur cette même carte.
    - avec >< int led1 = 0 ; >< idem pas de boucle du pgm
    Toujours avec la carte Arduino, mais en changeant la position de la led début (qui était sur RX) en >< int led1 = 2 ;><

    - et là ça fonctionne bien, le programme boucle

    Fait le test sur ATtiny85
    - avec dans le pgm >< int led1 = 2 ; ><
    le programme boucle bien mais seulement 3 leds sont utilisées
    - avec dans le pgm >< int led1 = 1 ; ><
    le programme boucle bien mais seulement 4 leds sont utilisées
    C’est Led1 = 0 qui me pose un problème avec mon ATtiny85....
    Lors du "gravage" de cette puce mes paramêtres IDE sont les suivants :
    type de carte : "ATtiny 25/45/85
    Timer 1 Clock : CPU
    B.O.D : B.O.D Disabled
    L.T.O : Disabled
    Chip : ATtiny85
    Clock : 1MHz internal (... si je mets 8 MHz le clignotement devient très lent....!?!?)

    ps : Puce Attny85 provenant de Chine

    Répondre

  • Le microcontrôleur ATtiny45 (3) 14 septembre 2017 17:11, par jm lappo

    ... petit oubli... IDE 1.6.12

    Répondre

    • Le microcontrôleur ATtiny45 (3) 15 septembre 2017 09:17, par Christian Bézanger

      La version de l’IDE est aujourd’hui la 1.8.4 et mon montage a été réalisé avec une version 1.8.x. Mais l’utilisation d’une version 1.6.12 n’est pas la cause du problème.
      Par contre, vous dites utiliser comme programmateur la carte Arduino avec AVRisp, ce qui n’est pas ce que j’ai fait. Il semble que les réglages de cette version de programmateur soient différents.
      Il faut utiliser le programme donné en exemple ArduinoISP pour transformer la carte UNO en programmateur. Ensuite réaliser le montage décrit dans l’article sur une breadboard avec 6 câbles, puis faire la programmation avec les réglages suivants :

      • Type de carte ATtiny25/45/85
      • Processeur ATtiny85 (celui que vous utilisez)
      • Clock Internal 8 Mhz
      • Programmateur "Arduino as ISP" (ceci me semble important)
        Et bien sûr, penser à graver la séquence d’initialisation.
        Cela devrait fonctionner comme cela fonctionne chez moi.
        Pour les sorties de l’ATtiny85, on peut utiliser PB0, PB1, PB2, PB3 et PB4 (5 sorties) mais il ne faut rien faire avec la broche 1 (PB5) qui sert de reset ; c’est le prix à payer pour utiliser un programmateur aussi simple que la carte Arduino UNO.
        Bien évidemment, si vous avez programmé les fusibles d’une façon différente avec AVRisp, il faudra utiliser une puce neuve.
        J’espère que ces indications vous permettront de finaliser votre projet.

      Répondre

  • Le microcontrôleur ATtiny45 (3) 14 décembre 2019 19:09, par migeon jacques

    Bonsoir ,j’ai réaliser la petite platine enseigne , programmé un attiny45,mais les quatre séquences ne recommence qu’une seule fois .
    J’ai reprogrammé un autre attiny 45 fait un contrôle du fonctionnement sur une plaque d’essai et pareil deux enchainement puis plus rien.J’ai remis l’attiny sur ma platine , mème topo .
    Si je coupe l’alimentation et que je la remet çà repart pour deux enchainements !
    Une idée ?

    Répondre

  • Le microcontrôleur ATtiny45 (3) 14 décembre 2019 21:28, par msport

    Bonsoir, il y a plusieurs extra-lucides à Locoduino, mais sans VOTRE sketch difficile d’y voir clair.
    Par ailleurs, pour du dépannage (qui n’apporte rien à l’article) passez sur le forum, vous pourrez y poster vos créations.

    Répondre

  • Le microcontrôleur ATtiny45 (3) 14 décembre 2019 21:31, par msport

    Et faites d’abord tourner votre sketch sur un Arduino (première vérification à faire)

    Répondre

  • Le microcontrôleur ATtiny45 (3) 16 décembre 2019 08:42, par MIGEON

    Je ne crois pas les extra-lucides et pourquoi modifier un programme fait pour UN ATtiny pour le vérifier sur un Arduino.
    si j’ai posé ma question ici , c’est que j’ai suivi les indications de Christian et recopier (dans un premier temps)le programme qui se trouve là .
    malgré tout je n’arrive pas a faire fonctionner correctement le montage (sur la platine ou sur une plaque d’essais )J’ai programmé trois puces et le comportement est toujours le mème(deux cycles des quatre séquences et stop) .

    Répondre

    • Le microcontrôleur ATtiny45 (3) 16 décembre 2019 18:41, par Christian

      msport a raison.
      Le programme fonctionne chez moi, donc doit fonctionner chez tout le monde, à condition d’avoir bien fait la même chose.
      Puisque visiblement vous n’arrivez pas à le faire fonctionner avec un ATtiny, l’idée de le reprendre sur un UNO n’a rien de saugrenu. L’UNO se programme plus facilement que les ATtiny, ce qui permet donc de tester un programme plus facilement aussi. Bien évidemment, il faut renommer les sorties utilisées. Grâce à cela, on peut se rendre compte qu’une parenthèse a pu être oubliée au cours de la copie sans que le compilateur ne donne un message d’erreur.
      Une fois que le programme tourne sur l’UNO, il doit aussi tourner sur l’ATtiny à la condition que la programmation de celui-ci soit faite comme il se doit, avec les bons paramètres pour l’oscillateur interne par exemple.
      C’est pourquoi il est important de bien vérifier que tout a été fait comme le dit l’article (cela va très vite de sauter une étape).
      Ne vous découragez pas ; il y a forcément une raison et vous la trouverez.
      Christian

      Répondre

  • Le microcontrôleur ATtiny45 (3) 16 décembre 2019 10:03, par msport

    Un dépannage se conduit en éliminant les causes une par une.
    Vous incriminez un programme qui manifestement fonctionne ailleurs.
    Je vous suggère de le vérifier dans un autre contexte avec ses éventuelles fautes de frappe.
    Ce programme d’ATTiny se déverse dans un Arduino en modifiant simplement int led1 = 9 ; // Position de la première LED
    et on voit entre autres la LED 13 clignoter indéfiniment.
    Donc, vous avez modifié ce programme avant de le déverser ou vos montages ne correspondent pas à la description.

    Répondre

Réagissez à « Le microcontrôleur ATtiny45 (3) »

Qui êtes-vous ?
Votre message

Pour créer des paragraphes, laissez simplement des lignes vides.

Lien hypertexte

(Si votre message se réfère à un article publié sur le Web, ou à une page fournissant plus d’informations, vous pouvez indiquer ci-après le titre de la page et son adresse.)

Rubrique « Matériel »

Les derniers articles

Les articles les plus lus