Pour un projet avec mon hacklab hackEns (éclairage de façades avec des LEDs de puissance, dans la même veine que AllColorsAreBeautiful du CCC, voir cette page pour plus d'infos), on a eu besoin de graver 30 bootloaders sur des ATmega8. On n'a pas de programmateur et on le fait donc avec des Arduinos. Comme toujours, il nous a fallu 2h de debug avant de graver le premier :) (mais cette fois, ça a été rentable avec 30 bootloaders gravés d'un coup !).
Du coup, je fais une petite compil' des liens qui marchent et des trucs importants à vérifier pour ne pas perdre deux heures (les messages d'erreur du soft Arduino étant *tellement* explicites... et il y a 10 méthodes différentes, chacune aboutissant à une erreur différente sur le net).
Tout d'abord, un bon lien qui marche bien : ArduinoToBreadboard dans la doc Arduino. Les montages sont clairs et ont été testé par moi-même ces derniers jours :).
Gravure de bootloader
Envoi de programmes
Notes diverses
- Testé avec un Arduino Uno comme programmateur, sans capacités ni résistances sur les pins de reset. Et ça fonctionne ! Par contre, on a eu des problèmes avec un Arduino Mega, donc on est resté sur l'Uno (sans chercher plus, sûrement un problème de reset automatique).
- Si ça ne marche pas, vérifier que l'ATmega est bien enfoncé dans la breadboard ! C'est stupide, mais on oublie une fois sur deux... :)
- Hyper important ! Sur le montage pour graver le bootloader, la résistance au reset est en pull-up (connectée au 5V) et non en pull-down (connectée au GND). J'ai perdu 1h là-dessus...
- Testé et approuvé avec la dernière version du soft Arduino et du sketch ArduinoISP. Pas besoin d'une vieille version a priori.
- Si ça ne marche toujours pas, bien vérifier le montage, encore et encore :)
- Mieux vaut utiliser le soft Arduino que la ligne de commande avec avrdude. En effet, Arduino gère tout seul les fuse bits (utilisation d'un cristal externe, temps de démarrage, protection du bootloader) et c'est donc moins prise de tête. Sinon, pour les calculer, c'est par ici et par ici pour plus d'infos sur l'utilisation d'un quartz externe.
- Lorsque le bootloader est gravé, pour envoyer des programmes facilement, il faut qu'il puisse reset sur serial (sinon, il faut faire un reset manuel à chaque fois). Pour ça, il faut mettre une capacité et une résistance sur le pin de reset (cf schematics des Arduino).