Graver un bootloader sur ATMEGA328P-PU

Pour ceux qui programment sur Arduino, l’envie vient tôt ou tard de porter le montage hors de la carte Arduino pour des raisons de consommation, de place ou de coût. De nombreux conseils et tutoriaux existent et après m’y être frotté, un de plus ne sera pas de trop, notamment si vous aussi vous n’avez pas trop compris cette histoire d’horloge interne et d’oscillateur externe …

Depuis le début

Pour rappel, l’ATMEGA328P-PU est la puce au coeur de l’Arduino UNO notamment (encadrée en rouge sur l’image plus bas, on repère l’encoche à droite de la puce pour l’orienter correctement). On peut la trouver facilement sur des sites marchands et moins cher sur EBay. Une fois réceptionnée, elle est vierge de toute donnée, programme ou bootloader. Le bootloader (ou séquence d’initialisation) est un petit morceau de code qui va permettre à l’Arduino de pouvoir communiquer avec l’extérieur et donc de charger ses propres programmes. Il servira également à s’initialiser et à lancer le programme que l’on aura chargé. Fonctionnellement, il peut être comparé au BIOS d’un ordinateur.

20131108_0

On doit donc graver cette séquence pour pouvoir utiliser l’ATMEGA. Mais un dernier choix reste à faire. L’arduino utilise une puce ATMEGA cadencée à 16MHz, ce qui requiert un oscillateur externe et quelques composants présent sur la carte UNO. L’ATMEGA possède en outre une horloge cadencée à 8MHz (datasheet sur le site d’Atmel). On doit donc choisir à quelle fréquence on souhaite utiliser l’ATMEGA avant de graver le bootloader. Pour des applications simples, 8MHz sont largement suffisants, et l’avantage est que la gravure de la séquence ne requiert aucun autre composant si ce n’est une carte Arduino. On choisit donc cette solution. Mais pour ceux qui voudrait quand même graver un bootloader 16Mhz de la même manière, je leur propose d’aller jeter un coup d’oeil à la dernière partie…

Les étapes

1 – Utiliser l’Arduino comme ISP (In System Programmer)

On charge un programme particulier dans l’Arduino pour qu’il devienne l’interface capable de graver notre ATMEGA. Connecté en USB, on charge le programme example ArduinoISP. Dans la version 04m3, on ne le modifie pas, malgré ce qu’on peut lire par ailleurs.

20131108_2

2 – Charger un nouveau matériel dans l’IDE Arduino

Le matériel ATMEGA autonome n’est pas listé par défaut dans les types de carte (menu Outils). On le rajoute en créant les dossiers hardware/breadboard dans le dossier dit « carnet de croquis ». Et dans ce dernier dossier, on copie/colle le fichier boards.txt. On redémarre l’IDE qui propose maintenant le matériel « ATMEGA328 on a breadboard (8MHz internal clock) » que l’on sélectionne.

20131108_3

3 – Réaliser le circuit

On relie l’ATMEGA à l’Arduino de la manière suivante

20131108_4

4 – Graver le bootloader

Après avoir choisi Outils/Programmateur/Arduino as ISP, on est prêt à graver le bootloader. L’opération s’effectue en quelques dizaines de secondes.

20131108_4

Et voilà, on dispose d’un ATMEGA prêt à recevoir des programmes dans le but d’être utilisé seul dans un circuit sans la carte UNO !

En cas de problème

Et voilà, vous avez malheureusement tenté de graver un bootloader 16MHz sur votre pauvre ATMEGA selon le schéma ci dessus (en choisissant une autre option que ATMEGA328 on a breadboard (8MHz internal clock)) . Et maintenant, toute nouvelle tentative se solde par un :

avrdude: Device signature = 0x000000
avrdude: Yikes! Invalid device signature.

