Arduino Nano v3 internal temperature sensor
Calibration data:
Download data & formulas in excel.
Atmega documentation says:
The voltage sensitivity is approximately 1 mV/°C and the accuracy of the temperature measurement is +/- 10°C.
Measured temperature is a sum of ambient temperature and chip’s TDP.
In fact it rises up for few minutes after the chip is powered and may change in base of load.
// Read Atmega328P internal temperature sensor //
long
read_temp()
{
// Read temperature sensor against 1.1V reference
ADMUX = _BV(REFS1) | _BV(REFS0) | _BV(MUX3);
// Start AD conversion
ADCSRA |= _BV(ADEN) | _BV(ADSC);
// Detect end-of-conversion
while
(bit_is_set(ADCSRA,ADSC));
// return raw data
return
ADCL | (ADCH << 8);
}
// Convert raw temperature data to °C
double
conv_temp(
long
raw_temp)
{
// f(x) = (raw - offset) / coeff
return
((raw_temp - 324.31) / 1.22);
}
void
setup()
{
Serial.begin(115200);
}
void
loop()
{
Serial.println(conv_temp(read_temp()), 1);
delay(500);
}
Datasheet Atmega 328P – https://www.microchip.com/wwwproducts/en/ATmega328p
It is a curious fact that putting chips in the freezer, after a few minutes when the temperature drops below zero, the chip stops working.