Accéder au contenu principal

Chargement du bootloader 8mhz puis un programme sur un Atmega 328p vierge avec un Arduino Uno sans composants additionnels et l'IDE 1.6.1

L'objectif est de faire fonctionner un microcontroleur comme l'ATMEGA328P en consommant le moins possible d'énergie et en ayant un montage peu couteux.

Cette procédure va vous permettre de charger un bootloader 8mhz sur un atmega328p nu sans composant externes tels qu un quartz ou des condensateurs, juste en utilisant un arduino uno comme ISP (in system programmer). Satisfaisant ainsi en partie notre objectif ci dessus.
J'ai pour ma part passé  quelques heures avant d arriver à mes fins malgré de nombreuses lectures sur le sujet, à chaque fois j'ai essuyais des messages d'erreurs. Je vous fais part donc de mon mode opératoire qui fonctionne.
Voici les éléments nécessaires pour realiser le chargement du bootloader
  • Un arduino Uno r3 avec cable USB,
  • Un pc avec l ide arduino version 1.6,
  • Une breadboard,
  • Un atmega328p,
  • Des cables,
  • Notepad++ installé sur le PC ou équivalent,
  • Une source de tension 5v.

Étape 1 Transformation de l'arduino uno en carte de chargement de bootloader

Connecter votre PC à l'arduino par USB

Vérifiez que votre Arduino est bien connecté, il doit apparaître dans la liste des ports:


Charger l'exemple ArduinoISP comme ci dessous



Vous devriez obtenir ce programme dans une nouvelle fenêtre:

Vérifier que vous êtes bien paramétré dans le menu outil sur Type de carte = "Arduino Uno" et programmateur = "AVR  ISP"

Chargez ensuite le programme dans votre Arduino Uno en cliquant sur Téléverser, au bout de quelques secondes vous devriez obtenir cela:




Étape 2 Modification de l'ide pour un atmega328p 8mhz

Cette étape consiste à ajouter dans l'ide le paramétrage pour l'ATMEGA328P en utilisant son horloge interne à 8mhz,

Pour cette étape je vous recommande vivement Notepad++ pour faire les modifications de paramétrage.

Fermer votre IDE Arduino
Ouvrir avec notepad++ le fichier 
<dossier d'installation>Arduino\hardware\arduino\avr\boards.txt

Faire un copier coller du paramétrage ci dessous à la fin du fichier boards.txt:

##############################################################
atmega328bb.name=ATmega328p on a breadboard (8 MHz internal clock)
atmega328bb.upload.protocol=stk500
atmega328bb.upload.maximum_size=30720
atmega328bb.upload.speed=57600
atmega328bb.upload.tool=avrdude
atmega328bb.bootloader.low_fuses=0xE2
atmega328bb.bootloader.high_fuses=0xDA
atmega328bb.bootloader.extended_fuses=0x05
atmega328bb.bootloader.path=arduino:atmega
atmega328bb.bootloader.file=ATmegaBOOT_168_atmega328_pro_8MHz.hex
atmega328bb.bootloader.unlock_bits=0x3F
atmega328bb.bootloader.lock_bits=0x0F
atmega328bb.bootloader.tool=avrdude
atmega328bb.build.mcu=atmega328p
atmega328bb.build.f_cpu=8000000L
atmega328bb.build.core=arduino:arduino
atmega328bb.build.variant=arduino:standard

Relancer votre IDE, vous devriez voir apparaître en bas de la liste dorénavant dans la liste des cartes "ATmega328p on a breadboard (8 MHz internal clock)":



Sélectionner donc dans Outils->Type de carte "ATmega328p on a breadboard (8 MHz internal clock)"

Dans le menu Outils->Programmateur sélectionner Arduino as ISP

