By your values, I have to assume that you are measuring off of the 10kOhm resistor on the bottom. I would hazard a guess that your 10kOhm resistor is a little high and the 100kOhm resistor is a little low. This would mean if your 10kOhm resistor is taking more of the voltage in the voltage division than expected.
There are a few problems at work here.
The first is the resistor value error. Ohm's Law: V=I*R. So if there is 5% error in R, then for a constant I, there will be a %5 error in the expected value of V. The %error from resistor tolerances are the maximum +/- error. So in reality, there could be a resistor with +5% error and other with -5% error. So there is a much larger possible range in output voltages for a constant current.
- This can be eliminated by either hard-coding the real resistances in software or adding a reference voltage that is more accurate than the resistor or A/D quantization error. This reference voltage would be used to get the real resistance values as the A/D sees them.
A/Ds can have an offset error. This really has to be calibrated out. Some A/Ds have this built in.
A/Ds also have quantization error. So if a voltage falls between two consecutive quantization levels, it will have to be rounded to one of those two, introducing error. There are ways of increasing the number of bits for an A/D by oversampling and averaging blocks of samples into one sample.
There are other errors that could be at work, but those three are the main ones I have run into. If the A/D is fairly linear, then measuring two accurate voltages with the A/D circuitry would let you build an affine linear equation to correct the data. This builds off of the problems in 1 and 2.
A/Ds can appear linear, but end up being very nonlinear at a particular range. I have heard of some implementations using a look-up table to correct the nonlinear behavior. But that is getting a little beyond your current problems.
Edit:
One more item. It is a good idea to buffer your analog signals to the A/D. It does a few things, like add another device to protect the microcontroller, and limit any possible transient sampling behavior from the A/D go into the analog signal.
Here's a single supply inverting opamp configuration that will do what you want. You will need an opamp capable of output drive to it's lower rail (You will probably want to include a small capacitor across R2 to limit bandwidth, since you don't need much for thermocouple readings)
R3/R2 may need to be increased in order not to load thermocouple depending on type - EDIT, just noticed the output is coming from the AD595, so it's probably low impedance (not checked datasheet) and fine as is:
R3/R2 simply divide the input voltage by 2. R1 and R5 present 400mV to the positive input. Since the opamp tries to keep the two inputs equal, it creates a level shift. For example, when there is -1.2V at the input, to keep the inverting input at 400mV, there needs to be 1.2V at the output. We can now see R3/R2 as a voltage divider with -1.2V at one end and +1.2V at the other, we get 2.4V across R3+R2, so the voltage across R3 is:
2.4V * (R3 / (R2 + R3)) = 2.4V * (10kΩ / 15kΩ) = 1.6V and so:
-1.2V + 1.6V = 400mV
You can run the calculations for the other input voltages and see how it works across the range (remembering there is always 400mV at the inverting input, and effectively no current flows into the input)
Another way to look at it given the above is, say we have -0.6V at the input. We know there must be +0.4V at the other side of R3, so the current flowing through R3 is:
(0.4V - -0.6V) / 10kΩ = 0.1mA
Now we know none of this current flows into the inverting input, so it must flow through R2:
5kΩ * 0.1mA = 0.5V
0.4V + 0.5V = 0.9V at the output
Simulation:
If you need it non-inverting, you can easily do this in firmware or add a simple inverting buffer after this.
ZIGBEE ADC
Just had a look at the Zigbee datasheet and it seems the Vref is fixed at 1.2V (although there is Vref pin, I couldn't find any mention of how to use it in the analog IO section), so you have to work with this unless you use an external (possibly higher resolution) ADC and feed the data to the Zigbee. It's a 10-bit ADC, so 1.2V / 1024 = ~1.17mV LSB, which won't be so bad with with filtering (which use a low cutoff since you have a slowly changing signal from the thermocouple)
Bear in mind the ADC595 has an calibration error of around +-1°C (or +-3%deg;C depending on which variant you are using) so absolute accuracy will not be excellent, but you could go for a higher resolution as mention if you wanted to.
So read the ADC595 datasheet advice thoroughly, pay attention to the PCB layout (if possible a 4-layer with solid ground plane), keep any digital signals away from the analog as best you can and use plenty of decoupling and all should be well.
Best Answer
@rdtsc has removed his answer which IMO raises a valid concern. I don't think the OP can rely on +5V to always be present (else, they wouldn't need the battery, would they?), and when that +5V is removed, the MCU will be powered via the pin's clamping diodes.
It is therefore recommended to either add a significant series resistor to the measurement pin which will reduce the leakage current to a minimum, or add an active circuit which connects the battery to the MCU only when a measure must be taken:
Depending on the expected intervals the system will spend without +5V power, the schematic above may be an overkill, but at least a series resistor should be there.