2354|4

86

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

关于msp430之去除抖动 [复制链接]

问题描述:小弟最近在玩msp430,使用一个红外模块测量液体的滴定数目counter_val
由于液体的形状,速度等导致单片机接收到的IO中断有抖动,小弟想使用一个延时,之前直接使用软件延时效果不是很好,听网上大神的意见:小弟想使用定时器中断来做

问题:如何在IO中断服务程序中开启和关闭定时器中断啊,定时器A似乎没有某一位是用来开启和关闭定时器中断的啊?请大神指教~~~

最新回复

直接使用软件延时效果不是很好,听网上大神的意见:小弟想使用定时器中断来做 ——你需要多精确的延时呀?说的是我之前写的那个小范例吗? 从你上一个帖子内容看,你只是想做一个按键消抖,对于这个应用而言,延时1毫秒和1.5毫秒的相差其实不大,如果需要更精确,可以将中断周期调小一些,然后通过计数的办法来实现更为精确的延时操作,这样误差最大也就一个中断周期。 举个例子来说,将定时器中断设置为10微秒,100个周期之后是1毫秒,假如在设定延时100个整数周期,那么实际延时周期就是990微秒到1000微秒之间,这个误差对于你的消抖来说是完全可以忍受的。 于是,关键来了:定时器中断可以让它一直跑着,作为一个延时的基础外设来使用,根本就没有必要去关掉它。中断设置固定周期,中断服务函数里就是if(XXX>0)XXX--;那么在不需要中断来延时的时候,让XXX=0即可,中断服务执行条件就不成立,中断服务相当于在空跑。 需要用到中断延时的时候,直接对XXX赋值,那么就会延时XXX个周期。 如果阻塞性延时语句,那么还可以在对XXX赋值之后进入休眠模式,然后在中断服务里再加一条语句: if(Wakeup_Flag&&XXX==0)EXIT_LPMX; 在Wakeup_Flag为真的情况下,定时周期到了之后唤醒单片机执行后续的程序。 这是两种不同的延时风格,一种是后台延时,在延时周期里某个变量大于0,周期性检测,在这个变量大于0的情况下不执行某条语句从而实现延时,适合多线程的程序架构。 第二种延时风格就是延时期间不执行任何语句,属于阻塞性的延时。在MSP430里,一般将CPU关断进入低功耗模式,在定时周期到了之后再唤醒单片机执行后续的操作。  详情 回复 发表于 2015-5-26 00:40
 
点赞 关注

回复
举报

2002

帖子

24

TA的资源

五彩晶圆(高级)

沙发
 
本帖最后由 shower.xu 于 2015-5-25 11:58 编辑

不用这样,用定时器的输入捕获功能,会自动捕获间隔时间的,你所要注意的是定时器溢出。
请仔细阅读使用指引和官方例程,ti的程序写的很好。
 
 

回复

1560

帖子

24

TA的资源

五彩晶圆(初级)

板凳
 
既然外部中断存在抖动问题,那就试试下面的方法:
1 就像楼上说的那样用输入捕获,根据间隔判断是否为抖动;
2 定时器定时中断查询外部中断状态。
推荐用1方法。
 
个人签名这孩子,成熟的象征,理智的典范。
 
 

回复

86

帖子

0

TA的资源

一粒金砂(中级)

4
 
小弟不是很明白
假如我使用的是上升沿捕获
那是不是可以这样理解:是不是我捕获2次上升沿的时间间隔,时间间隔小于>T,就认定没有发生抖动
大神有范例程序让小弟参考一下吗?
 
 
 

回复

1193

帖子

0

TA的资源

纯净的硅(高级)

5
 
直接使用软件延时效果不是很好,听网上大神的意见:小弟想使用定时器中断来做
——你需要多精确的延时呀?说的是我之前写的那个小范例吗?
从你上一个帖子内容看,你只是想做一个按键消抖,对于这个应用而言,延时1毫秒和1.5毫秒的相差其实不大,如果需要更精确,可以将中断周期调小一些,然后通过计数的办法来实现更为精确的延时操作,这样误差最大也就一个中断周期。

举个例子来说,将定时器中断设置为10微秒,100个周期之后是1毫秒,假如在设定延时100个整数周期,那么实际延时周期就是990微秒到1000微秒之间,这个误差对于你的消抖来说是完全可以忍受的。

于是,关键来了:定时器中断可以让它一直跑着,作为一个延时的基础外设来使用,根本就没有必要去关掉它。中断设置固定周期,中断服务函数里就是if(XXX>0)XXX--;那么在不需要中断来延时的时候,让XXX=0即可,中断服务执行条件就不成立,中断服务相当于在空跑。
需要用到中断延时的时候,直接对XXX赋值,那么就会延时XXX个周期。
如果阻塞性延时语句,那么还可以在对XXX赋值之后进入休眠模式,然后在中断服务里再加一条语句:
if(Wakeup_Flag&&XXX==0)EXIT_LPMX;
在Wakeup_Flag为真的情况下,定时周期到了之后唤醒单片机执行后续的程序。

这是两种不同的延时风格,一种是后台延时,在延时周期里某个变量大于0,周期性检测,在这个变量大于0的情况下不执行某条语句从而实现延时,适合多线程的程序架构。
第二种延时风格就是延时期间不执行任何语句,属于阻塞性的延时。在MSP430里,一般将CPU关断进入低功耗模式,在定时周期到了之后再唤醒单片机执行后续的操作。

赞赏

1

查看全部赞赏

 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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

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

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

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