Frequenza PWM

Salve a tutti, rieccomi qui. Volevo sapere come posso portare un pin PWM a 4Khz da poter utilizzare con analogWrite da 0 a 1024.
Ho arduino duemilanove. Ho letto varie guide, compresa la lib TimerOne...ma non ho capito molto bene...
parla dei registri e ho anche fatto delle prove.... Grazie

ciao.

prova a vedere questo link: http://www.mauroalfieri.it/elettronica/frequenza-pwm-arduino-duty-cycle.html

E' spiegato molto bene, non dovresti avere problemi.

ciao
pippo72

I PWM sono sempre a 8Bit non a 10. Non cambia niente se cambi la frequenza.
La frequenza si puó cambiare in pochi steps perché deriva dal clock e ci sono pochi divisori fissi.

Elenco delle frequenze possibili: http://www.letsmakerobots.com/content/changing-pwm-frequencies-arduino-controllers

Google Code Archive - Long-term storage for Google Code Project Hosting. e http://forum.arduino.cc/index.php/topic,117425.0.html

Ciao Uwe

uwefed:
I PWM sono sempre a 8Bit non a 10. Non cambia niente se cambi la frequenza.

Questo non è del tutto corretto, il PWM standard di Arduino è a solo otto bit, però se agisci su i timer non solo ne puoi cambiare la frequenza, puoi anche cambiare la risoluzione, p.e. la libreria Timer1, di default, offre 10 bit sul pwm.

pwm(pin, duty, period)
Generates a PWM waveform on the specified pin.

.
.
.

The duty cycle is specified as a 10 bit value, so anything between 0 and 1023.

Grazie al link del secondo post sono riuscito a settare la frequenza a 3.94khz.
domanda: ma facendo così mi aumenta il range da 0 a 1023?
Grazie

roxdragon:
Salve a tutti, rieccomi qui. Volevo sapere come posso portare un pin PWM a 4Khz da poter utilizzare con analogWrite da 0 a 1024.

Sono 2 cose distinte.
Il PWM è un segnale quadro su un pin di output con una frequenza ed un duty cycle dipendente dai parametri impostati. Il timer ha un contatore ad 8 o 16 bit, a seconda del tipo. Mentre l'analogWrite legge un input analogico e restituisce sempre un valore numerico a 10 bit (0-1023) (anche se si può "forzare" ad 8 bit, perdendo i 2 bit meno significativi).

edit: ho letto male, dormivo... correggo la risposta

leo72:
Mentre l'analogWrite legge un input analogico e restituisce sempre un valore numerico a 10 bit (0-1023) (anche se si può "forzare" ad 8 bit, perdendo i 2 bit meno significativi).

Un bel caffè per Leo, AnalogWrite != AnalogRead :grin:

Czz che figurrimm..... :stuck_out_tongue_closed_eyes: :stuck_out_tongue_closed_eyes:
Ore 6:20, al lavoro da mezz'ora e con 5 ore di sonno alle spalle... scusate proprio per la str...z..ta che ho scritto :wink:

leo72:
Czz che figurrimm..... :stuck_out_tongue_closed_eyes: :stuck_out_tongue_closed_eyes:
Ore 6:20, al lavoro da mezz'ora e con 5 ore di sonno alle spalle..

Non a caso ti offerto un bel caffè :smiley:

Ma volendo generare un onda quadra da 1,5 Mhz ?

lo_sty:
Ma volendo generare un onda quadra da 1,5 Mhz ?

Prendi un oscillatore da 1,5Mhz.
Ciao Uwe

Nel mio prototipo uso gia un degli LTC1799 .
Questa scheda comunica con la seriale del pc tramite un max232 .
Vorrei far passare tutto tramite arduino e rimpicciolire il più possibile la scheda togliendo oscillatori e comparatore visto che posso usare gli ingressi analogici .
Gli oscillatori sono 2 , ma posso anche usarne uno . Si riesce a generare quella frequenza co il PWM o tone() di arduino ?

uwefed:
Prendi un oscillatore da 1,5Mhz.
Ciao Uwe