本帖最后由 qazq123 于 2015-10-19 10:19 编辑
#pragma interrupt_handler adc_isr:iv_ADC
void adc_isr(void)
{
ADMUX =0x46;//选择内部AVCC为基准
temp_single=ADC&0x3ff;
temp_single=temp_single*Vref/0x3ff;
temp_sum = temp_sum + temp_single*temp_single;
if(flag==32)
{
adc_rel=(unsigned int)sqrt((unsigned int)(temp_sum/32))*750;
flag = 0;
temp_sum = 0;
}
}
主芯片是mega88。功能是采集220交流电。 上面是我ADC采集处理数据的程序。偏置电压为2.4V,电阻分压倍数为750 ,数据类型都是unsigned int 型。
1.插上市电后显示的是2.4*750的值,不会是偏置电流加市电的值,很奇怪。想请教下,是不是我数据类型处理的错误导致了结果的错误? 这个750倍数应该放哪里合适?因为750倍数很容易增大误差。
2.如果我把adc_rel=(unsigned int)sqrt((unsigned int)(temp_sum/32))*750;改成adc_rel=(unsigned int)sqrt((unsigned int)(temp_sum/32-24))*750;不显示市电值,只会显示000.0 有时候还会跳到6000多的数字。
实在是找不出错误的地方。求各位大侠指导指导
|