Pages: 1 [2] 3   Go Down
Author Topic: programmare ATmega8A standalone  (Read 1610 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
God Member
*****
Karma: 0
Posts: 689
AHHAH
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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...
Logged

Offline Offline
God Member
*****
Karma: 0
Posts: 689
AHHAH
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
Code:
##############################################################
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)
« Last Edit: September 28, 2011, 08:16:54 am by reizel » Logged

Marche
Offline Offline
Edison Member
*
Karma: 32
Posts: 2262
azioni semplici per risultati complessi
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Logged

Lamezia Terme
Offline Offline
Shannon Member
****
Karma: 411
Posts: 11986
Le domande di chi vuol imparare rappresentano la sua sete di sapere
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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  smiley-cry
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 smiley

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.
Logged

Guida alla programmazione ISP e seriale dei micro ATMEL (Caricare bootloader e sketch):
http://www.michelemenniti.it/Arduino_burn_bootloader.php
Guida alla Programmazione ATmega328 noP:
http://www.michelemenniti.it/atmega328nop.html
Articoli su Elettronica In:
http://www.michelemenniti.it/elettronica_in.html

Offline Offline
God Member
*****
Karma: 0
Posts: 689
AHHAH
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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?
Logged

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 313
Posts: 21624
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Il quarzo esterno non serve se si usa un micro vergine o comunque programmato per andare con l'oscillatore interno (da 1 a 8 MHz).

Il reset non serve premerlo se si adopera un condensatore o una resistenza (o entrambi) per disattivare l'autoreset del micro. Alternativamente installate l'Optifix 4.4 (vedi relativo mio thread): vi togliete la pena una volta per tutte  smiley-wink

Il fuse basso corretto è 0xE1, che per avere 1 MHz, che è poi l'impostazione del micro di fabbrica.

Il fuse alto serve per riservare spazio per il bootloader: questo è necessario se volete programmare il micro sull'Arduino ma non serve se usate il micro in standalone e lo flashate tramite ISP. Per cambiare i fuse si può dire all'IDE di programmare il bootloader ma io preferisco usare avrdude da terminale, così sono sicuro che i parametri che gli passo sono quelli che effettivamente vengono scritti sul micro. Questione di gusti.
Logged


Marche
Offline Offline
Edison Member
*
Karma: 32
Posts: 2262
azioni semplici per risultati complessi
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Cambierò il fuse basso e farò la prova, per il risultato abbiate pazienza che ho al momento tutte le breadboard occupate
Logged

Lamezia Terme
Offline Offline
Shannon Member
****
Karma: 411
Posts: 11986
Le domande di chi vuol imparare rappresentano la sua sete di sapere
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Noto che hai spesso problemi di concentrazione, quando ti deciderai a toglierti davanti alla faccia quei due meloni piacevolmente ballonzolanti, ti passerà la voglia di frutta e sarai concentratissimo smiley-mr-green
Non ho capito di che filo stai parlando, per scrupolo provo a chiarire un po' questa cosa.
Il pulsante reset resetta solo Arduino, il reset del microcontrollore stand alone invece viene controllato dal pin 10 di Arduino.
Ci sono casi in cui il reset di Arduino riceve un impulso che impedisce la manovra di caricamento su stand alone; in questi casi puoi montare un condensatore tra +5V e pin RESET di Arduino (NON dello stand alone!) e rifare l'operazione; rispetto a quanto leggi nella Guida questa tecnica del condensatore sì collegato è diversa, ma è stata scoperta da Astrobeed, DSO alla mano, quindi è la migliore in assoluto; comunque a me ha funzionato anche quella che prevede il collegamento del condensatore tra RESET di Arduino e GND.

La tecnica di Leo consiste nell'andare (se hai Windows) in modalità PROMPT DOS, spostarti nella cartella che ti ha indicato e scrivere a mano quel comando, ovviamente con la corretta sintassi Windows (quella è per Linux), mettendo al posto di "dev/ttyACM0" la COM a cui è collegato Arduino; appena lo esegui automaticamente imposti il low_fuses al valore e1.