Une petite explication: certains réglages de l’ATMEGA sont établis par le biais de fusibles. Votre dernière tentative a réglé le fusible correspondant à « horloge externe à 16Mhz » et a échoué à la gravure du bootloader. Mais ce premier réglage reste et toute nouvelle tentative de communiquer avec lui à 8Mhz ne fonctionne pas. Il faut donc à nouveau régler le fusible et pour cela, on utilise un oscillateur 16MHz sur les broches 9 et 10 de l’ATMEGA. En dépannage, un oscillateur seul peut fonctionner (sans les condensateurs) selon le schéma suivant. Ensuite on relance l’écriture du bootloader correspondant à l’option  ATMEGA328 on a breadboard (8MHz internal clock) qui s’écrit sur l’ATMEGA correctement. C’est comme ça que je me suis convaincu, en tout cas, ça fonctionne !

20131108_5

Quelques références

On trouvera des informations complémentaires ici:

http://arduino.cc/en/Main/Standalone

http://arduino.cc/en/Tutorial/ArduinoToBreadboard

14 commentaire sur “Graver un bootloader sur ATMEGA328P-PU

  1. Si on programme un Atmegasur la carte Arduino Uno et qu’on le retire de son support pour le mettresur une autre carte, ces séquences de bootloader sont-elles nécessaires?

      1. Svp j’arrive pas à faire l’étape numero 2, qui consiste à charger un nouveau matériel dans l’IDE, j’arrive meme pas à ouvrir le dossier « carnet de dossier » à plus forte raison copier et coller le fichier boards.txt
        Urgent!

  2. Bonjour,

    Tout d’abord merci pour ce tuto.

    J’aimerais savoir s’il est possible par un moyen ou un autre de faire fonctionner ATMEGA328P-PU à 16Mhz au lieu de 8Mhz.
    J’ai fait un projet basé sur un DTH22 et à 8Mhz le projet ne fonctionne pas bien.
    En gros est-il possible de charger un BootLoader à 16Mhz et d’utiliser un Quartz externe à 16Mhz de telle manière à ce que le projet tourne à cette vitesse ?

    D’avance merci de consacrer du temps à la réponse.

    Olivier

    1. Oui c’est possible. On laisse définitivement l’oscillateur externe en place, on rend le montage plus robuste avec les condensateurs qui vont bien et on flashe à 16MHz avec les autre options de l’IDE Arduino. C’est cet oscillateur présent en permanence qui permettra à l’ATMEGA de fonctionner à une fréquence deux fois plus élevée.

  3. Excellent article! Si je comprends bien, avec un atmega328P réglé en 16Mhz, on ne pourra pas flasher le bootloader 8mhz sans rajouter l’oscillateur 16Mhz, c’est bien ça?

    1. Exactement. l’ATMEGA réglé à 16MHz fonctionnera à 16MHz, y compris pour l’opération de flashage. D’où l’oscillateur externe à 16MHz, car il ne dispose pas d’oscillateur interne à cette vitesse. Une fois le bootloader 8MHz flashé et le fusible correctement réglé (lors de l’opération de flashage), on peut le retirer.

  4. Bonjour, merci pour le tuto.
    J’ai cette erreur Erreur lors de la gravure de la séquence d’initialisation : le paramètre de configuration « bootloader.tool » est manquant
    une idee svp

    merci

  5. Bonjour

    Un papy de 72 ans essai de se servir d’Arduino ( ,c ‘est pas triste ) mais sur l’insistance de mon entourage
    j’ai achète une carte duemilanove 328 sans son atmega , et un ami ma donne un atmega328P avec son bootlader dedans.
    j’ai un programme .hex et j’aimerais essayer d’installer ce programme dans le 328P
    j’ai parcouru plein de site pour essayer de comprendre comment faire la programmation , mais il y a plein de termes que je ne comprend pas , et je ne sais pas par ou commencer
    EX: LES FUSES ??? sont-ils déjà dans le bootlader ? faut-il un ou deux atmega pour travailler, un dans la duemilanove et un autre sur une planche d’essai ?
    Peut-on programmer un fichier .hex sans la duemilanove , ?

    Que faut-il comme outils pour programmer ?…ETC ….

    j’ai vu plein de tuto mais les uns plus compliques que les autres et pas très claire pour moi,(et en plus la plus par en anglais ) je sais que ce que je demande n’est pas très drôle pour vous et peut être pas si simple a expliquer a un ancien ( officiel)
    Enfin si vous avez une méthode simple et claire je suis preneur , si non je laisserais tomber
    bien amicalement

    Jean-claude dit ….papy

  6. 2 – Charger un nouveau matériel dans l’IDE Arduino

    Le matériel ATMEGA autonome n’est pas listé par défaut dans les types de carte (menu Outils). On le rajoute en créant les dossiers hardware/breadboard dans le dossier dit « carnet de croquis ». Et dans ce dernier dossier, on copie/colle le fichier boards.txt. On redémarre l’IDE qui propose maintenant le matériel « ATMEGA328 on a breadboard (8MHz internal clock) » que l’on sélectionne.

    Ceci ne fonctionne pas chez moi…
    Est-ce bien ici que je dois placer le fichier ?
    « Documents\Arduino\hardware\breadboard »

  7. salut,
    je bloque a l étape 2 j ai beau avoir copier le fichier hardware\breadboard\boards.txt

    dans le dossier dit « carnet de croquis » en passant par Croquis > afficher de dossier de croquis

    ainsi que dans Documents\Arduino\libraries\hardware\breadboard\boards.txt

    redémarer le programe

    je ne trouve pas ATMEGA328 on a breadboard (8MHz internal clock)

  8. Bonjour,

    Merci votre tutoriel ! Pour moi, il n’y manque que la précision avec si possible une image pour l’exécution du chargement en mode « Arduino as ISP », soi la commande du menu « Croquis », « Téléverser avec programmateur » ou au clavier les touches Ctrl+Maj+U. C’est un oubli dans les tutoriels qui parle de l’Arduino sur planche d’expérimentation.

    L’ami René
    Réf. : https://1technophile.blogspot.ca/2015/04/chargement-du-bootloader-8mhz-puis-un.html?showComment=1469379435741

  9. Bonjour,

    Avant tout merci pour ce tuto. J’avais des Atmega328P acheté dans le but de les monter directement sur un circuit et je ne comprenais pas pourquoi je n’arrivais pas à y écrire un programme. Maintenant c’est chose du passé grâce à vous.

    Toutefois, je me demandais, j’en ai « bootloader » plusieurs à 16 Mhz et 8 Mhz mais j’ai lu qu’il pouvait rouler à des fréquences encore plus lentes. 4 ou 1 Mhz par exemple. Est-il difficile de les faire fonctionner à cette vitesse ? Cela peut-il se faire avec l’oscillateur interne ?

    Une dernière question et désolé d’abuser, mais sur la fiche technique il est écrit qu’il peut rouler à 20 Mhz, cela veut-il dire qu’il me suffirait de mettre un quartz à 20 Mhz et ça fonctionnerait ?

    Merci à l’avance et désolé pour le nombre de questions.

    C.Payette

  10. Bonjour,
    J’ai aussi un pb de comprehension à l’étape 2. Vite résolu après quelques recherches…
    Il faut créer les 2 dossiers (hardware et breadboard) dans le dossier Arduino qui est souvent présent dans « mes documents » (et non pas dans programme file comme on croit le comprendre), c’est là qu’on stock ses codes et nouvelles librairies.
    Une fois ces dossier créés et le fichier ajouté, on redémarre le logiciel:
    Fichier/exemples/arduino ISP
    Outils/type de carte/Atmegaxxxbreadboardxxx8Mhz
    Outils/COMx
    Outils/programateur ISP
    Outils/graver

    La source : https://www.arduino.cc/en/Tutorial/ArduinoToBreadboard

    En tout cas, merci pour ce tuto en français

    +

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *