[Tuto] : ISP d'un atmega 644 avec un UNO

Aujourd'hui petit Tutorial, car la question : "Mais j'ai un atmega 644 sans bootloader et je sais pas comment qu'on fait pour mettre un bootloader" devient récurrente...


Je fais un peu ce tuto pour moi car j'oublie souvent les bon branchements avec mon Atmega644.

Déjà, c'est quoi un bootloader?? 
C'est un petit morceau de code qui permet d'envoyer un programme dans votre microcontroleur/arduino par le port UART...
Normalement, un programme s'envoi par les voies de programmations standard, cela dépend du type de microcontroleur, certain marchent par SPI , alors d'autres par des voies plus sombre à mes yeux (genre les vieux microchip).

Bref, pour synthétiser  un bootloader envoie du code par les voies de communications que vous utilisez vous, à savoir un port série (Port COM si vous préférez) rs232 ou un convertisseur USB/TTL (qui émule ce dernier).

Il faut savoir que pour chacun des microcontroleurs que vous utilisez, il y a des tonnes de bootloaders utilisable, certain mieux que d'autres, certains plus légers que d'autres, ou avec des caractéristiques différentes.

En général des bootloaders sont placé en debut ou fin de mémoire et forme un bloc qui ne pourra (généralement) pas être remplacé par le programme qui est envoyé.
En alimentant votre circuit, vous démarrer généralement votre bootloader qui, à défaut de communication avec votre ordinateur, chargera ensuite votre programme précédemment envoyé par le biais du bootloader.
Cependant, pour notre culture, il faut savoir que le bootloader se met en mode d'attente d'une communication avec votre ordinateur par differents déclenchement, certain auront besoin qu'un PIN (patte) de votre microcontroleur soit dans un étant Haut ou Bas, alors que d'autres bootloader comme le stk500 ou stk500v2 utilisé dans la gen7 auront un délai d'attente de communication (2 ou 3 secondes) avant de lancer votre programme.

La communication:
Pour info, la communication entre votre bootloader et votre ordinateur est propre aux données de votre bootloader (par exemple le baudrate mis à 112500). Si vous chargez un programme avec une communication par la même ligne et avec un baudrate différent  cela ne posera aucun problème, il faudra donc envoyer votre programme en 112500 et communiquer avec votre programme (on l'appellera firmware par la suite) en 19200 par exemple.

Glorieusement, sous Arduino vous ne voyez pas cela, c'est transparent pour vous. En réalité, un arduino n'est qu'un simple microcontroleur avec un bootloader chargé avec une interface autour.


Notre boulot aujourd'hui: La programmation dite "In System Programming" ou programmation In-Situ
On va simplement faire une petite série d'étape pour programmer notre Atmega 644 via un Arduino UNO (c'est pas cher et ca sauve la vie...), sans avoir de programmateur spécial Atmega car notre Arduino va prendre le role du programmateur.




  1. Téléchargez chez Sanguino  ou alors sur l'électronique Reprap generation 7 le bootloader et les configurations de votre atmega (644 ou 644P)
  2. Extrayez les fichiers dans arduino/hardware (sachant que dans le arduino/hardware/-dossier-/ doit apparaitre le boards.txt, donc trouvez le bon dossier a extraire dans votre archive)
  3. Dans le boards.txt et par exemple dans l'electronique de la Gen7 vous trouverez par exemple
    Gen7-644P-16.bootloader.file=bootloader-644P-16MHz.hex
    Ce qui veut dire que dans le dossier bootloader/Gen7/ doit se trouver le fichier bootloader-644P-16MHz.hex
    Si vous n'avez pas ce bootloader vous pouvez telecharger la version précompilée du 644 ici
  4. Brancher votre arduino UNO, charger le programme arduino ISP dans la rubrique exemple de votre IDE et envoyer le programme de manière normale
  5. Faites le branchement de votre atmega 644 ainsi


    Vous remarquerez que nous branchons le AREF au 5V (VCC), ayant originellement une expérience plutot microchip, j'ai été surpris du fait que ce branchement était obligatoire pour le bon fonctionnement du microcontroleur (un des deux entre AREF  et AVCC, je ne me souviens plus duquel).
  6. Optionnel: changez le fusible de votre atmega 644 extended fuse de 0xFC à 0xFD que vous trouverez dans le dossier arduino/hardware/votrecarte-parexemple-gen7/board.txt
    Ce fusible permet d'éviter le problème sur les Gen7 du "brownout reset" qui arrive de temps à autre sur les l'électronique Gen7 pour reprap à cause d'une baisse d'alimentation. C'est un dispositif qui permet de redemarrer le microcontroleur si la tension est en dessous du seuil expecté (en 0xFC à 
     4.3 V et 0xFD à 2.7V)
  7. Relancer l'IDE arduino
  8. Selectionnez la bonne carte dans tools/boards
  9. Envoyez le bootloader dans tools/burn bootloader/arduino ISP
  10. "Pouf c'est tout"
PS: 
Si vous avez un message d'erreur:
"avrdude: stk500_getsync(): not in sync: resp=0x00
avrdude: stk500_disable(): protocol error, expect=0x14, resp=0x51"
Vous ne communiquez pas avec votre arduino UNO

Si vous avez un message du genre:
"avrdude: Yikes!  Invalid device signature.
         Double check connections and try again, or use -F to override
         this check."
Vous vous êtes planté dans le branchement de votre Atmega celui-ci ne répond pas. Recommencez l'étape 2



Commentaires

Posts les plus consultés de ce blog

L'art de la récup

Huxley Techzone: la fin et l'enterrement du projet...