ATMega 328 & "bootloader"

medium-ATmega328P-SPDIP-28.png
medium-ATmega328P-SPDIP-28.png, janv. 2018


Un Arduino UNO, en gros, c'est un ATMega 328P, avec un peu d'électronique autour, dont un régulateur de tension, un adaptateur USB/UART et quelques LEDs.
Surtout il y a un microcode déjà chargé, le "bootloader". Pour certains montage un simple IC suffira, mais comment utiliser les ATMéga328P avec toute la souplesse de l'IDE Arduino... Suivez le guide :

PRÉPARATION DES ATmega

Chargement du BOOTLOADER

Les ATméga ne sont pas obligatoirement livré avec un bootloader chargé. Il est possible de charger ce bootloader grâce à un petit montage de 2 Arduino. Pour commencer il faut se procurer un Arduino UNO possédant un ATmega 328 extractible (celui de Gotronic est très bien et pas cher). C'est une bonne idée d'ajouter un ZIF (Zéro Insertion force) pour pouvoir poser ou retirer l'ATmega facilement. Un 2ème Arduino est nécessaire. N'importe quel modèle convient. Il servira à communiquer les codes du bootloader depuis l'IDE sur l'ATmega insérer dans le ZIF du 1er Arduino.

Il est assez difficile de trouver un tuto qui fonctionne. J'ai réussi la manipulation avec les indications suivantes :

   J'ai utilisé 2 UNO.
   Le 1er, l'esclave, avec le ZIF, reçoit l'ATmega vierge.
   Le 2ème, le maitre, est chargé du sketch :  Fichier > Exemples > 11.ArduinoISP > ArduinoISP. Il faut apporter une modification au code en décommentant la ligne "ifdef USE_OLD_STYLE_WIRING"
   Les broches 11, 12, 13 (port SPI) sont connectées des 2 côtés.ArduinoISP.png
   La broche 10 du maitre est connecté à la broche "reset" de l'esclave.
   Les alimentations +/- sont reliées elles aussi.
   Il reste à connecter le maitre au port USB du PC.
   Enfin sur l'IDE on choisi la carte "Arduino/Genuino UNO" et le bon port com, on sélectionArduinoISP.pngne le programmateur : "Arduino as ISP", et on lance sur l'IDE le programme : "Graver la séquence d'initialisation".
   C'est fiini !
   ArduinoISP.png, déc. 2017

Chargement du programme à partir de l'IDE

La sollution la plus simple et d'utiliser un Arduino dont on aura retiré l'ATMega, ça tombe bien, on en a utilisé un pour charger le BOOTLOADER précédemment.

L'idée est d'ultiliser l'adaptateur USB/UART intégré à la carte et connecter la puce déportée sur notre circuit.
On relie RX, TX, et le Reset de la carte Arduino à l'ATMega, on se sert de l'alimentation de la carte UNO pour alimenter notre circuit et le tour est joué !

[m.à j. du 26 mai 2018]
j'ai réussi à charger un "bootloader" en utilisant un autre Arduino que le Uno, en l'occurence un Pololu A-Star basé sur un Atmega 32U4 (AVR).
Le câblage differt un chouïa, on utilise le connecteur ISP, soit :

  • broche MOSI 16 ---> 11
  • broche MISO 14 ---> 12
  • broche SCK   15 ---> 13
  • broche           10 ---> reset (ne change pas !)

Il faut modifier le programme IDE chargé sur le A-Star en re-donnant les brochages sur les lignes :

// Uncomment following line to use the old Uno style wiring
// (using pin 11, 12 and 13 instead of the SPI header) on Leonardo, Due...

#define USE_OLD_STYLE_WIRING

#ifdef USE_OLD_STYLE_WIRING

#define PIN_MOSI    16
#define PIN_MISO    14
#define PIN_SCK      15

vous remarquerez aussi la ligne #define USE_OLD_STYLE_WIRING qui est à dé-commenter.
Il nous reste maintenant à téléverser ce programme sur le A-Star et choisissant bien "Leonardo" dans le type de carte.
Et pour finir, choisir le type de carte "UNO" (c'est important !), sélectionner "Arduino as ISP" comme programmateur et enfin : "Graver la séquence d'initialisation".
Votre Atmega 328p est prêt !