按键的滤波问题,请教大家

[复制链接]
6846|72
复仇之矛 发表于 2016-10-13 12:03 | 显示全部楼层
火山LF 发表于 2016-10-13 10:38
解决方案:用示波器观察按键低电平的时长,中断延时必须比按键低电平的时长短,不然进不去判断,延时的时间 ...

你的那个wait(30);使用的是定时器定时扫描么?
angus118 发表于 2016-10-13 13:02 | 显示全部楼层
不知道
lilinfei520 发表于 2016-10-13 14:05 | 显示全部楼层
路过学习中
 楼主| 火山LF 发表于 2016-10-13 15:02 | 显示全部楼层
复仇之矛 发表于 2016-10-13 12:03
你的那个wait(30);使用的是定时器定时扫描么?

不是,配置好时钟后,直接用for循环延时了,不是很准确,大概的范围
  1. //===================================================
  2. // wait(100) means delay 100ms
  3. //===================================================
  4. void wait(unsigned short n)
  5. {
  6.         unsigned char i;
  7.         while (n--)
  8.         {
  9.                 for (i = 0; i < 150; i++)
  10.                 {
  11.                         __no_operation();
  12.                         __no_operation();
  13.                 }
  14.         }
  15. }


 楼主| 火山LF 发表于 2016-10-13 15:02 | 显示全部楼层

你的硬件我也不懂啊
pywmiss 发表于 2016-10-13 15:10 | 显示全部楼层
早上也做了一个430的低功耗的东东..
我是用1MHZ..DCO...当作正常工作状态...事情(LCD显示+AD检测)处理完了.就进入LPM3....用看门狗定时2秒唤醒一次....唤醒就退出LPM3...正常DCO的1MHZ处理事件...处理完再继续回到LPM3.

最终是每2秒醒来0.1秒时间......这样的平均100uA左右...
pywmiss 发表于 2016-10-13 15:11 | 显示全部楼层
当然按键的话更好做...LPM4.
开启外部中断.....唤醒...然后再正常处理程序...DCO 1MHZ就够了....按键按正常处理....事件完成再继续LPM4..这样非常省电的
songchenping 发表于 2016-10-13 15:22 | 显示全部楼层
在中断里面可以不用延时啊,直接判断
ecoren 发表于 2016-10-13 16:09 | 显示全部楼层
火山LF 发表于 2016-10-12 22:08
群主,用不了定时器,因为芯片已经进入低功耗的状态,按键是用来唤醒MCU的,边沿触发 ...

阁下混群混多了
复仇之矛 发表于 2016-10-13 16:34 | 显示全部楼层
火山LF 发表于 2016-10-13 15:02
不是,配置好时钟后,直接用for循环延时了,不是很准确,大概的范围

哦,我以为你用的调度器
datouyuan 发表于 2016-10-13 16:44 | 显示全部楼层
假如我来做:
外中断仅仅唤醒mcu.
mcu唤醒后,按常规处理各种事件(例如按键).
mcu满足休眠条件后,休眠.

这样做和普通的不带sleep的软件几乎一样.
在中断中延时是很不好的做法.
416356084 发表于 2016-10-13 18:55 来自手机 | 显示全部楼层
1203030117 发表于 2016-10-13 20:30 | 显示全部楼层
不想多次响应,,在第一次进入中断后直接关掉中断,设置个标志量,在进入低功耗模式前再重开中断,,
Thorald 发表于 2016-10-13 21:05 | 显示全部楼层
无延时的软件消抖,读按键I/O电平状态
uytyu 发表于 2016-10-13 22:18 | 显示全部楼层
直接使用延时滤波。
uytyu 发表于 2016-10-13 22:20 | 显示全部楼层
消抖能实现吗?
 楼主| 火山LF 发表于 2016-10-14 08:12 | 显示全部楼层
pywmiss 发表于 2016-10-13 15:10
早上也做了一个430的低功耗的东东..
我是用1MHZ..DCO...当作正常工作状态...事情(LCD显示+AD检测)处理完了. ...

但是产品的功能是有好几个小时甚至一天都没有工作,需要进入睡眠,2秒醒一次的频率很高,也很耗电,2秒醒来一次,有可能发生按键按了之后,需要等待1秒多的时间,用户体验也不好
 楼主| 火山LF 发表于 2016-10-14 08:14 | 显示全部楼层
datouyuan 发表于 2016-10-13 16:44
假如我来做:
外中断仅仅唤醒mcu.
mcu唤醒后,按常规处理各种事件(例如按键).

按键边沿触发唤醒MCU,首先要判断是否是真的一个边沿触发,而不是按键的一个普通抖动而引起的误触发,不得已才加的延时,延时是为了确保是真的一次边沿触发
 楼主| 火山LF 发表于 2016-10-14 08:15 | 显示全部楼层
1203030117 发表于 2016-10-13 20:30
不想多次响应,,在第一次进入中断后直接关掉中断,设置个标志量,在进入低功耗模式前再重开中断,, ...

首先得要判断第一次进入中断的边沿触发是不是真的触发,而不是按键的一个抖动,加延时是为了确定是真的第一次中断
 楼主| 火山LF 发表于 2016-10-14 08:16 | 显示全部楼层
uytyu 发表于 2016-10-13 22:20
消抖能实现吗?

可以,我把延时时间改到了30ms,目前还没有出现过多次响应的现象,代表消抖是可以的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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