Mancata scrittura Fuses con AVRDUDESS

Buongiorno a tutti, vorrei chiedere al Forum come potere uscire da un problema che ho nella programmazione dei fuses; vado a spiegare:
mi si è guastato il provatransistor GM328 costruito in scatola di montaggio, dovrei sostituire il cip ATM328P, ho il firmware.hex ed il file eeprom.eep ed anche il valore che i fuses devono avere. Con il software Avrdudess 2.1.4 su windows7 e usando un Arduino1R3 come programmatore ISP programmo correttamente i primi due file ma non riesco a scrivere i fuses quindi in fase di verifica mi viene dato errore e rimontando il micro sul provatransistor ovviamente non funziona bene. Ho letto alcuni post qui sul forum relativi all'argomento fuses ed ho visto nelle risposte che ci sono delle opzioni da aggiungere ad AVR come -c -p ecc. il fatto è che non ho capito dove inserirle in quanto il programma ha solo tasti e non permettere di scrivere comandi aggiuntivi.
Spero che qualcuno mi possa aiutare a capire.
Grazie mille a tutti.
Buona giornata

Giusto in questi giorni ho ripreso la realizzazione del mio Fuse Rescue, dopo un anno preciso di meditazione e qualche altro lavoretto... :grinning:

@Etemenanki! :slightly_smiling_face:

Pensavo l'avessi messo sullo scaffale dei progetti "da fare assolutamente il prima possibile" (*) ... quindi vuoi andare avanti ?

(*) traduzione: "forsemagaripuodarsinonso" :rofl:

.:rofl:.

Buona sera Datman, scusa le domande forse banali ma sono nuovo sul discorso Arduino e atm328, con questo programmatore scrivo i fuses impostando il valore desiderato con #define HFUSE ...... nel software da scaricare nel micro programmatore? Come detto nel mio post di richiesta devo programmare un ATM328P per il transistor tester che si è guastato ed il firmware ce l'ho informato hex ed il contenuto della eeprom in formato eep.
Con il tuo programmatore dovrò inserire i fuse prima o dopo il download del firmware e della eeprom?
Poi vedo un'alimentazione a 12V su RST?? E per attivare la programmazione si deve premere sul pulsante su PC1 piedino 24? Scusa ma mi sfugge il funzionamento.
A presto
Grazie

Non conosco avrdudess, conosco avrdude che il programma usato da arduino-ide. avrdude si avvia da console comandi.
Il programma avrdudess è un front-end (GUI Graphics User Interface) per avrdude che per natura ha una interfaccia a comandi. avrdude può scrivere i fuse tramite arduinoISP. Poiché avrdudess è un front-end tra le varie opzione ci dovrebbe essere anche quella per scrivere i 3 fuses (Extended, High e Low). Io ho realizzato un front-end è posso scrivere i fuse, scrivere/leggere la eeprom ecc, insomma se avrdude può fare una cosa "dovrebbe" essere possibile anche con avrdudess.

avrdude come programma lo trovi sotto una delle cartelle su cui hai installato arduino-ide (serve cercare).

Detto questo dovresti anche capire a cosa si riferiscono -c -p ecc che sono argomenti da passare al programma avrdude per specificare la COM (se hai windows) o il device ttyecc se hai Gnu/Linux.

Ciao.

Avrdudess è un'interfaccia per rendere più semplice l'uso di avrdude.
Ho usato anche Burn-O-Mat, ma richiedeva la sostituzione dei driver con Zadig.

Grazie Maurotec per la risposta,
si su Avrdudess ci sono tutti i tasti per i quattro fuses L-H-EXT-LOCK ed è li in effetti che metto quelli che il costruttore del transistor tester dichiara. Il problema è che mi viene dato l'errore avrdude: verification error, first mismatch at byte 0x0000
0x07 != 0xff. Ho usato un cip nuovo e sono sicuro che il programma lo raggiunge e gli scrive tutti e due i file hex ed eep ed infatti il verifyng mi dà ok solo i fuses non entrano. Ho ordinato un programmatore esterno dai cinesi, appena arriva provo a rifare tutta la procedura e vediamo se funziona. Ancora una domanda però, il convertitore da usb a seriale per i cip ATM328 è lo stesso per che si usa sui PC per usare una seriale RS232 tramite le porte usb e collegarsi ai PLC o ai modem??
Grazie
Buona giornata

Grazie Datman per la risposta, se non riesco in altri modi proverò anche questa soluzione, ò questione di principio.
Il tuo Fuse Rescue funziona? Mi piacerebbe realizzarlo, ma non ho capito bene come funziona.
Un saluto e
Buona giornata

Ciao
Ho incontrato problemi per aver aggiunto un display OLED I2C rispetto al progetto da cui sono partito: il bus I2C viene disturbato dell'inserimento del microcontrollore da programmare. Nei prossimi giorni provo a tenere scollegato il bus I2C dal microcontrollore fino all'avvio della programmazione usando un CD4053.

Non tornano i conti, nel 328 ci sono 3 fuse e 1 LOCKBIT.
Il LOCKBIT devono rimanere quelli di default e avrdudess dovrebbe permetterti di escludere la scrittura del LOCKBIT.
Il produttore di quel tester che fuse vuole.
lf = ?, hf = ?, ef = ?

Che scheda usi per fare girare ArduinoISP?

avrdudess dovrebbe permetterti la modalità sicura, cioè leggere solo i dati principali quali i fuse e lockbit, io ogni caso prima di scrivere è sempre bene provare a leggere dalla MCU, in questo modo testi anche il collegamento ICSPI a 6 fili.

Il chip ATmega328p vergine ha questi fuse: lf = 0x62, hf = 0xd9, ef = 0xff.

