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

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:

MosquittoArduino IDE latest version (tested ok with 1.6.10)esp8266 board added to t…

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 date info about OpenMQT…

433toMQTTto433 - Bidirectional Arduino gateway between RF 433Mhz signal and MQTT

The goal of the Arduino 433toMQTTto433 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 with software like openhab.

The interest of putting this gateway to an arduino and not on a raspberry pi is to be able to manage security actions at arduino 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:
Arduino UNO W5100 Ethernet shield 433Mhz Receiver XD RF 5V and transmitter FS1000A 
Transmitter VCC must be p…