Go Down

Topic: Cambiare i fuse su ATmega328P con AVRDUDESS  (Read 294 times) previous topic - next topic

giondalar77

Salve a tutti

da qualche tempo sto studiando come lavorare con gli ATmega328P (quelli di Arduino) in stand-alone
Mi sono letto un po di teoria ora sto passando alla pratica.

Mi sono costruito la shield per settare i fuse su ATmega328P attraverso un arduino UNO

Ho aperto AVRDUDESS, impostato i settaggi necessari x fare il detect del chip e fin qui tutto a posto:
mi riconosce l'ATmega328P con la sua signature: 1E950F
Leggo i fuse e anche qui legge quelli di una Atmega vergine.

Il problema è quando ho provato a cambiare i fuse: volendo impostare questi: L=0xFF H=0xDF E=0x07
(no bootloader, oscillatore esterno 16MHz...) mi viene fuori questo errore:

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

il problema ancora piu grosso è che dopo facendo un altra volta il detect mi da questo errore:
ERROR: Unknown signature 000000

non me lo riconosce piu e non legge neanche piu i fuse...
mi sembra che abbia sovrascritto la signature???
non posso piu neanche programmarlo.

Ora ne ho un altro che l'ho lasciato vergine e sono riuscito anche a programmare pero devo  cambiargli i fuse e ho paura di rovinare anche questo...

che succede? è l'avrdudess che ha combinato qualcosa?

Grazie

Maurotec

#1
Jan 12, 2019, 12:43 am Last Edit: Jan 12, 2019, 12:44 am by Maurotec
A me risulta che i fuse siano questi:
-U lfuse:w:0xff:m -U hfuse:w:0xd9:m -U efuse:w:0xff:m

Con questi che hai usato :L=0xFF H=0xDF E=0x07, a me risulta uno spazio riservato per il bootloader di 256 byte.

Comunque se hai configurato correttamente lfuse per lavorare con il quarzo dovresti comunque potere cambiare i fuse, ovviamente ci deve essere collegato il quarzo con i sui due condensatori altrimenti non funge.

Usa il fuse calculator seguente:http://www.engbedded.com/fusecalc/

Forse il problema è questo:
avrdude: verification error, first mismatch at byte 0x0000
         0x07 != 0xff

l'extended fuse di solo 3 bit degli 8 disponibili, quello non usati devono essere tutti ad 1 (almeno ricordo così per il 328) per cui 07 significa accendere solo i primi 3 bit e questo potrebbe creare problemi se in precedenza sono stati scritti tutti a 1. In sostanza prova con 0xFF al posto di 0x07.

Ciao.

giondalar77

Con questi che hai usato :L=0xFF H=0xDF E=0x07, a me risulta uno spazio riservato per il bootloader di 256 byte.


CIAO

se provi a inserire questi valori su quel sito:
è vero che hai riservato per il bootloader 256 byte ma lo hai anche disabilitato, (boot reset vector Enabled)
anche perche la lista di scelta dello spazio del booloader non puoi metterla a zero, devi solo appunto disabilitare il boot reset vector


non capisco perche con i fuse che ho messo io mi ha (credo) danneggiato il chip, perche avrduddes non me lo riconosce piu!!!

Maurotec

Il quarzo e i suoi condensatori non adatti o non correttamente installati non permettono la programmazione via ICSP e ovviamente il programma non si avvia (se c'è ne uno in flash).

Se ciò che riguarda il quarzo è apposto, prima di tentare la programmazione parallela e bene controllare il cavetto ICSP e tutto quanto sia possibile controllare.

Per la programmazione parallela ti serve un arduino  (lo hai) servono ~ 9 pin + 8 bit (DATA)

Stavo leggendo il datasheet e la programmazione parallela me la ricordavo meno complicata, l'ho fatta tempo fa su 644, vedo se trovo il programmino che avevo fatto a suo tempo e cerco di capirne qualcosa (e passato troppo tempo).

Quote
non capisco perche con i fuse che ho messo io mi ha (credo) danneggiato il chip, perche avrduddes non me lo riconosce piu!!!
Danneggiato non credo, e solo bloccata la programmazione ICSP, qualcuno dice chip brikkato.

Ciao.

giondalar77

ciao

mi sembra che stiamo parlando di cose differenti:

tu parli di programmazione ICSP ma io ti ho scritto ISP (non so se è la stessa cosa ma in questi casi è meglio chiarire)

Utilizzo una board arduino per la programmzione ISP e una scheda shield con i suoi collegamenti ISP opportuni

Tra l'altro ho gia programmato un chip vergine e un chip che ho estratto dalla board arduino (quindi che è stato gia programmato con i fuse tipici di un chip di arduino)

Il mio problema è AVRDUDESS che non mi scrive i fuse su un chip (ho provato su uno vergine), pero con il detect me lo riconosce, mi legge pure i fuse senza problemi ma quando ho provato a scrivere i fuse nuovi mi ha dato errore come ho scritto sul primo post.

Quindi non so perche parli di quarzi e condensatori che per ora non mi servono (per programmare i fuse)

Puo darsi che mi sfugga qualcosa

La programmazione seriale non la conosco e non vedo perche non dovrei usare questa che sembra piu semplice.

Inoltre perche dici che si sia bloccata la programmazione ISP? come è successo???

grazie comunque x le risposte

Maurotec

Il 328 vergine (appena aquistato) ha abilitato l'oscillatore interno RC (mi pare 8Mhz con CKDIV8 abilitato, quindi viaggia a 1Mhz)

Con lfuse che hai postato hai disabilitato CKDIV8 e l'oscillatore RC è spento ma hai abilitato il quarzo esterno, ora il chip deve lavora con il quarzo anche per programmare i fuse, senza oscillazione il chip non funge.

Quindi o ci metti il quarzo e vedi se funziona, se non funge ti tocca la programmazione parallela.

Quote
tu parli di programmazione ICSP ma io ti ho scritto ISP (non so se è la stessa cosa ma in questi casi è meglio chiarire)
Si quella intendevo, connettore 6 pin MOSI, MISO. SCK, VCC e GND.

Ciao.


giondalar77

Siiiiiiiiiiiiiiiiiiii  adesso ho capito

avevi ragione tu (solo che non avevo capito che il quarzo serviva anche per la programmazione dei fuse)

ho riprovato con il quarzo inserito e tutto funziona alla grande ovvero l'AVRDUDESS non mi da piu quell'errore...


Grazie mille a volte servono questi inconvenienti x capire cose che possono sfuggire...


grazie ancora, mi ritengo soddisfatto

Maurotec

Quote
ho riprovato con il quarzo inserito e tutto funziona alla grande ovvero l'AVRDUDESS non mi da piu quell'errore...
Come vedi come fonte clock si può scegliere tra clock esterno (su un pin), vari tipi di quarzo e risuonatore ceramico ed è facile sbagliare a me è capitato anche se di poco.

Qui c'è la vecchissima discussione sul forum: 644 bricked

Ciao.

doppiozero

Mi faccio pubblicità..  :)

Qualche tempo fa ho modificato la board di Mightyohm per il recupero delle MCU brikkate, se interessa il progetto è qui

Si può realizzare tutto su breadboard con pochi componenti
Runtime Clock Manager -- https://github.com/duezero/RCM---Runtime-Clock-Manager
GPX datalogger -- https://github.com/duezero/GPX-datalogger
AVR HV Rescue Board -- https://www.youtube.com/watch?v=EErKo0aTEio

giondalar77

grazie molto utile

speriamo di non averne bisogno :)

Go Up