programmazione ATMEGA328

Volevo chiedervi le vostre impressioni e prove (se ne avete fatte) della programmazione dell'ATMEGA328 utilizzando l'arduino come programmatore e avrdude per la compilazione dei sorgenti in c.
Volevo seguire questa guida Vittorio Zuccalà: Mini Tutorial per usare Arduino come programmatore ATMEGA8 / ATMEGA168 , che, se noonricordo male, l'hotrovata spulciando questo forum stesso.

Quello che mi interessa sapere è se funzionano bene tutti gli sketch.

Il vero motivo di questo post è il mio dubbio sulla connessione della porta ICSP dell'arduino con l'ATMEGA328:
da quello che ho capito i pin 1,3 e 4 della porta sull'arduino vanno rispettivamente (ed ovviamente) ai pin 18,19 e 17;
Il pin 2 va a +5V il 6 a GND;
quello che mi lascia perplesso è il pin 5: il pulsante è necessario?? dalle foto nella guida il pulsante c'è, ma non sembra collegato a niente! se collego il pin 5 della porta sull'arduino con il pin di RESET dell'ATMEGA, mettendoci anche la resistenza da 10k verso +5V???

Per l'alimentazione dell'ATMEGA mi pare di aver capito che basta una tenzione stabilizzata tra 3 e 5 V giusto???

Lo so, sono cose un pò scontate, ma nel dubbio non vorrei bruciare niente! ::slight_smile:

Appena mi confermate le connessioni comincio a provare e vi dico i risultati XD

Quello che mi interessa sapere è se funzionano bene tutti gli sketch.

Direi di no.
La frequenza senza il quarzo è ben più bassa di 20Mhz e si riduce notevolmente.
Se hai bisogno di operazioni veloci o frequenti direi che l'ATMEGA da solo non va bene.
Inoltre attenzione ai circuiti di protezione. Il microprocessore senza la scheda arduino con i suoi fusibili è molto "vulnerabile" e basta poco per bruciarla.
Una alimentazione da rete, ad esempio, se non ben stabilizzata è deleteria. Nella guida, non a caso, ho usato le batterie.

Il vero motivo di questo post è il mio dubbio sulla connessione della porta ICSP dell'arduino con l'ATMEGA328:
da quello che ho capito i pin 1,3 e 4 della porta sull'arduino vanno rispettivamente (ed ovviamente) ai pin 18,19 e 17;
Il pin 2 va a +5V il 6 a GND;
quello che mi lascia perplesso è il pin 5: il pulsante è necessario?? dalle foto nella guida il pulsante c'è, ma non sembra collegato a niente! se collego il pin 5 della porta sull'arduino con il pin di RESET dell'ATMEGA, mettendoci anche la resistenza da 10k verso +5V???

Il pulsante non serve a nulla.
Era una prova e poi è rimasto sulla bread board :slight_smile:

Per l'alimentazione dell'ATMEGA mi pare di aver capito che basta una tenzione stabilizzata tra 3 e 5 V giusto???

Esatto ma che sia veramente stabilizzata.
Due batterie da 1.5V in serie sono la scelta migliore secondo me.

Lo so, sono cose un pò scontate, ma nel dubbio non vorrei bruciare niente! Roll Eyes

Per la verità non le trovo per nulla domande scontate ma se lo dici tu :stuck_out_tongue:
Sinceramente se una persona si informa, cerca materiale, prova e poi non capisce penso che nulla sia scontato.
Al contrario trovo scontato se uno scrive: "ho sentito che si può fare una cosa... qualcuno mi dice come?"
Condividi? :wink:

Si, condivido in pieno!!!!