@ Leo: stavo scrivendo.... concordo su tutto ma non sulla questione del fuses_high; nel caso del mega168 (poi mi sono ricordado che l'8 non aveva dato problemi...) se non gli dai il suo giusto valore, diverso da quello di fabbrica, non è in grado di far partire sketch oltre i 15K; te lo può confermare Pelletta, che ha assistito al parto, come dice lui; a tal proposito tengo a precisare che è stato un atto di ermafroditismo, quindi non è lui il padre.... smiley-lol
Riguardo il quarzo, la cosa è nata dal fatto che inizialmente programmavo il chip mettendolo su un secondo Arduino; quando sono passato ai test sulla breadboard me li sono portati dietro perché mi pare c he mi avessero dato problemi con i tempi; c'è da dire che però davo un mare di casino con micro già programmati per 16MHz, quindi probabilmente è stato per quello. Da quel momento in poi quando preparo un 3micro ho preso l'abitudine di mandargli il bl per il clock a cui deve lavorare e poi lo sketch, così vado sul sicuro
Logged

Guida alla programmazione ISP e seriale dei micro ATMEL (Caricare bootloader e sketch):
http://www.michelemenniti.it/Arduino_burn_bootloader.php
Guida alla Programmazione ATmega328 noP:
http://www.michelemenniti.it/atmega328nop.html
Articoli su Elettronica In:
http://www.michelemenniti.it/elettronica_in.html

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 313
Posts: 21624
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

E' tutto corretto quello che dici. Io preciso solo qualche info di approfondimento/chiarimento.

Parlando del fuse alto ho precisato a cosa serve e come usarlo, nel senso che serve per riservare lo spazio al bootloader. Ed a prevederne l'esistenza, ovviamente. Poi i valori sono da scegliere in base a cosa uno vuol farci col micro.

Per il quarzo son certo di quello che dico perché tutti i Tiny che ho ricevuto li ho programmati tutti senza quarzo esterno dato che arrivano di fabbrica impostati per lavorare con l'oscillatore interno. Invece ho provato a flashare un 328 che era programmato per usare il quarzo esterno senza metterglielo e ho avuto errori da avrdude.
Logged


Lamezia Terme
Offline Offline
Shannon Member
****
Karma: 411
Posts: 11986
Le domande di chi vuol imparare rappresentano la sua sete di sapere
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

OK, quindi è confermato che allora li avevo programmati col quarzo (parlo dei 328) perché lo erano già stati in precedenza.
I TINY non li ho mai programmati col quarzo, avevo solo provato a cambiare i fuse col solitop sistema, senza riuscirci, è la volta buona che provo sta benedetta riga di AVRDUDE, ma sono anch'io alle prese con i miei lavoretti...
Logged

Guida alla programmazione ISP e seriale dei micro ATMEL (Caricare bootloader e sketch):
http://www.michelemenniti.it/Arduino_burn_bootloader.php
Guida alla Programmazione ATmega328 noP:
http://www.michelemenniti.it/atmega328nop.html
Articoli su Elettronica In:
http://www.michelemenniti.it/elettronica_in.html

Offline Offline
God Member
*****
Karma: 0
Posts: 689
AHHAH
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

./avrdude -C ./avrdude.conf -P /dev/ttyACM0 -U lfuse:w:0xe1:m -p m8 -c stk500v1 -b 19200

ecco perche' mi sembrava arabo, era linux che non ho mai usato smiley-sad

ho installato win-avr che ha dentro arvdude

avrdude -C avrdude.conf -P /dev/ttyACM0 -U lfuse:w:0xe1:m -p m8 -c stk500v1 -b 19200

come la scrivo la porta? ora e' collegato sulla com21
Logged

Lamezia Terme
Offline Offline
Shannon Member
****
Karma: 411
Posts: 11986
Le domande di chi vuol imparare rappresentano la sua sete di sapere
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

sostituisci dev/ttyACM0 con COM21, però Leo ha scritto che dovresti usare la versione in dotazione all'IDE che è patchata, altrimenti probabilmente non ti funziona, perché non vai semplicemente a trovarti questo .exe nel percorso che ti ha indicato lui?
Logged

Guida alla programmazione ISP e seriale dei micro ATMEL (Caricare bootloader e sketch):
http://www.michelemenniti.it/Arduino_burn_bootloader.php
Guida alla Programmazione ATmega328 noP:
http://www.michelemenniti.it/atmega328nop.html
Articoli su Elettronica In:
http://www.michelemenniti.it/elettronica_in.html

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 313
Posts: 21624
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Difatti ci vuole quell'avrdude altrimenti non ti vede l'Arduino come programmatore ISP.
Cmq non è arabo perché è per Linux, ti risulta arabo perché non hai mai usato il terminale. Da DOS sarebbe stato tutto uguale a parte aggiungere l'estensione al file e togliere i "./"  smiley-razz
Logged


Offline Offline
God Member
*****
Karma: 0
Posts: 689
AHHAH
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

avrdude -C avrdude.conf -P COM21 -U lfuse:w:0xe1:m -p m8 -c stk500v1 -b 19200

ok, dal prompt di dos, nella cartella dove c'e' avrdude dell'installazione originale di arduino0022 l'ho lanciato ma mi dice:

avrdude: ser_open(): can't open device "com21": impossibile trovare il file specificato

bo... x me e' windows che e' troppo contorto in queste operazioni...
Logged

Lamezia Terme
Offline Offline
Shannon Member
****
Karma: 411
Posts: 11986
Le domande di chi vuol imparare rappresentano la sua sete di sapere
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Prova a mettere lo slash / davanti a COM21, in alternativo prova a eseguire la riga da "esegui" di Windows, fornendo i necessari percorsi dei file. Non vorrei che in emulazione DOS il Win dimenticasse che si possono avere più di 4 COM, ma mi pare strano....
Logged

Guida alla programmazione ISP e seriale dei micro ATMEL (Caricare bootloader e sketch):
http://www.michelemenniti.it/Arduino_burn_bootloader.php
Guida alla Programmazione ATmega328 noP:
http://www.michelemenniti.it/atmega328nop.html
Articoli su Elettronica In:
http://www.michelemenniti.it/elettronica_in.html

Pages: 1 [2] 3   Go Up
Jump to: