Utilizzo file hex ed eep già precompilati

Immagino che, come buona parte dei tread aperti da noi niubbi, quello che mi serve sia nascosto nei meandri del forum ma con tutta la buona volontà ancora non sono riuscito a scovarlo.
Innanzitutto un grazie gigantesco a menniti che con la sua guida mi ha risparmiato molto tempo perso in ricerche.
Ma veniamo al punto.

Sto provando a costruire il transistor tester che vi linko qui AVR-Transistortester – Mikrocontroller.net
Ovviamente non funziona altrimenti non starei qui a scrivervi :slight_smile:
Essendo la prima volta che mi avventuro nella costruzione di un pcb con atmega in stand alone non so cosa sto sbagliando ma sospetto fortemente che dipenda dalla programmazione dell'atmega.
In più, a complicare le cose, c'è il fatto che il progetto prevede il caricamento di due file (uno hex e l'altro eep per i caratteri nell'LCD) direttamente nell' atmega8.
Da giorni sto cercando informazioni in rete ma sono sicuro che sto sbagliando qualche cosa. Prima di perdere ulteriore tempo nella ricerca del problema nel posto sbagliato chedo aiuto agli esperti
Se qualcuno di voi è disponibile ad aiutarmi questo è quello che ho fatto:

Il progetto prevede il caricamento dell'hex e dell'eep in un atmega 8 che funzioni con l'oscillatore interno ad 1MHz e abbia i fuses impostati così: low-c1, high-d9
Grazie alla splendida guida del menniti ho realizzato il collegamento isp tra un adruino uno smd e una bread board con tutto il necessario compreso il quarzo a16MHz.
A questo punto ho modificato il file board aggiungendo una scheda sulla base della mega8 ma con i fuses richiesti e il clock a 1Mz . Questo è il codice che ho scritto:

atmegax8.name=ATmegax8

atmegax8.upload.protocol=stk500
atmegax8.upload.maximum_size=7168
atmegax8.upload.speed=19200

atmegax8.bootloader.low_fuses=0xc1
atmegax8.bootloader.high_fuses=0xd9
atmegax8.bootloader.path=atmega8
atmegax8.bootloader.file=ATmegaBOOT.hex
atmegax8.bootloader.unlock_bits=0x3F
atmegax8.bootloader.lock_bits=0x0F

atmegax8.build.mcu=atmega8
atmegax8.build.f_cpu=1000000L
atmegax8.build.core=arduino

Ho caricato lo sketch arduino isp nell'arduino poi ho bruciato il bootloader nella mega8 per impostare i fuses.
Fino a qui credo di non aver sbagliato niente ma ora viene il bello.
Ho capito che il modo migliore per caricare i file sarebbe utilizzare avr dude ma non riesco neanche a trovarlo.
Ad ogni modo ho provato in tutti questi modi:

° Ho aperto lo sketch Blink e compilato. aperto la cartella temporanea e sostituito i file .hex .eep con quelli da caricare, opportunamente rinominati. uplodato il tutto

° Ho aperto uno sketch vuoto e riempito soltanto con void setup e void loop. Salvato, compilato, sostituito i file come sopra e uploadato.

° Ho scaricato avr uploader e dopo aver selezionato il solo file .hex l'ho caricato utilizzando sempre l'arduino come isp

° Ho ripetuto tutti i passaggi con la breadboard senza il quarzo da 16MHz e condensatori da 22pF.

Dimenticavo, per verificare il funzionamento del collegamento ISP e del cablaggio della breadboard ho provato a caricare lo sketch blik ed effettivamente ha funzionato ma con una lentezza assurda. Purtroppo ora non ricordo con quali impostazioni di clock l'ho fatto... :cold_sweat:

Cosa posso aver sbagliato?

In realtà questa intendeva essere una replica al post della guida ma a quanto pare la sezione generale del forum è stata sigillata da equitalia :stuck_out_tongue:

Avrdude lo trovi nell'IDE di Arduino --> arduino_1.0.1\hardware\tools\avr\bin

--> Arduino Forum

Per vedere i comandi dell'IDE, metti la spunta nelle preferenze in "mostra output verboso" upload.

In effetti quel file

Avrdude lo trovi nell'IDE di Arduino --> arduino_1.0.1\hardware\tools\avr\bin

l'avevo già trovato ma avviandolo mi si apre e chiude istantaneamente la finestra quindi l'avevo escluso

Ed anche questo post

--> Arduino Forum

l'avevo già incontrato nelle varie ricerche ma, dopo averlo scorso velocemente, sono passato oltre perchè credevo non fosse attinente.
Adesso lo approfondisco subito,

Grazie!

Nel articolo fanno riferimento a una altra pagina dove viene continuato lo sviluppo del progetto.
http://www.mikrocontroller.net/articles/AVR_Transistortester
Quella versione (Markus) puó misurare anche induttanze.

Ciao Uwe

...he he he pensavo che optibot fosse un programma per caricare i file dell'ATmega...
Adesso ho letto più attentamente il tread e il pdf di avrdude e ho provato al volo con una stringa più o meno fantasiosa.
Ovviamente non ha funzionato ma domani cerco di capire meglio cosa devo fare.
Nel frattempo se qualcuno è così buono dal darmi degli indizi... :smiley:

questo comunque è il testo che si presenta in avrdude:

C:\Users\Tazio\Desktop\arduino-0022\hardware\tools\avr\bin>avrdude -C avrdude.co
nf -P \\.\COM3 -U lfuse :w:0xc1:m -U hfuse :w:0xd9:m -U flash :W:C:\Users\Tazio\
Desktop\transistortester\Firmware\Transistortester.hex:i -U eeprom :w:C:\Users\T
azio\Desktop\transistortester\Firmware\Transistortester.eep:i -p m8 -c stk500 -b
 19200
avrdude: successfully opened stk500v1 device -- please use -c stk500v1

avrdude: AVR device initialized and ready to accept instructions

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

avrdude: Device signature = 0x1e9307
avrdude: NOTE: FLASH memory has been specified, an erase cycle will be performed

         To disable this feature, specify the -D option.
