8-bit AVR Microcontrollers

Temperature Measurement

The temperature measurement is based on an on-chip temperature sensor that is coupled to a single ended temperature sensor channel. Selecting the temperature sensor channel by writing ADMUX.MUX[3:0] to '1000' enables the temperature sensor. The internal 1.1V voltage reference must also be selected for the ADC voltage reference source in the temperature sensor measurement. When the temperature sensor is enabled, the ADC converter can be used in single conversion mode to measure the voltage over the temperature sensor.

The measured voltage has a linear relationship to the temperature as described in the following table. The voltage sensitivity is approximately 1 LSB/°C, the accuracy of the temperature measurement is ±10°C assuming calibration at room temperature. Better accuracies are achieved by using two temperature points for calibration.

Table 1. Temperature vs. Sensor Output Voltage (Typical Case)
Temperature -40°C 25°C +105°C
ADC 205 LSB 270 LSB 350 LSB

The values described in the table above are typical values. However, due to process variation the temperature sensor output voltage varies from one chip to another. To be capable of achieving more accurate results the temperature measurement can be calibrated in the application software. The software calibration can be done using the formula:

T = { [(ADCH << 8) | ADCL] - TOS} / k

where ADCH and ADCL are the ADC data registers, k is a fixed coefficient and TOS is the temperature sensor offset. Typically, k is very close to 1.0 and in single-point calibration the coefficient may be omitted.

Gain and offset varies from device to device, so calibration has to be done for each device. Refer to AVR122: Calibration of the AVR's Internal Temperature Reference for the detail.