Im tinkering with a battery powered application, where i want to use the ADC for accurate measurement of a voltage from 0 to 0.85v. Naturally this points me at the 1.1v internal reference, but Im wondering how stable this is if its being powered off a potentially variable supply.
I've been poring over the delightful 448 page atmega datasheet, but I cant seem to find any information about the stability of the internal 1.1v reference. Does anyone have any pointers?
According to page 323 it is typically 1.1V but can range between 1.0V and 1.2V.
I don't know if it states how much it varies over time, however. I assume that the variation is fairly fixed, that is if you determine that it is 1.11V it probably stays at that level, but I have no proof of this.
Yesh i saw that bit, but it didnt indicate the conditions under which it'd vary. Im assuming that its likely to vary as a function of supply voltage, i guess sooner or later the easy answer is to suck it and see.
The variation of the internal reference is mainly over the temperature range.
There is also a fixed element where the voltage is not exactly 1.1V but somewhere between 1.0 and 1.2V.
So there is a fixed element and a variable element, supply voltage variations will be a much smaller effect than these two.
You can remove the fixed element by calibration.
My measurements of a Atmega328P chip over various supply voltages are below. Test sketch:
// Find internal 1.1 reference voltage on AREF pin
void setup ()
{
analogReference (INTERNAL);
analogRead (A0); // force voltage reference to be turned on
}
void loop () { }
I beg to differ. The Low and High are beyond three standard deviations from the average which means they are very likely outliers. My guess is that noise is the cause.
The "three sigma" range is...
Low: 1.0848
High: 1.0852
...or 0.0004 volts which is significantly smaller than the range from the actual minimum and maximum and less than 1 in 1000.
Given the chip has an onboard temperature sensor, it would in theory be
possible to calibrate for a range of temperatures, at least to first-order.
Without experimenting on a range of different chips its impossible to say what
the worst-case behaviour is for the bandgap reference (has someone already
done this?)
Actually, thinking about it, it would be great if ATmega chips that came with
a preloaded bootloader also had a calibration value(s) written to a standard
EEPROM location
MarkT:
Actually, thinking about it, it would be great if ATmega chips that came with a preloaded bootloader also had a calibration value(s) written to a standard EEPROM location
MarkT:
Without experimenting on a range of different chips its impossible to say what the worst-case behaviour is for the bandgap reference (has someone already done this?)
That much experimenting is probably not necessary. If the bandgap is anything like the internal oscillator there will be, at most, a handful of designs used by Atmel. Experimenting on each (Arduino compatible chip) design is probably sufficient.