打印
[应用相关]

AD转换结果跳的历害

[复制链接]
1159|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jxmzzr|  楼主 | 2013-12-3 15:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
uint mega16_ad()  
{
           uint addata;
           DDRA=0X00;
           PORTA=0X00;
           cli();
          ADMUX        = 0x00;
          ADCSRA=0x87;
          ADCSRA|=BIT(ADSC);
          ACSR= 0x80;
          SFIOR |= 0x00;
          while(!(ADCSRA&(BIT(ADIF))));
          addata=ADCL;
          addata=addata+ADCH*256;
         ADCSRA|=BIT(ADIF);
          ADCSRA=0X00;
     sei();
          return addata;
}
  void port_init(void)
  {
            PORTA = 0x00;
            DDRA  = 0x00;
}
void init_devices(void)
{
            port_init();
           MCUCR  = 0x00;
           MCUCSR = 0x80;//禁止JTAG
           sei();//开全局中断
}'
int main(void)
{
           uint i;
           uchar ad0[4]={0,0,0,86,86};//初始值
     init_devices();
           LCD_init(); //LCD初始化
     LCD_clear();//清屏
     DDRD  =0xff;
          while(1)
          {
           int xx=mega16_ad();
          itoa(xx,ad0,10);// int to uchar
          for(i=0;i<=4;i++)                                        //显示转换的数值
         {

      
                            LCD_write_char(i,0,ad0[i]);  
                            _delay_ms(10);
                    };        
                     _delay_ms(10);
                    LCD_write_str(0,1,"yes?+2");//第二行显示
          PORTD =0xcd;//点亮LED
      }
刚接触单片机不久,看着手册设定的各个寄存器,现在AD转换的结果在400~500之间狂调,用的外部参考电压5V也不至于这样吧?!
还有一点不理解的,ADCH+ADCL,应该显示在0-255之间,怎么会一直显示400~500呢?硬件环境是在X宝买的M16最小系统,看原理图AVCC aref连在一起的。求朋友们指点一下,不妥这处勿喷。
沙发
feilusia| | 2013-12-3 15:46 | 只看该作者
你先看看你的参考电压稳不稳,有没有稳压?

使用特权

评论回复
板凳
prayerwind| | 2013-12-3 17:56 | 只看该作者
你的输入电压是什么?

使用特权

评论回复
地板
yangganglone| | 2013-12-3 18:52 | 只看该作者
你软件滤波是什么?

使用特权

评论回复
5
拿起书本| | 2013-12-3 19:55 | 只看该作者
就是跳的厉害了些.
看看你的电源,基准,还有输入是否滤波良好且稳定

使用特权

评论回复
6
gpjun2008| | 2013-12-4 09:39 | 只看该作者
你是左对齐的吧,应该要先读高8位。不然读出的数不准的。

使用特权

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

本版积分规则

460

主题

2188

帖子

12

粉丝