读数现在正常了,可就是精度不高我用的单次转换。
uint Mega16_ad(uchar chl)
{
uint addata;
DDRA&=~(BIT(PA0)|BIT(PA1)); //转换口设置为输入、无上拉 A0,A1,有上拉会影响结果
PORTA&=~(BIT(PA0)|BIT(PA1));
ADMUX=0; //实际板子用ADMUX=0x40; //采用AVCC参考电压,输出数据右对齐,可以设置为0,然后ref和avcc都加电阻接vcc
ADMUX|=chl; //设置指定的通道
ADCSR=0x85; //采用单次转换,查询模式,32分频
ADCSR|=BIT(ADSC); //启动转换
while(!(ADCSR&(BIT(ADIF)))); //等待转换结束
addata=ADCL; //读取低8位数据
addata+=ADCH*256; //读取高2位数据,读出值后标志位自动清空
//ADCSRA &= ~(1 << ADIF); //清标志
//ADCSRA &= ~(1 << ADEN); //关闭转换
return addata; //返回10位数据
}
上面这个程序的读数没达到10位AD的精度
求提高精度的方法。
|