0
Offline
Full Member
Karma: 0
Posts: 109
Arduino rocks
|
 |
« on: October 26, 2012, 03:46:39 pm » |
Ho visto che si può fare andare l'Atmega328P con l'oscillatore interno a 1MHz e lo vorrei fare. Devo però usare la libreria Timer1, posso farlo o poi vista la diversa frequenza dell'Atmega la libreria dà frequenze sbagliate? Su un 328P standalone senza bootloader lo posso fare? Cosa e come devo modificare nell'ide per poter non mettere un quarzo o un oscillatore? uso linux
|
|
|
|
|
Logged
|
|
|
|
|
Forum Moderator
Italy
Offline
Brattain Member
Karma: 219
Posts: 16517
Don't know what I do
|
 |
« Reply #1 on: October 26, 2012, 03:54:29 pm » |
Ho visto che si può fare andare l'Atmega328P con l'oscillatore interno a 1MHz e lo vorrei fare. Devo però usare la libreria Timer1, posso farlo o poi vista la diversa frequenza dell'Atmega la libreria dà frequenze sbagliate? Dando uno sguardo alla lib ho visto un metodo per adeguare il timer a diverse frequenze però non ci sono espressamente scritti i valori supportati. L'unica è provare. Su un 328P standalone senza bootloader lo posso fare? Cosa e come devo modificare nell'ide per poter non mettere un quarzo o un oscillatore? uso linux
Scaricati la guida di Michele Menniti per la programmazione ISP.
|
|
|
|
|
Logged
|
|
|
|
|
|
|
0
Offline
Full Member
Karma: 0
Posts: 109
Arduino rocks
|
 |
« Reply #3 on: November 12, 2012, 10:50:33 am » |
Stò leggendo la guida. Se io ho un atmega328p vergine senza bootloader sarà settato per lavorare a 16MHz o a 1MHz? Per farlo lavorare a 8MHz devo per forza caricargli il bootloader prima di caricargli lo sketch?
p.s. penso di programmarlo ISP
|
|
|
|
« Last Edit: November 12, 2012, 11:17:31 am by d407336 »
|
Logged
|
|
|
|
|
Forum Moderator
Italy
Offline
Brattain Member
Karma: 219
Posts: 16517
Don't know what I do
|
 |
« Reply #4 on: November 12, 2012, 12:05:22 pm » |
Stò leggendo la guida. Se io ho un atmega328p vergine senza bootloader sarà settato per lavorare a 16MHz o a 1MHz?
Se è di fabbrica, arriva a 1 MHz. Per farlo lavorare a 8MHz devo per forza caricargli il bootloader prima di caricargli lo sketch?
No, basta togliere il divisore x8 del clock così va ad 8 MHz. Poi lo programmi con avrdude da terminale usando ArduinoISP come sketch programmatore caricato sull'Arduino p.s. penso di programmarlo ISP
ovviamente con la guida del Menniti 
|
|
|
|
|
Logged
|
|
|
|
|
0
Offline
Full Member
Karma: 0
Posts: 109
Arduino rocks
|
 |
« Reply #5 on: November 12, 2012, 12:10:22 pm » |
se di fabbrica è a 1MHz per portarlo da 1MHz a 8MHz non mi serve il quarzo ma mi basta modificare il file boards.txt dell'ide come descritto nella guida del Menniti? quindi in pratica se io uso un arduino uno come programmatore isp: - modifico il file boards.txt e aggiungo l'atmega a 8MHz con l'oscillatore interno
- carico sull'arduino uno lo sketch ArduinoISP selezionando come board l'arduino uno
- collego l'atmega328p via isp all'arduino uno
- carico lo sketch sull'atmega328p nuovo selezionando come board l'atmega a 8MHz
In pratica il bootloader non lo devo neanche usare, è corretto? Per togliere il divisore x8 del clock non mi basta modificare i fuse nel file boards.txt e caricare via isp come scritto nella guida? Non capisco cosa devo fare con avrdude, o lo fa l'ide direttamente? Comunque, c'è un modo per sapere se l'atmega è settato per andare proprio a 1MHz e non 8MHz o 16MHz?
|
|
|
|
« Last Edit: November 12, 2012, 02:37:46 pm by d407336 »
|
Logged
|
|
|
|
|
Forum Moderator
Italy
Offline
Brattain Member
Karma: 219
Posts: 16517
Don't know what I do
|
 |
