Mettre un atmega328 en arduino

Bonjour à tous,

Depuis environ 2 ans, je m'intéresse en amateur aux AVR. Jusqu'ici, j'ai travaillé sur des AVR "nus" (sans Arduino). Ce n'est que tout récemment que j'examine un peu le monde Arduino.

Pour transformer un Atmega nu en Atmega compatible avec l'Arduino, il suffit de charger le Bootloader dans la mémoire flash de l'Atmega.

Il y a 2 sources pour ce Bootloader:

  • Si on dispose d'un Arduino fonctionnel, le Bootloader est enregistré dans la mémoire de l'Atmega. On peut alors suivre la procédure expliquée ci-dessus pour transférer une copie du bootloader dans l'Atmega nu.

  • Si on ne dispose pas d'un Arduino fonctionnel, le bootloader est téléchargeable sur le site Arduino. Une fois téléchargé, le Bootloader est à transférer dans l'Atmega nu à l'aide d'un programmateur.

Si on est bricoleur, le programmateur à faire soi-même le moins cher est probablement le programmateur série par RS232, à utiliser avec le programme Ponyprog :

Si on n'est pas trop bricoleur, il faut acheter un programmateur. Un Avrisp mkII officiel marche certainement très bien mais il coûte dans les 30€ sans compter les frais d'envoi.
Personnellement, j'utilise 2 programmateurs différents :

  • Un clone de l'Avrisp mkII que j'ai monté à partir d'un kit vendu ICI pour 10€, frais d'envoi compris.
  • Un USBasp décrit ICI et qu'on trouve sur eBay à moins de 5€, frais d'envoi compris, par exemple ICI

Dans l'environnement Arduino, tout paraît assez simple car le travail est prémâché: on achète une carte qui contient déja son microcontrôleur avec bootloader installé et tout ce qu'il faut pour l'alimentation, le raccordement au PC par USB, les connecteurs où il suffit d'enficher de nouvelles cartes de senseurs ou d'effecteurs, ainsi que tout un environnement de programmation.

C'est normal qu'on se sente un peu perdu dès qu'il faut mettre un Atmega sur une breadboard, installer une liaison ISP avec le programmateur, charger un bootloader et programmer les fusibles.

Donc, si certains d'entre vous ont besoin d'un coup de main pour l'une de ces tâches, je suis prêt à les aider.

Au fait, certains ne savent pas trop à quoi sert le bootloader. C'est un petit programme qui reste dans la mémoire de l'Atmega même quand on change le programme principal, et qui sert à établir une éventuelle communication avec le PC à la mise en route de l'Arduino. Le bootloader attend quelques instants pour voir si le PC n'a pas un nouveau programme à envoyer. S'il n'y a pas de nouveau programme, le bootloader passe la main au programme qui est déjà installé dans l'Atmega. Si le PC veut installer un nouveau programme, le bootloader efface l'ancien et copie le nouveau programme dans la mémoire flash.

Lorsqu'un Atméga est acheté nu, il ne comporte pas de bootloader. Toute la mémoire flash est accessible et effaçable. Un programmateur est nécessaire pour envoyer un programme dans la mémoire. Si ce programme est un "bootloader", il va se positionner tout à la fin de la mémoire. Après qu'il est enregistré en fin de mémoire, il faut modifier les fusibles pour que cette partie de la mémoire soit épargnée lors du prochain effacement, sinon le bootloader sera effacé au prochain chargement de programme. Le bootloader peut alors entrer en communication avec le PC pour charger les programmes désirés dans le reste de la mémoire.

Merci pour toutes ces infos. J'ai tiré ma carte mais j'ai quelques soucis. Donc mon schéma est ce lui que Lionel montre (le premier des deux). J'utilise donc un arduino UNO qui est fonctionnel et par dessus j'insère ma carte où il y a un atmega 328 (sans bootloader). Ensuite :

  1. Je vais chercher dans les exemples : Arduino ISP
  2. Dans TOOLS je mets arduino UNO
  3. Enfin dans burn bootloader je mets Arduino as ISP ou même AVR ISP

Mais rien ne fonctionne, je ne vois pas ce que j'ai fait de foireux, je suis la démarche expliquée sur le site. Voilà ce que le soft m'affiche à la compilation :

avrdude : stk500_getsync() : not in sync : resp=0x30

Je ne comprends pas.

