Go Down

Topic: Atmega328 8Mhz (Read 891 times) 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

PaoloP


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