programmare ATmega8A standalone

premetto che non ci capisco piu' nulla, ho letto dappertutto e di tutto, risultato confusione³

ho montato l'ATmega8a su breadboard e collegato ad arduino uno come qua:

in + sull'atmega8a:
su alcuni schemi ho visto AREF messo a +5, serve? (pin21)
ho aggiunto un cond da 100nF tra gnd e +5
una res da 10k tra reset e +5 (pin1)
led con res da 1k sul pin19 (equivalente del out13 arduino)

leo mi ha dato da aggiungere sul boards.txt

##############################################################
atmega.name=Atmega8A standalone (w/ Arduino as ISP)
atmega.upload.protocol=stk500
atmega.upload.maximum_size=8192
atmega.upload.speed=19200
atmega.upload.using=arduino:arduinoisp
atmega.bootloader.low_fuses=0xe1
atmega.bootloader.high_fuses=0xd9
atmega.bootloader.path=atmega
atmega.bootloader.file=ATmegaBOOT.hex
atmega.bootloader.unlock_bits=0x3F
atmega.bootloader.lock_bits=0x0F
atmega.build.mcu=atmega8
atmega.build.f_cpu=1000000L
atmega.build.core=arduino

leo disse:"Allora, i collegamenti dovrebbero essere questi:
PIN ARDUINO -> PIEDINI ATMEGA8A (per "pin" intendo gli header numerati)
10 -> 1 (RST)
11 -> 17 (MOSI)
12 -> 18 (MISO)
13 -> 19 (SCK)
Come scheda di destinazione io partirei dall'Arduino NG mixando con il 328"

menniti poi aveva delle riserve sui fuses usati da leo, ma son particolari secondari al momento, ancora non so farlo partire (se non li ho gia' piantati...)(uno dei 2 atmega8a usati per queste prove fa alcuni lampeggi veloci, poi fermo, poi rilampeggia e via di seguito)

a me non interessa il bootloader, voglio solo che vada a 1MHz e voglio caricarci sketch facilmente per fare prove, che devo fare per caricarci almeno il blink e capire?

anche pelletta dovrebbe intendersene... :slight_smile:

Se vuoi che vada a 1 MHz, NON toccare i fuse. Tutti gli Atmega vergini, ossia arrivati direttamente dalla fabbrica, escono ad 1 MHz.

L'AREF non serve. I collegamenti sono giusti.

Inserisci quell'estratto che ti ho dato in all'interno di /arduino-00xx/hardware/arduino/boards.txt (cambiando il fuse alto con il valore di Mike) e poi prova a mandare lo sketch blink.

ok cambiato i fuse:
atmega.bootloader.low_fuses=0xe1
atmega.bootloader.high_fuses=0xdf
(menniti diceva pure
low 0xe4
high 0xdf)

ma non carica, errore:
avrdude: stk500_getsync(): not in sync: resp=0x00
avrdude: stk500_disable(): protocol error, expect=0x14, resp=0x51

(ho come la sensazione di averli gia' piantati sti 2 atmega8a...)

0xe4 è per 8MHz, ho scritto che avevo sbagliato. I valori high dovrebbero funzionare entrambi, con Leo abbiamo fatto una disquisizione circa un parametro che non ha alcuna importanza per le tue prove. Nella Guida avevo scritto:

Alcune volte succede che, pur avendo settato correttamente la board di programmazione, non si riesce ad inviarle lo sketch ArduinoISP, ricevendo un errore “avrdude: stk500_getsync(): not in sync: resp=0x00
avrdude: stk500_disable(): protocol error, expect=0x14, resp=0x51”; in questo caso probabilmente avete già collegato il pin del Reset alla resistenza ed al condensatore; staccate questo filo e riprovate.

Quindi hai il reset dell'Arduino bloccato.
Riepiloghiamo le manovre:
Carica ArduinoISP su Arduino (anche a breadboard collegata)
Seleziona da Tools->Board la virutale che hai inserito in boards.txt -> "Atmega8A standalone (w/ Arduino as ISP)"
Invia lo sketch
Deve funzionare per forza.

io non ho mai messo il pin di reset tra la 120ohm e il condensatore (ora ho pure provato a farlo ma sempre lo stesso errore)

:disappointed_relieved:

comincia il mal di testa...

Hai una UNO?
Prova ad infilare un condensatore da 10 uF fra il pin RST (+) ed il pin GND (-) dell'Arduino DOPO aver collegato l'Arduino al PC (con già precaricato lo sketch ArduinoISP) e PRIMA di inviare lo sketch all'Atmega8.

ha funzionato ma, un atmega8a va, l'altro sembra piantato, non si programma

arduino uno con caricato arduinoISP
quando mi ha caricato so sketch stavo usando
il reset della uno collegato tra +5 120ohm (rst) 10uF gnd
arduino uno pin 10 al pin 1 (rst) dell' at8a con res da 10k al +5
arduino uno pin 11 al pin 17 dell' at8a
arduino uno pin 12 al pin 18 // //
arduino uno pin 13 al pin 19 // //

come faccio a sapere se l'atmega8 va a 1MHz?
quello piantato avete idee di come sbloccarlo? (microonde?)

dopo scrivo giu' tutto con ordine, passo passo, forse era semplice ma stavo sclerando :stuck_out_tongue:

dimenticavo, prima di caricare uno sketch devo premere il reset del'arduino uno

MAI MICROONDE

Puoi interrogare l'Atmega usando avrdude (quello dell'IDE) da linea di comando con Arduino come programmatore ISP.

Ripeto: se gli Atmega sono vergini, vanno a 1 MHz, a meno che tu non abbia già spippolato con i fuse. In questo caso usa avrdude per capire com'è messo il micro.

avevo gia' spippolato qualcosa... ma non chiedermi cosa...

non sapevo che uscissero a 1MHz, non avrei cominciato con i fuse sapendolo :frowning:

http://www.ladyada.net/learn/avr/avrdude.html

avevo trovato queste istruzioni, ma il prog. avrdude non ho capito se e' integrato in arduino o lo devo scaricare?
"Puoi interrogare l'Atmega usando avrdude (quello dell'IDE) da linea di comando con Arduino come programmatore ISP."

spiegami meglio :slight_smile:

per la cronaca ho provato a caricare uno sketch grande e funziona

Binary sketch size: 8178 bytes (of a 8192 byte maximum)

I fuse in realtà forse devi cambiarli anche se il micro esce già ad 1MHz, per recuperare lo spazio previsto per il bootloader e per far sì che gli sketch partano anche quando sono di grandi dimensioni. Quale fuse hai usato per l'high? Sarebbe utile che facessi la prova anche con l'altro valore ma visto che hai un solo 8A funzionante non ti conviene rischiare, magari quando risolvi con l'altro.
Non ho mai usato AVRDUDE, ma dovrebbe essere un eseguibile da lanciare in modalità dos o forse anche da "esegui" di Windows, con tutta una serie di opzioni. Mi piacerebbe provarlo, visto che dovrei imparare a cambiare i fuse dei tiny e posso farlo, allo stato attuale, solo in quel modo. Se Leo trova il tempo di postare la sintassi corretta si potrebbe provare.

PS: sull'altro ATMEGA hai provato a caricare prima il bootloader e poi lo sketch? Può essere che abbia qualche fuse strano ma non abbastanza da tenerlo bloccato, col bl risolveresti, puoi farlo con i due Arduino, con la solita tecnica.

menniti:
Se Leo trova il tempo di postare la sintassi corretta si potrebbe provare.

Bisogna usare avrdude distribuito con l'IDE altrimenti non funziona con l'Arduino come programmatore ISO (la versione dell'Arduino è patchata).
Collegare l'Arduino al micro come ISP, poi spostarti nella cartella /arduino-00xx/hardware/tools, aprire un terminale e poi dare il seguente comando:
./avrdude -C ./avrdude.conf -P /dev/ttyACM0 -U lfuse:w:0xe1:m -p m8 -c stk500v1 -b 19200
così rimetti il fuse basso per lavorare col clock interno a 1 MHz

PS:

qui ci sono delle info per l'Attiny85 ed un USBtinyISP ma vanno bene per capire come funziona avrdude.

menniti, ho usato questi fuse:

##############################################################
atmega.name=Atmega8A standalone (w/ Arduino as ISP) 1MHz
atmega.upload.protocol=stk500
atmega.upload.maximum_size=8192
atmega.upload.speed=19200
atmega.upload.using=arduino:arduinoisp
atmega.bootloader.low_fuses=0xe1
atmega.bootloader.high_fuses=0xdf
atmega.bootloader.path=atmega
atmega.bootloader.file=ATmegaBOOT.hex
atmega.bootloader.unlock_bits=0x3F
atmega.bootloader.lock_bits=0x0F
atmega.build.mcu=atmega8
atmega.build.f_cpu=1000000L
atmega.build.core=arduino

Salve! Per programmare l'atmega8 a 1MHz uso questa configurazione, l'ha partorita con dolore il nostro grande Menniti e direi che funziona.

##############################################################
atm8_1.name= ATmega8 Stand Alone 1MHz
atm8_1.upload.protocol=stk500
atm8_1.upload.maximum_size=8192
atm8_1.upload.speed=19200
atm8_1.upload.using=arduino:arduinoisp
atm8_1.bootloader.low_fuses=0xe4
atm8_1.bootloader.high_fuses=0xdf
atm8_1.bootloader.path=atmega8
atm8_1.bootloader.file=ATmegaBOOT.hex
atm8_1.bootloader.unlock_bits=0x3F
atm8_1.bootloader.lock_bits=0x0F
atm8_1.build.mcu=atmega8
atm8_1.build.f_cpu=1000000L
atm8_1.build.core=arduino

ciao, su quel low_fuses menniti e leo c'hanno discusso stanotte e oggi, se non sbaglio vanno bene tutti e 2

tu li usavi senza bootloader, giusto?

ora faccio un riassunto di come l'ho programmato io, cosi' almeno per il futuro carico gli sketch senza bloccare gli at8a giocando con i fuses... vediamo se riesco a sbloccare quello piantato...

programmare ATmega8A standalone

riassunto tecnica usata

ho montato l'ATmega8A su breadboard e collegato ad arduino uno come qua:

in piu' sull' ATmega8A:

ho aggiunto un cond da 100nF tra gnd e +5

una res da 10k tra reset e +5 (pin1)

led con res da 1k sul pin19 (equivalente del out13 arduino)

poi :

il reset della uno collegato tra: +5 120ohm (rst) 10uF gnd

arduino uno pin 10 al pin 1 (rst) dell' at8a (con res da 10k al +5)
arduino uno pin 11 al pin 17 dell' at8a
arduino uno pin 12 al pin 18 // //
arduino uno pin 13 al pin 19 // //

su boards.txt ho aggiunto:

##############################################################
atmega.name=Atmega8A standalone (w/ Arduino as ISP)
atmega.upload.protocol=stk500
atmega.upload.maximum_size=8192
atmega.upload.speed=19200
atmega.upload.using=arduino:arduinoisp
atmega.bootloader.low_fuses=0xe1
atmega.bootloader.high_fuses=0xd9
atmega.bootloader.path=atmega
atmega.bootloader.file=ATmegaBOOT.hex
atmega.bootloader.unlock_bits=0x3F
atmega.bootloader.lock_bits=0x0F
atmega.build.mcu=atmega8
atmega.build.f_cpu=1000000L
atmega.build.core=arduino

quindi a collegamenti fatti si carica sulla UNO arduinoISP (anche a breadboard collegata)

poi su Tools->Board si seleziona la board virutale che abbiamo appena inserito -> "Atmega8A standalone (w/ Arduino as ISP)"

(si preme il reset della UNO (verificato, non serve))

quindi si invia lo sketch che desideriamo caricare

finito! il nostro ATmega8A e' programmato e senza bootloader si possono scrivere tutti gli 8k disponibili (va a 1MHz ovviamente, come da fuses)

Premetto che ho fatto le prove soltanto con la 2009 e non saprei dirti se vale lo stesso per la uno.
Il bootloader va caricato soltanto una volta e questo serve per impostare i fuse sul micro.
La procedura che eseguo è la seguente:
1 – Prepara l'atmega8 su breadboard con quarzo e condensatori
2 – Carica su Arduino lo sketch ArduinoISP
3 – Seleziona la board 8 stand alone da 1MHz
4 – manda il bootloader (Tecnica della guida Menniti)
5 – carica lo sketch blink giusto per verificare
6 – scollega Arduino, togli l’alimentazione alla breadboard ed elimina quarzo e condensatori
7 – ridai alimentazione alla breadboard (vedrai che il blink funziona)
Da questo punto in poi i fuse sono settati e puoi caricare gli sketch anche senza bootloader

Pelletta:
Salve! Per programmare l'atmega8 a 1MHz uso questa configurazione, l'ha partorita con dolore il nostro grande Menniti e direi che funziona.

Come diceva il grande Giacomo del trio comico nello sketch "PDOR": non è il parto che mi preoccupa ma l'accoppipamento =(
Allora, BUD, ti devo chiedere scusa ma proprio stanotte mi sono accorto di un piccolo errore, riguardo la board da 1MHz. I fuse corretti sono:
.....low_fuses=0xe1
.....high_fuses=0xdf
quindi tu devi correggere (SOLO in quella da 1MHZ!!) il low e Reizel deve correggere l'HIGH, anche se non gli dà problemi con sketch grandi, come invece accade di sicuro con i 168, la cui problematica è stata risolta proprio con quel tipo di calcolo, poi fa' come ti pare :slight_smile:

La tecnica usata e sperimentata con moltissimo successo da Pelletta è quella che andrebbe adottata a tutti gli effetti; ma, per abbreviare, si potrebbe omettere di installare quarzo e condensatori; va verificato se ci sono problemi coi tempi, ma dovrebbe andare comunque; @ Pelletta: se hai modo di fare il test fammi sapere se i tempi vanno bene altrimenti lascia tutto com'è che siamo al sicuro...

@reizel: non ho capito il passaggio della pressione del reset prima di inviare lo sketch, non puoi usare il condensatore da 10µF tra il +5 e Reset?
Ancora, ti ho suggerito di caricare PRIMA il bootloader, anche se devi lavorare a 1MHZ, in modo che gli imponi i nuovi fuses, oltretutto questa manovra potrebbe farti recuperare il tuo 8A bloccato; in caso contrario usa il suggerimento di Leo che è sicuramente funzionante.

men, il bootloader su quello bloccato non riesco a caricarlo e il suggerimento di leo non ho capito come metterlo in pratica, provo in un altro momento che sono piu' concentrato..

in effetti il metodo che ho usato io e' abbastanza grezzo, quello di Pelletta e' piu' lineare, provero' come a fatto lui con il bootloader prima, poi se tutto ok ritento con l'8a bloccato

invec di schiacciare il reset della uno dici di staccare e riattaccare il filo? e' la stessa cosa no?