Une dernière étape consiste à copier le bootloader 8mhz dans son répertoire au dessus de lui (je ne sais pas pourquoi il ne le trouve pas par défaut)
Copier donc 
C:\Program Files (x86)\Arduino\hardware\arduino\avr\bootloaders\atmega\ATmegaBOOT_168_atmega328_pro_8MHz.hex
Vers
 C:\Program Files (x86)\Arduino\hardware\arduino\avr\bootloaders\

Vous devriez voir cela:




Etape 3 Branchements

Une fois la partie logicielle paramétrée nous voici à même de passer à l'étape physique de ce guide.
Pour cela suivre les branchements ci dessous, on remarquera qu'ils sont ceux du site Arduino au delta près de l'alimentation de l'ATMEGA328P, je vous conseille de prendre une autre que celle de l'arduino Uno (dans mon cas un autre port USB de mon ordinateur)


Pour ma part j'ai dénudé un cable USB pour isoler les fils 5V et masse afin de les connecter à la breadbooard (attention il y a un risque de griller votre sortie USB PC en faisant cela notamment en cas de faux contact) à vos risques et périls donc.

Une fois les branchements réalisés nous pouvons passer à l'étape fatidique (celle qui pour ma part à planter des dizaines de fois avant que j'arrive à cette procédure qui fonctionne).

Etape 4 Chargement du bootloader

Vous êtes maintenant prêt, l'arduino Uno est relié au PC, la breadboard à l'arduino, l'atmega328P à une source 5V externe et l'ide arduino lancé sur votre pc. Le programmateur est sur Arduino as ISP et le type de carte sur 
ATmega328p on a breadboard (8 MHz internal clock).

Pour charger le bootloader il vous suffit de cliquer sur Outils->Graver la séquence d'initialisation:


Les diodes RX et TX de votre Uno devraient se mettre à scintiller et vous devriez voir apparaitre le message ci dessous dans votre IDE
"Gravure de la séquence d'initialisation terminée"


Bravo le bootloader 8Mhz est chargé sur votre Atmega328p!


Étape 5 Branchements et chargement d'un programme basique

Pour les branchements ce n'est pas compliqué il vous suffit de conserver les branchements précédents et de garder le sketch "Arduino as ISP" sur votre Arduino Uno (simple non?) il n'est donc pas nécessaire d'utiliser le rx/tx de votre arduino et d'enlever l'atmega328p du Uno.

Votre IDE doit toujours être configurés sur 
Outils->Type de carte "ATmega328p on a breadboard (8 MHz internal clock)"
Outils->Programmateur -> "Arduino as ISP"

Ensuite choisissez un programme (blink par exemple en modifiant la durée d'allumage et d'extinction à 10000)

Cliquer ensuite sur Fichier->Téléverser avec un programmateur


Vous devriez voir les diodes rx et tx de l'Uno clignoter, et la c'est magique votre programme est chargé. Vous verrez que l'atmega328p de la breadboard allume la diode L de l'uno à la fréquence spécifiée!!!


Sources:
http://arduino.cc/en/Tutorial/ArduinoISP
http://arduino.cc/en/Tutorial/ArduinoToBreadboard
http://blog.biophysengr.net/2012/06/writing-sketches-to-atmega386p-pre.html

Article sous licence Creative Commons CC-BY-NC-SA

