jeudi 25 juillet 2019

Montage et chargement d'un ATMEGA328P



Montage et chargement d'un

ATMEGA328P


Pourquoi refaire un nième article traitant du montage et du chargement d'un microcontrôleur ATMEGA328 sur une breadboard ou un PCB ?

Hé bien je voulais présenter une solution complète exposant les différentes possibilités :

  • ATMEGA328P DIP ou TQFP32
  • version 16MHz ou 8MHz
  • alimentation 5V ou 3.3V
  • USBASP ou ARDUINO as ISP
  • Convertisseur USB / série ou pas

Cet article sera donc un peu plus long que ceux que vous rencontrerez par ailleurs sur le WEB.

Il pourra également servir de tutoriel pour recharger le bootloader d'une carte ARDUINO, à l'aide d'un USBASP ou d'une autre carte ARDUINO (ARDUINO as ISP).

Tout d'abord, pourquoi utiliser un microcontrôleur nu en lieu et place d'une carte UNO, NANO ou PRO MINI ?

L'avantage le plus évident est le gain de place. Même un ATMEGA328P en boîtier DIP occupera moins de place qu'une carte PRO MINI.

L'autre intérêt de cette solution est de pouvoir utiliser une alimentation ultra-adaptée au besoin. Dans certains cas, une simple pile bouton pourra alimenter votre montage, ou une batterie LiFePO4, sans nécessiter le moindre régulateur.

Commençons par expliquer quelques termes.

L'oscillateur est un composant qui permet de cadencer le microcontrôleur. C'est en général un quartz de 8MHz ou 16MHz.

Il est possible de faire fonctionner le microcontrôleur sans oscillateur externe. Dans ce cas, un oscillateur interne est utilisé.

Voir paragraphe : 5. Utiliser l'oscillateur interne

Un USBASP est un petit boîtier programmateur que l'on branche sur le connecteur ICSP d'une carte UNO ou NANO pour charger son bootloader ou une application :


Qu'est ce qu'un "ARDUINO as ISP" ?

C'est une carte ARDUINO (généralement UNO ou NANO) que l'on utilise comme programmateur, tout comme un USBASP. Un firmware "ArduinoISP" doit être chargé dans la carte.

Plus de précisions ici : ARDUINO : le BOOTLOADER

1. Le schéma

1.1. La version DIP28

La version DIP28 est équipée d'un ATMEGA328P DIL (Dual In Line) 28pins :

Ce circuit peut facilement être réalisé sur une breadboard. Si l'on cherche simplement à programmer un ATMEGA328P DIL, on peut carrément utiliser une carte UNO. Il suffit d'extraire le microcontrôleur d'origine et le remplacer par celui que l'on désire programmer :

Il vaut mieux utiliser une pince plate à becs fins pour l’extraction.

1.1. La version TQFP32

La version TQFP32 est équipée d'un ATMEGA328P en boîtier CMS :

Attention : ces deux schémas peuvent paraître identiques mais le brochage du microcontrôleur est très différent.

Pour un maquettage sur breadboard on pourra utiliser un adaptateur TQFP32 / DIL :

Pour souder un boîtier TQFP sur une carte je vous conseille de regarder ceci :

https://riton-duino.blogspot.com/2019/07/soudure-dun-microcontroleur-cms.html

Pour les fainéants il y a plus facile :


Le schéma est pourvu de tous les composants nécessaires :

  • l'ATMEGA328P
  • oscillateur 8MHz ou 16MHz
  • LED power ON
  • LED sur D13
  • connecteur ICSP
  • convertisseur USB / série
  • régulateur 5V ou 3.3V

Le condensateur C3 permet de redémarrer l'ATMEGA328P avant le chargement, donc à l'ouverture du port série : le RTS monte. On peut aussi utiliser la broche DTR du convertisseur.

Dans le cas où l'on désire implanter les composants sur un PCB il est conseillé de respecter le brochage du connecteur ICSP (tel qu'il est sur le schéma) afin qu'il corresponde à celui d'une carte UNO ou NANO :



