[résolu] Problème lors du premier upload d'un atmega328p

Bonjour à toutes et à tous,

J'ai récemment fait l'acquisition d'un ensemble d'atmega328p seuls, dans le but de miniaturiser un futur projet actuellement développé avec un arduino uno R3.

Pour la programmation de ces atmega328p seuls, je dispose d'une clé USB "tiny avr programmer" qui fonctionne parfaitement.

Voici les branchements de ce dernier, qui permettront de comprendre les autres schémas.
Attention, lorsqu'il est écrit "MISO", comprendre qu'il faut brancher sur le "MISO" de l'AVR, et non que c'est le "MISO" du programmateur.

tiny-programmer

J'ai donc préparé un premier montage sur breadboard pour effectuer un upload basique d'un code blink. Avant de faire mon upload, je voulais lire les fuses des atmega.

avrdude -c usbtiny -p atmega328p  -nv

Résultat ? Un échec cuisant. Merci de noter que j'ai également testé en rajoutant un oscillateur externe de 16Mhz, sans succès. Cf plus bas, mes atmegas sont configurés par défaut pour utiliser l'oscillateur interne.

EDIT : Suite aux premiers retours, j'ai pu corriger ce premier montage en ajoutant l'alimentation de la broche AVCC en +5V. L'oscillateur n'est pas nécessaire dans mon montage car mes atmega328p sont configurés pour utiliser leur horloge interne. La seule question encore en suspend ici est de savoir pourquoi cette alimentation du AVCC est nécessaire, et uniquement avant modification des fuses.

avrdude: Using SCK period of 10 usec
avrdude: initialization failed, rc=-1
         Double check connections and try again, or use -F to override
         this check.

Je me suis tourné vers mon arduino uno R3. Je démonte donc l'ancien atmega328p, j'installe le nouveau dont je dispose, je branche mon tiny avr sur l'arduino uno R3 cette fois, et je réexécute exactement la même commande, toujours avec avrdude. Et là, ça fonctionne ?!

Reading | ################################################## | 100% 0.02s

avrdude: Device signature = 0x1e950f
avrdude: safemode: lfuse reads as 62
avrdude: safemode: hfuse reads as D9
avrdude: safemode: efuse reads as 7

avrdude: safemode: lfuse reads as 62
avrdude: safemode: hfuse reads as D9
avrdude: safemode: efuse reads as 7
avrdude: safemode: Fuses OK

Je fais un essai d'upload de code et cela fonctionne (j'arrive à faire clignoter la diode D13 de debug).

Je teste donc de burn le bootloader arduino (réussite), puis de re-téléverser mon code via mon programmateur (réussite). Je regarde maintenant les fuses

low = FF
high = DE
extented = 5

Je démonte l'atmega328p et je le remets dans mon premier montage, en prenant soin de rajouter un oscillateur (16mhz) => L'upload de code fonctionne, la récupération des fuses également.

c2

Je n'arrive absolument pas à comprendre pourquoi mon programmateur ne fonctionnait pas lorsque l'atmega328p était seul, et que cela ai fonctionné dès que je l'ai installé dans l'arduino uno. La programmation est passée dans les 2 cas par le programmateur AVR. Il n'y avait pas d'autre alimentation, je n'ai pas utilisé l'USB de l'arduino uno ni aucune autre source d'alimentation, je n'ai pas modifié la moindre ligne de code.

Même si cela peut sembler futile, j'ai besoin de comprendre ce qui m'échappe.

Merci d'avance pour votre aide !

Bonjour,
J en ai 2 de type différents et j ai jamais reussi les faire fonctionner.
Pour l’un des deux il faudrait mettre a jour son programme interne.
Pour l autre je sais pas.
D ou le fait de fabriquer une carte arduino isp spécifiquement dédiée.
Bon courage.
A priori pour toi c est pas le programmateur..
Il te manque les deux condensateur sur le quartz mais bon j ai reussi l upload sans quartz deja
Critique ou pas selon atmega ?..
Essaie avec les deux condos..

L’horloge a besoin de condensateurs

Un exemple pris sur internet

Un tuto en français
http://www.chicoree.fr/w/Arduino_sur_ATmega328P

Bonjour à tous les deux, merci pour vos réponses et d'avoir pris le temps de me répondre. J'ai (presque) résolu ma problématique, et pas via les condensateurs mais via l'alimentation du port AVcc.

J'avais déjà exclu le problème de condensateur de 2 manières:

  1. j'avais fait le montage avec l'oscillateur, et j'avais rajouté 2 condensateurs reliés à la masse comme sur ton image @J-M-L , et ce sans succès
  2. étant donné que, avec rigoureusement le même montage (avec oscillateur externe sans condensateur), j'arrivais à programmer l'atmega328p uniquement après un "refusage", je me suis dit que mon montage devait être bon, même sans condensateur.

La solution est venue en regardant ton lien @J-M-L. Sur ce dernier la broche AVcc est alimentée en +5V, et c'est ça qui faisait défaut !! La preuve, j'ai pu programmer mon atmega328p SANS oscillateur externe, et donc sans condensateur également.

Le mystère se lève partiellement. Sur l'arduino uno R3 la broche AVcc doit "automatiquement" être alimentée en +5V.

Maintenant le mystère qu'il reste est de savoir pourquoi, après avoir "refusé" mon atmega328p, l'alimentation de ce port n'est plus nécessaire pour sa programmation ?

Une idée sur ce point ?

Par défaut, les ATmega sont configurés avec l'horloge interne. Tant qu'on ne modifie pas les fusibles internes en ce sens, le CPU fonctionne sur son horloge interne.

La datasheet de l'ATmega insiste bien sur le fait qu'il faut appliquer la tension d'alimentation sur Vcc ET AVcc

AVCC is the supply voltage pin for the A/D Converter, PC3:0, and ADC7:6. It should be externally connected to VCC, even if the ADC is not used.

de plus

AVCC must not differ more than ±0.3V from VCC

Sur la UNO, Avcc et Vcc sont reliés.

En fait Vcc et AVcc sont "plus ou moins" réunis en interne de l'ATmega mais cela ne garantie pas le fonctionnement de celui-ci

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.