D'avance merci pour votre aide

Jérôme

Bonjour à tous,
ceci est mon premier post mais je vous lit depuis déjà un moment.
Fin juin Snootlab déclarait:
le quartz + les deux condos peuvent être remplacés par un résonateur céramique 16MHz
Concernant le cablage du résonateur (3 pattes), je pensait connecter ses pattes extérieures aux pins 9 et 10 de l'Atmega, et la patte centrale à la masse (pin 8).
Qu'en pensez-vous?

Je ne réussis pas à joindre une image...
A bientôt,
Jacques.

Edit de Jean-François : pour l'image c'est fait :wink:

atmega_standallone.jpg

Merci!
d’ailleurs je me rend compte que j'ai fait une erreur.
Je corrige:

Edit de Jean-François : tu peux pas mettre une photo en mettant l'adresse de ton ordi, il faut d'abord l'uploader et ensuite tu mets l'adresse de l'upload XD

atmega_standallone2.jpg

Salut Bouault,

Avec le quartz ça doit fonctionner aussi.Si quelqu'un a une idée pour mon problème ce serait sympa.
A plus,

Jérôme

Probablement à cause de ça XD :

darkduino:
J'utilise donc un arduino UNO...()... j'insère ma carte où il y a un atmega 328 (sans bootloader).

Note that these techniques only work with the Arduino Duemilanove w/ an ATmega328, not the Arduino Uno (or older Arduino boards w/ an ATmega168).

source

Ok, merci pour ta réponse. Enfin c'est emmerdant. En fait j'ai deux arduino UNO (un fonctionnel et l'autre pas) et deux arduino duemilanove non fonctionnels. Donc avec mon schéma je ne saurais pas remettre mes trois arduino fonctionnels, quelqu'un aurait une autre solution?

Elle ont quoi tes duemilanove ?

Les µC qu'il y avaient dedans sont dans des autres projets. J'ai donc racheté des atmega 328P vides

Où est le problème, tu peux les utiliser pour faire le montage de Snootlab et bootloader tes nouveaux 328 ???

Non, comme indiqué plus haut, le montage que j'ai tiré du lien suivant http://arduino.cc/en/Tutorial/ArduinoISP ne fonctionne qu'avec des duemilanove pas avec des UNO et moi je n'ai que mon arduino UNO qui est fonctionnel

darkduino:
Les µC qu'il y avaient dedans sont dans des autres projets. J'ai donc racheté des atmega 328P vides

Donc tu as des duemilanove sans atmega et c'est ce qui est décrit dans le lien que Snootlab a fournit, c'est ces cartes là que tu dois utiliser.

Il y a plusieurs liens de snootlab, moi j'ai tiré une carte en suivant le modèle de ce qu'il y a indiqué sur le site arduino, le lien précédent (le même que snootlab)

ici :

C'est bien le montage que j'ai fait, j'utilise bien un quartz à 16 MHz. Je te dis c'est parce que j'utilise un UNO que ça ne fonctionne pas

J'ai bien compris pourquoi cela ne fonctionne pas... puisque c'est moi qui te l'ai signalé.

Donc je récapitule, tu essay ele montage avec une Uno... ça ne marche pas.
Tu as des Duemilanova dont tu as pris les Mc pour les mettre ailleurs.
Tu veux bootloader des 328 pour les mettre sur tes Duemilanova.

Remplace ta Uno par une de tes duemilanove vide

T'es un peu en train de tortiller du croupion pour en faire une droite.... XD

C'est bien ce qu'il me semblait aussi. Mais si je mets ma duemilanove sans le µC ça va rien donner! Enfin j'essaie ça maintenant. Merci pour ton aide en tout cas :slight_smile:

Tu n'arrives pas à enlever le Mc de la Uno et le mettre sur la duemilanove ?

Si tu ne peux pas, je me demande si ce ne sera pas possible de ponter chaque pin de la Uno avec celle de la Duemilanove et faire le branchement comme indiqué avec le Breadboard.

Tu utilises comme cela le ftdi de la duemilanove et le Mc de la Uno...

En effet sans µC ça ne fonctionne pas. Pour ce qui est de ponter chaque pin, ça va être un peu compliqué en fait. J'aurais bien voulu me contenter de la carte que j'ai tiré mais ça ne va pas être possible.

Tu n'arrive pas à mette le Mc de la Uno sur l'autre ?