Se ArduinoISP funziona e se il collegamento è corretto avrdudess dovrebbe mostrarti questi valori senza dare errore alcuno.

Questo non lo so. USB to RS232 TTL, il TTL significa logica 5V.
Mentre di solito RS232 standard lavora a tensioni più alte e quindi non sono compatibili.

Ciao.

Grazie Datman per la risposta, poi mi dirai come và dopo la modifica e cosa si vede sul display, questi ultimi mi attirano morbosamente.
Buona serata.

Grazie Maurotec per la risposta, questi sono i fuses richiesti dal costruttore:
fuses_lo = 0xf7
fuses_hi = 0xdf
fuses_ext = 0xfc
lock_byte = 0xff
Arduino ICSP gira su una scheda Arduino1R3, il cip vergine su cui ho scaricato il bootloader si trova su breadboard con quarzo da 16 Mhz, condensatori da 22Pf, resistenza di 1K tra positivo e piedino di reset (1). Scarico correttamente il Bootloader ma non ho provato che fuses si leggono subito dopo. Mi è venuta una domanda, il cip su breadboard dovrà funzionate sulla scheda definitiva con quarzo da 8Mhz, in questa fase di programmazione influisce se l'attuale quarzo è da 16Mhz?
Farò ancora qualche prova prima di disturbarti nuovamente.

Grazie buona serata

Sto continuando qui:

Allura, se scrivi il bootloader poi lo devi usare, ogni volta che usi la programmazione ICSP (In Circuit Serial Programming) cancelli tutta la flash incluso il bootloader. Se il transistore tester prevede il bootloader lo scrivi con ICSP, poi devi collegare USB to Serial e scrivere il programma del tester.

Sui valori dei fuse ho parecchi dubbi perché non ricordo e presi tempo a dietro una fregatura bloccando il micro che poi ho sbloccato tramite la programmazione HV.

Di seguito due immagini del mio vecchio programma per configurare i fuses ecc.


Circa i fuse leggevo qui:
https://www.martyncurrey.com/arduino-atmega-328p-fuse-settings/

Ciao Maurotec, dopo questa tua risposta devo dire che sono rimasto abbastanza confuso. Mi spiego, ho comprato dai cinesi quattro ATM328P, all'arrivo gli ho scaricato il programma blink per testarli, montandoli sullo zoccolo di arduino1R3 e nessuno di essi andava perchè l'Ide di arduino mi diceva che non avevano il bootloader a bordo. Ho così realizzato il classico circuito su breadboard con quello che serve per inserire questo benedetto bootloader, tutto ha funzionato subito e rimettendo poi i cip sull'arduino scarico tranquillamente tutti gli scketc, poi lo tolgo e li metto ha "dimora" sul circuito di destinazione. Non ho mai dovuto preoccuparmi di fuses e quant'altro anche perchè ho sempre usato quarzi a 16Mhz.
Da quello che mi hai scritto sembra che il cip potrebbe funzionare anche senza bootloader se lo programmo con ICSP, è corretto? Il costruttore del provatransistor non parla di bootloader o altro, solo che non mi dà il programma sorgente e quindi per scrivere il suo firmware .hex e .eep ho dovuto montare questo accrocchio. In altro modo non saprei come fare. Attendo ora che mi arrivi il programmatore FTDI/USB e ci riprovo.
Grazie per la pazienza
Un saluto

Si, il bootloader serve solo quando non hai un device programmer tipo avrispmkii o compatibile. Comunque dovresti essere capace tramite arduino come ISP di scrivere firmware.hex e firmware.eep che se ha dimensione 0 non contiene nulla in eeprom. Io scriverei se non vuoto prima il .eep e poi il firmware e solo dopo questi modificherei i fuse.

Questo perché la modifica dei fuse potrebbe non funzionare più con il quarzo che hai montato su breadboard.

atmega vergine lavora con l'oscillatore RC da 8MHz, poiché c'è il bit CKDIV8 abilitato 8/8 = 1MHz.

Se modifichi prima i fuse e questi sono incompatibili con il quarzo montato non puoi più programmare nulla e il dialogo con arduino come ISP darà errore.

Ciao.

OK, finalmente ora mi è chiaro. Purtroppo il file .eep non è vuoto, ha dimensione di 3Kb. Proverò sicuramente a scrivere i file nella sequenza che mi hai detto senza usare il tasto programma di Avrdudess e vedrò se funziona.
Grazie mille dei consigli.
Ciao

Buongiorno Maurotec, per chiudere il giro di post che ho scatenato con le mie domande volevo informarti che con l'arrivo del convertitore seriale FTDI sono riuscito grazie ai tuoi consigli a programmare un nuovo chip ATMEGA328P ed a rimettere in funzione il mio provatransistor. Mi sono studiato avrdude installato su macchina virtuale in dos e dopo molte prove ho capito la procedura corretta ed ha funzionato. Il ritardo nella risposta è stato dovuto anche al fatto che nel frattempo ho perso mio padre.
Un ringraziamento a te e a Datman per i consigli e buoni esperimenti.

2 Likes

Mi dispiace per la perdita, condoglianze è il minimo, anche se è una formalità. Nel 1995 ho subito questa perdita è so cosa vuole dire.

Ok, mentre per avrdude sono contento che tu abbia risolto e imparato qualcosa, però avrdude è già incluso con l'ide di arduino solo che lo devi cercare nella infinità di cartelle e sottocartelle. Da windows una volta trovato avrdude.exe aprendo la console dos dal prompt inserisci i comandi e invio li esegue. Io però è da 2004 che non uso più windows ma solo gnu/linux.

Ciao.