Perchè non riesco a cambiare i fuse ad un 328p?

Ciao a tutti, vorrei cambiare i fuse ad un chip 328p.
Come programmatore sto usando un AVR Dragon settato come ISP, perchè se provo a settarlo in HVSP mi da il seguente errore:

avrdude -c dragon_hvsp -p m328p

avrdude: stk500hv_initialize(): high-voltage serial programming control stack not defined for part "ATmega328P"
avrdude: initialization failed, rc=-1
Double check connections and try again, or use -F to override
this check.

Ho verificato 10 volte i collegamenti e sono giusti.

Ho quindi preso la strada della programmazione in ISP, però nonostante riesca a leggere e programmare i chip 328p che ho qui, non riesco a cambiargli i fuse.
Alla fine dell'operazione, durante la verifica ricevo sempre questo messaggio:

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

Se invece faccio una programmazione lasciando i fuse come sono non mi da nessun problema.
Qualche consiglio?
Grazie.

Stefano

La programmazione HV con il Dragon puoi farla solo da Atmel Studio, da IDE di Arduino non è possibile modificare i fuse durante la normale programmazione, puoi farlo solo durante la fase di caricamento del bootloader, usa quelli specificati nel file boards.txt.
Puoi cambiare i fuse come ti pare se lo fai direttamente da avrdude tramite linea di comando o interfaccia grafica, p.e. avrdudess.

Ciao Astro, effettivamente la programmazione la sto già facendo da avrdude:

avrdude -c dragon_isp -p m328p -u -U flash:w:LORA-SERIALE.ino.hex -U efuse:w:0xFF:m -U hfuse:w:0xD8:m -U lfuse:w:0x22:m -e

Non saprei nemmeno come usare avr dragon da arduino ide.

Questo è quello che mi da quando provo a programmare con fuse diversi da quelli impostati:

root@Goldrake:/tmp/arduino_build_697704# avrdude -c dragon_isp -p m328p -u -U flash:w:LORA-SERIALE.ino.hex -U efuse:w:0xFF:m -U hfuse:w:0xDE:m -U lfuse:w:0x22:m -e

avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.15s

avrdude: Device signature = 0x1e950f
avrdude: erasing chip
avrdude: reading input file "LORA-SERIALE.ino.hex"
avrdude: input file LORA-SERIALE.ino.hex auto detected as Intel Hex
avrdude: writing flash (8308 bytes):

Writing | ################################################## | 100% 6.87s

avrdude: 8308 bytes of flash written
avrdude: verifying flash memory against LORA-SERIALE.ino.hex:
avrdude: load data flash data from input file LORA-SERIALE.ino.hex:
avrdude: input file LORA-SERIALE.ino.hex auto detected as Intel Hex
avrdude: input file LORA-SERIALE.ino.hex contains 8308 bytes
avrdude: reading on-chip flash data:

Reading | ################################################## | 100% 6.88s

avrdude: verifying ...
avrdude: 8308 bytes of flash verified
avrdude: reading input file "0xFF"
avrdude: writing efuse (1 bytes):

Writing | | 0% 0.00s ***failed;
Writing | ################################################## | 100% 0.40s

avrdude: 1 bytes of efuse written
avrdude: verifying efuse memory against 0xFF:
avrdude: load data efuse data from input file 0xFF:
avrdude: input file 0xFF contains 1 bytes
avrdude: reading on-chip efuse data:

Reading | ################################################## | 100% 0.05s

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

avrdude done. Thank you.

Stefano

Ciao Astro, avevi ragione tu (come al solito).
Da AVR Studio (che ho dovuto installare) con avr dragon si riesce a programmare in HV anche i 328, mentre da avrdude non si riesce.
Ora però pongo un altro problema...
Voglio far andare il 328p a 8MHz, cosa che con gli attiny ho già fatto senza grossi problemi.
Ho impostato sul 328p questi fuse LOW: E2 HIGH: DF EXTEND: FF.
Lo sketch gira (al momento un banale blink per verificare i tempi), ma con tempi esattamente doppi a quello che dovrebbero essere.
Oltre ad aver disabilitato il CKDIV8 ed aver abilitato l'oscillatore interno a 8MHz non saprei dove altro mettere le mani.
Altra cosa visto che ci sono, così poi vi lascio in pace :slight_smile:
Se setto il BOD a 2.7 o 1.8V, riesco a far andare il 328 anche a 3.3V?
Grazie.

Stefano

Il BOD devi settarlo leggermente minore alla tensione di alimentazione, per 3.3V va bene 2.7V.
I fuse sono corretti per il clock rc 8 Mhz, i tempi sono doppi perché sicuramente stai compilando per un 328P con clock 16 MHz, cosa che va ad influenzare la reale durata della millis(), usa la compilazione per la Pro mini 3.3V @8MHz per avere le corrette impostazioni delle temporizzazioni.

I fuse sono corretti per il clock rc 8 Mhz, i tempi sono doppi perché sicuramente stai compilando per un 328P con clock 16 MHz, cosa che va ad influenzare la reale durata della millis(), usa la compilazione per la Pro mini 3.3V @8MHz per avere le corrette impostazioni delle temporizzazioni.

Infatti era proprio così.
Grazie.

Stefano