8
\$\begingroup\$

This is a quote from ATmega32 datasheet:

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.

I'm planning to use 8 bits of ADC. The question is: how much higher than 200kHz can I go? I couldn't find any information about this in the datasheet. Is it possible to use a prescaler of 64 or 32 and therefore run ADC at 250kHz or 500kHz respectively without conversion errors when the uC is running at 16MHz? And what are the possible consequences of running ADC out of spec?

\$\endgroup\$
12
\$\begingroup\$

The maximal frequency of the ADC is specified as 1MHz.

The actual problem is not exactly the ADC itself, but the sample and hold device, that in the first 2 clocks of the ADC have to get a sample of the input voltage.

When these 2 clocks are two short, the storage capacitor of the S/H is not able to follow the input signal with sufficient accuracy.

BTW, that is why there is minimal frequency as well. In this case, the huge conversion time allows the storage capacitor to discharge during the conversion.

On 1MHz clock, you will get 13us conversion time or approximately 77ksps. On 200kHz clock - 15ksps.

\$\endgroup\$
  • \$\begingroup\$ good answer dude +1. I wonder if the internal S&H can be left free running and use external S&H that is much quicker? \$\endgroup\$ – Andy aka Oct 24 '13 at 17:47
  • 1
    \$\begingroup\$ @Andyaka - probably not. The internal S/H is controlled only by the hardware. Maybe some hack is possible by changing the frequency divider during the conversion - make is slow for the first 2 clocks and then higher... But one have to check the manual is it possible at all and then to make an experiment. \$\endgroup\$ – johnfound Oct 24 '13 at 17:54
  • \$\begingroup\$ Thank you for the answer. So basically it is safe to go up to 1MHz when using 8 bits of ADC? \$\endgroup\$ – Ashton H. Oct 24 '13 at 18:11
  • \$\begingroup\$ @AshtonHearts - Yes, I think so. Why not to make some tests? It is just a matter of a program. \$\endgroup\$ – johnfound Oct 24 '13 at 18:13
  • 2
    \$\begingroup\$ @AshtonHearts - it is not overclock. It is documented behavior. You only will get lower accuracy. \$\endgroup\$ – johnfound Oct 24 '13 at 18:57

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.