
Pourquoi voudrait-on fabriquer son propre Arduino au moyen d'un microprosseur Atmega 328?
- Pour économiser quelques dollars
- Pour créer une carte Arduino "améliorée" répondant à des besoins particuliers (par exemple, un Arduino comportant déjà un afficheur LCD, ou un pilote de moteur, etc.)
- Pour finaliser un projet Arduino arrivé à terme (remplacer les headers par des soudures permanentes)
- Pour prouver qu'on est capable de le faire (et s'en vanter sur son blog!)
Je me suis donc procuré un Atmega 328 sans bootloader (
$3,50 chez Tayda). Pour l'instant, il s'agit d'expérimenter: pas question de souder quoi que ce soit de permanent. Pour éviter de casser certaines des broches du microcontrôleur en l'insérant dans un breadboard (ça m'est déjà arrivé avec un PIC...), j'ai utilisé un petit module de socket ZIF ("zero insertion force") que j'avais préalablement monté: les broches du socket sont reliées à un header femelle, il est donc facile d'effectuer des branchements temporaires vers un breadboard. Les sockets ZIF sont munis d'un levier qui libère complètement les broches du microcontrôleurs, donc aucun risque de l'endommager.
Gravure du bootloader
Il est plus facile (et plus économique) de se procurer un Atmega 328 vierge, ne contenant pas de bootloader. Le processus de gravure du bootloader s'est révélé tellement simple que je vois mal pourquoi quelqu'un paierait plus cher simplement pour obtenir un Atmega déjà muni de son bootloader.

Pour graver le bootloader, j'ai utilisé
les instructions disponibles ici. Un Arduino Duemilanove m'a servi de programmeur. Au départ, j'ai téléchargé le sketch "ArduinoISP" dans le Duemilanove (vous trouverez ce sketch dans le menu "Exemples" du logiciel Arduino).
Les branchements à effectuer sont:
- broche 1 de l'Atmega : Résistance de 10K : 5 V de l'Arduino
- broche 1 de l'Atmega : broche 10 de l'Arduino
- broche 7 de l'Atmega : 5 V de l'Arduino
- broche 8 de l'Atmega : GND de l'Arduino
- broche 17 de l'Atmega : broche 11 de l'Arduino
- broche18 de l'Atmega : broche 12 de l'Arduino
- broche 19 de l'Atmega : broche 13 de l'Arduino
- broche 20 de l'Atmega : 5 V de l'Arduino
- broche 22 de l'Atmega : GND de l'Arduino
- Une des broches d'un cristal de 16 MHz est relié à la broche 9 de l'Atmega, l'autre broche du cristal est relié à la broche 10 de l'Atmega. De plus, un condensateur d'environ 20 pF est placé entre chaque broche du cristal et GND.

J'ai aussi ajouté les trois LEDs indicatrices suggérées dans le sketch "ArduinoISP" aux broches 7, 8 et 9 de l'Arduino (ça aurait pu être utile en cas de problème).
Il ne reste plus qu'à régler le logiciel (IDE) Arduino de la façon suivante:
- Outils : Type de carte : Arduino Duemilnove w/ Atmega 328
- Outils : Ports série : (port de votre Arduino)
- Outils : Programmateur : Arduino as ISP
- Outils : Graver la séquence d'initialisation
Pendant la gravure, la LED reliée à la broche 7 devrait clignoter (celle de la broche 8 devrait rester éteinte), et après quelques dizaines de secondes, le logiciel devrait confirmer la réussite de l'opération. (Dans mon cas, ça a fonctionné du premier coup).
Télechargement d'un sketch
Le sketch "Blink" (qui fait clignoter une LED) semble gravé dans l'Arduino en même temps que le bootloader, mais puisque son utilité est plutôt limitée, vous désirerez probablement télécharger un autre sketch dans l'Atmega...
Pour ce faire, j'ai utilisé le "
FTDI Basic Breakout" apparemment mis au point par Sparkfun, mais comme à mon habitude j'ai opté pour une contrefaçon chinoise à $8. Ce minuscule circuit comporte un connecteur "mini-usb" qui permet le téléchargement (upload) d'un sketch vers l'Atmega. Si vous souhaitez construire votre propre Arduino pour économiser de l'argent, l'achat de ce composant limitera sensiblement les possibilités d'économie...par contre vous pouvez utiliser le même breakout pour plusieurs Atmegas différents.
Pour la suite, je me suis fié essentiellement sur les
instructions disponibles ici. Dans un premier temps, vous enlevez toutes les connections menant à l'Arduino, ainsi que les trois LEDs indicatrices si vous les aviez utilisées.

Les branchements suivants, déjà effectués pour graver le bootloader, demeurent utiles:
broche 1 de l'Atmega : Résistance de 10K : 5 V
broche 7 de l'Atmega : 5 V
broche 8 de l'Atmega : GND
broche 20 de l'Atmega : 5 V
broche 22 de l'Atmega : GND
Une des broches du cristal de 16 MHz est relié à la broche 9 de l'Atmega, l'autre broche du cristal est relié à la broche10 de l'Atmega. De plus, un condensateur d'environ 20 pF est placé entre chaque broche du cristal et le GND.
Puis vous ajoutez le branchements suivants:
broche 21 de l'Atmega : 5 V
Et finalement, vous ajoutez le FTDI Basic Breakout qui, en plus de transmettre le sketch de l'ordinateur vers l'Atmega, permettra aussi d'alimenter l'Atmega à partir du port USB de votre ordinateur.
Les branchements du FTDI Basic Breakout sont:
- GRN/DTR : Condensateur de 0,47 microfarads : broche 1 de l'Atmega
- RXI : broche 3 (Tx) de l'Atmega
- TXO : broche 2 (Rx) de l'Atmega
- 5 V : pour alimenter votre ligne de 5 V où vous avez déjà branché les broches 7 et 20 de l'Atmega.
- BLK/GND : aux autres GND
Je n'ai pas la moindre idée de l'utilité de la broche "CTS", je n'ai pas eu besoin de la brancher. Et je n'ai pas installé de bouton reset.
Voilà! Il ne reste plus qu'à brancher le tout à votre ordinateur au moyen d'un câble USB. Si vous branchez une LED à la broche 19 de l'Atmega, elle devrait clignoter (à cause de l'exemple "Blink" déjà téléchargé lors de la gravure du booloader). Mais vous pouvez évidemment remplacer ce sketch par ce que vous voulez!
Ce schéma vous sera utile pour connaître la correspondance entre les broches d'un Arduino et celles de l'Atmega.
Cet article a maintenant une suite:
Fabrication d'un Arduino conçu pour utilisation sur breadboard
Yves Pelletier (Twitter:
@ElectroAmateur)