Suite à quelques problèmes de téléversement, problème assez fréquent si l’on en croit le forum (http://forum.arduino.cc/index.php?topic=574627.0), j’ai décidé de préparer quelques puces de rechange. Dans mon cas, je prépare des puces pour ma carte Arduino Uno R3.
Explications
Le coeur de la carte Arduino est la puce enfichée (et détachable de son support). On l’appelle ATMEGA328P. Cette puce peut s’acheter pour moins d’un euro. Je fais donc l’acquisition de 4 de ces puces.
Ces puces permettent notamment de déporter hors de la carte Arduino un montage. Mais ce sont également les pièces de rechange pour palier à des problèmes de téléversement. Mais comme les préparer nécessite un téléversement, autant les préparer à l’avance !
Montage
On réalise le montage suivant que l’on trouve ici:
Pour cela, il nous faut:
- un crystal à 16MhZ
- une résistance de 10k-Ohm
- des condensateurs de 18 à 22 picofarads
On place l’ATMEGA au milieu de ce montage relié à notre carte Uno fonctionelle.
Graver le bootloader
Depuis l’éditeur, on réalise les étapes suivantes:
- On charge le scénario ArduinoISP via : File/Example/11.ArduinoISP/ArduinoISP
- On téléverse le scénario sur l’Arduino
- On choisit d’utiliser la carte R3 comme programmateur via Tools/Programmer/Arduino as ISP
Ainsi notre carte R3 est configurée pour programmer une puce extérieure.
- On choisit la carte Uno via Tools/Boards/Arduino-Genuino Uno, ce qui va configurer notre puce pour être compatible de carte Uno.
- On grave le programme d’initialisation ou bootloader via Tools/Burn bootloader
Après quelques instants, la puce ATMEGA extérieure est maintenant configurée à l’identique de la puce présente sur la carte. C’est à dire que vous pouvez échanger une par l’autre à tout instant. Si un problème de téléversement futur vous arrive sur votre carte Originale, une de causes possibles est la corruption du bootloader sur la puce originale. Avec ces étapes, vous avez une pièce de rechange !
Note sur les fréquences d’oscillateurs
Vous vous rappelez peut être l’article précédent http://randomcraftr.com/?p=224. Le montage était plus simple, sans oscillateur externe. Cela permet d’avoir une puce qui fonctionne en autonomie à l’extérieure de la carte Uno, mais pas de remplacer celle de la carte Uno. En effet, l’ATMEGA328P possède une horloge interne à 8MHz qui peut suffire pour les montages hors carte Uno. Mais pour remplacer la puce de la carte Uno, il faut absolument configurer son ATMEGA avec un oscillateur à 16MHz, sinon cela ne fonctionnera pas.
Bonjour,
Je viens de lire avec intérêt vos deux articles sur le sujet.
J’ai personnellement acheté 3 Arduino Nano (sur Banggood).
Deux fonctionnent très bien, par contre le troisième en veut rien entendre, erreur au téléversement!
Par comparaison entre les deux (Bons) et le troisième, voici ce que le troisième me donne en fin de téléversement…
****************************************************************
Reading | #####
avrdude: stk500_paged_load(): (a) protocol error, expect=0x10, resp=0x00
avrdude: stk500_paged_load(): (a) protocol error, expect=0x10, resp=0x00
##avrdude: stk500_cmd(): programmer is out of sync
avr_read(): error reading address 0x0000
read operation not supported for memory « flash »
avrdude: failed to read all of flash memory, rc=-2
avrdude: stk500_disable(): protocol error, expect=0x14, resp=0x00
avrdude done. Thank you.
****************************************************************
La question que je me pose:
« Est-ce que je peux bootloader à partir de ma carte ‘Arduino Uno’ ou faut-il le faire à partir de l’une des deux Nano qui fonctionne?
d’avance merci.
Le chipset de l’Arduino nano étant intégré, la méthode présentée ici pour graver un bootloader n’est du coup plus applicable. Existe-t-il un moyen de graver un bootloader pour un chipset intégré sur carte ? Je n’en ai aucune idée. En tout cas l’erreur semble correspondre à un bootloader corrompu.
Je découvre ici que le même montage sert non seulement à graver le bootloader sur un ATMEGA, mais également à uploader un programme ensuite sur cette même puce.
https://www.instructables.com/How-to-program-a-AVR-arduino-with-another-arduin/