« Reply #6 on: November 12, 2012, 04:30:38 pm » |
se di fabbrica è a 1MHz per portarlo da 1MHz a 8MHz non mi serve il quarzo ma mi basta modificare il file boards.txt dell'ide come descritto nella guida del Menniti? quindi in pratica se io uso un arduino uno come programmatore isp: - modifico il file boards.txt e aggiungo l'atmega a 8MHz con l'oscillatore interno
- carico sull'arduino uno lo sketch ArduinoISP selezionando come board l'arduino uno
- collego l'atmega328p via isp all'arduino uno
- carico lo sketch sull'atmega328p nuovo selezionando come board l'atmega a 8MHz
In pratica il bootloader non lo devo neanche usare, è corretto? Per togliere il divisore x8 del clock non mi basta modificare i fuse nel file boards.txt e caricare via isp come scritto nella guida? Non capisco cosa devo fare con avrdude, o lo fa l'ide direttamente? Comunque, c'è un modo per sapere se l'atmega è settato per andare proprio a 1MHz e non 8MHz o 16MHz? No, così non va. Tu hai detto che non vuoi programmarci sopra il bootloader. Se usi l'IDE l'unico modo per cambiare i fuse è scriverci il bootloader sul tuo chip. Se programmi solo lo sketch non cambi i fuse. Vai perciò di terminale ed avrdude e cambi solo il fuse che ti serve (è i fuse basso): 1) carichi l'ArduinoISP sull'Arduino 2) stacchi la scheda e monti il 328 da programmare su breadboard seguendo la guida di Michele 3) apri un terminale e poi dai questo comando avrdude -P /dev/ttyACM0 -c stk500v1 -p m328p -U lfuse:w:0xe2:m -b 19200 se hai Linux, se hai Windows devi adattare il comando relativamente alla porta da usare Se hai fatto tutto bene, avrdude ti dirà che ha flashato correttamente il micro, ed ora andrà a 8 MHz. Per sapere il valore attuale del micro puoi leggere i fuse e guardare cosa c'è scritto nel fuse basso. Usa il comando del punto 3) sostituendo la parte relativa al parametro -U -U lfuse:r:./fuseBasso.txt mi pare.
|
|
|
|
|
Logged
|
|
|
|
|
Marche
Offline
Edison Member
Karma: 25
Posts: 2063
|
 |
« Reply #7 on: November 12, 2012, 04:41:27 pm » |
Per sapere il valore attuale del micro puoi leggere i fuse e guardare cosa c'è scritto nel fuse basso. Usa il comando del punto 3) sostituendo la parte relativa al parametro -U -U lfuse:r:./fuseBasso.txt mi pare. Deve aggiungere alla fine anche in che modo deve salvare i dati, quindi -U lfuse:r:./fuseBasso.txt:h
|
|
|
|
|
Logged
|
|
|
|
|
Forum Moderator
Italy
Offline
Brattain Member
Karma: 219
Posts: 16517
Don't know what I do
|
 |
« Reply #8 on: November 12, 2012, 04:43:39 pm » |
Vero, "h" per esadecimale, "d" per decimale.
|
|
|
|
|
Logged
|
|
|
|
|
Marche
Offline
Edison Member
Karma: 25
Posts: 2063
|
 |
« Reply #9 on: November 12, 2012, 04:50:38 pm » |
Credo sia più utile in esadecimale, almeno può verificare meglio il fuse impostato. Se lo imposta in esadecimale, tanto vale che... 
|
|
|
|
|
Logged
|
|
|
|
|
Forum Moderator
Italy
Offline
Brattain Member
Karma: 219
Posts: 16517
Don't know what I do
|
 |