Ainsi, vous n'aurez aucun mal à utiliser un programmateur standard, USBASP par exemple.

Pour ce qui est du connecteur 5 points réservé à la liaison série, faites en fonction de votre adaptateur USB / série. L'idéal est de pouvoir l'embrocher directement sur un connecteur adapté.

2. Faire ses choix

Car il va bien falloir faire des choix :

  • tension d'alimentation
  • fréquence de l'oscillateur
  • technique de chargement

Comme vous vous en doutez la tension d'alimentation sera dépendante de la fréquence de l'oscillateur.

En fait ce sera probablement l'inverse : vous choisirez plutôt l'oscillateur en fonction de la tension d'alimentation que vous envisagez.

2.1. Alimentation

Sur le schéma on voit 3 jumpers :

  • JP1 : alimentation à l'aide d'un régulateur
  • JP2 : alimentation par le connecteur ICSP
  • JP3 : alimentation par le convertisseur USB / série

Bien entendu, un jumper peut être remplacé par un simple fil.

Une alimentation en 3.3V pourra être envisagée uniquement si la fréquence de l'oscillateur est de 8MHz.

2.1.1. Alimentation à l'aide d'un régulateur

Le régulateur sera choisi en fonction des besoins :

  • tension 5V ou 3.3V
  • courant nécessaire

La tension d'alimentation sera choisie en fonction de la fréquence de l'oscillateur (voir plus loin).

Lorsqu'on a besoin de maximum 100mA, un HT7550-1 (5V) ou un HT7533-1 (3.3V) est un très bon choix.

Pour des besoins supérieurs un HT7350-1 (5V) ou un HT7333-1 (3.3V) pourra fournir 250mA, un HT7850-1 (5V) ou un HT8333-1 (3.3V) pourra fournir 500mA.

Cette série de régulateurs est très adaptée à des montages fonctionnant sur batterie ou pile. Si ce n'est pas votre besoin, vous pourrez faire votre marché ici :

https://riton-duino.blogspot.com/2018/11/les-regulateurs-ldo.html

2.1.2. Alimentation par le connecteur ICSP

Le montage peut être alimenté par le connecteur ICSP, mais la tension d'alimentation va dépendre du programmateur utilisé :

  • USBASP : 5V
  • USBTINY : 5V
  • ARDUINO as ISP : 5V ou 3.3V

Il est à noter que programmer un ATMEGA328P pourvu d'un oscillateur 8MHz alimenté en 5V ne l'empêchera pas de fonctionner sous 3.3V ensuite.

2.1.3. Alimentation par le convertisseur USB / série

L'alimentation peut également provenir du convertisseur USB / série.

Suivant le modèle, celui-ci pourra fournir une tension de 5V, 3.3V ou les deux. La plupart des convertisseurs sont équipés d'un jumper ou d'un switch permettant de choisir la tension de travail :

FT323RL 5V ou 3.3V
FT323RL 5V ou 3.3V

Cette solution sera certainement la moins apte à fournir un courant important. Ce courant dépendra du chip utilisé sur le convertisseur (FT232RL, CH340, etc.).

2.2. Version 16MHz ou 8MHz

La version 16MHz sera équipée d'un oscillateur 16MHz. Elle sera obligatoirement alimentée en 5V.

La version 8MHz sera équipée d'un oscillateur 8MHz. Elle pourra être alimentée en 3.3V ou 5V.

2.3. Version ICSP seul

Un ATMEGA328P est parfaitement capable de fonctionner sans bootloader, et l'application peut être chargée à l'aide du connecteur ICSP et d'un programmateur :

  • un USBASP
  • un USBTINY
  • un ARDUINO + firmware "ARDUINO as ISP"
  • etc.

