Buonasera forum,
ho un problema nel cercare di settare il clock mediante RC esterno con Atmega8l
Ho dato un'occhiata a questo:
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 ) 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
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.
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.
Matteino:
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.
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.
Usando l'IDE non farai lo stesso molta strada perché come ti ho detto
leo72:
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
acik:
A che ti serve andare cosi' giu' con la frequenza ?
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?
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.
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.
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.