uint8_t temperature_get(void)
{
static int error_count = 0;
signed short adc_value_temp = -1;
signed short adc_samples[8], average_temp=0,i;
float vout,rt,temp;
static int pre_temp;
for(i=0;i<8;i++)
{
adc_start(&AVR32_ADC);
adc_value_temp = adc_get_value(&AVR32_ADC, ADC_TEMPERATURE_CHANNEL);// Get value for the temperature adc channel
adc_samples[i]=adc_value_temp;
if(i!=0)
{
int ADC_cnt_difference = adc_samples[i] - adc_samples[i-1] ;
if(ADC_cnt_difference > 10) // take trial with random values just example
error_count++;
if(error_count>3)
{
error_count = 0;
adc_disable(ADC_TEMPERATURE_PIN, ADC_TEMPERATURE_CHANNEL);
lcdClear();
lcdMoveCursor(0,0);
lcdPrintStr("Sensor not Connected");
}
}
average_temp+=adc_samples[i];
delay_ms(3);
}
average_temp/=8;
vout = average_temp * ADC_RESOLUTION;//output voltage of the voltage divider
rt=((RFIX*vout)/(VCC-vout));//calculate the resistance of temperature sensor
temp=(-R0 * a +sqrt (R0 * R0 * + a * a - 4 * R0 * b * (R0 - rt))) / (2 * R0 * b); //find the temperature in 'C (Callendar-Van Dusen equation)
rt=((int)temp+pre_temp)/2; //rt holds average temperature value
pre_temp=(int)temp;
temp=rt;
return (int)temp;
}