Commentaires

  1. Bonjour,

    Un très grand merci pour la précision de la dernière commande avec l'image pour la (Ctrl+Maj+U), c'est un oubli dans tous les autres tutoriels qui parle de l'Arduino sur planche d'expérimentation.

    L'ami René

    RépondreSupprimer
  2. Bonjour René,

    Avec plaisir, pour information suivant la température ambiante il se peut que vous rencontriez des difficultés pour charger le bootloader.

    Si tel est le cas je vous invite à regarder le tutoriel (en anglais de Nick Gammon) qui marche à tous les coups car le UNO programmeur génère un signal d'horloge.
    http://www.gammon.com.au/breadboard chapitre "Alternate clock source"

    Chargez ensuite le programme ci dessous:
    https://github.com/nickgammon/arduino_sketches/tree/master/Atmega_Board_Programmer

    Dans le moniteur série taper L puis G pour programmer le bootloader

    Cordialement

    RépondreSupprimer
  3. Bonjour,
    S'il vous plait j'ai besoin de votre aide,
    je veux faire la gravure de la séquence d'installation d'un arduino nano en utilisant un arduino Mega comme ISP, mais malheureusement j'ai toujours ce message:"erreur lors de la gravure de la séquence d'installaton.

    RépondreSupprimer
    Réponses
    1. Bonjour,

      Je ne comprends pas pq vous voulez graver un bootloader sur un nano, celui d'origine ne correspond pas à votre besoin? Si c'est le cas quels sont les éléments différents sur le nouveau bootloader?

      Supprimer
  4. Ce commentaire a été supprimé par l'auteur.

    RépondreSupprimer
  5. Bonjour,
    Merci beaucoup pour ce tutoriel !
    Je suis sur un projet de programmer un Attiny24 avec un arduino Leonardo.
    Mais j'ai une erreur qui survient à chacune de mes tentatives :

    The current selected board needs the core 'arduino:arduino' that is not installed.
    recipe.preproc.macros est un schéma manquant
    Erreur de compilation pour la carte ATtiny24/44/84

    Avez-vous une idée ?
    Merci !

    RépondreSupprimer
    Réponses
    1. Bonjour Nicolas,

      De ce que je vomprends tu as l'erreur à la compilation, est ce que ta carte attiny24 est bien sélectionnée dans les cartes de l'ide arduino? Si oui il te faut verifier son paramétrage car elle ne semble pas bien paramétrée.

      Supprimer
    2. Bonjour ! Merci pour la réponse !

      Alors j'ai commencé par monter ma carte leo en ISP avec les 3 leds témoins. La compilation du sketch ArduinoISP passe sans problème.

      En suite je configure l'ide pour que la carte de destination est le Attiny24 et que le programmateur est Arduino as ISP. (j'ai aussi essayé avec la modification Arduino as ISP (leonardo)).


      La je mets le condensateur pour le reset et je vais pour graver la séquence d’initialisation. Mais ca passe pas. J'ai cette erreur :

      java.lang.NullPointerException
      at cc.arduino.packages.uploaders.SerialUploader.burnBootloader(SerialUploader.java:362)
      at processing.app.Editor.lambda$handleBurnBootloader$11(Editor.java:2533)
      at java.lang.Thread.run(Thread.java:745)
      Erreur lors de la gravure de la séquence d'initialisation.

      Comme si il n'arrive pas a communiquer avec. J'ai revérifié le câblage plusieurs fois, j'ai aussi essayer avec un arduino nano comme ISP mais sans succès.

      et si j'ai quand même essayé de lancer un programme avec ctrl-maj-u et c'est une autre erreur :

      The current selected board needs the core 'arduino:arduino' that is not installed.
      recipe.preproc.macros est un schéma manquant
      Erreur de compilation pour la carte ATtiny24/44/84

      Je suis sur win10 et l'ide 1.8.1
      Voila ! Vous savez tout.

      Supprimer
    3. Voila je redonne des nouvelles !

      J'ai essayé avec un arduino UNO. Mais pareil. Même problème même message d'erreur.

      Apres un peu de réflexion, j'ai résolu mes problèmes.
      C’était mon core attiny24 qui n'allais pas.
      Je l'ai supprimer et réinstaller depuis le gestionnaire de carte cette fois et miracle !
      Ca fonctionne ! Je vais ressayer avec le Leonard.

      Supprimer
  6. Bonjour, Voici la configuration fonctionnelle.

    #################################
    atmega328bb.name=ATmega328p Breadboard (8 MHz internal clock)
    atmega328bb.upload.protocol=stk500
    atmega328bb.upload.maximum_size=30720
    atmega328bb.upload.speed=57600
    atmega328bb.upload.tool=avrdude
    atmega328bb.bootloader.low_fuses=0xE2
    atmega328bb.bootloader.high_fuses=0xDA
    atmega328bb.bootloader.extended_fuses=0xFD
    atmega328bb.bootloader.path=arduino:atmega
    atmega328bb.bootloader.file=atmega/ATmegaBOOT_168_atmega328_pro_8MHz.hex
    atmega328bb.bootloader.unlock_bits=0x3F
    atmega328bb.bootloader.lock_bits=0x0F
    atmega328bb.bootloader.tool=avrdude
    atmega328bb.build.mcu=atmega328p
    atmega328bb.build.f_cpu=8000000L
    atmega328bb.build.board=AVR_UNO
    atmega328bb.build.core=arduino
    atmega328bb.build.variant=standard
    ###############################

    Merci. ;)

    RépondreSupprimer
    Réponses
    1. PS :
      La dernière manipulation "Fichier->Téléverser avec un programmateur" efface le bootloader précédemment chargé en le remplaçant par le nouveau sketche !!!

      Supprimer

