5064|7

118

帖子

0

TA的资源

五彩晶圆(中级)

楼主
 

msp430的AD转换问题 [复制链接]

用430实现电压监测功能
读取ADC12MEM0的值,发现电压很稳的情况,该值不是很稳。我采用多次采样取平均的方法,不知道大家觉得如何。另外如果要计算电量的百分比,需要做进制转换吗?请看我的代码有啥问题。谢谢指点。
  1. void AD(void)
  2. {
  3. unsigned char i;
  4. unsigned int buf;
  5. for(i=0;i<0x0F;i++){ //连续采样16次,再取平均
  6. ADC12CTL0 |= ADC12SC; // 启动AD
  7. while((ADC12IFG&0X01)==0); //选择通道A0. 0x01对应P6.0
  8. buf=ADC12MEM0; //测得该电压对应AD值
  9. ADCBUF=buf + ADCBUF;
  10. TimeDelay(10);
  11. }
  12. ADCBUF = ADCBUF>>1;
  13. }

  14. void F4(void) // 响应“剩余电量”执行函数
  15. {
  16. unsigned char a,b,c,f;
  17. unsigned int d;
  18. PutString_cn(10,0,"剩余电量");
  19. AD(); //调用
  20. a=ADCBUF & 0XF00 >>8;
  21. b=ADCBUF & 0X0F0 >>4;
  22. c=ADCBUF & 0X00F;
  23. a=a&0x08*8+a&0x04*4+a&0x02*2+a&0x01;a=a*256; //十六进制转换为十进制
  24. b=b&0x08*8+b&0x04*4+b&0x02*2+b&0x01;b=b*16;
  25. c=c&0x08*8+c&0x04*4+c&0x02*2+c&0x01;
  26. d=(a+b+c);
  27. if(d<1106) d=1006; //电压值的下线
  28. else if(d>3007) d=3007; //电压值的上限
  29. d=(d-1106)*1000/1901;
  30. b=d/10; //百分比的整数部分
  31. c=d%10; //百分比的一位小数部分
  32. Show_Char(15,25,b,2); //显示出来
  33. Show_Char(42,25,c,1);
  34. // if x<1106 报警
  35. // x/3007 * 100% 显示82.4%

  36. PutString_cn(0,50,"按任意键退出");
  37. f=1;
  38. while(f){
  39. if ((P2IN&Key_Value)!=Key_Value) f=0;
  40. }
  41. TimeDelay(500);
  42. }

  43. /*AD模块初始化*/
  44. void ADC_Init(void)
  45. {
  46. ADC12CTL0 = ADC12ON+SHT0_2+REF2_5V+REFON; //参考电压选为2.5V
  47. ADC12CTL1 = SHP;
  48. ADC12CTL0 |= ENC; // Enable conversion
  49. }
复制代码

最新回复

要改的地方都给你指出来了,你自己完善吧.  详情 回复 发表于 2009-9-22 14:00
 
点赞 关注

回复
举报

2771

帖子

0

TA的资源

裸片初长成(中级)

沙发
 
发现电压很稳的情况,该值不是很稳

请检查你的程式.MSP430性能很好的.不应该出现这样的问题.
 
 

回复

2771

帖子

0

TA的资源

裸片初长成(中级)

板凳
 
a=ADCBUF & 0XF00 >>8;
b=ADCBUF & 0X0F0 >>4;
c=ADCBUF & 0X00F;
a=a&0x08*8+a&0x04*4+a&0x02*2+a&0x01;a=a*256; //十六进制转换为十进制
b=b&0x08*8+b&0x04*4+b&0x02*2+b&0x01;b=b*16;
c=c&0x08*8+c&0x04*4+c&0x02*2+c&0x01;
d=(a+b+c);

这个完全是多余的.
 
 
 

回复

2771

帖子

0

TA的资源

裸片初长成(中级)

4
 
ADCBUF = ADCBUF>>1;

错误,
因为是16次采样,所以要除以16,也就是左移4位.

ADCBUF = ADCBUF>>4;

[ 本帖最后由 jxb01033016 于 2009-9-22 13:15 编辑 ]
 
 
 

回复

391

帖子

0

TA的资源

纯净的硅(高级)

5
 
好久没用430了,学习学习!
 
 
 

回复

118

帖子

0

TA的资源

五彩晶圆(中级)

6
 
不用进制转换,怎么计算百分比呢?
 
 
 

回复

2771

帖子

0

TA的资源

裸片初长成(中级)

7
 
在计算机里,都是用16进制表示的,你把16进制转换成10进制,又将10进制转换成16进制,饶了个圈子,又回到原点.
 
 
 

回复

2771

帖子

0

TA的资源

裸片初长成(中级)

8
 
要改的地方都给你指出来了,你自己完善吧.
 
 
 

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

随便看看
查找数据手册?

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
快速回复 返回顶部 返回列表