Go Down

Topic: Atmega8 Clock esterno RC (Read 864 times) previous topic - next topic

M.ino

Buonasera forum,
ho un problema nel cercare di settare il clock mediante RC esterno con Atmega8l
Ho dato un'occhiata a questo:
http://www.eetkorea.com/ARTICLES/2003APR/A/2003APR04_AMD_EMS_MPR_AN.PDF?SOURCES=DOWNLOAD
Vorrei lavorare a 0,1MHZ quindi : C=22pF, R =150K   Corretto?
Sembrerebbe di no, perchè per riuscire a caricare sketch e bootloader devo scendere a 10k come valore di resistenza. (con R=10K e c=22pF ottengo dei tempi corretti    :smiley-roll:) assorbmento circa 1mA a 3,3V
Con R=150K non è possibile caricare bootloader e sketch.
Questa la board :
atmega8l_100KHz.name= ATmega8L @ 100KHz External RC clock

atmega8l_100KHz.upload.protocol=stk500
atmega8l_100KHz.upload.maximum_size=7168
atmega8l_100KHz.upload.speed=19200

atmega8l_100KHz.bootloader.low_fuses=0xE5
atmega8l_100KHz.bootloader.high_fuses=0xD9
atmega8l_100KHz.bootloader.path=atmega8
atmega8l_100KHz.bootloader.file=ATmega8L.hex
atmega8l_100KHz.bootloader.unlock_bits=0x3F
atmega8l_100KHz.bootloader.lock_bits=0x0F

atmega8l_100KHz.build.mcu=atmega8
atmega8l_100KHz.build.f_cpu=100000L
atmega8l_100KHz.build.core=arduino

Sbaglio qualcosa?
Grazie in anticipo
M.






leo72

Ti sei ricordato di impostare i fuse in modo corretto?

Con che software stai cercando di programmare l'Atmega? Se usi l'IDE di Arduino, molte delle funzioni e delle librerie di Arduino non sono fatte per lavorare a clock differenti da 16 MHz. Anche usando funzioni e librerie che si adattano a clock più bassi, sotto ad 1 MHz non vanno comunque per cui otterresti codice non funzionante. Inoltre c'è il problema della programmazione: credo che se non usi un programmatore HW "vero" con l'ArduinoISP non puoi programmare un micro con un clock così basso.
Tempo fa provai a far funzionare un chip con l'oscillatore interno a 128 kHz ma senza risultato.

acik

A che ti serve andare cosi' giu' con la frequenza ?

M.ino

Low fuse 0xE5
High Fuse 0xD9
dovrebbero essere corretti.
Utilizzo l'Ide Arduino e un Arduino Mega come programmatore ISP.
Nessun problema a 1/2/4/8 MHz con RC interno.

leo72


Low fuse 0xE5
High Fuse 0xD9
dovrebbero essere corretti.
Utilizzo l'Ide Arduino e un Arduino Mega come programmatore ISP.
Nessun problema a 1/2/4/8 MHz con RC interno.

Io ti dico che non ce la fai. Sia l'IDE che lo sketch ArduinoISP non sono stati scritti per compilare e lavorare a frequenze così basse.

M.ino

Ho un programmatore usbasp, che non ho mai utilizzato.
Potrei provare a settare i fuse e caricare l'hex con quest'ultimo, ma non ho esperienze in merito.
Consigli? In particolare per software e driver necessari..
M.

leo72

Usando l'IDE non farai lo stesso molta strada perché come ti ho detto

molte delle funzioni e delle librerie di Arduino non sono fatte per lavorare a clock differenti da 16 MHz. Anche usando funzioni e librerie che si adattano a clock più bassi, sotto ad 1 MHz non vanno comunque per cui otterresti codice non funzionante.

L'unica è scrivere codice in C puro con un editor, poi compilare a mano e fare l'upload su un micro operante ad 1 MHz con oscillatore interno. Successivamente impostare i fuse per poi provare a farlo lavorare a 100 kHz. Ma a questo punto perché non usare direttamente l'oscillatore interno a 128 kHz?

E poi

A che ti serve andare cosi' giu' con la frequenza ?

Testato

Credo per questioni di consumi
Giustamente pero a questo punto conviene udare i 128 interni e si risparmiano i componenti esyerni
- [Guida] IDE - http://goo.gl/ln6glr
- [Lib] ST7032i LCD I2C - http://goo.gl/GNojT6
- [Lib] PCF8574+HD44780 LCD I2C - http://goo.gl/r7CstH

M.ino

#8
Mar 21, 2012, 09:34 am Last Edit: Mar 21, 2012, 01:28 pm by Matteino Reason: 1
Esatto, è un problema di consumi.
Mi potreste spiegare la procedura per utilizzare il 128KHz interno?
Carico lo sketch su un micro a 1Mhz RC interno, ho capito bene?
E poi?
Grazie
M.
Ps: in alternativa potrei usare l'RC interno a 1MHz e poi agire sul prescaler, corretto?

M.ino

E' possibile modificare il prescaler dall'IDE di Arduino?

leo72

L'oscillatore si sceglie impostando correttamente i fuse del micro: l'oscillatore che fornisce il clock a 8 MHz o 1 MHz (8 MHz con divisore HW da 8) non è lo stesso di quello che fornisce il clock a 12 8 kHz. Devi selezionarlo tramite i fuse.
Però da miei test, se non hai un vero programmatore HW, non riesci a caricare lo sketch su un micro che lavora a 128 kHz. Per questo ti ho suggerito di provare mettendo il micro a 1 MHz, caricando lo sketch scritto per lavorare a 128 kHz, e poi impostando i fuse per selezionare l'oscillatore da 128 kHz. Sul come scrivere il firmware, ti ho già risposto: scordati l'uso dell'IDE di Arduino e delle sue librerie, la maggior parte di questa roba non funziona che a 16 MHz o, al massimo, a 1 MHz.

Se comunque è per risparmiare corrente, non ti basterebbe usare la modalità sleep per "addormentare" il micro quando non lavora? Che cosa deve gestire, esattamente? Magari potrebbe bastare anche un micro più piccolo di un 328 impostato a 1 MHz con tensione molto bassa: ad esempio, gli ultimi Attiny revisione "V" o "A" possono operare con tensioni minime di 1,8V.

M.ino

Utilizzo già un Atmega8l e 8a alimentati a 3.3V.
Non posso utilizzare lo sleep mode, il micro è sempre attivo.
Sono a circa 2 mA a 1 MHz ma vorrei scendere ancora come assorbimento, visto che la velocità non mi interessa.
Cosa intendi per programmatore HW vero? Io Ho un Usbasp, ma non ci Ho mai lavorato. Suggerimenti?
M.

leo72

Intendo un programmatore nel vero senso della parola. Un AvrDragon o simili. GLi USBtinyISP, USBasp ecc... sono semplici micro che contengono un firmware che funge da convertitore USB/seriale per poter programmare via porta seriale i microcontrollori. Però già a trattare clock "strani" vanno in crisi perché l'emulazione è SW, non hanno un convertitore HW. I programmatori danno il clock esterno se richiesto, alimentano il micro ecc... Insomma fanno ciò che il tuo USBasp o il mio USBtinyISP non possono fare.

Go Up