Atmega328 8Mhz

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:

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?

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

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?

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:

##############################################################

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.

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

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

Però poi usa la pista “+” come massa e la pista “-” come VCC!! :astonished:
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… :fearful: :fearful: 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.

leo72:
Però poi usa la pista "+" come massa e la pista "-" come VCC!! :astonished:

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

Don't panic :smiley: 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.

Prova a leggere i fuse --> ATtiny2313 Unipolar Stepper Controller Driver - #30 by PaoloP - Software - Arduino Forum

se è ciò che temo, non ci riuscirà, però speriamo bene, l'AVRDUDESS lo sto studiando da alcuni mesi e mi sta dando belle soddisfazioni.

[quote author=Michele Menniti link=topic=233731.msg1683966#msg1683966 date=1397723255]
l'AVRDUDESS lo sto studiando da alcuni mesi e mi sta dando belle soddisfazioni.[/quote]

E non ce lo hai mai detto? ]:smiley:
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.

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:

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.

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.

la board che gli ho fornito carica un bl a 8MHz originale Arduino :wink:

Il caricamento dello sketch con l'atmega su breadboard funziona perfettamente :slight_smile:
Ho provato a caricare il bootloader con il file boards.txt suggerito da Michele Menniti e purtroppo compare questo errore:

 ***failed;  
avrdude: verification error, first mismatch at byte 0x0000
         0xff != 0x07
avrdude: verification error; content mismatch

Io utilizzavo quello del playground, cioè questo:

atmega328bb.name=ATmega328 on a breadboard (8 MHz internal clock)
atmega328bb.upload.protocol=stk500
atmega328bb.upload.maximum_size=30720
atmega328bb.upload.speed=57600
atmega328bb.bootloader.low_fuses=0xE2
atmega328bb.bootloader.high_fuses=0xDA
atmega328bb.bootloader.extended_fuses=0x05
atmega328bb.bootloader.path=arduino:atmega
atmega328bb.bootloader.file=ATmegaBOOT_168_atmega328_pro_8MHz.hex
atmega328bb.bootloader.unlock_bits=0x3F
atmega328bb.bootloader.lock_bits=0x0F
atmega328bb.build.mcu=atmega328p
atmega328bb.build.f_cpu=8000000L
atmega328bb.build.core=arduino:arduino
atmega328bb.build.variant=arduino:standard

Sono felice che funzioni così però mi farebbe molto comodo, se possibile, poter caricare gli sketch inserendo il chip su Arduino, come facevo prima.

Su Arduino c'è il quarzo esterno a 16Mhz. Non so se venga ignorato se setti quello interno a 8.

Quell'errore l'abbiamo affrontato più volte, è un problema di codifica 0/1, semplicemente scrivi 07 al posto di FF al valore dell'EFuse nella board che ti ho postato e ti funziona però non capisco se in passato sei riuscito a caricare via seriale lo sketch su atmega montato su Arduino, ma settato per lavorare col clock interno a 8MHz, sei sicuro o capisco male io?
@ Paolo, il quarzo viene ignorato.

[quote author=Michele Menniti link=topic=233731.msg1684450#msg1684450 date=1397744982]
montato su Arduino, ma settato per lavorare col clock interno a 8MHz[/quote]

Anche io ho capito così e non ne comprendo il motivo.