打印

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

[复制链接]
楼主: 火山LF
手机看帖
扫描二维码
随时随地手机跟帖
21
复仇之矛| | 2016-10-13 12:03 | 只看该作者 回帖奖励 |倒序浏览
火山LF 发表于 2016-10-13 10:38
解决方案:用示波器观察按键低电平的时长,中断延时必须比按键低电平的时长短,不然进不去判断,延时的时间 ...

你的那个wait(30);使用的是定时器定时扫描么?

使用特权

评论回复
22
angus118| | 2016-10-13 13:02 | 只看该作者
不知道

使用特权

评论回复
23
lilinfei520| | 2016-10-13 14:05 | 只看该作者
路过学习中

使用特权

评论回复
24
火山LF|  楼主 | 2016-10-13 15:02 | 只看该作者
复仇之矛 发表于 2016-10-13 12:03
你的那个wait(30);使用的是定时器定时扫描么?

不是,配置好时钟后,直接用for循环延时了,不是很准确,大概的范围
//===================================================
// wait(100) means delay 100ms
//===================================================
void wait(unsigned short n)
{
        unsigned char i;
        while (n--)
        {
                for (i = 0; i < 150; i++)
                {
                        __no_operation();
                        __no_operation();
                }
        }
}


使用特权

评论回复
25
火山LF|  楼主 | 2016-10-13 15:02 | 只看该作者

你的硬件我也不懂啊

使用特权

评论回复
26
pywmiss| | 2016-10-13 15:10 | 只看该作者
早上也做了一个430的低功耗的东东..
我是用1MHZ..DCO...当作正常工作状态...事情(LCD显示+AD检测)处理完了.就进入LPM3....用看门狗定时2秒唤醒一次....唤醒就退出LPM3...正常DCO的1MHZ处理事件...处理完再继续回到LPM3.

最终是每2秒醒来0.1秒时间......这样的平均100uA左右...

使用特权

评论回复
27
pywmiss| | 2016-10-13 15:11 | 只看该作者
当然按键的话更好做...LPM4.
开启外部中断.....唤醒...然后再正常处理程序...DCO 1MHZ就够了....按键按正常处理....事件完成再继续LPM4..这样非常省电的

使用特权

评论回复
28
songchenping| | 2016-10-13 15:22 | 只看该作者
在中断里面可以不用延时啊,直接判断

使用特权

评论回复
29
ecoren| | 2016-10-13 16:09 | 只看该作者
火山LF 发表于 2016-10-12 22:08
群主,用不了定时器,因为芯片已经进入低功耗的状态,按键是用来唤醒MCU的,边沿触发 ...

阁下混群混多了

使用特权

评论回复
30
复仇之矛| | 2016-10-13 16:34 | 只看该作者
火山LF 发表于 2016-10-13 15:02
不是,配置好时钟后,直接用for循环延时了,不是很准确,大概的范围

哦,我以为你用的调度器

使用特权

评论回复
31
datouyuan| | 2016-10-13 16:44 | 只看该作者
假如我来做:
外中断仅仅唤醒mcu.
mcu唤醒后,按常规处理各种事件(例如按键).
mcu满足休眠条件后,休眠.

这样做和普通的不带sleep的软件几乎一样.
在中断中延时是很不好的做法.

使用特权

评论回复
32
416356084| | 2016-10-13 18:55 | 只看该作者
高手

使用特权

评论回复
33
1203030117| | 2016-10-13 20:30 | 只看该作者
不想多次响应,,在第一次进入中断后直接关掉中断,设置个标志量,在进入低功耗模式前再重开中断,,

使用特权

评论回复
34
Thorald| | 2016-10-13 21:05 | 只看该作者
无延时的软件消抖,读按键I/O电平状态

使用特权

评论回复
35
uytyu| | 2016-10-13 22:18 | 只看该作者
直接使用延时滤波。

使用特权

评论回复
36
uytyu| | 2016-10-13 22:20 | 只看该作者
消抖能实现吗?

使用特权

评论回复
37
火山LF|  楼主 | 2016-10-14 08:12 | 只看该作者
pywmiss 发表于 2016-10-13 15:10
早上也做了一个430的低功耗的东东..
我是用1MHZ..DCO...当作正常工作状态...事情(LCD显示+AD检测)处理完了. ...

但是产品的功能是有好几个小时甚至一天都没有工作,需要进入睡眠,2秒醒一次的频率很高,也很耗电,2秒醒来一次,有可能发生按键按了之后,需要等待1秒多的时间,用户体验也不好

使用特权

评论回复
38
火山LF|  楼主 | 2016-10-14 08:14 | 只看该作者
datouyuan 发表于 2016-10-13 16:44
假如我来做:
外中断仅仅唤醒mcu.
mcu唤醒后,按常规处理各种事件(例如按键).

按键边沿触发唤醒MCU,首先要判断是否是真的一个边沿触发,而不是按键的一个普通抖动而引起的误触发,不得已才加的延时,延时是为了确保是真的一次边沿触发

使用特权

评论回复
39
火山LF|  楼主 | 2016-10-14 08:15 | 只看该作者
1203030117 发表于 2016-10-13 20:30
不想多次响应,,在第一次进入中断后直接关掉中断,设置个标志量,在进入低功耗模式前再重开中断,, ...

首先得要判断第一次进入中断的边沿触发是不是真的触发,而不是按键的一个抖动,加延时是为了确定是真的第一次中断

使用特权

评论回复
40
火山LF|  楼主 | 2016-10-14 08:16 | 只看该作者
uytyu 发表于 2016-10-13 22:20
消抖能实现吗?

可以,我把延时时间改到了30ms,目前还没有出现过多次响应的现象,代表消抖是可以的

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则