31.3.3.7 Temperature Measurement
An on-chip temperature sensor is available. To do a temperature measurement, follow these
steps:
- Configure the voltage reference to internal 1.024V by writing to the Reference Selection (REFSEL) bit field the ADCn.CTRLC register.
- Select the temperature sensor as input in the Positive Input Multiplexer (ADCn.MUXPOS) register.
- Configure the ADC Sample Duration by writing a value ≥ to the Sample Duration (SAMPDUR) bit field in the Control E (ADCn.CTRLE) register.
- Acquire the temperature sensor output voltage by running a 12-bit Single-Ended conversion.
- Process the measurement result, as described below.
- SIGROW.TEMPSENSE0 is a gain/slope correction
- SIGROW.TEMPSENSE1 is an offset correction
#define SCALING_FACTOR 4096 // Enables integer in the signature row int16_t sigrow_offset = (int16_t) SIGROW.TEMPSENSE1; // Read signed offset from signature row int16_t sigrow_slope = (int16_t) SIGROW.TEMPSENSE0; // Read signed slope from signature row uint16_t adc_reading = ADC0.RESULT; // ADC conversion result int32_t temp = ((int32_t) adc_reading) + sigrow_offset; temp *= sigrow_slope; // Result can overflow 16-bit variable temp += SCALING_FACTOR / 2; // Ensures correct rounding on division below temp /= SCALING_FACTOR; // Round to the nearest integer in Kelvin uint16_t temperature_in_K = (uint_16t) temp; int16_t temperature_in_C = temp - 273;