« Reply #10 on: November 12, 2012, 04:54:59 pm » |
Io comunque son dell'idea di settarlo subito a E2 
|
|
|
|
|
Logged
|
|
|
|
|
Lamezia Terme
Offline
Shannon Member
Karma: 386
Posts: 10287
Le domande di chi vuol imparare rappresentano la sua sete di sapere
|
 |
« Reply #11 on: November 13, 2012, 05:31:25 am » |
@ d407336: la Guida va letta con la dovuta attenzione, altrimenti sfugge qualche passaggio e poi escono interpretazioni inesatte come quelle che hai fornito tu. In sintesi, per andare sul sicuro al primo colpo, a prescindere dal fatto che il micro sia settato a 1, 8 o 16MHz, fai così: carica ArduinoISP su Arduino prepara il micro sulla bread (con quarzo e condensatori) e collegalo via ISP ad Arduino modifica boards.txt aggiungendo la board a 8MHz con oscillatore interno carica il bootloader (attenzione alle differenze tra IDE 0022 e 1.0.1) via ISP carica lo sketch via ISP l'operazione del bootloader ti setterà i fuse per 8MHz oscillatore interno, il caricamento dello sketch disattiverà il bootloader, a motivo del settaggio dei fuse. Ciao il menniti 
|
|
|
|
|
Logged
|
|
|
|
|
Forum Moderator
Italy
Offline
Brattain Member
Karma: 219
Posts: 16517
Don't know what I do
|
 |
« Reply #12 on: November 13, 2012, 07:37:10 am » |
l'operazione del bootloader ti setterà i fuse per 8MHz oscillatore interno, il caricamento dello sketch disattiverà il bootloader, a motivo del settaggio dei fuse.
Ma lui ha detto che non voleva il bootloader, ecco perché gli ho consigliato, visto che il micro è vergine, di settare solo il fuse basso.
|
|
|
|
|
Logged
|
|
|
|
|
0
Offline
Full Member
Karma: 0
Posts: 109
Arduino rocks
|
 |
« Reply #13 on: November 13, 2012, 07:54:15 am » |
grazie delle risposte! ma se carico il bootloader poi se lo programmo via isp non ci sarà nessuna differenza tra caricarlo non caricarlo oltre al fatto di dover settare i fuse?
per l'operazione con avrdude l'atmega và collegato via isp all'arduino normalmente come per le altre operazioni?
il mio problema era il quarzo, perchè se è necessario per forza lo devo comprare e poi visto che ce l'ho tanto vale lasciare lavorare l'atmega a 16MHz, se invece di fabbrica esce a 1MHz posso portarlo a 8MHz senza quarzo esterno visto che è già impostato per usare l'oscillatore interno?
|
|
|
|
|
Logged
|
|
|
|
|
Lamezia Terme
Offline
Shannon Member
Karma: 386
Posts: 10287
Le domande di chi vuol imparare rappresentano la sua sete di sapere
|
 |
« Reply #14 on: November 13, 2012, 08:06:24 am » |
non avevo capito che non hai il quarzo e siccome volevi leggere i fuse pensavo non fossi sicuro che è vergine visto che è sicuramente vergine allora puoi fare tutto ciò che ti ho consigliato SENZA usare quarzo e condensatori mettere il bootloader e poi uno sketch significa, a motivo dei settaggi dei fuse, che alla fine è come se il bootloader non fosse mai stato caricato naturalmente non ho inteso dire che il consiglio di Leo non è corretto (non sono un pazzo  ), cercavo solo di suggerire una strada aggirando l'uso di AVRDUDE, come ho detto io puoi fare tutto via IDE senza scomodare la riga di comando se non ho capito un zz della situazione abbiate pietà, ignoratemi, fate finta che io non abbia detto niente 
|
|
|
|
|
Logged
|
|
|
|
|
|