[应用相关] AD转换结果跳的历害

[复制链接]
1744|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 | 显示全部楼层
你软件滤波是什么?
拿起书本 发表于 2013-12-3 19:55 | 显示全部楼层
就是跳的厉害了些.
看看你的电源,基准,还有输入是否滤波良好且稳定
gpjun2008 发表于 2013-12-4 09:39 | 显示全部楼层
你是左对齐的吧,应该要先读高8位。不然读出的数不准的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

460

主题

2188

帖子

12

粉丝
快速回复 在线客服 返回列表 返回顶部