打印
[AVR单片机]

关于mega64 AD采样结果偏差问题

[复制链接]
1124|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
liuwm|  楼主 | 2014-9-5 11:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本人第一次用AVR,有一个问题请教大虾们,如下程序:
AD采样程序

uint8 Adc_Get8(uint8 ch){
        uint8 adc_temp;
        ADMUX|=ch;                                                                        /* start*/
    _delay_us(5);
        BitSet(ADCSRA,BIT6);     //启动AD
    _delay_us(5);
        //while(BitTst(ADCSRA,BIT6));  
        loop_until_bit_is_set(ADCSRA,ADIF); //方法1 等待AD转换结束
         ADCSRA|=(1<<ADIF); //写1清除标志位
        adc_temp=ADCH;
       
        return adc_temp;
}

初始化程序:
void SYS_INIT(void){
         PORTE=0x0;
   DDRE=0x02;
   PORTF=0x0;
   DDRF=0x0;//0xe0;
   TIMSK=(1 << TOIE0);      //定时器设置125us
   TIFR=(1 << TOV0);
   TCNT0=6;
   TCCR0=0x02;
   
   ADMUX=0x21;//0x20;//参考电压VREF,左对齐
   ADCSRA=0x87;//此寄存器使能AD,并设定AD时钟

   
}
在主程序隔4MS调用一次AD采样,为什么总是与实测结果偏差5-8个ad值左右叫呢,搞了好几天了,用其它单片机都不会,AVR更应该不会才对的

相关帖子

沙发
tudou21| | 2014-9-5 14:39 | 只看该作者
信号输入的地和单片机的地之间有地偏移吗?8位的ADC,5-8个LSB应该只有几十个mV 吧

使用特权

评论回复
板凳
wangch_sh| | 2014-9-5 15:42 | 只看该作者
其他单片机差几个值?

使用特权

评论回复
地板
wangch_sh| | 2014-9-5 15:43 | 只看该作者
感觉不是软件问题。

使用特权

评论回复
5
SD10A| | 2014-9-6 09:50 | 只看该作者
本帖最后由 SD10A 于 2014-9-6 10:09 编辑

你只加了高位 没写低位  加上ADCL试验下
你用ADLAR=0;
adc_temp =ADCL;
adc_temp=ADCH*256+adc_temp ;


你要设置ADC触发源 SFIOR  使用定时器1或0 溢出中断    在初始化程序中先关ADC  ADSC=0,在溢出中断程序中再开ADC

使用特权

评论回复
6
liuwm|  楼主 | 2014-9-6 13:21 | 只看该作者
谢谢各位的回复,此问题在只有一个通道测量已OK,是我软件有一个BUG,但当多个AD通道测量是,好象结果不正常了,偏离很大,有没有谁遇过此类问题呢

使用特权

评论回复
7
liuwm|  楼主 | 2014-9-6 16:32 | 只看该作者
找到问题了,第一次用AVR,确实有点不习惯

使用特权

评论回复
8
liuwm|  楼主 | 2014-9-6 16:33 | 只看该作者
SD10A 发表于 2014-9-6 09:50
你只加了高位 没写低位  加上ADCL试验下
你用ADLAR=0;
adc_temp =ADCL;

呵呵,我只用8位精度,不用低位的

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

7

帖子

0

粉丝