Pages: [1] 2   Go Down
Author Topic: Atmega 328P senza quarzo o oscillatore e libreria Timer1  (Read 1220 times)
0 Members and 1 Guest are viewing this topic.
0
Offline Offline
Full Member
***
Karma: 0
Posts: 111
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

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

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.

Quote
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 Offline
Full Member
***
Karma: 0
Posts: 111
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

La libreria Timer1 l'ho già provata e la frequenza che serve a me la supporta perfettamente smiley-wink
Grazie per l'info, la guida è quà: GUIDA alle Tecniche di Programmazione dei
microcontrollori ATMEL - http://www.michelemenniti.it/vhd/Elettronica/GPAT_v4.pdf


Una curiosità: cosa cambia tra 328 e 328P?
« Last Edit: October 26, 2012, 04:06:27 pm by d407336 » Logged

0
Offline Offline
Full Member
***
Karma: 0
Posts: 111
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

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

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.

Quote
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

Quote
p.s. penso di programmarlo ISP
ovviamente con la guida del Menniti  smiley-wink
Logged


0
Offline Offline
Full Member
***
Karma: 0
Posts: 111
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

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

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
Code:
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
Code:
-U lfuse:r:./fuseBasso.txt
mi pare.
Logged


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


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
Code:
-U lfuse:r:./fuseBasso.txt
mi pare.

Deve aggiungere alla fine anche in che modo deve salvare i dati, quindi
Code:
-U lfuse:r:./fuseBasso.txt:h
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

Vero, "h" per esadecimale, "d" per decimale.
Logged


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

Credo sia più utile in esadecimale, almeno può verificare meglio il fuse impostato.
Se lo imposta in esadecimale, tanto vale che...
 smiley-wink
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

Io comunque son dell'idea di settarlo subito a E2  smiley-twist
Logged


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

@ 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 smiley-grin
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

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 Offline
Full Member
***
Karma: 0
Posts: 111
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 Offline
Shannon Member
****
Karma: 412
Posts: 11987
Le domande di chi vuol imparare rappresentano la sua sete di sapere
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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 smiley-mr-green), 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 smiley-sweat
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   Go Up
Jump to: