X
首页
技术
模拟电子
单片机
半导体
电源管理
嵌入式
传感器
最能打国产芯
应用
汽车电子
工业控制
家用电子
手机便携
安防电子
医疗电子
网络通信
测试测量
物联网
最能打国产芯
大学堂
首页
直播
专题
TI 培训
论坛
汽车电子
国产芯片
电机驱动控制
电源技术
单片机
模拟电子
PCB设计
电子竞赛
DIY/开源
嵌入式系统
医疗电子
颁奖专区
【厂商专区】
【电子技术】
【创意与实践】
【行业应用】
【休息一下】
最能打国产芯
活动中心
直播
发现活动
颁奖区
电子头条
参考设计
下载中心
分类资源
文集
排行榜
电路图
Datasheet
最能打国产芯
微控制器 MCU
[求助] msp430的AD转换问题
linjingui
2009-9-22 11:05
楼主
用430实现电压监测功能
读取ADC12MEM0的值,发现电压很稳的情况,该值不是很稳。我采用多次采样取平均的方法,不知道大家觉得如何。另外如果要计算电量的百分比,需要做进制转换吗?请看我的代码有啥问题。谢谢指点。
void AD(void)
{
unsigned char i;
unsigned int buf;
for(i=0;i<0x0F;i++){ //连续采样16次,再取平均
ADC12CTL0 |= ADC12SC; // 启动AD
while((ADC12IFG&0X01)==0); //选择通道A0. 0x01对应P6.0
buf=ADC12MEM0; //测得该电压对应AD值
ADCBUF=buf + ADCBUF;
TimeDelay(10);
}
ADCBUF = ADCBUF>>1;
}
void F4(void) // 响应“剩余电量”执行函数
{
unsigned char a,b,c,f;
unsigned int d;
PutString_cn(10,0,"剩余电量");
AD(); //调用
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);
if(d<1106) d=1006; //电压值的下线
else if(d>3007) d=3007; //电压值的上限
d=(d-1106)*1000/1901;
b=d/10; //百分比的整数部分
c=d%10; //百分比的一位小数部分
Show_Char(15,25,b,2); //显示出来
Show_Char(42,25,c,1);
// if x<1106 报警
// x/3007 * 100% 显示82.4%
PutString_cn(0,50,"按任意键退出");
f=1;
while(f){
if ((P2IN&Key_Value)!=Key_Value) f=0;
}
TimeDelay(500);
}
/*AD模块初始化*/
void ADC_Init(void)
{
ADC12CTL0 = ADC12ON+SHT0_2+REF2_5V+REFON; //参考电压选为2.5V
ADC12CTL1 = SHP;
ADC12CTL0 |= ENC; // Enable conversion
}
点赞
回复评论 (7)
沙发
jxb01033016
发现电压很稳的情况,该值不是很稳
请检查你的程式.MSP430性能很好的.不应该出现这样的问题.
点赞
2009-9-22 13:10
板凳
jxb01033016
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);
这个完全是多余的.
点赞
2009-9-22 13:13
4楼
jxb01033016
ADCBUF = ADCBUF>>1;
错误,
因为是16次采样,所以要除以16,也就是左移4位.
ADCBUF = ADCBUF>>4;
[
本帖最后由 jxb01033016 于 2009-9-22 13:15 编辑
]
点赞
2009-9-22 13:14
5楼
yjj
好久没用430了,学习学习!
点赞
2009-9-22 13:25
6楼
linjingui
不用进制转换,怎么计算百分比呢?
点赞
2009-9-22 13:31
7楼
jxb01033016
在计算机里,都是用16进制表示的,你把16进制转换成10进制,又将10进制转换成16进制,饶了个圈子,又回到原点.
点赞
2009-9-22 13:54
8楼
jxb01033016
要改的地方都给你指出来了,你自己完善吧.
点赞
2009-9-22 14:00
最新活动
有奖直播报名中!抢占工业4.1先机 文晔科技日等你来!
2024 瑞萨电子MCU/MPU工业技术研讨会——深圳、上海站, 火热报名中
罗姆有奖直播 | 重点解析双极型晶体管的实用选型方法和使用方法
STM32N6终于要发布了,ST首款带有NPU的MCU到底怎么样,欢迎小伙们来STM32全球线上峰会寻找答案!
免费下载 | 安森美电动汽车充电白皮书,看碳化硅如何缓解“里程焦虑”!
是德科技有奖直播 | 应对未来高速算力芯片的设计与测试挑战
随便看看
SHT31测评+功能介绍
高频功率管驱动问题
PFC中的磁性元件的设计
音箱磨机必看 精品音响薄膜电容介绍
华为Quartus 指南
关于wince数据库打不开的原因?
菜鸟求助啦!
汽车防盗器
GERBER软件问题
wince如何支持SOCK_RAW
网上看到一个msp430基础时钟问题 希望有高手能解决
电子电路经典课程带你开启充电模式!抢楼有礼喽!
求教MOS烧毁的原因
用示波器进行汽车发动机缸压测试
想买一个开发板自己搞点东西,帮忙介绍一个好一点得!!
看dcexpert的pos机拆解升级
【信号处理】FPGA.based.Implementation.of.Signal.Processing.Systems
请问半导体封装测试TMP是那几个英语的缩写呀?
isd1760
宏晶单片机改网址啦,大家注意了
电子工程世界版权所有
京B2-20211791
京ICP备10001474号-1
京公网安备 11010802033920号
回复
写回复
收藏
回复