Ancora non ho potuto provare (impegni vari e sveglie presto >:(), però volevo già chiedere una cosa, per renderlo "veloce" basterebbe inserire un quarzo a 16Mhz con i due condensatori da 22pF, ma per quanto riguarda il settaggio??? Leggendo questo post:
http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1265552719/8
non danno la soluzione, ma solo che sbagliando si rende inutilizzabile l'ATMEGA. Semp're per mancanza di tempo ancora non ho letto il datasheet dell'ATMEGA (penso che lì ci sia) ma se qualcuno lo ha già provato ::).....
Mi interessa la gestione del clock perchè l'ATMEGA dovrebbe poi parlare in seriale con l'arduino!!! :slight_smile:

Il clock nella comunicazione della seriale non penso influisca.
Esso influisce nelle varie operazioni.
Ad esempio se fai una applicazione che legge 4 sensori, stampa su LCD qualcosa, fa dei calcoli e scrive su seriale.... devi conteggiare che il tutto sarà decisamente più lento.
Se comunque vuoi proprio donare maggiore velocità a quel punto si, devi mettere il quarzo e settare i fuse ma a quel punto passo la palla :slight_smile:
Tuttavia in tal caso ti chiedo: ma perchè a questo punto non usi direttamente arduino?
Io ho testato l'ATMEGA da solo perchè mi sono accorto che arduino ciuccia una batteria in pochissimo tempo e da li la voglia di un microprocessore nudo e crudo che consumi poco :slight_smile:

In un certo senso ho la tua stessa motivazione:

mi sono avvicinato all'arduino perchè mi sono messo in testa di costruirmi un elicottero radiocomandato e per certi versi automatico :sunglasses:
La strada ancora è lunga, ed anche molto!! Ho cominciando comprando uno di questi modelli pseudo-professionali, poi ho comprato l'arduino, e per problemi di spazio e consumi, mi sto votando all'ATMEGA(ovviamente l'arduino è fondamentale per prove, programmazione, centrale da terra ecc.....ma on-board non mi serve nè lo stabilizzatore di tenzione, nè le uscite a 3,3V e 5V, nè il convertitore USB-seriale)!!!

Detto questo, sempre da ignorante, ma come fa l'ATMEGA a dare la giusta velocità ai dati trasmessi in seriale senza un clock??? Può essere che tu abbia ragione, ma io non me lo spiego!!! Cmq, appena comincio a fare le prove vi vado via via scrivendo il tutto!!!

Nota Bene:

Il clock influisce molto sulla comunicazione seriale perchè la porta seriale usa una base dei tempi derivata dal clock e ogni bit deve durare un certo tempo con una tolleranza molto bassa. se si usa un clock diverso da 16MHz bisogna agire sul sorgente di arduino per adattarlo. Se si usa il clock interno al processore, dato che questo è realizzato con una resistenza ed un condensatore la tolleranza è ampia e le variazioni di temperatura creano dei cambiamenti marcati del clock. in questo caso è possibile che le variazioni di frequenza possano rendere impossibile la comprensione dei dati inviati.

In sintesi se usi quarzo da 20MHz devi mettere le mani nel motore di arduino e possono essere dei casini non indifferenti.

Allora, ho fatto le prove....e naturalmente non va niente!!!!

Seguendo la guida ci sono un pò di problemucci per il semplice fatto che lavoro sotto windows :-[:
il file avrdude.exe sta in \arduino-0017\hardware\tools\avr\bin
con il primo comando:

[ch65279]avrdude -p m8 -P /dev/ttyUSB0 -c avrisp -b 19200

si deve cambiare /dev/ttyUSB0 con com3 o quella dove c'è collegata l'arduino. Inoltre ritorna un'errore di mancanza del file di configurazione.
Spulciando questo manuale AVRDUDE: 1 Introduction ho trovato la soluzione:
il file avrdude.conf si trova in \arduino-0017\hardware\tools\avr\etc, basta copiarlo nella stessa cartella contenente il file avrdude.exe e tutto va....o quasi :-/
Viene fuori questo:

avrdude: stk500_getsync(): not in sync: resp=0x0d
avrdude: stk500_disable(): protocol error, expect=0x14, resp=0x0d

avrdude done.  Thank you.

Visto il thank you sono andato avanti...
Ho preso lo sketch del blinker e sono andato per fare l'upload.... ::slight_smile: Ovviamente mi ero scordato di staccare l'arduino >:( ricarico lo sketch necessario per la programmazione (Google Code Archive - Long-term storage for Google Code Project Hosting.), stacco l'arduino e compilo il blinker!! Tutto ok, errore generato e file .hex acquisito!!!

Ricollego l'arduino do il comando
avrdude -p m328p -P com3 -c avrisp -U flash:w:f.hex -P com3
mi ritorrna:

avrdude: stk500_getsync(): not in sync: resp=0x0d
avrdude: stk500_disable(): protocol error, expect=0x14, resp=0x0d

avrdude done.  Thank you.

E naturalmente non va!!!

Sono stato eccessivamente dettagliato per poter dare info utili a chi volesse provare sotto windows!!!

Mi sapete dare aiuto?
La prima cosa che mi viene in mente è che il mio ATMEGA328p è uno di quelli venduti con il bootloader di Arduino già caricato: potrebbe essere un problema? Se si, come tolgo il bootloader??
Al momento non mi viene in mente altro.... Appena ho altre info vi faccio un fischio!! ;D

Allora rieccomi!!!

Dalle vostre risposte capisco che non sapete che dirmi :stuck_out_tongue:

Cmq, ho cercato in giro molto in giro, e non sono venuto a capo di niente ::slight_smile:

Nel dubbio che fosse il mio ATMEGA328 danneggiato, l'ho sostituito con quello presente nel mio arduino ed indovinate un pò?????
il led ha preso a blinkare (me ne sono accorto perchè per fortuna blinkava il led smd sulla board XD) esattamente lo sketch usato per la prova XD
A questo punto credo che il problema principale sia il bootloader dell'arduino precaricato nell'ATMEGA328p!!!

E qui il domandone: come faccio a rendere "vergine" il mio
ATMEGA?????

Appena risolvo questo comincio a lavorare con la centralina del mio elicottero XD

guarda il datasheet... secondo me dovresti scriverci sopra con un programmatore avr oppure prova col mega isp...

bhe, non ho un programmatore avr... l'idea di usare arduino era per non dover cercare altro hardware....
mentre non so cosa sia il mega isp.

C'è da cercare un pò, per caso ricordate il link della guida su come caricare un bootloader su arduino??? L'ho cercata in giro sul sito senza trovare niente!!!

http://www.arduino.cc/playground/Code/MegaISP

il bootloader è già nel programma arduino

ok, ho capito...... praticamente ho usato quello per mettere sull'ATMEGA il blinker, solo che funziona solo se metto l'ATMEGA nell'arduino!!!!

Quello chemi serve è capire come togliere il bootloader dall'ATMEGA in modo che possa funzionare senza la board arduino!!!!
Con quel tutorial si può solo mettere un bootloader diverso, o ricaricare un bootloader. :-/

Io continuo a leggere e cercare, ma se qualcuno sa dirmi quacosa..... ::slight_smile:

si ma secondo me non puoi cancellarlo come cancelli un file dal pc... devi sostituire la roba che ci è scritta con "un foglio bianco" tipo un .hex vuoto... credo eh... magari massimo lo sa!

già, lo pensavo anch'io, ho cercato un pò nelle cartelle del software (arduino-0017), ho trovato una cartella bootloader, ma così non saprei dove mettere le mani :smiley:

cmq, aspettiamo i saggi ::slight_smile:

Nell'attesa di essere illuminato, mi sono dato uno sguardo alla guida dell'avrdude (AVRDUDE: 1 Introduction)

e nell'opzione -U ho trovato la locazione boot, se uso un comando del genere per cancellare il bootloader?

avrdude -p m328p -P com3 -c avrisp -U boot:w:f.hex -P com3

dove f.hex è un file vuoto????
Oppure senza l'arduino ci vuole comunque un certo bootloader per farlo funzionare????

bhe, dunque....

non sono arrivato alla soluzione, ma ho migliorato quacosina:

usando un ATMEGA con bootloader preacaricato (tipo quello in vendita su smartproject) basta mettere il quarzo da 16 MHz con i due condensatori e tutto funziona. Basta metterlo nell'arduino, caricare lo sketch, staccarlo ed usarlo stand-alone.

Per quello che mi serviva va bene così, resta il fatto che non sono riuscito a risolvere il problema precedente, spero che qualche altro utente ci riesca.

Ciao!!!

come ho postato anche nel sito di zuccalà vorrei sapere come fare sotto mac per piacere.. ovvero i comandi da shell e se si potrebbe avre un disegno più dettagliato anche fatto con paint dei collegamenti. Ti prego vittorio illuminaci

Guarda, alla fine io ho semplicemente messo l'ATMEGA nell'arduino, al posto di quello che già c'è.
Ho caricato normalmente lo sketch con l'IDE.
Poi ho tolto l?atmega per usarlo sulla bread board con la sola necessità di mettere un quarzo da 16 MHz tra il pin 9 e 10 dell'ATMEGA e poi mettendoli a massa con le due capacità da 22pF.

A me funziona così.... il mio ATMEGA ha però il bootloader per arduione già caricato, non sono riuscito a programmarlo in altra maniera! :frowning:

hai provato con format c: ?

:slight_smile: Scusa, non ho resistito :smiley:

grazie ter2 ma dove l'hai comprato con il bootloader per arduino?