Pages: 1 [2] 3 4 ... 6   Go Down
Author Topic: Mettre un atmega328 en arduino  (Read 13088 times)
0 Members and 1 Guest are viewing this topic.
Forum Moderator
Geneva
Offline Offline
Faraday Member
*****
Karma: 30
Posts: 3228
Yoplait... le pt'it suisse
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Un des deux (ou les deux ?) permettent d'utiliser l?arduino comme programmateur, mais je n'ai jamais fait d'essai comme ça.
Logged

MacBook intel core 2 duo  os X snow Leopard 10.6<br/> eMac PPc G4  os X Leopard 10.5<br/>powerbook G4 os X Leopard 10.5
imac PPC G3 os X Pa

Offline Offline
Jr. Member
**
Karma: 0
Posts: 95
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

D' accord je vais faire le test, de toute façon ça ne changera rien à l'arduino. Et donc comment je peux savoir qu'est ce que je dois mettre comme valeurs?
Logged

Forum Moderator
Geneva
Offline Offline
Faraday Member
*****
Karma: 30
Posts: 3228
Yoplait... le pt'it suisse
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Fais attention car certains Fuses te permettent de verrouiller complétement le processeur.

je ne me souviens plus très bien, ça doit bien faire une année que j'ai fait ça la dernière fois, mais une des deux appli à une liste dans laquelle tu choisis, il y a les paramètre de fréquence, si tu veux que ton bootloader se mettent en fonction à la mise sous tension ou quelques secondes après..... il faut fouiller dans les menus.
Logged

MacBook intel core 2 duo  os X snow Leopard 10.6<br/> eMac PPc G4  os X Leopard 10.5<br/>powerbook G4 os X Leopard 10.5
imac PPC G3 os X Pa

Forum Moderator
Toulouse / France
Offline Offline
Full Member
*****
Karma: 5
Posts: 237
Arduino rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonjour,

Même souci pour moi avec un clone d'usbtinyISP, du coup j'ai fait un simple programmateur comme suggéré ici : http://arduino.cc/en/Tutorial/ArduinoISP
et ça marche du tonnerre
On peux programmer facilement des bootloaders avec le GUI arduino, en faisant comme expliqué dans le lien précédent, les fusibles sont programmés automatiquement avec cette méthode

On peux aussi utiliser avrdude en ligne de commande une fois qu'on est connecté correctement pour lire ou écrire les fusibles
Par contre effectivement, il est déconseillé de faire n'importe quoi (genre utiliser l'argument -F, se planter dans les valeurs de fusible,...) sous peine de bricker son composant...

Par exemple la ligne suivante permet de lire les fusibles et d'obtenir des infos (Arduino utilisé comme programmateur, code arduinoIsp à l'intérieur)
Code:
avrdude -c arduino -p m328p -P com23 -b 19200 -v

va nous répondre
Code:
avrdude: Version 5.10, compiled on Jan 19 2010 at 10:45:23
         Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
         Copyright (c) 2007-2009 Joerg Wunsch

         System wide configuration file is "C:\WinAVR-20100110\bin\avrdude.conf"


         Using Port                    : com23
         Using Programmer              : arduino
         Overriding Baud Rate          : 19200
         AVR Part                      : ATMEGA328P
         Chip Erase delay              : 9000 us
         PAGEL                         : PD7
         BS2                           : PC2
         RESET disposition             : dedicated
         RETRY pulse                   : SCK
         serial program mode           : yes
         parallel program mode         : yes
         Timeout                       : 200
         StabDelay                     : 100
         CmdexeDelay                   : 25
         SyncLoops                     : 32
         ByteDelay                     : 0
         PollIndex                     : 3
         PollValue                     : 0x53
         Memory Detail                 :

                                  Block Poll               Page
      Polled
           Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages MinW  Max W   ReadBack
           ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
           eeprom        65     5     4    0 no       1024    4      0  3600  3600 0xff 0xff
           flash         65     6   128    0 yes     32768  128    256  4500  4500 0xff 0xff
           lfuse          0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
           hfuse          0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
           efuse          0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
           lock           0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
           calibration    0     0     0    0 no          1    0      0     0 0 0x00 0x00
           signature      0     0     0    0 no          3    0      0     0 0 0x00 0x00

         Programmer Type : Arduino
         Description     : Arduino
         Hardware Version: 2
         Firmware Version: 1.18
         Topcard         : Unknown
         Vtarget         : 0.0 V
         Varef           : 0.0 V
         Oscillator      : Off
         SCK period      : 0.1 us

avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.04s

avrdude: Device signature = 0x1e950f
avrdude: safemode: lfuse reads as FF
avrdude: safemode: hfuse reads as D6
avrdude: safemode: efuse reads as 5
avrdude: current erase-rewrite cycle count is 1325470774 (if being tracked)

avrdude: safemode: lfuse reads as FF
avrdude: safemode: hfuse reads as D6
avrdude: safemode: efuse reads as 5
avrdude: safemode: Fuses OK

avrdude done.  Thank you.


Beaucoup d'explication sur les fusibles AVR sont dispos ici :
http://www.atmicroprog.com/cours/atmega/fuses.php
ou là
http://www.ladyada.net/learn/avr/fuses.html
et là
http://www.scienceprog.com/programming-avr-fuse-bits-oscillator-settings/

Ici des infos sur l'utilisation d'AVRDude
http://www.ladyada.net/learn/avr/avrdude.html



j'ai fait quelques essais et :

Sur un chip ATmega328P vierge les fusibles sont placés à :
LFUSE : 0x62
HFUSE : 0xD9
EFUSE : 0x07

Sur un arduino Uno "out of the box" on à :
LFUSE : 0xFF
HFUSE : 0xD6
EFUSE : 0x05

Sur un chip Atmega après utilisation de Burn Bootloader (with arduino as isp) je lis :
LFUSE : 0xFF
HFUSE : 0xDE
EFUSE : 0x05

Donc différence sur le Hfuse, mais mineure puisqu'elle ne concerne que l'écrasement (ou non) de l'EEPROM pendant l'effacement du chip
(voir http://www.engbedded.com/fusecalc/ pour le calcul des fusibles)

Bon courage,

Lionel
Logged

- Distributeur officiel Arduino - France

0
Offline Offline
Newbie
*
Karma: 0
Posts: 10
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Merci Snootlab pour tes liens et tes relevés de fuses. C'est exactement ce que je cherchais  smiley-lol
Logged

Forum Moderator
Toulouse / France
Offline Offline
Full Member
*****
Karma: 5
Posts: 237
Arduino rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

De rien,
Plus précisément à toulouse on dit "avé plaisir"  smiley-lol

Lionel
Logged

- Distributeur officiel Arduino - France

Offline Offline
Jr. Member
**
Karma: 0
Posts: 95
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Salut Snootlab,

Merci pour ces infos précieuses. On m'a prêté un stk500 mais je ne m'en sors vraiment pas. J'ai alors lu ton lien vers arduino mais là aussi j'ai dû mal à tout saisir.
Sur l'arduino, il n'y a pas l'atmega, c'est bien ça? J'ai en fait deux arduino avec des microcontrôlleurs "sans rien" un duemilanove et un uno.  Tu mets le bootloader arduino mais il n'y a rien à faire au niveau des fuses?

Merci d'avance
Logged

Forum Moderator
Toulouse / France
Offline Offline
Full Member
*****
Karma: 5
Posts: 237
Arduino rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonjour darkduino,

Je ne comprends pas bien ta question "Sur l'arduino, il n'y a pas l'atmega, c'est bien ça?" ?

Je te détaille la méthode avec deux arduinos:

Sur l'arduino qui est "programmateur" tu mets le sketch "ArduinoISP" qui est dans le GUI arduino files\examples

tu relies les arduinos comme indiqué là http://arduino.cc/en/Tutorial/ArduinoISP



sur l'image, l'arduino "programmateur" est celui du bas, l'arduino qui sert de support pour ton µC a programmer est en haut

Pour programmer un ATmega en 2009 ou en UNO il faudra que tu choisisses la cible dans le GUI arduino tools/board

Puis que tu lances Tools\burn bootloader\w Arduino as ISP

et comme je l'ai dit plus haut : (...) les fusibles sont programmés automatiquement avec cette méthode

Lionel
Logged

- Distributeur officiel Arduino - France

Offline Offline
Jr. Member
**
Karma: 0
Posts: 95
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Salut,

J'essaie de t'envoyer la photo de mon schematic mais pas moyen je n'y arrive pas, pourtant je l'ai bien mis en jpeg. Je veux juste savoir si c'est bien juste ce que je fais.
Donc dans ce schéma il y a un arduino  qui a un atmega avec le bootloader auquel je connecte un atmega sans bootloader.J'ai fais tous les raccords comme indiqué sur la photo précédente mais en plus j'ai mis tx et rx je me suis dit qu'il fallait les mettre (ça ne sert à rien?). Je voulais mettre un quartz, quand faut-il en mettre? et quelle valeur?
Ici j'utilise un atmega 328, le montage marche aussi?

Merci d'avance
Logged

Forum Moderator
Toulouse / France
Offline Offline
Full Member
*****
Karma: 5
Posts: 237
Arduino rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonjour,

essaie d'uploader ta photo sur imageshack

Lionel
Logged

- Distributeur officiel Arduino - France

Offline Offline
Jr. Member
**
Karma: 0
Posts: 95
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Voici le lien

http://imageshack.us/photo/my-images/857/photoschematic.jpg/


« Last Edit: June 21, 2011, 05:49:31 am by Jean-François » Logged

Forum Moderator
Toulouse / France
Offline Offline
Full Member
*****
Karma: 5
Posts: 237
Arduino rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Re-bonjour,

en fait je ne comprends pas bien ton schéma.

Si le but est de programmer des ATmega 328, pourquoi ne fais tu pas tout simplement comme indiqué plus haut ???
Si tu veux en faire des arduinos standalone et que tu les programmes avec le bootloader Uno ou 2009, il te faut au minimum un quartz de 16MHz, deux condensateurs de 22pF (le quartz + les deux condos peuvent être remplacés par un résonateur céramique 16MHz) et une résistance
enfin, disons faire exactement comme ça
http://arduino.cc/en/Tutorial/ArduinoToBreadboard

1. Uploader le bootloader comme ça


2. Uploader le code comme ça


Lionel
Logged

- Distributeur officiel Arduino - France

Offline Offline
Jr. Member
**
Karma: 0
Posts: 95
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonsoir,

Je ne t'ai peut-être pas bien expliqué ce que je compte faire exactement. En réalité j'ai un arduino avec un atmega qui a son bootloader et j'ai aussi un arduino sans microcontrôlleur puisqu'il est dans un projet. Du coup j'ai racheté un atmega 328 sans bootloader. Donc ici je souhaite réaliser une carte qui permette de transférer le bootloader arduino depuis un arduino vers un µC vide (sans le bootloader). Dans ce cas présent j'utilise le schéma du haut mais je souhaite directement programmer le µC sans rien donc deuxième schéma comme tu le dis. Comme je souhaite faire les deux c'est pour ça que j'ai mis des pins que je court-circuiterai ou non en fonction de ce que je veux. Tu comprends mieux?

Mais tu réponds à ma question je dois bien mettre un quartz à 16 MHz

Bonne fin de soirée
Logged

Belgique - Arlon
Offline Offline
Full Member
***
Karma: 0
Posts: 172
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 :
http://diy4fun.blogspot.com/2009/01/simple-serial-programmer-for-avr.html

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

Amicalement, Jean-Marie

Offline Offline
Jr. Member
**
Karma: 0
Posts: 95
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Pages: 1 [2] 3 4 ... 6   Go Up
Jump to: