Scrivere firmware atmega328

Buongiorno a tutti
Antefatto: ho fritto il mio Mega328 transistor tester (forse misurando dei condensatori non perfettamente scarichi), visto che alcune altre funzioni... funzionano, penso siano saltati solo gli ingressi interesati dell'Atmega 328.
Disponendo di alcuni 328 stand alone ho pensato (idea brillante) di leggere il firmware e copiarlo in un altro atmega328.
Girovagando in rete ho trovato metà del lavoro già fatto: Tre files che dovrebbero contenere il software originale (1.12K):

  • ComponentTester.cfg
  • EEprom.hex
  • Firmware.hex
    Benissimo... e adesso?

Domanda: come posso copiare i 3 file nel 328 stand alone?
Dispongo di tre arduino UNO R3 con zoccolo, quindi potrei montare su uno di quelli il 328 da programmare.
Grazie per il Vostro tempo e per la pazienza.

Dunque ...
... "ComponentTester.cfg" non vedo come entri nella programmazione, probabilmente contiene dei parametri di configurazione che non so bene dove dovrai mettere (... magari contiene il valore dei FUSE che devi impostare nella MCU), i due .hex invece li devi dare in pasto ad avrdude che li va a scrivere nemma MCU.

Per programmare la MCU vergine ti occorre un programmatore ICSP ... se non ne possiedi uno e non lo vuoi comprare ... segui alla lettera QUESTA, se pur antiquata, sempre attuale, guida; invece per i comandi da dare ad avrdure due strade:

  1. ti scarichi e ti studi il manuale QUI
  2. ti scarichi ed usi una interfaccia grafica (GUI) verso avrdude, come protrebbe essere avrdudess che ... ti aiuta parecchio.

Guglielmo

ESATTO! ComponentTester.cfg contiene i fuses.
La Guida l'ho appena scaricata e letta tutta,
appena la testa smette di fumare mi metto a studiare il resto.

Grazie per le dritte, probabilmente tornerò ad importunarti più avanti
(probabilmente avrò fatto altri danni)

Ciao Gianfranco

Rieccomi! Letto la documentazione consigliata, ho cominciato a smanettare:

  • Arduino UNO R3 come programmatore

  • Breadboard con chip Atmega 328P vergine, quarzo 16 Mhz, 2 condensatori ceramici da 22pF

  • Aperto l'IDE Arduino carico Arduino ISP

  • Tanto per gradire carico il bootloader nel chip vergine

  • Smonto il chip 328, lo metto su un'altra scheda Arduino UNO R3, carico il classico flash:
    __________________ FUNZIONA _________________

  • Chiudo L'IDE Arduino, apro Avrdudess

  • Setto Programmatore: Arduino

  • Porta Com giusta con baudrate 115200

  • MCU(-p): ATmega328P

  • Presets: Arduino Uno (ATmega328P)

  • Inserisco il percorso dei files Flash ed EEPROM da caricare

  • Pulsante scrivi e VAI: sembra funzionare: nessun errore

  • Pulsante verifica e VAI: verifica completata nessun errore

  • Scrivo i fuse nei riquadrini e poi aziono scrivi...

Non mi scrive i fuse: ho provato in vari modi anche col selettore bits, con la spunta, senza spunta, ma i fuse rimangono ostinatamente a 00.

... non so se questa impostazione sia corretta ... credo che NON riesca a vedere "Arduino as ISP" in quel modo, però di più non so dirti in quanto io uso SOLO veri programmatori e ... non accrocchi fatti usando Arduino come programmatore :grinning_face_with_smiling_eyes:

Potresti provare, quando usi l'IDE con l'Arduino as ISP, a guardare la stringa che viene passata ad avrdude (l'IDE, come avrdudess, richiama avrdure e gli passa i vari parametri e scoprire così come definisce il programmatore, parametro -c).

Guglielmo

... ho appena fatto una prova, il parametro -c deve valere arduinoisp ovvero, nella stringa con cui viene chiamato avrdure ci deve essere il parametro: -carduinoisp

Guglielmo

Hemmmm...
Scusa la domanda sciocca
Dove trovo questi parametri?

sono elencati nel mauale che ti ho indicato sopra ...

... e, ogni volta che da IDE fai un caricamento o una scrittura dei FUSE, l'IDE li scrive nella finestra dei messaggi sottostante (... lancia avrdude con tutti i parametri ben esplicitati).

Guglielmo

P.S.: nelle preferenze dell'IDE metti il segno di spunta per avere i dettagli sia della compilazione che degli errori.

Grazie, vedo che ho ancora molto da studiare

Bingo!!!
Siccome ho la testa dura ho riprovato a rifare tutta la procedura selezionando nell'interfaccia IDE come programmatore: Arduino as ISP (ATmega32U4)
Inoltre in AVRDUDESS ho lasciato il preset di default ed invece di caricare singolarmente le parti ho usato il pulsante Programma!
Il caricamento è andato a buon fine!
Purtroppo non è finita:
Una volta montato in nuovo chip sul transistor tester, lo strumento pur presentando le schermate iniziali, continua a difettare...

Di nuovo grazie per l'aiuto e la pazienza.

Ciao
Gianfranco

Immagino che hai programmato bene i FUSE vero? :wink:

Se continua a mostrare difetti, ho idea che oltre la MCU sia saltata qualche altra cosa ... :roll_eyes:

Guglielmo

Osservando lo schema elettrico qualche sospetto su un componente ce l'ho, ironia della sorte (leggi: legge di murphi) la MCU potrebbe essere del tutto innocente!

P.S.
Comunque anche oggi qualcosa ho imparato.

Ciao
Gianfranco

Aggiornamento:
Eliminando l'IC di protezione sugli ingressi, lo strumento è tornato efficiente.
Bene! ora ho 2 MCU perfettamente funzionanti...

Ciao ciao

Gianfranco