3565|9

23

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

请教一下,AD 转换结果狂跳的问题 [复制链接]

  1. uint mega16_ad()
  2. {
  3.          uint addata;
  4.          DDRA=0X00;
  5.          PORTA=0X00;
  6.          cli();
  7.          ADMUX        = 0x00;
  8.          ADCSRA=0x87;
  9.          ADCSRA|=BIT(ADSC);
  10.          ACSR= 0x80;
  11.          SFIOR |= 0x00;
  12.          while(!(ADCSRA&(BIT(ADIF))));
  13.          addata=ADCL;
  14.          addata=addata+ADCH*256;
  15.          ADCSRA|=BIT(ADIF);
  16.          ADCSRA=0X00;
  17.      sei();
  18.          return addata;
  19. }

  20. void port_init(void)
  21. {
  22.          PORTA = 0x00;
  23.          DDRA  = 0x00;        
  24. }
  25. void init_devices(void)
  26. {
  27.          port_init();
  28.          MCUCR  = 0x00;
  29.          MCUCSR = 0x80;//禁止JTAG
  30.          sei();//开全局中断
  31. }



  32. int main(void)
  33. {
  34.          uint i;
  35.          uchar ad0[4]={0,0,0,86,86};//初始值
  36.         init_devices();
  37.          LCD_init(); //LCD初始化
  38.         LCD_clear();//清屏
  39.         DDRD  =0xff;               
  40.          while(1)
  41.          {  
  42.          int xx=mega16_ad();
  43.          itoa(xx,ad0,10);// int to uchar
  44.          for(i=0;i<=4;i++)                                        //显示转换的数值
  45.                 {                                                                                                                                                                                                                                                                                                                                                                                 
  46.                          LCD_write_char(i,0,ad0[i]);  
  47.                          _delay_ms(10);
  48.                  };        
  49.                  _delay_ms(10);
  50.                  LCD_write_str(0,1,"yes?+2");//第二行显示
  51.                 PORTD =0xcd;//点亮LED
  52.          }
复制代码
初学单片机,看着手册设定的各个寄存器,现在AD转换的结果在400~500之间狂调,用的外部参考电压5V也不至于这样吧,
还有一点不理解的,ADCH+ADCL,应该显示在0-255之间,怎么会一直显示400~500呢?
硬件环境是在X宝买的M16最小系统,看原理图AVCC aref连在一起的。
求大神指点一下,上述不妥之处无喷,毕竟谁都有第一次吧。

最新回复

可采用均值滤波+1阶滞后滤波  详情 回复 发表于 2013-12-20 12:21

点评

算法问题 建议你采用均值滤波 来减少外界干扰  详情 回复 发表于 2013-12-12 19:20
点赞 关注
 

回复
举报

1185

帖子

1

TA的资源

纯净的硅(高级)

沙发
 
一般用参加都不直接接电源而是另外的基准源会更好一点。另外你采集的电压是不是也变化呢。还有跳很正常。但你的这个值跳得幅度很大。你采集个几十次然后取均值。再显示。试试看。看均值是不是也变化还是那么大。
 
 
 

回复

2886

帖子

0

TA的资源

五彩晶圆(初级)

板凳
 
没看到软件滤波,不知道楼主的硬件没有有做滤波处理?如果硬件没有,必须要进行软件滤波的
 
 
 

回复

6423

帖子

16

TA的资源

版主

4
 
你采的电压可能就不稳,最好把电路贴出来看看

点评

我把原理图贴上来了,帮我看看,谢谢指点。  详情 回复 发表于 2013-11-15 12:48
 
 
 

回复

23

帖子

0

TA的资源

一粒金砂(中级)

5
 
额,现在我对数据不处理,直接显示ADCH+ADCL。数据居然可以从100-1023,神啊,求帮助
 
 
 

回复

23

帖子

0

TA的资源

一粒金砂(中级)

6
 
原帖由 白丁 于 2013-11-14 23:28 发表
你采的电压可能就不稳,最好把电路贴出来看看

我把原理图贴上来了,帮我看看,谢谢指点。

QQ截图20131115124749.png (271.06 KB, 下载次数: 0)

QQ截图20131115124749.png
 
 
 

回复

23

帖子

0

TA的资源

一粒金砂(中级)

7
 
输入端我没做滤波,直接拉的5V,现在情况是,adc0如果接5V的话显示1023,数字也稳定。没有输入的话,居然可以0-1023的调,呃呃呃,无语了,感觉应该是滤波的问题,要是滤波的话,该怎么选择电容呢?
 
 
 

回复

8

帖子

0

TA的资源

一粒金砂(初级)

8
 
增加数字滤波程序
 
 
 

回复

12

帖子

0

TA的资源

一粒金砂(中级)

9
 

回复 楼主zqdl8 的帖子

算法问题 建议你采用均值滤波  来减少外界干扰
 
 
 

回复

5

帖子

0

TA的资源

一粒金砂(初级)

10
 
可采用均值滤波+1阶滞后滤波
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表