|
如果用满量程为1024的话,那么几乎取样得出的数据波动会在200+以上,请问造成这样大的波动的因素是什么呢?采样通道上的数据值是比较稳定的,就是ad转换后,显示的数据波动太厉害了。
/********************************************************************
* 名称 : read_adc(void)
* 功能 : 采集adc0和adc1通道上的值
* 输入 : 无
* 输出 : 无
***********************************************************************/
void read_adc(void)
{
uchar i,j;
ADCSRA=0x00;//清零
delay_ms(10);
ADMUX=0x00;//选择外部参考电压,通道0
delay_us(5);
ADCSRA|=(1<<ADEN)|(1<<ADSC)|0x07; //使能ad转换,128分频
delay_ms(100); //延时等待转换完成
adc0_l=ADCL;//取出数据低八位
delay_us(5);
adc0_h=ADCH;
delay_us(500);
adc0_data=((adc0_h<<8)|adc0_l);
delay_ms(100);
table_adc0[0]=adc0_data/1000;//处理ad采样值,以便进行显示
delay_us(5);
table_adc0[1]=adc0_data%1000/100;
delay_us(5);
table_adc0[2]=adc0_data%100/10;
delay_us(5);
table_adc0[3]=adc0_data%10;
delay_ms(100);
set_address(3,1);//设定显示的地址
delay_us(20);//延时不可取消
for(i=0;i<4;i++)
{
write_data(table_adc0[i]+0x30);//将ad0采样值在液晶上显示出来
delay_us(5);//必须加延时
}
delay_ms(100);
ADCSRA=0x00; //清零
delay_ms(10);
ADMUX=0x01;//选择外部参考电压,通道1
delay_us(5);
ADCSRA|=(1<<ADEN)|(1<<ADSC)|0x07; //ad使能,128分频
delay_ms(100);
adc1_l=ADCL;
delay_us(5);
adc1_h=ADCH;
delay_us(500);
adc1_data=((adc1_h<<8)|adc1_l);//可以进行修正
delay_ms(100);
table_adc1[0]=adc1_data/1000;//处理ad1数据
delay_us(5);
table_adc1[1]=adc1_data%1000/100;
delay_us(5);
table_adc1[2]=adc1_data%100/10;
delay_us(5);
table_adc1[3]=adc1_data%10;
delay_ms(100);
set_address(3,2);//设定显示地址
delay_us(20);
for(j=0;j<4;j++)
{
write_data(table_adc1[j]+0x30);//显示通道1上的采样值
delay_us(5);
}
delay_ms(100);
}
|
阿莫论坛20周年了!感谢大家的支持与爱护!!
知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)
|