[Résolu] Utilisation d'un Arduino Uno pour programmer un Atmega328

Bonjour,

Je souhaite programmer des microcontrôleurs Atmega328P-PU neufs, sans succès. Après avoir pas mal consulté les forums francophones et anglophones, il est temps de poster !

Les étapes :

  • Je programme mon Arduino Uno avec le sketch "ArduinoISP", sans problème,
  • Je reproduis le circuit indiqué ici,
  • J'ajoute un condensateur 10 µF entre la masse et le reset de l'Arduino Uno, comme précisé ici (quand je l'enlève, avrdude me dit "programmer is not responding")
  • Je sélectionne le programmateur "Arduino as ISP"
  • Je sélectionne le type de carte "Arduino Uno", mais j'ai aussi essayé "Arduino Duemilanove/Nano w/ Atmega328"
  • Je sélectionne "graver la séquence d'initialisation"

Je suis sous Ubuntu, j'utilise l'interface Arduino v.2.1 avec Avrdude 6.2.

Pour le débogage, j'ai activé l'affichage des résultats détaillés pendant le téléversement. J'ai aussi ajouté les leds témoins (heartbeat, error, programming) indiquées dans le sketch "ArduinoISP"

La commande lancée par l'IDE Arduino est :

/usr/share/arduino/hardware/tools/avrdude -C/usr/share/arduino/hardware/tools/avrdude.conf -v -v -v -v -patmega328p -cstk500v1 -P/dev/ttyACM0 -b19200 -e -Ulock:w:0x3F:m -Uefuse:w:0x05:m -Uhfuse:w:0xde:m -Ulfuse:w:0xff:m

Avrdude me dit : "verification error, first mismatch at byte 0x0000 : 0xfd != 0x05" Toujours avec ces valeurs. La led Heartbeat, qui clignotait auparavant, reste allumée après la tentative de téléversement.

Après lecture de cette page, je contourne le problème en installant Avrdude 6.3 et en l'invoquant en ligne de commande plutôt que par l'IDE : cela me permet d'ignorer l'erreur.

J'ai l'impression que c'est un succès, mais en fait je n'arrive toujours à programmer le microcontrôleur. Comme sur les microcontrôleurs vierges, j'ai le message "not in sync" et, une fois sur 10, "programmer is not responding".

Après vérification, Avrdude a terminé l'écriture du bootloader avec le code d'erreur 1. J'en conclus qu'il a échoué.

Vous avez une idée de ce qui se passe ? Des astuces pour me simplifier la tâche ?

Merci

Essayez avec le code de Nick - cf la partie Programming a breadboard Atmega328P (si tout est bien branché par ailleurs et aucun composant défectueux)

Moi je me rappelle avoir fais un standalone avec ce tuto

https://domologis.fr/category/arduino-2/arduino-diy-partie-2-montage-standalone/

Merci, grâce au code de Nick Gammon, j'ai pu installer le bootloader !

Ensuite, pour ce qui est d'uploader les sketch sur le Atmega :

  • Utiliser le sketch "Arduino as ISP", ça ne marche juste pas chez moi,
  • Les méthodes qui impliquent d'enlever le Atmega présent sur l'Arduino me mettent mal à l'aise : j'ai toujours peur de la fausse manip, et c'est une opération que je vais devoir répéter régulièrement,
  • Le passage par le câble FDTI proposé par Nick Gammon est séduisant, mais il faut avoir 15 € à investir,
  • Il y a aussi les "USBASP", qui sont moins chers.

De plus, je vais utiliser mes Atmega en 8 MHz. Quelle est votre méthode favorite ?

J'ai toujours trouvé mon temps passé à bidouiller du code ou des projets plus valable que économiser 15€ Et galérer :slight_smile:

Dédier un uno sans son processeur avec un ZIF greffé dessus et c'est aussi assez efficace

bonsoir ci joint la doc que j'ai récupérée et compléter pour pouvoir:

  • Téléverser le L'ArduinoISP dans la carte uno qui sert de programmateur (sans le condo de 10µF)
    Avec Programmateur :"ArduinoISP"
  • Mettre le condo et Graver la séquence d'initialisation" avec Avec Programmateur :"Arduino as ISP"
    IL faut un arduino uno avec un Atmega328 à 28 pattes monté sur un support.

Ca fonctionne très bien.

Bon arduinade..

ci joint des fichiers en .zip pour l’arduino et en même temps si tu veux programmer des ATtiny85…

Petites bêtes à 8 pattes intéressantes pour des petites applications.

prog ATtiny85.zip (646 KB)

le fichier manquant

Téléversement dans un arduino.zip (402 KB)

Il y en a qui aiment se complique l'existance.

La solution de programmer le bootloader et de configurer les fuses à partir d'une carte UNO est un pis aller mis en avant par la société arduino pour vendre ses cartes.

Au 1/4 du prix d'une carte UNO officielle on trouve des vrais programmeurs avec le cordon ISP 6 broches qui va bien.
A voir tynyISP et usbasp sur Ebay ou sur votre site marchand favori en France.

Je ferais 2 remarques supplémentaires :

  • Arduino mélange deux opérations sous le vocable "gravure de la séquence d'initialisation" :
  • le réglage des fuses
  • la gravure du bootloader.

Si vous procédez avec un vrai programmeur il vous faudra voir la différence entre régler les fuses d'un micro encore en configuration sortie usine (oscillateur interne approximativement sur 8 MHz, diviseur par 8 activé) et le chargement du bootloader.
Précison : dans l'absolu le bootloader n'est pas obligatoire, il apporte du confort en permettant de re-programmer par la liaison série. Vous pouvez charger le programme utilisateur par la même prise ISP que celle que vous utilisez pour charger le bootloader, par contre le réglage des fuses pour fonctionner à 16 MHz d'horloge est obligatoire.
ISP signifie In Situ Programming, c'est un procédé de (re)programmation des circuits avr spécialement conçu pour reprogrammer un micro déjà soudé sur une carte.

  • Je ne sais pas ce qui vous conduit à faire cette opération mais une carte Nano, qui est une UNO en petit format, revient maintenant moins de 3€ pour les prix les plus bas. Achetée en france comptez 4 à 5€ maximum (25€ chez arduino --> plus chère qu'une UNO alors que le circuit imprimé est quasiment 5 fois plus petit !)
    Probablement que l'atmega que vous achetez revient plus cher.
    Ces prix sont obtenus parce que les façoniers achètent les composants par centaines de milliers d'exemplaires et vous les achetez en exemplaire embalé individuellement. Vous payeez principalement l'emballage.

Cerise sur le gateau le boîtier CMS de la carte Nano apporte deux entrées purement analoogiques supplémentaires.

Donc si c'est pour le plaisir de réaliser votre carte personnelle OK allez s'y, l'opération est formatrice et donne l'ocasion d'en découvrir un peu plus sur les atmegas.
Mais si vous pensez faire des économies c'est raté, surtout si vous prévoyez de renouveller l'opération souvent
AMHA pour une appli spécifique et s'il doit y avoir un circuit imprimé je prévoierai l'emplacement d'une carte Nano (ou mini_pro --> nano sans l'interface USB- série) sur le circuit imprimé.
Ce n'est que mon avis.

Merci pour ces idées !

L'ATtiny85 est une bête séduisante, mais j'ai besoin de 15 ports d'I/O ainsi que des ports RX/TX ; le compte n'y est pas !

Il s'agit de réaliser un clavier de 5x10 touches, dont j'ai déjà parlé ici, qui sera intégré à une réalisation plus complexe. Je souhaite réaliser ce prototype en gardant en tête la perspective d'une production en série avec une contrainte économique. Même si en pratique ça n'arrivera probablement pas :slight_smile: Du coup, j'ai vraiment besoin de m'affranchir de la carte Arduino pour le projet lui-même.

Pour l'ArduinoISP, je dois avoir une poutre dans l’œil qui m'empêche de voir mon erreur de branchement, mais j'ai vraiment été attentif aux diverses instructions que j'ai trouvées, et ça veut pas :frowning:

J'aime bien le ZIF qui m'évitera de martyriser mes ATmega et j'aime bien la perspective de me passer du bootloader, bien que je ne comprenne pas encore comment faire. Quand on utilise un USBASP ou un TinyISP, le microcontrôleur cible n'a pas besoin de bootloader ?

Non
Le bootloader c'est "juste" pour simplifier.
Il faut reconnaître que c'est bien pratique pour reprogramer une carte rien que par l'USB sans avoir à modifier le câblage.
Il faut considérer le bootloader comme un programme "presque" comme un autre.

Par contre documentation d'avrdude à lire (et à compprendre) impérativement.
Une pratique de la ligne de commande est aussi quasi indispensable.

Un atmega avr est prévu par son constructeur pour être programmé en ISP.