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.
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.
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 !