Go Down

Topic: Atmega328 8Mhz (Read 1 time) previous topic - next topic

supergiox

Apr 16, 2014, 06:20 pm Last Edit: Apr 16, 2014, 08:23 pm by supergiox Reason: 1
Ciao a tutti!
Seguendo il playground e la guida di Michele Menniti sto cercando di flashare il bootlader tramite un Arduino UNO su un Atmega328P-PU non vergine per farlo funzionare, tramite il suo oscillatore interno, ad 8Mhz.
Lo sketch ArduinoISP viene caricato con successo, ma in fase di caricamento del bootloader ricevo questo errore:
Code: [Select]

avrdude: stk500_getparm(): (a) protocol error, expect=0x14, resp=0x14

avrdude: stk500_getparm(): (a) protocol error, expect=0x14, resp=0x01
avrdude: stk500_initialize(): (a) protocol error, expect=0x14, resp=0x10
avrdude: initialization failed, rc=-1
        Double check connections and try again, or use -F to override
        this check.

avrdude: stk500_disable(): unknown response=0x12


Come schema ho fatto riferimento a questo.
Utilizzo l'IDE 1.0.5 su Linux e su Mac. Ho provato anche la versione 0022, diverse versioni del file board.txt, due diverse breadboard e 3 Atmega diversi, ma l'errore è sempre quello.

Che posso fare?

leo72

Se il chip non è vergine, cioè è già stato flashato con il bootloader di Arduino, è impostato per lavorare col clock esterno per cui devi montare anche il quarzo ed i suoi condensatori. Questi elementi ti serviranno solo per la flashatura con cui imposti il chip ad 8 MHz, poi puoi toglierli

supergiox

Grazie per la risposta!
Più tardi provo, però posso dire con certezza che provando a ricaricare il bootloader su un chip che lavorava già a 8Mhz il problema si presentava allo stesso modo. È plausibile?

Michele Menniti

CIao,
ti confermo che devi assolutamente aggiungere sulla bread un quarzo (qualsiasi valore) tra i pin 9 e 10 del micro ed i due condensatori adeguati verso massa(p.es. con 16 MHz usa 22pF, con 1 MHz 15pf, con 8 MHz 18pF, anche se non sono sempre specifici in linea di massima vanno bene).
Dal punto di vista software la cosa è piuttosto semplice:
Nel board.txt aggiungi queste righe:
Code: [Select]
##############################################################

328P_8_int.name=ATmega328P Bootloader 8MHz internal osc

328P_8_int.upload.protocol=arduino
328P_8_int.upload.maximum_size=30720
328P_8_int.upload.speed=57600

328P_8_int.bootloader.low_fuses=0xE2
328P_8_int.bootloader.high_fuses=0xDA
328P_8_int.bootloader.extended_fuses=0xFF
328P_8_int.bootloader.path=atmega
328P_8_int.bootloader.file=ATmegaBOOT_168_atmega328_pro_8MHz.hex
328P_8_int.bootloader.unlock_bits=0x3F
328P_8_int.bootloader.lock_bits=0x0F

328P_8_int.build.mcu=atmega328p
328P_8_int.build.f_cpu=8000000L
328P_8_int.build.core=arduino
328P_8_int.build.variant=standard
##############################################################

Apri IDE 1.0.5
Seleziona Strumenti - Programmatore - Arduino as ISP
Seleziona la porta a cui è collegato Arduino
Seleziona la board "ATmega328P Bootloader 8MHz internal osc"
Esegui Strumenti - Scrivi il bootloader

a fine operazione il tuo micro avrà il corretto bootloader a 8MHz e potrà lavorare senza quarzo e C esterni. Se ti escono errori o non hai collegato corretamente quarzo e C o non hai fatto correttamente i collegamenti ISP (ricorda di collegare correttamente le alimentazioni come nel disegno che hai linkato). Non dovrebbe servire ma nel dubbio puoi aggiungere una R da 10k tra il pin 1 del micro e 5V.
Guida alla programmazione ISP e seriale dei micro ATMEL (Caricare bootloader e sketch):
http://www.michelemenniti.it/Arduino_burn_bootloader.php
Guida alla Programmazione ATmega328 noP:
http://www.michelemenniti.it/atmega328nop.html
Articoli su Elettronica In:
http://www.michelemenniti.it/elettronica_in.html

supergiox

Ho aggiunto il quarzo con i due condensatori da 22pF e la resistenza da 10k, ho modificato nuovamente il file boards.txt, ho ricaricato lo sketch ArduinoISP  e ancora resta quell'errore.
Ho controllato e rifatto i collegamenti tante e tante volte ma a questo punto non mi resta che chiedervi di controllarli anche voi:
FOTO

flz47655

Dall'immagine non si capisce bene ma il jumper bianco e il cavo rosso in fondo a dx sono collegati + con - e - con  +  :smiley-eek-blue: ?

leo72

Però poi usa la pista "+" come massa e la pista "-" come VCC!!  :smiley-eek:
Difatti la R di pull-up è sulla linea "-" così come l'ingresso al pin 7, che è il pin VCC, ed il pin 8 ed i 2 C del quarzo sono su "+" che è GND..  :smiley-eek-blue: :smiley-eek-blue: argh..

Una domanda, ma la tua Arduino che versione è? A vederla in foto pare la R1. Se è così, ha un bug nel bootloader per cui o lo aggiorni alla versione 4.4 (quella della scheda R3) oppure ti serve il condensatore anti-autoreset.

PaoloP


Però poi usa la pista "+" come massa e la pista "-" come VCC!!  :smiley-eek:


Sarebbe meglio usare la pista + per Vcc e la - per GND. Però i collegamenti su quel lato sembrano corretti.

Michele Menniti

Don't panic  :D al di là dell'inversione delle due piste di alimentazione anteriori, i collegamenti sono comunque esatti, cioè lui ha portato il + al - e viceversa, ma poi ha collegato correttamente R, C e jumper di alimentazione del micro.
L'errore che ha non c'entra nulla con l'autoreset, purtroppo, temo più una situazione di bricked.
Guida alla programmazione ISP e seriale dei micro ATMEL (Caricare bootloader e sketch):
http://www.michelemenniti.it/Arduino_burn_bootloader.php
Guida alla Programmazione ATmega328 noP:
http://www.michelemenniti.it/atmega328nop.html
Articoli su Elettronica In:
http://www.michelemenniti.it/elettronica_in.html


Michele Menniti

se è ciò che temo, non ci riuscirà, però speriamo bene, l'AVRDUDESS lo sto studiando da alcuni mesi e mi sta dando belle soddisfazioni.
Guida alla programmazione ISP e seriale dei micro ATMEL (Caricare bootloader e sketch):
http://www.michelemenniti.it/Arduino_burn_bootloader.php
Guida alla Programmazione ATmega328 noP:
http://www.michelemenniti.it/atmega328nop.html
Articoli su Elettronica In:
http://www.michelemenniti.it/elettronica_in.html

PaoloP


l'AVRDUDESS lo sto studiando da alcuni mesi e mi sta dando belle soddisfazioni.


E non ce lo hai mai detto?  ]:D
Io l'ho scoperto per caso pochi giorni fa litigando col 2313.

Questo è un nuovo capitolo da aggiungere alla tua guida V5 insieme alle board per la 1.5.6.

leo72


Una domanda, ma la tua Arduino che versione è? A vederla in foto pare la R1. Se è così, ha un bug nel bootloader per cui o lo aggiorni alla versione 4.4 (quella della scheda R3) oppure ti serve il condensatore anti-autoreset.

supergiox

Ho un Arduino Uno R1 e infatti FORSE ho risolto mettendo un condensatore da 10uF tra reset e GND di Arduino.
Il caricamento del bootloader avviene con successo, sia per la configurazione a 16mhz che per quella a 8mhz, però poi nel chip a 8mhz non riesco a caricare sketch.
Ho fatto le prove inserendo fisicamente il chip appena programmato al posto di quello di Arduino e rimuovendo il condensatore tra reset e massa. Nel caso del chip a 16mhz riesco a caricare sketch senza problemi, nel secondo caso invece mi viene dato questo errore:
Code: [Select]
avrdude: stk500_recv(): programmer is not responding

Ovviamente per caricare lo sketch ho settato opportunamente "Tipo di Arduino" e "Programmatore".
Per quanto riguarda le linee di 5V e GND su breadboard, le ho invertite di proposito per seguire "alla lettera" lo schema del playground.

leo72

Una volta programmato ad 8 MHz, il chip devi lasciarlo sulla breadboard e gestirlo sempre via ICSP altrimenti non ti può funzionare, a meno che tu non scriva sul chip un bootloader compilato per lavorare ad 8 MHz.

Go Up
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy