Esiste un compromesso tra risoluzione e frequenze ottenibili. Citi Timer 2, ma su Atmega328P Timer 2 è un timer a 8 bit, quindi non saresti in grado di impostare il CTC su 1024.
Supponiamo che stiamo parlando di un timer a 16 bit, come Timer 1 su Atmega328P. Con un prescaler di uno, puoi cronometrare (assumendo un clock di 16 MHz) da 1 a 65536 "tick", ovvero 62,5 ns fino a 4096 µs.
Questo sarebbe il più preciso perché stai usando un clock (processore) per tick del timer (un prescaler di uno).
Tuttavia, se prevedi di durare più di 4.096 ms, devi aumentare il prescaler . Il prossimo prescaler sul Timer 1 è 8, quindi ora puoi calcolare il tempo per un intervallo 8 volte più lungo (32768 µs), tuttavia la tua accuratezza (precisione) è ora diminuita di un fattore 8. La granularità del timer è aumentato da 62,5 ns a 62,5 * 8 ns, ovvero 500 ns.
Se è necessario un tempo superiore a 32,768 ms, il prescaler deve essere nuovamente più grande, il successivo sarà 64. Quindi ora puoi cronometrare fino a 262144 µs, ma con una granularità di 62,5 * 64, che è 4000 ns (4 µs).
Il mio suggerimento sarebbe di utilizzare il prescaler più basso possibile, ma comunque ottieni l'intervallo che desideri. Quindi ovviamente non puoi usare un prescaler da uno a 10 ms.
Ho una discussione sui timer su http://www.gammon.com.au/timers.
In quella pagina c'è un grafico che aiuta a visualizzare gli effetti di diversi prescaler:
La parte superiore (conteggio di uno) fornisce effettivamente la granularità di ogni prescaler. Ad esempio, un prescaler di 256 ha una granularità di 16.000 ns (16 µs). Alcune frequenze (potenze di 2) si presteranno a combinazioni (es. Prescaler di 1 con un conteggio di 256, o prescaler di 256 con un conteggio di 1).
Tuttavia per le frequenze che non hanno quella proprietà, il prescaler più piccolo darà (se può essere utilizzato) una granularità più fine.