I'm using the internal temperature ADC channel, my atmosphere temperature is 24 degree C,
but actually my conversion and calculation result is 16 degree C, i'm wondering what's wrong with my code,
Below is my code:
void Int_Temp_Sensor_Init(void)
{
SysCtlPeripheralEnable(SYSCTL_PERIPH_ADC1);
ADCSequenceConfigure(ADC1_BASE, 1, ADC_TRIGGER_PROCESSOR, 0);
ADCSequenceStepConfigure(ADC1_BASE, 1, 0, ADC_CTL_TS);
ADCSequenceStepConfigure(ADC1_BASE, 1, 1, ADC_CTL_TS);
ADCSequenceStepConfigure(ADC1_BASE, 1, 2, ADC_CTL_TS);
ADCSequenceStepConfigure(ADC1_BASE, 1, 3, ADC_CTL_TS|ADC_CTL_IE|ADC_CTL_END);
}
uint32_t readSysTemp(void)
{
uint32_t ui32ADC1TempValue[4];
uint32_t ui32TempAvg;
uint32_t ui32TempValueC;
ADCSequenceEnable(ADC1_BASE, 1);
ADCIntClear(ADC1_BASE, 1);
ADCProcessorTrigger(ADC1_BASE, 1);
while(!ADCIntStatus(ADC1_BASE, 1, false))
{
}
ADCSequenceDataGet(ADC1_BASE, 1, ui32ADC1TempValue);
ui32TempAvg = (ui32ADC1TempValue[0] + ui32ADC1TempValue[1] + ui32ADC1TempValue[2] + ui32ADC1TempValue[3] + 2)/4;
// TEMP = 147.5 – ((75 * (VREFP – VREFN) * ADCVALUE) / 4096)
// (VREFP – VREFN) is Vdd or 3.3 volts
ui32TempValueC = (1475 - ((2475 * ui32TempAvg)) / 4096)/10;
ADCSequenceDisable(ADC1_BASE, 1);
return ui32TempValueC;
}
Have any issue in my code?thanks.
Ashley