Enregistrer un commentaire

Posts les plus consultés de ce blog

433toMQTTto433 - Bidirectional ESP8266 NodeMCU gateway between RF 433Mhz signal and MQTT

The goal  is to act as a gateway between 433Mhz sensors and a MQTT broker or between the MQTT broker and 433Mhz actuators, It enables to: receive MQTT data from a topic and send RF 433Mhz signal corresponding to the received MQTT data  publish MQTT data to a different topic related to received 433Mhz signal  It can be an interesting part in an home automation system so as to interface sensors and actuators (wall sockets) with software like openhab . List of compatible sensors here The interest of putting this gateway to an ESP8266 and not on a raspberry pi is to be able to manage security actions at gateway level (power on a siren, cut power to certain devices) following RF data received by sensors without being dependent to the PI for security related actions. [EDIT] all infos are now centralized into  the github repository  take a look at it you will find up to date info about OpenMQTTGateway You need: Software: Mosquitto Arduino IDE latest version (tested ok with 1.6.10

Infrared IR, 433mhz and MQTT on ESP8266 bidirectional gateway OpenMQTTGateway

Following discussions on the home assistant forum people gave me the idea to add Infrared communication to the 433mhz gateway.  The goal is to act as a gateway between 433Mhz sensors, infrared remote controls and a MQTT broker or between the MQTT broker and 433Mhz actuators, infrared devices, It enables to: receive MQTT data from a topic and send RF 433Mhz signal corresponding to the received MQTT data  publish MQTT data to a different topic related to received 433Mhz signal  receive MQTT data from a topic and send infrared signal corresponding to the received MQTT data  publish MQTT data to a different topic related to received infrared signal  It can be an interesting part in an home automation system so as to interface sensors and actuators (wall sockets), your tv, home cinema, hifi ... with software like  openhab  or home assistant . List of compatible RF sensors here [EDIT] all infos are now centralized into the github repository  take a look at it you will find up to d

Get your BLE sensors data into Home Assistant in 5 minutes

You can now upload your board directly from the web browser!  So let's imagine you want to read data from a sensor like a Mi Flora, an LYWSD03MMC, a weight scale, or any other BLE sensor from this list  Plug an ESP32 dev board to your computer USB port Go to this website: https://docs.openmqttgateway.com/upload/web-install.html Select esp32dev-ble Click the install button Depending on your board you may have to press the BOOT button Choose the port that the ESP is connected to. Wait until the process is complete. Release the BOOT button That's it, OMG is now loaded into your ESP32 board without Arduino IDE, platformIO or a binary flasher. Here are the steps in images: Now comes the Home Assistant part: Add the MQTT integration and activate auto discovery Create a user and a password (Configuration->Users) without administrator right for the gateway Well, this is enough for Home Assistant. So let's now connect both: Check the Wifi Access points available with your smartph