better ADC for atmega328

I am using a 328 on a prototype board to make a precision 12-bit thermometer. I am using decimated oversampling to increase the 10-bit adc to 12-bit. I think I should use a true 12-bit adc. Does anyone have some suggestions as to what I can do? Should i use a uP other than the 328? Is there an external ADC I can add for 12 to 14 bit resolution?

microchip makes a whole line of spi-interfaced 12-14-16 bit ADCs that are easy to use.

I just Googled "12 bit adc", and found a lot of links.
The 4th one lead me to a Dutch (i'm sure that will only show up if your language is set to Dutch too) page offering a ADS1015 solution by Adafruit.
3K3 samples/second @ 12 bit over I2C seems to be a nice solution.
It should be available for some $ 20,- or less (€ 11.95 is what i found).

imsmooth:
I am using decimated oversampling to increase the 10-bit adc to 12-bit.

In order for that to work you have to include random noise with the analog signal. If you are not doing that or do not know how to do that (I don't) then you most certainly should consider an ADC with higher resolution instead of trying to squeeze more resolution out of the AVR ADC.

I was just relying on the background noise on the board. It seems to work right now as I have tested it against a commercial thermometer.

However, I think a true high resolution adc is better, which is why I want to go this route. I already have plenty of 0.1% 15ppm/c resistors and low-offset opamps for the project.

Of the two adc choices others have suggested, is there a reason to choose one over the other?

again, thanks for the help everyone.
Just so you know what I want to use this for: I would like a better thermometer for my LN2 project

http://homemadeliquidnitrogen.com

Right now my RTD only measures by degrees. I want one that is LCD and goes by tenths. I have everything working except for a better ADC.

First one is 12 bits (as you asked) and 10 dollars.
2nd one is 16 bits and 15 dollars.

16 bits is a lot slower (which does make sense): 860 samples per second to 3300 samples per second for 12 bits.

I can't see other differences, looking at the Technical Details.

Thanks. Yes, the first is 12 bits plus a sign bit. That does not improve my situation as I can get a rough 12 bits the way I'm doing it. I guess I should go with the second.

Is there any reason to go with these instead of coding around any ADC chip from Digikey, like the Max110bcpe?

http://datasheets.maximintegrated.com/en/ds/MAX110-MAX111.pdf

You don't get 10 useful bits out of a 10 bit ADC, nor will you get 12 useful bits out of a 12 bit ADC. Not without more oversampling.

Look up ENOB, or effective number of bits.

http://www.analog.com/static/imported-files/tutorials/MT-003.pdf

You can do the comparison yourself.
Maxim does 14 bits but way less samples per second (50).
But the largest difference between these is that the Maxim is a chip, the Adafruit is a module.
The chip probably needs some external components to work correctly.
The module is ready to go.
I didn't bother using digikeys product selector (or whatever that tool may be called) to find a price for the max110.
If you are going to build your own pcb you might consider using components.
If you better like using modules, you would be better off choosing the Adafruit "plug and play" solution.

I just put an order in for the adafruit.
It offers enough resolution for my needs and seems simple enough to implement.

The easiest way to do so is by adding the noise directly using a PWM signal through a filter into the AREF pin. I've used this successfully myself recently in a project, and you can obviously decide if and when you want the noise.

Page 9

http://www.atmel.com/Images/doc8003.pdf

To the OP, bear in mind any future requirement for increased sampling rates, as as I'm sure you know, you're eating into the ADCs bandwidth using the oversampling technique, so an external ADC will give you a little (well, a lot) of extra headroom.

imsmooth:
I was just relying on the background noise on the board. It seems to work right now as I have tested it against a commercial thermometer.

You are actually relying on the noise of your power supply, an ATmega328 run from
a battery has noise at about 0.2 LSB or so in my experience, and you need about +/-
1 LSB to start to properly average.

jtw11:

[quote author=Coding Badly link=topic=221352.msg1608493#msg1608493 date=1393363396]

imsmooth:
I am using decimated oversampling to increase the 10-bit adc to 12-bit.

In order for that to work you have to include random noise with the analog signal. If you are not doing that or do not know how to do that (I don't) then you most certainly should consider an ADC with higher resolution instead of trying to squeeze more resolution out of the AVR ADC.

The easiest way to do so is by adding the noise directly using a PWM signal through a filter into the AREF pin. I've used this successfully myself recently in a project, and you can obviously decide if and when you want the noise.

Page 9

http://www.atmel.com/Images/doc8003.pdf

To the OP, bear in mind any future requirement for increased sampling rates, as as I'm sure you know, you're eating into the ADCs bandwidth using the oversampling technique, so an external ADC will give you a little (well, a lot) of extra headroom.
[/quote]

Would you post a schematic of your filter and what type of pwm signal you used. I'm curious to see how to do this correctly.

I presume he uses the filter on page 9 of the PDF he linked to.

polymorph:
I presume he uses the filter on page 9 of the PDF he linked to.

Indeed.

I am sorry that the Arduino board design does not include the recommended RC isolation network supplying power to AVcc. It isn't hard to add a bypass capacitor to AVcc and Aref, but not so easy to add the series resistor to AVcc from Vcc. The Freeduino board has an empty spot on the bottom for a bypass cap from AVcc to ground, and the trace is easily cut to add the resistor.

I've not gone over the schematics or board layout for any of the newer Arduinos, though, so perhaps they've added this.