Getting extra ADC resolution with Dithering & Oversampling

Anything to do with programing the Arduino Platform.
Post Reply
EKMallon
Posts: 28
Joined: Jan 31st, 2015, 3:12 pm

Getting extra ADC resolution with Dithering & Oversampling

Post by EKMallon »

I've been playing with thermistors, and after much trial and I error found that simply digital toggling a pin with the right size resistor connected to ground gives you enough noise to make oversampling work well with 3.3v promini style boards:

https://edwardmallon.wordpress.com/2017 ... rsampling/

The overhead for adding 2-4 bits of extra ADC resolution is pretty small, but the 4n power relationship balloons up quickly after that. Personally I think the sweet spot is oversampling for 4 extra bits with 256 readings. Anyway, this should work with any resistance based sensor, provided there are no capacitors nearby to squelch out your noise signal.
EKMallon
Posts: 28
Joined: Jan 31st, 2015, 3:12 pm

Re: Getting extra ADC resolution with Dithering & Oversampli

Post by EKMallon »

Ok, so my primary reason for the oversampling was to get high-rez readings from a thermistor to monitor ambient temp with our datalogger. Turns out you can use a Pro Mini (or any other Arduino with an Atmel processor) to measure temperature using only the mcu.

https://thecavepearlproject.org/2019/02 ... or-better/

I think this is the best "No-Parts" temperature method I ever noodled around with, and it generalizes to any other processor with a hardware driven watchdog timer. Should be easy to adapt for other projects.
User avatar
Oldsirhippy
Posts: 86
Joined: Oct 1st, 2013, 7:18 am

Re: Getting extra ADC resolution with Dithering & Oversampli

Post by Oldsirhippy »

Thanks for that information - it looks like an great way to get good results. I'm going to give it a go.
EKMallon
Posts: 28
Joined: Jan 31st, 2015, 3:12 pm

Re: Getting extra ADC resolution with Dithering & Oversampli

Post by EKMallon »

Lately I've been noodling around with another method to read thermistors using the Input Capture Unit on pin D8.

https://thecavepearlproject.org/2019/03 ... -readings/

This time-based approach does not use the ADC at all, delivers better resolution than 16-bit oversampling about 10x faster, AND I get to sleep the processor during the reading to save power. The process is wonderfully ratiometric, but as with the oversampling approach, I'm still leaning on the S&H constants somewhat to absorb the misc. temperature coefficients from the other parts of the system.

And the method could be used with just about ANY resistance based sensor.
Post Reply