avrdude: erasing chip
avrdude: reading input file "lfuse ("
avrdude: error opening lfuse (: No such file or directory
avrdude: input file lfuse ( auto detected as invalid format
avrdude: can't open input file lfuse (: No such file or directory
avrdude: write to file 'lfuse (' failed

avrdude: safemode: Fuses OK

avrdude done.  Thank you.

Ho eliminato i comandi relativi ai fuses (che ho copiato dalla fuse calculetor) e a quel punto l'errore nel report ha riguardato la flash e non più il lfuse.

una buona notte gente

Non devi scrivere:

-U lfuse :w:0xc1:m

ma

-U lfuse:w:0xc1:m

Il parametro è "-U", il resto dei dati va scritto tutto attaccato, altrimenti avrdude pensa che :w:0xc1m sia un altro parametro. Questo vale per tutti gli "-U" usati.

GRANDISSIMO!!!
Adesso va alla grande!
Grazie mille.
Cmq non sarebbe male se nella guida il Menniti agiungesse un capitolo sulle basi della programmazione con avrdude.

Cmq per tua conoscenza l errore che facevi inizialmente è un Po nascosto. Semplicemente quando da Ide premi il tasto Upload, lui prima ricompila e poi carica. Quindi se anche avevi sostituito i file hex di blink, l ide li ha risostituiti con blink stesso :slight_smile:

Altra opzione per caricare hex è usare l apposito comando presente nel nuovo IDE, leggi la mia guida in firma

Semplicemente quando da Ide premi il tasto Upload, lui prima ricompila e poi carica. Quindi se anche avevi sostituito i file hex di blink, l ide li ha risostituiti con blink stesso

Maledetto IDE! Avevo questo sospetto ma non avevo ancora pensato di provare l'ATmega con il circuito blink.

leggi la mia guida in firma

Grazie della segnalazione, non sapevo esistesse la guida. Ho abbandonato precocemente l'IDE 1 ma adesso mi do una letta alla guida.

Punkrazio:
Cmq non sarebbe male se nella guida il Menniti agiungesse un capitolo sulle basi della programmazione con avrdude.

Intanto grazie per i complimenti ed il feedback. Riguardo AVRDUDE per la verità sto scrivendo molto ma molto di più che un banale capitolo, sto scrivendo una Guida tutta sua :wink: ma ci vuole tempo ed ho in contemporanea mille altre cose da portare a compimento :sweat_smile:
Comunque per ora ti dò un suggerimento: copiati l'intera cartella AVR in C:\ e metti sempre in C:\ il file da uploadare, così ti agevoli la vita con i percorsi, per leggere la tua sintassi mi stavo cecando :fearful:
Riguardo il resto mi pare d'aver capito che tu abbia risolto, comunque dopo aver settato un micro per un dato clock, devi creare la relativa board e compilare il file da caricare con quella board, altrimenti sballano i tempi, probabilmente hai caricato un blink compilato per 16MHz, ecco perché ti lampeggiava con grande lentezza.
Aggiungo che fa piacere vedere che un nuovo utente abbia parecchio cercato e smanettato prima di chiedere aiuto; se tutti facessero come te ci si sarebbe risparmiati non meno di un migliaio di Topic inutilmente duplicati; la gente a volte apre un Topic identico a quello presente nella pagina principale della sezione, davvero ridicolo.

Aggiungo che fa piacere vedere che un nuovo utente abbia parecchio cercato e smanettato prima di chiedere aiuto[\quote]
Grazie, anche se mia moglie non sarebbe propriamente d'accordo con te :D. Cmq è una questione di " tigna". Non sopporti di dover chiedere aiuto e poi non c'è la stessa soddisfazione.

comunque dopo aver settato un micro per un dato clock, devi creare la relativa board [ /quote]

Infatti immaginavo, solo mi è rimasto un dubbio. se devo programmare un micro che lavorerà con clock interno a 8MHz, devo togliere il quarso e i condensatori dalla board usata per programmare? O servono comunque perchè l'arduino ISP va a 16MHz?

Riguardo AVRDUDE per la verità ... sto scrivendo una Guida tutta sua

Non vedo l'ora, adoro le guide.

I micro ATMEL escono già settati per operare con oscillatore interno a 1MHz; se devi impostare il micro per continuare a farlo lavorare con oscillatore interno non c'è bisogno che usi quarzo e C, che invece diventa indispensabile se vuoi programmare un micro già impostato per lavorare con l'oscillatore esterno. In pratica il Programmatore ISP non ce'ntra niente con la questione quarzo&C, è lo status pre-programmazione del micro che ne richiede la presenza o meno, per poter lavorare e rispondere alla programmazione ISP, ok?
Nella Guida tu vedi usare il quarzo anche alla prima programmazione, se il chip è vergine non servirebbe, ma non sono stato a specificare questa cosa per la semplice ragione che non fa male usare un quarzo&C e:
1 - se il micro è impostato per l'oscillatore esterno è indispensabile che ci siano
2 - se il micro è impostato per l'oscillatore interno semplicemente vengono ignorati
:wink:

Grazie del chiarimento. Ho fatto una piccola pcb shield (il mio primo lavoro con eagle, cloruro ferrico &co XD )e a questo punto posso considerarla a tutti gli effetti abile ed arruolata.

Punkrazio:
Grazie del chiarimento. Ho fatto una piccola pcb shield (il mio primo lavoro con eagle, cloruro ferrico &co XD )e a questo punto posso considerarla a tutti gli effetti abile ed arruolata.

SSS! (Signorsì Signor Sergente) XD

Purtroppo eccomi nuovamente qui a chiedere aiuto.
Ho pensato di riesumare questo topic perchè in fin dei conti devo continuare il discorso iniziato qui.
In sostanza a distanza di 6 mesi, memore della conquista dell'atmega8 stand alone, ho azzardato con un atmega328P vergine.
Ho utilizato la stessa board che avevo utilizato con successo per l'atmega8 il che mi da una buona garanzia circa i collegamenti. Ovviamente ho avuto dei problemi. Sia tramite ide che tramite avrdude ho continuato a ricevere errori.
Allora ho cercato di replicare quanto fatto in precedenza montando nuovamente un atmega8.
Misteriosamente non riesco ad eseguire nessuna operazione. Nemmeno utilizando il codice che avevo già postato e che funzionava. Nemmeno la scrittura dei fuses.

Questo è uno dei vari codici che ho scritto:

C:\avrdude>avrdude.exe -C avrdude.conf -P \.\COM3 -U lfuse:w:0xdf:m -U hfuse:w:0xca:m -p m8 -c stk500 -b 115200

e questo è il risultato:

avrdude.exe: successfully opened stk500v1 device -- please use -c stk500v1

avrdude.exe: stk500_program_enable(): protocol error, expect=0x14, resp=0x50
avrdude.exe: initialization failed, rc=-1
Double check connections and try again, or use -F to override
this check.

avrdude.exe done. Thank you.

allora ho provato a cambiare il baudrate:

C:\avrdude>avrdude.exe -C avrdude.conf -P \.\COM3 -U lfuse:w:0xdf:m -U hfuse:w:0xca:m -p m8 -c stk500 -b 115200

e il risultato è questo:

avrdude.exe: successfully opened stk500v1 device -- please use -c stk500v1

avrdude.exe: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.00s

avrdude.exe: Device signature = 0x1e950f
avrdude.exe: Expected signature for ATMEGA8 is 1E 93 07
Double check chip, or use -F to override this check.

avrdude.exe done. Thank you.

Niente di meglio passando tramite l'ide. Se provo a caricare il bootloader dell'Arduino NG or older w/ ATmega8
nell'atmega8 ottengo:

avrdude: stk500_program_enable(): protocol error, expect=0x14, resp=0x50
avrdude: initialization failed, rc=-1
Double check connections and try again, or use -F to override
this check.

Se passo direttamente ad uno sketch ottengo:

avrdude: Expected signature for ATMEGA8 is 1E 93 07
Double check chip, or use -F to override this check.

Ho provato tutto questo con e senza condensatore. Collegandolo al 3,3v e al 5v. Ho riavviato il pc.
Ho offerto in sacrificio il gatto.

Non riesco proprio a capire cosa non va più....

AIUTOOOOOO

Qursta è facile
Hai comprato dei 328 invece arduino lavora con i 328P
Controlla bene la sigla stampata sopra a componente per conferma.

Se ho ragione controlla sul sito del Menniti che ha creato una guida anche per gedtire i vecchi 328 senza P (picopower)

Purtroppo no, è un 328p . Quello che non capisco è perché non riesco più ad utilizzare l'atmega8 con le stesse modalità che avevo già usato.

È un falso ? Dove lo hai comprato ?
La mia non è semplice ipotesi ma è corroborata dai fatti, la signature che tu hai postato è quella del 328 no p.

Segui la guida sul 328 del menny, la trovi sul suo sito, e vedi se ti funziona

Atmega 8 (oppure 8A?) Che signature ha ?

I messaggi che ho postato però si riferiscono all' atmega8 (non ricordo se con A o senza). Comunque a questo punto la pulce nell'orecchio me l'hai messa. appena torno a casa provo nuovamente con il 328 e vedo che esce.

Stai programmando degli Atmega8 o degli Atmega328P? Ha ragione testato, ci sono discordanze nella firma digitale:
Atmega8: 1E 93 07
ATmega328P: 1E 95 0F

avrdude.exe: Device signature = 0x1e950f
avrdude.exe: Expected signature for ATMEGA8 is 1E 93 07

avrdude ha trovato un Atmega328P mentre tu gli stai dicendo di programmare un Atmega8.

PS:
se stai cercando di flashare il micro via ISP stai usando una velocità eccessiva. Con l'ArduinoISP caricato su un Arduino UNO, devi mettere "-b 19200".