[bug]PWM su pin 5 e 6 a 800Hz!

Come ha detto astrobeed, il timer 0 usa il prescaler a /64 per non avere troppi overflow al secondo, a causa del fatto che esso è anche usato per le funzioni temporali dell'Arduino. Senza entrare nei dettagli del metodo usato per ottenere la frequenza di 1 overflow al secondo (che ho spiegato tempo), il timer 0 viene poi impostato per lavorare in modalità Fast PWM, dato che usando la Phase Correct PWM si avrebbe una frequenza dimezzata visto che in questa modalità il contatore non riparte da 0 non appena ha raggiunto il valore massimo ma viene decrementato finché non raggiunge 0 nuovamente. In modalità Fast PWM viene generata sui pin esterni un'onda quadra la cui frequenza è data dalla formula:
Fpwm = Fclk/(prescaler256)
Da cui si ha 16.000.000/(64
256) = 976,5625 Hz.

I timer 1 e 2 vengono invece impostati in modalità Phase Correct PWM. Rispetto alla Fast PWM, questa modalità permette di ottenere un'onda quadra più simmetrica ma al costo di una frequenza dimezzata per i motivi suddetti, e cioè che il contatore cicla continuamente da 0 al valore massimo e poi torna nuovamente a 0, con lo stato dei pin che viene cambiato ad ogni raggiungimento del valore massimo (che può essere il massimo gestibile dal contatore oppure il valore impostato dal registro OCRxA). Siccome il timer 1 è a 16 bit, viene impostato ad 8 bit, in modo che la frequenza ottenibile si calcoli con la stessa formula usata nel caso del PWM sul timer 2 (anch'esso ad 8 bit), e cioè:
Fpwm = Fclk/(prescaler * 510) = 490,1961 Hz

Tutto questo si evince analizzando il file wiring.c, alla funzione init().