Fabrication d’un programmateur pour microcontrôleurs ATtiny

. Par : Christian, Dominique, Jean-Luc. URL : https://www.locoduino.org/spip.php?article332

Cet article vous propose de fabriquer un petit programmateur à partir d’une carte Uno et d’un shield dont la construction est décrite ici. Si vous consacrez la carte Uno uniquement à ce shield, vous disposerez d’un programmateur rapidement opérationnel qui vous évitera d’avoir à sortir la breadboard et les câbles Dupont.

Principe de fonctionnement du programmateur

Le principe de fonctionnement a été décrit dans l’article Le microcontrôleur ATtiny45 (2) : il utilise le bus SPI d’une carte Uno qui contient le programme ArduinoISP donné dans les exemples. La première chose à faire est donc de téléverser ce programme dans votre carte Uno. Il est également nécessaire d’importer dans votre IDE les fichiers nécessaires aux puces ATtiny. L’ensemble de ces procédures a été décrit en détail dans l’article cité et nous n’allons pas revenir dessus. En fait, le shield dont nous décrivons ici la construction, ne fait que remplacer la breadboard qu’on peut voir sur la figure 1 de l’article, avec en plus la présence de trois LED comme préconisé dans le programme ArduinoISP.

// … (extrait des commentaires de tête du programme ArduinoISP)
//
// Put an LED (with resistor) on the following pins:
// 9: Heartbeat   - shows the programmer is running
// 8: Error       - Lights up if something goes wrong (use red if that makes sense)
// 7: Programming - In communication with the slave
//

Possibilités du programmateur

Le programmateur a été conçu pour programmer indifféremment les microcontrôleurs ATtiny de la série 24/44/84 ou de la série 25/45/85, ainsi que les microcontrôleurs ATtiny13 et ATtiny2313, et également les microcontrôleurs ATmega168 ou ATmega328. L’alimentation des puces et les signaux SPI ne se faisant pas sur les mêmes broches d’une série à l’autre, le shield comprend trois supports ZIF (Zero Insertion Force) permettant de positionner le microcontrôleur à programmer.

La figure 1 montre le shield de programmation installé sur sa carte Uno. On voit les trois supports ZIF : le plus proche convient pour les ATtiny24/44/84 à 14 broches, le plus éloigné convient pour les ATmega168/328 à 28 broches, enfin celui du milieu sert à programmer les ATtiny2313/4313 à 20 broches.

Figure 1
Figure 1
Le programmateur une fois terminé.

Le support du milieu sert aussi à programmer les ATtiny à 8 broches (série 25/45/85 ou ATtiny13) : dans ce cas, la puce doit être insérée en bout de support, la broche 1 du microcontrôleur étant au plus proche du levier. La figure 2 montre comment sont connectées les broches de ce support sachant que la broche 1 est du côté du levier du support ZIF.

Figure 2
Figure 2
Support ZIF du milieu.

Les figures 3 à 7 montrent pour chaque microcontrôleur où se situent les broches d’alimentation et les broches SPI.

Figure 3
Figure 3
Figure 4
Figure 4
Figure 5
Figure 5
Figure 6
Figure 6
Figure 7
Figure 7

La figure 8 montre le bus SPI de la carte Uno. On rappelle que les broches SPI sont maintenant appelées COPI et CIPO à la place de MOSI et MISO (C pour Component et P pour Peripheral), afin de ne plus faire référence à la période de l’esclavagisme. On rappelle également que le programme ArduinoISP utilise la broche 10 de la carte Uno pour reseter les microcontrôleurs à programmer.

Figure 8
Figure 8
Brochage de la carte Uno.

Circuit imprimé

Le circuit imprimé (figure 9) du shield mesure 58 mm par 54 mm ; il s’agit d’un circuit double face qui peut être fabriqué à partir du fichier Gerber ci-dessous. La procédure pour faire fabriquer un circuit imprimé à partir d’un fichier Gerber est décrite dans l’article Une station DCC minimale avec boutons de commande et écran Oled en prenant comme exemple l’industriel JLCPCB.

Figure 9
Figure 9
Le circuit imprimé du shield.
Fichiers de production Gerber du Shield Locoduino ISP

Ce circuit imprimé comporte quelques composants CMS : sur la face du dessus, quatre LED avec 4 résistances de limitation de courant de 1kΩ. Ces LED et ces résistances sont en boîtier 1206. Sur la face du dessous, 5 condensateurs de découplage en boîtier 805 pour l’alimentation des microcontrôleurs (figure 10). L’article Utiliser les composants CMS explique comment souder de tels composants et comporte une petite vidéo explicative. Une fois les résistances et LED soudées, on peut vérifier leur bon fonctionnement : pour cela, on peut prélever du 5 V sur une carte Arduino alimentée, et injecter cette tension (avec deux câbles Dupont mâle-mâle) sur le circuit imprimé, en respectant la polarité (GND sur la flèche noire de la figure 10 et 5 V sur les flèches oranges).

Figure 10
Figure 10
Les composants CMS : en jaune LED et résistances, en rouge condensateurs.
Les flèches indiquent où injecter une tension de 5 V pour contrôler le bon fonctionnement des LED.

Montage des autres composants sur le shield

Une fois terminé ce travail délicat (mais non insurmontable) de soudure de composants CMS, il reste quelques composants classiques à souder sur le circuit imprimé, mais ils sont assez peu nombreux :

  • Un interrupteur à glissière anglé SPDT modèle ESP2010 de marque ECE qu’on trouve [1] mais que l’on peut remplacer par n’importe quelle interrupteur de modèle similaire : anglé, passant suffisamment de courant pour alimenter un microcontrôleur et avec un pas de broches de 2,54mm ;
  • Un condensateur électrochimique de 10µF et au moins 16V de tolérance (diamètre 5mm, écartement des broches de 2mm) ;
  • De la barrettes sécable 40 broches mâle au pas de 2,54mm
  • Trois supports ZIF de 14, 20 et 28 broches avec une largeur entre les broches de 7,62mm. Prenez de la marque pour que ça dure. Par exemples ces modèles.
Les supports ZIF de microcontrôleurs doivent être soudés avec le levier relevé ; en effet, les souder avec le levier baissé bloque les pinces en position fermée et les rend inutilisables.

Comme toujours, il est préférable de souder les composants du moins haut au plus haut : d’abord les CMS (voir paragraphe précédent), puis l’interrupteur, les barrettes (en les mettant sur la carte Uno pour garantir l’alignement des broches). On termine par les supports ZIF puis le condensateur électrochimique en respectant sa polarité.

Les figures 11 et 12 montrent cette progression.

Figure 11
Figure 11
Une fois l’interrupteur soudé, on insère les barrettes dans la carte Arduino, puis on insère le circuit imprimé du shield par dessus pour le souder aux barrettes.
Figure 12
Figure 12
Une fois les barrettes soudées, on sépare la carte shield de la carte Arduino pour souder les supports ZIF en commençant par deux broches en diagonale. On vérifie que rien n’a bougé puis on soude toutes les broches.

Utilisation du programmateur

Rien ne change par rapport à ce qui a été expliqué dans l’article Le microcontrôleur ATtiny45 (2). Une fois les réglages effectués dans l’IDE, vous pouvez graver la séquence d’initialisation si c’est la première fois que vous utilisez la puce, ou bien téléverser le programme qui doit être adapté aux broches du microcontrôleur utilisé.

À noter qu’Arduino ISP n’aime pas qu’on lui mette le composant à flasher hors tension et arrête de faire clignoter PULSE. Ce n’est pas très grave, un coup de RESET et ça repart et c’est moins pénible que de débrancher et rebrancher l’USB.

La figure 13 montre comment insérer un ATtiny45 pour le programmer. La broche 1 est au plus près du levier du support, puis le levier est refermé. On connecte alors le programmateur à la sortie USB, on met l’interrupteur du shield sur ON. Tout est prêt pour la programmation.

Figure 13
Figure 13
La broche 1 de l’ATtiny45 est ici repérée par un point blanc ; elle est au plus proche du levier qui est ici abaissé.

[1chez TME