Dans ce cas, le convertisseur USB / série (FT232RL sur le schéma) est inutile (sauf vous avez besoin d'une ligne RS232 par ailleurs).

On peut supprimer aussi le condensateur C3.

Il faudra alimenter le montage soit par un régulateur soit par le connecteur ICSP.

Rappel : en l'absence de bootloader, le chargement par la ligne série est impossible.

2.4. Version ICSP + convertisseur USB / série

Le connecteur ICSP sera utilisé pour le chargement du bootloader, et l'application (sketch) sera chargée à l'aide du convertisseur USB / série.

On peut se demander quel est l'intérêt de charger l'application à l'aide de la ligne série alors que l'on peut très bien le faire par le connecteur ICSP, en se passant de bootloader ?

Il y beaucoup d'arguments contre :

  • cela implique une double connectique (ICSP + Convertisseur USB / série), mais si vous avez besoin d'une ligne RS232 par ailleurs, le convertisseur USB / série sera présent de toutes façons
  • un condensateur de RESET est nécessaire (C3 sur le schéma)
  • la place occupée en mémoire par le bootloader n'est pas négligeable

Mais on va vous laisser le choix.

Lorsque l'on désire réaliser le chargement par la ligne série, le bootloader est indispensable, et un convertisseur USB / série doit être installé (FT232RL sur le schéma).

Il faudra alimenter le montage soit par un régulateur soit par le connecteur ICSP, soit pas le convertisseur USB / série.

Il est à noter qu'une fois que le bootloader est chargé, on peut retirer le programmateur ICSP.

3. Le chargement

Nous allons aborder ici la partie chargement du logiciel. Dans les paragraphes suivants je considère uniquement deux cas :

  • USBASP
  • Arduino as ISP

Mais la marche à suivre avec un autre programmateur  est similaire.

3.1. USBASP

Le boîtier USB ASP  peut être livré nu :

Dans ce cas, la pin 1 est située à droite (en regardant le connecteur de face) de l'encoche du connecteur 10 points mâle. Un petit triangle sérigraphié sur la carte indique son emplacement.

Il peut également être livré avec une nappe et un adaptateur 10pins / 6pins directement connectable sur le connecteur 6 points d'une carte UNO ou NANO :


Dans ce cas, la pin 1 est située à droite (vu de dessus) de l'encoche du connecteur 6 points. Une sérigraphie est normalement présente.

Le boîtier pourra être branché sur le connecteur ICSP comme suit :



A gauche, la version avec adaptateur 10pins / 6pins, à droite la version sans adaptateur.

Bien entendu, pour un maquettage sur breadboard, des fils DUPONT peuvent être utilisés entre le connecteur du boîtier et la breadboard.

Pour fonctionner sous Windows, un driver sera nécessaire : https://zadig.akeo.ie/

3.2. ARDUINO as ISP

Une carte ARDUINO UNO ou NANO peut être utilisée :

On peut se demander s'il ne serait pas intéressant de relier le connecteur ICSP de la carte qui va servir de programmateur au connecteur ICSP du montage.

Non, car le RESET va provenir de la pin D10 de la carte programmateur.

Remarque : rien ne vous empêche de relier la broche 3.3V de la UNO à la broche VCC du connecteur ICSP, si votre montage doit être alimenté en 3.3V.

Si l'on envisage d'utiliser cette solution sur une carte maison pourvue d'un connecteur ICSP il est intéressant de se fabriquer un petit câble 6 points :

Ce câble pourra aussi servir à recharger le bootloader d'une autre carte ARDUINO.

A noter : la pin 1 du connecteur ICSP n'est pas toujours sérigraphiée, en particulier sur les UNO chinoises :

ARDUINO UNO R3

ARDUINO NANO

Si vous utilisez un connecteur IDC 6 points pour réaliser votre câble, rien n'indique l'emplacement de la pin 1. J'ai dessiné une flèche :

Ce connecteur est prévu pour du câble en nappe. Sertir six fils séparés sera plus compliqué.

Le brochage pour un connecteur IDC est le suivant :

  • 1 (jaune) MISO : broche 12 de la UNO
  • 2 (rouge) VCC : 5V de la UNO
  • 3 (vert) CLK : broche 13 de la UNO
  • 4 (violet) MOSI : broche 11 de la UNO
  • 5 (blanc) RESET : broche 10 de la UNO
  • 6 (noir) GND : GND de la UNO

Un boîtier de connecteur DUPONT (ou NDR) 6 points est plus facile à trouver, et plus facile à sertir. Une petite flèche indique la pin 1 :

Attention : la pin 1 de ce connecteur NDR n'est pas au même endroit que sur le connecteur IDC. Les pins 1 et 5, 2 et 6 sont à intervertir.

Cela veut dire également que lorsque vous allez connecter ce câble à une UNO ou NANO la pin 1 ne va pas se situer en face du 1 sérigraphié sur la carte. Mais ce n'est pas important, l'essentiel est que les pins de la carte reçoivent les bons signaux, n'est-ce pas ?

Dans les deux cas (IDC ou NDR), vous pouvez déposer une petite goutte de peinture ou de vernis à ongle rouge sur le connecteur en vis à vis de la pin 1 de la carte.

Le brochage pour un connecteur NDR est le suivant :

  • 1 (blanc) RESET : broche 10 de la UNO
  • 2 (noir) GND : GND de la UNO
  • 3 (vert) CLK : broche 13 de la UNO
  • 4 (violet) MOSI : broche 11 de la UNO
  • 5 (jaune) MISO : broche 12 de la UNO
  • 6 (rouge) VCC : 5V de la UNO

Aidez-vous de mes photos, ce sera plus simple.

Ici, rechargement du bootloader d'une NANO. Une UNO est utilisée comme carte programmateur :

Et pourquoi ne pas laisser ce câble à demeure sur la UNO qui servira de programmateur, si vous l'utilisez souvent ?

Pour pouvoir fonctionner comme un programmateur, la carte ARDUINO va avoir besoin d'un logiciel (ou firmware) nommé ArduinoISP.

Pour charger ArduinoISP, à partir des menus de l'IDE ARDUINO, procédez comme suit :

  • choix de la carte :
    • Outils / type de carte
      • Arduino UNO
    • ou
      • Arduino NANO
    • Outils / Processeur (si la carte est une NANO)
      • ATmega328P
    • ou
      • ATmega328P (Old Bootloader)
  • sketch
    • Fichier / Exemples / 11.ArduinoISP
      • ArduinoISP
  • chargement :
    • Cliquez sur l'icône Téléverser
    • ou
    • Menu Croquis / Téléverser
    • ou
    • CTRL+U

Votre programmateur est prêt à être utilisé.

3.3. Le bootloader

Comme dit plus haut, le chargement du bootloader se fait obligatoirement à l'aide d'un programmateur.

Si vous n'envisagez pas d'utiliser le bootloader, passez directement au paragraphe 3.4.

Pour le chargement du bootloader, à partir des menus de l'IDE ARDUINO, procédez comme suit :

  • choix de la carte :
    • Outils / type de carte
      • Arduino PRO or PRO MINI
    • Outils / Processeur (en fonction de l'oscillateur choisi)
      • ATmega328P (5V, 16MHz)
    • ou
      • ATmega328P (3.3V, 8MHz)
  • choix du programmateur :
    • Outils / Programmateur
      • USBasp
    • ou
      • Arduino as ISP
  • chargement :
    • Outils / Graver la séquence d'initialisation

Votre bootloader est installé.

3.4. L'application (sketch)

Deux cas sont à considérer.

3.4.1. Version sans bootloader

Si vous envisagez de vous passer de bootloader, la marche à suivre est celle-ci :

  • choix de la carte :
    • Outils / type de carte
      • Arduino PRO or PRO MINI
    • Outils / Processeur (en fonction de l'oscillateur choisi)
      • ATmega328P (5V, 16MHz)
    • ou
      • ATmega328P (3.3V, 8MHz)
  • choix du programmateur :
    • Outils / Programmateur
      • USBasp
    • ou
      • Arduino as ISP
  • chargement :
    • Croquis / Téléverser avec un programmateur
    • ou
    • CTRL+SHIFT+U

Votre application est installée.

3.4.2. Version avec bootloader

Pour charger votre application, la marche à suivre est habituelle :

  • choix de la carte :
    • Outils / type de carte
      • Arduino PRO or PRO MINI
    • Outils / Processeur (en fonction de l'oscillateur choisi)
      • ATmega328P (5V, 16MHz)
    • ou
      • ATmega328P (3.3V, 8MHz)
  • chargement :
    • Cliquez sur l'icône Téléverser
    • ou
    • Menu Croquis / Téléverser
    • ou
    • CTRL+U

Votre application est installée.

4. Photos

Ci-dessous deux images des montages réalisés.

Montage avec ATMEGA328P DIP28 :

La configuration est la suivante :

  • ATMEGA328P DIP28
  • oscillateur 8MHz
  • alimentation 3.3V par le l'adaptateur USB / série FT232RL
  • bootloader chargé + sketch blink

Le cavalier de l'adaptateur FT232RL est positionné sur 3.3V

L'USBASP est branché par des fils DUPONT. Le rouge (5V) n'est pas connecté.

La LED bleue sur D13 clignote à la bonne vitesse. Le sketch blink modifié affiche un petit message sur le terminal à chaque clignotement, le baudrate est OK.

Sur la beadboard, à droite, l'oscillateur 16MHz utilisé pour un test précédent.

Montage avec ATMEGA328P TQFP32 :

La configuration est la suivante :

  • ATMEGA328P TQFP32 sur adaptateur TQFP32 / DIP32
  • oscillateur 16MHz
  • alimentation 5V par le l'adaptateur USB / série FT232RL
  • bootloader chargé + sketch blink

Le cavalier de l'adaptateur FT232RL est positionné sur 5V

L'USBASP est branché par des fils DUPONT. Le rouge (5V) n'est pas connecté.

La LED bleue sur D13 clignote à la bonne vitesse. Le sketch blink modifié affiche un petit message sur le terminal à chaque clignotement, le baudrate est OK.

5. Utiliser l'oscillateur interne

Pourquoi se passer de l'oscillateur externe 8MHz ou 16MHz ?

Pour quelques bonnes raisons :

  • simplicité
  • coût
  • encombrement
  • alimentation possible en 3.3V ou 5V

Par contre cela se fera certainement au prix d'une certaine perte de précision en fréquence.

Utiliser l'oscillateur interne oblige à modifier le fichier boards.txt situé dans le répertoire suivant (xxxxxx étant le répertoire utilisateur) :

Linux : /home/xxxxxx/.arduino15/packages/arduino/hardware/avr/1.6.207/

Windows : C:\Users\xxxxxx\AppData\Local\Arduino15

Nous allons ajouter les lignes suivantes dans ce fichier, entre les définitions liées aux cartes PRO MINI :

## Arduino Pro or Pro Mini (3.3V, 8 MHz) w/ ATmega328P

ICI

## Arduino Pro or Pro Mini (5V, 16 MHz) w/ ATmega168

Ces lignes visent principalement à modifier les fuses de l'ATMEGA328P :

## Arduino Pro or Pro Mini (3.3V, 8 MHz internal) w/ ATmega328P
## ---------------------------------------------------
pro.menu.cpu.8MHzinternal=ATmega328P (3.3V, 8 MHz internal)

pro.menu.cpu.8MHzinternal.upload.maximum_size=30720
pro.menu.cpu.8MHzinternal.upload.maximum_data_size=2048
pro.menu.cpu.8MHzinternal.upload.speed=57600

pro.menu.cpu.8MHzinternal.bootloader.low_fuses=0xC2
pro.menu.cpu.8MHzinternal.bootloader.high_fuses=0xDA
pro.menu.cpu.8MHzinternal.bootloader.extended_fuses=0xFD
pro.menu.cpu.8MHzinternal.bootloader.file=atmega/ATmegaBOOT_168_atmega328_pro_8MHz.hex

pro.menu.cpu.8MHzinternal.build.mcu=atmega328p
pro.menu.cpu.8MHzinternal.build.f_cpu=8000000L

J'ai étendu le paramétrage de la PRO MINI par habitude, ayant de grandes affinités avec cette carte, mais rien n’empêche de créer une nouvelle carte UNO ou NANO.

Il faut relancer l'IDE ARDUINO.

Vous devez voir apparaître un nouveau choix dans le sous-menu Processeur de la carte Arduino PRO MINI :

  • Outils / type de carte
    • Arduino PRO or PRO MINI
  • Outils / Processeur (en fonction de l'oscillateur choisi)
    • ATmega328P (3.3V, 8MHz internal)

Ensuite nous allons retirer l'oscillateur externe et les deux condensateurs C1 et C2 de 22pF.

Ensuite il faut utiliser la méthode de chargement de l'application sans bootloader :

3.4.1. Version sans bootloader

Le choix du processeur sera le suivant :

  • choix de la carte :
    • Outils / type de carte
      • Arduino PRO or PRO MINI
    • Outils / Processeur (en fonction de l'oscillateur choisi)
      • ATmega328P (3.3V, 8MHz internal)

Que ce soit avec le bootloader ATmegaBOOT_168_atmega328_pro_8MHz.hex ou optiboot_atmega328.hex  le chargement par la ligne série ne semble pas donner de résultat. Il y a peut être une autre option.

En alimentant en 5V ou 3.3V la LED bleue sur D13 clignote à la bonne vitesse. Le sketch blink modifié affiche un petit message sur le terminal à chaque clignotement, le baudrate est OK.

A noter : il est possible aussi de diviser l'horloge interne par 8 pour obtenir un fonctionnement à 1MHz :

pro.menu.cpu.8MHzinternal.bootloader.low_fuses=0x42
pro.menu.cpu.8MHzinternal.build.f_cpu=1000000L

Pour calculer les fuses on peut utiliser ce site :

http://eleccelerator.com/fusecalc/fusecalc.php?chip=atmega328p

6. Conclusion

Cet article vous donnera peut être envie d'implanter un ATMEGA328P sur un PCB personnel.


Cordialement
Henri

7. Mises à jour

26/07/2019 : 4. Photos : montage avec ATMEGA328P TQFP32
                     5. Utiliser l'oscillateur interne
27/07/2019 : 3.2. ARDUINO as ISP : photos

25 commentaires:

  1. Bonjour,
    C'est la première fois que je peux lire une méthode exhaustive de manipulation des micro processeurs ATMEGA en français qui je le pense vas m'aider beaucoup et je dis Bravo a son auteur . j'aurais certainement d'autres questions à lui poser au fur et mesure de ma compréhension de magnifiques outils. Merci encore.

    RépondreSupprimer
  2. Je m'associe au commentaire précédent. Un grand Bravo et un grand Merci à Henri Bachetti.
    Dominique.

    RépondreSupprimer
  3. J'ai vraiment compris pas mal de chose grâce à ce tuto, merci bien! Mais il me reste une question: a quoi sert un bootloader si on peut programmer sans bootloader ?

    RépondreSupprimer
    Réponses
    1. Cela simplifie les choses. Un simple câble USB suffit pour programmer la carte.

      Supprimer
  4. Bjr à tous et bjr à l'auteur.
    1: Petite remarque concernant l'information dans le milieu de cette page: "On peut se demander s'il ne serait pas intéressant de relier le connecteur ICSP de la carte qui va servir de programmateur au connecteur ICSP du montage."
    Il est indiqué que la réponse est non. En fait, on peut à la condition de couper la piste "Reset" au pied du connecteur 6 pins du Nano et de souder un fil entre "D10" et la broche 5 de ce connecteur.

    2: J'ai également soudé 3 leds comme indiqué dans le source "Arduino as ISP" afin d'avoir les indicateurs Heartbeat, Error et Mode. Très pratique lorsque c'est la 1ere fois qu'on se lance à utiliser l'ISCP.

    3: Si ça peut aider, dans les 1er temps, il m'était impossible de pousser un binaire vers le 328p depuis l'IDE 1.8.8. Malgré plusieurs lectures... plusieurs modifications de configuration de l'IDE (comme indiqué ici) et plusieurs conf du port série. La solution est venue en utilisant directement la commande avrdude. Je ne sais pas comment l'IDE gère les échanges avec mon Nano "spécialisé ISCP" mais j'étais tenu en échec... Après avoir valider pour la nième fois le câblage, j'ai essayé de voir si le 328p était reconnu avec la commande:
    avrdude -P /dev/cu.wchusbserial1420 -b 19200 -c stk500v1 -p atmega328p -n -C ./avr/etc/avrdude.conf -v
    Rien... Erreur... pas de dialogue et la led Erreur!
    Par défaut: 115200 est positionné dans le code "Arduino as ISP". Hors, le HB consomme du cycle mcu et on voit bien un décalage à l'oscillo... Après avoir fixé la vitesse à 19200 dans le source, repousser le bin dans le Nano via l'IDE et avoir implémenté la commande avrdude dans une console, j'ai enfin la possibilité de pousser mes programmes dans mes cartes perso basées sur des mega328p.

    Merci à l'auteur de cet article qui m'a permis de me lancer à utiliser ISCP. Reste quelques détails à régler pour programmer mes cartes en petite série.

    RépondreSupprimer
  5. Merci pour ces commentaires et bonne continuation.

    RépondreSupprimer
    Réponses
    1. Merci à vus d'avoir débroussailler le terrain :-)

      Supprimer
  6. Superbe documentation.
    Question: Serait-il possible de modifier le code du bootloader pour que la carte puisse être reprogrammée par ethernet ?

    Cela permettrait de faire de la maintenance corrective à distance.

    Merci

    RépondreSupprimer
    Réponses
    1. Un : Cela demanderait un travail énorme : intégration du core ARDUINO + Ethernet au bootloader.
      Deux : la place occupée par un tel bootloader serait prohibitive : environ 40% de l'espace en FLASH.
      Mis à part cela rien n'est impossible.

      L'autre solution serait de brancher un ESP8266 sur les lignes RX-TX de l'ARDUINO et d'implémenter un logiciel du type OTA, en utilisant le protocole STK500.

      Il y a aussi ceci : https://github.com/pkarsy/rfboot

      Supprimer
  7. merci bien pour le doc...

    RépondreSupprimer
  8. Bonjour et merci pour toutes ces infos.
    Je voudrais flasher un ATmega328PU en utilisant directement le port usb.
    Pour cela, j'utilise un convertiseur USB/serie avec son Tx sur le Rx du microcontrôleur et son Rx sur le Tx du microcontrôleur.
    Préalablement, j'ai flashé le microcontrôleur en ISP avec un arduino UNO en 8MHz interne mais j'ai fais l'erreur de cocher l'option 'pas de bootloader'. Donc, je ne peux pas utiliser le port série pour uploader mes applications.
    Maintenant, je voudrais le reflasher avec un bootloader toujours en ISP avec le UNO mais lorsque je lance 'Gaver la séquence d'initialisation', le ATmega328 ne répond pas.
    Par contre, je peux uploader en ISP sans problème.
    Pouvez-vous me donner des idées pour graver le bootloader dans le ATmega328? Je ne sais plus quoi faire..

    RépondreSupprimer
    Réponses
    1. Une UNO tourne normalement à 16MHz. Il y a soit une erreur, soit elle a été modifiée.
      Il n'y a aucune différence entre uploader un sketch par ISP (menu Croquis / Téléverser avec un programmateur) et graver la séquence d'initialisation.
      Avez-vous bien choisi "Arduino as ISP" comme programmateur ?

      Supprimer
  9. J'ai gravé une première fois la séquence d'initialisation avec les paramètres:
    - Clock: internal 8MHz
    - Bootloader: No
    Questions que je me pose:
    - est-ce qu'on a le droit de graver une séquence d'initialisation une deuxième fois?
    - une fois que le micro est gravé avec clock interne, peut-on graver une séquence d'initialisation?
    - quelle conséquence si le condensateur C3 100nF est absent?
    - peut-on uploader un programme en ISP in situ alors que les ports SPI sont utilisés par l'application?

    RépondreSupprimer
  10. J'ai oublié mais "OUI" j'ai utilisé Arduino as ISP comme programmateur.

    RépondreSupprimer
    Réponses
    1. Je me demande quel logiciel vous utilisez pour avoir une option Bootloader: No
      1) autant de fois que l'on veut.
      2) oui
      3) si C3 est absent, le RESET de la carte ne se fait pas.
      4) je ne vois pas ce qui pourrait gêner la programmation par ISP si le SPI est utilisé. Le SPI est un bus.

      Supprimer
    2. J'utilise l'IDE Arduino version 1.8.12
      C3 est normalement connecté au DTR du module USB/TTL je suppose. Mais mon module ne comporte pas cette broche alors je ne peux relier C3 à rien. J'ai lu quelque-part que dans ce cas, il faut faire un reset manuel au bon moment. Est-ce bien cela?
      C'est vrai que le SPI est un bus mais sur une breadboard c'est pas facile de câbler tout le monde..

      Supprimer
    3. il faut faire un reset manuel au bon moment. Est-ce bien cela?
      Oui, au bon moment, pas toujours facile.

      Supprimer
    4. ENFIN! J'ai réussi à placer le bootloader dans mon atmega328. Je crois que tous mes ennuis venaient du fait que je fonctionnais sans quartz. Voici ce que j'ai fais après avoir remis le quartz:
      Burning du bootloader dans l'atmega328
      =========================

      - Mettre le quartz en place (sinon ça ne marchera pas!)
      - Tx du module usb/ttl sur borne 3 de l'atmega328
      - Rx du module sur borne 2 de l'atmega328

      2) Mise en place des fils du SPI pour le burning par ISP
      - 10 plaque UNO vers 1 (reset) du atmega328
      - 11 plaque UNO vers 17 du atmega328
      - 12 plaque UNO vers 18 du atmega328
      - 13 lque uno vers 19 du atmega328
      - mettre résistance de 10k en rappel sur borne 1 reset du atmega328
      - connecter +5V et 0V sur 7 et 8 du atmega328.

      Menu Outils de l'IDE Arduino:
      Type de carte: Minicore ATmega328 8 MHz internal clock
      Varian: 328P/328PA
      Bootloader: Yes (UART0)
      Programmateur: Arduino as ISP

      Connecter l'usb de la carte arduino et sélectionner le port dans le menu Outils.
      Dans menu Outils, sélectionner "Graver la séquence d'initialisation".

      Voilà. On peut maintenant utiliserle port série de l'atmega328 pour uploader les fichiers .hex des programmes.

      Supprimer
    5. Et pourtant j'ai utilisé un ATMEGA328 avec l'oscillateur interne. Il faut modifier le fichier boards.txt. Voir 5. Utiliser l'oscillateur interne

      Supprimer
    6. Une fois que le bootloader est dans le microcontrôleur, je pense que l'on peut l'utiliser normalement avec ou sans oscillateur interne. Je vais faire quelques essais pour confirmer cela.

      Juste un mot sur le blog: sous firefox, je ne peux me connecter en tant que 'bisra'. Je suis obligé de rester anonyme. Alors que sous chrome, pas de problème.

      Supprimer
    7. C'est probablement que sous Chrome vous être connecté à google automatiquement.

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

    RépondreSupprimer
  12. Tres bel article. Merci de ce travail

    RépondreSupprimer