Frequenza di campionamento ADC ATmega 328

Salve gente, sono iscritto e vi seguo da un po’ però questo è il mio primo messaggio qui, perciò vorrei innanzitutto fare i miei complimenti alla comunità per lo splendido forum!
Vengo al dunque: sono due ore che sto cercando di capire a cosa sia dovuto il limite di circa 10.000 campionamenti al secondo dell’ADC dell’ATmega 328 di cui parla si parla qui e non riesco a cavarci un ragno dal buco. Allora, il mio ragionamento è: arduino ha un quarzo a 16MHz che dà il clock all’ATmega, perciò, se è vero come è scritto qui che ogni 13 colpi di clock l’ADC fa una conversione, dovremmo avere una frequenza di campionamento di circa 1.2Mhz (poi ovviamente Nyquist ci dice che non possiamo usarlo per campionare onde maggiori di 600KHz, ma io mi sto riferendo solo al sampling rate). Da qualche parte sul forum (non trovo più il link) ho letto che bisogna dividere il clock per un fattore di scala di 128, ma non capisco perché. Qualcuno mi saprebbe aiutare?
Grazie, a presto. :slight_smile:

edit: mi sbagliavo, non è il mio primo post, me ne ero dimenticato, ma i complimenti li rinnovo ugualmente :grin:

Studia QUI da pagina 250 in poi (capitolo 23. Analog-to-Digital Converter) … :roll_eyes:

Guglielmo

gpb01:
Studia QUI da pagina 250 in poi (capitolo 23. Analog-to-Digital Converter) … :roll_eyes:

Guglielmo

grazie mille! Avevo già il documento, ma non avevo trovato il punto. Lo cito:

By default, the successive approximation circuitry requires an input clock frequency between 50kHz and 200kHz to
get maximum resolution. If a lower resolution than 10 bits is needed, the input clock frequency to the ADC can be
higher than 200kHz to get a higher sample rate.
The ADC module contains a prescaler, which generates an acceptable ADC clock frequency from any CPU fre-
quency above 100kHz. The prescaling is set by the ADPS bits in ADCSRA. The prescaler starts counting from the
moment the ADC is switched on by setting the ADEN bit in ADCSRA. The prescaler keeps running for as long as
the ADEN bit is set, and is continuously reset when ADEN is low.

quindi se si dividono questi valori per 13 torna tutto. A questo punto mi chiedo però a quanto è impostato di base questo valore di scala (cioè, credo 128 visto che l’ho letto sul forum, ma vorrei trovare dove è scritto)…

A 8 bit di risoluzione la max frequenza di clock_adc è 200khz mentre a 10bit 1Mhz, comunque anche se imposti il clock a 1Mhz a 10 bit e aspetta che la conversione sia completa (13 cicli) ti trovi sempre con un valore solo chegli ultimi 2 bit "ballano" un pò.

Il registro che regola la frequenza di campionamento è ADCSRA che è un prescaler settato di default da Arduino alla massima divisione ( 16Mhz / 128 = 125kHz (13 + 1.5 ~= 8620 sample/s)

Puoi usare divisori diversi (ad esempio 64 o 32), ma rammenta che la precisione si riduce di conseguenza.