Go Down

Topic: Frequenza AtMega328 variabile (Read 380 times) previous topic - next topic

flz47655

Ciao a tutti,
E' possibile variare durante il funzionamento la frequenza del micro?
Mi spiego meglio, magari con una rete RC con condensatore variabile usata per generare il clock posso variare la capacità del condensatore per aumentare/diminuire il clock durante il funzionamento?
Esiste un qualche modo/qualche componente che posso addirittura "sintonizzare" da codice?
Sarebbe interessante variare la frequenza di clock in base a determinati input che pervengono al micro, combinata agli sleep si avrebbe un risparmio energetico massimo

Ciao e grazie anticipatamente a tutti

Michele Menniti

A mio parere potresti crearti una base dei tempi con le frequenze che ti servono ed applicarle all'XTAL1 mediante una commutazione elettronica. Ma dubito che il sistema ti funzioni, devi infatti considerare i comandi di tempo, che vengono "tarati" in base alla frequenza che dichiari in fase di programmazione; ammesso che cambiando frequenza non ti si inchiodi tutto ti sballerebbelo i vari delay, millis, ecc.
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

astrobeed

Come al solito troppa fatica leggere il data sheet:

Code: [Select]

8.11 System Clock Prescaler
The ATmega48PA/88PA/168PA/328P has a system clock prescaler, and the system clock can
be divided by setting the "CLKPR - Clock Prescale Register" on page 37 7. This feature can be
used to decrease the system clock frequency and the power consumption when the requirement
for processing power is low. This  can be used with all clock source options, and it will affect the
clock frequency of the CPU and all synchronous peripherals.

Michele Menniti


Come al solito troppa fatica leggere il data sheet:

Code: [Select]

8.11 System Clock Prescaler
The ATmega48PA/88PA/168PA/328P has a system clock prescaler, and the system clock can
be divided by setting the "CLKPR - Clock Prescale Register" on page 37 7. This feature can be
used to decrease the system clock frequency and the power consumption when the requirement
for processing power is low. This  can be used with all clock source options, and it will affect the
clock frequency of the CPU and all synchronous peripherals.


Astro, c'è chi può e c'è chi no può, nel senso si saper leggere; come sto imparando a mie spese in questi giorni ci sono cose facilmente comprensibili per me che non lo sono per altri e viceversa, ecco perché dai il piacere di esistere ;) Ciò significa che usando il rpescaler intterno, tramite opportuni comandi è possibile ridurre la frequenza di clock originaria in modo rapido ed inolodore per il funzionamento dello sketch? Quindi potrei prevedere un 16MHz esterno e poi agire via registri sulla sua "riduzione" senza colpo ferire?
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

flz47655

#4
Mar 05, 2012, 11:52 am Last Edit: Mar 05, 2012, 12:22 pm by flz47655 Reason: 1
Giusto il prescaler, l'avevo letto ma non mi era venuto in mente! Ora basta che trovo un qualche modo per abbassare anche la tensione al valore minimo che viene retto alla frequenza impostata e il risparmio energetico massimo è assicurato.

Federico

Anche questo mi pare fondamentale
http://arduino.cc/playground/Code/Prescaler
anche se poi mi domando, in che modo va gestito il prescaler? Cioe' come faccio a sapere se devo variare la frequenza? Ci vorrebbe un sistema automagico...
Federico - Sideralis
Arduino &C: http://www.sideralis.org
Foto: http://blackman.amicofigo.com

flz47655

Io pensavo ad un sistema che deve rispondere in tempi predeterminati e in cui se ricevo in input X devo fare molti calcoli e imposto la frequenza massima, se ricevo in input Y devo fare pochi calcoli ed imposto la frequenza media o minima, il resto del tempo tengo il micro in sleep

Ciao

uwefed

dirrei di farlo col prescaler perché ogni circuito esterno per esempio un PLL Ti consuma piú corrente di quella che risparmi abbassando il clock.
Ciao Uwe

leo72


Anche questo mi pare fondamentale
http://arduino.cc/playground/Code/Prescaler
anche se poi mi domando, in che modo va gestito il prescaler? Cioe' come faccio a sapere se devo variare la frequenza? Ci vorrebbe un sistema automagico...

Siccome in genere questo tipo di controlli sono software-dependant, puoi pilotare il prescaler in modo da impostare il clock più alto prima di eseguire pesanti algoritmi di calcolo oppure controlli molto veloci su pin e rimettere un prescaler più elevato per avere un clock inferiore quando esci da questi punti del programma.

Go Up