30.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
int8_t sigrow_offset = SIGROW.TEMPSENSE1; // Read signed offset from signature row uint8_t sigrow_gain = SIGROW.TEMPSENSE0; // Read unsigned gain/slope from signature row uint16_t adc_reading = ADC0.RESULT >> 2; // 10-bit MSb of ADC result with 1.024V internal reference uint32_t temp = adc_reading - sigrow_offset; temp *= sigrow_gain; // Result might overflow 16-bit variable (10-bit + 8-bit) temp += 0x80; // Add 256/2 to get correct integer rounding on division below temp >>= 8; // Divide result by 256 to get processed temperature in Kelvin uint16_t temperature_in_K = temp;