Go Down

Topic: Atmega 328P senza quarzo o oscillatore e libreria Timer1 (Read 1 time) previous topic - next topic

d407336

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

leo72


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.

d407336

#2
Oct 26, 2012, 11:04 pm Last Edit: Oct 26, 2012, 11:06 pm by d407336 Reason: 1
La libreria Timer1 l'ho già provata e la frequenza che serve a me la supporta perfettamente ;)
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?

d407336

#3
Nov 12, 2012, 04:50 pm Last Edit: Nov 12, 2012, 05:17 pm by d407336 Reason: 1
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

leo72


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  ;)

d407336

#5
Nov 12, 2012, 06:10 pm Last Edit: Nov 12, 2012, 08:37 pm by d407336 Reason: 1
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?

leo72


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

pelletta



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


Deve aggiungere alla fine anche in che modo deve salvare i dati, quindi
Code: [Select]
-U lfuse:r:./fuseBasso.txt:h

leo72


pelletta

Credo sia più utile in esadecimale, almeno può verificare meglio il fuse impostato.
Se lo imposta in esadecimale, tanto vale che...
;)

leo72

Io comunque son dell'idea di settarlo subito a E2  ]:D

Michele Menniti

@ 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 :D
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

leo72


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.

d407336

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?

Michele Menniti

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:
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

Go Up