打印

还是建议认真看下老Hot的**

[复制链接]
楼主: czha1
手机看帖
扫描二维码
随时随地手机跟帖
61
yewuyi| | 2009-5-19 17:33 | 只看该作者 回帖奖励 |倒序浏览

消抖也是一种消除干扰的方法

用MP的话,其实就是一个概率论的东西,如果你的按键做是简单的套用延迟20MS再检测一次的方法,不管是丑陋的DELAY还是美丽的TIMER中断甚至是神奇的状态机,都不会让你的系统多强壮。

根据一般机械弹片的物理特性,一般是在100~200MS内抖动,所以为了可靠的解决解决这个问题,就应该尽量利用这个时间,例如,每4个MS检测一次键盘,如果有按键按下,记录当前键值,在第二个4MS进行消抖处理,如果有抖动则放弃,如果键值一致就继续第三个4MS读键,如此连续25个4MS周期后进行键值输出,那么我可以告诉你,只要你的PCB不是太垃圾,你的按键输出将是十分的稳定,即使施加了4KV的EFT信号,也不会出现什么问题。

使用特权

评论回复
62
常来21ic| | 2009-5-19 18:19 | 只看该作者

呵呵 比较认同楼上的思路

一个不起眼的键盘扫描居然也引来这么多争论......
最近坛子里火*比较浓,我还是不发表意见为好

使用特权

评论回复
63
czha1|  楼主 | 2009-5-19 19:56 | 只看该作者

认同61楼

比较认同61楼 yewuyi  虽然我不懂啥状态机
61楼已经把情况讲的非常清楚了。
不要把简单的问题复杂化,复杂的问题简单化。
该怎么的就怎么的,总之一个DELAY解决得不全面。

使用特权

评论回复
64
highgear| | 2009-5-19 20:40 | 只看该作者

顶yewuyi,说得很好

使用特权

评论回复
65
huangqi412| | 2009-5-19 21:01 | 只看该作者

热闹

使用特权

评论回复
66
McuPlayer| | 2009-5-19 22:32 | 只看该作者

纯技术层面的PK也会很精彩,只是不要为了面子而PK

电工也要学会享受生活之美

使用特权

评论回复
67
shanweichao| | 2010-6-19 23:00 | 只看该作者
看到了大家的肺腑之言呀,,,书上说的的确都是骗学生的,杭州新华书店(购书中心)的关于单片机的书我差不多都翻阅了一遍且不仅是一次,想起那句话 。。。**一大抄。。。我都是看着骂着,真的,有本杭州XX公司出的简直就是骗钱的2个版本的书,就书皮换了,,请广大像我一样的菜鸟们擦亮眼睛。。还有,电子类那里,我翻了5本竟然3本有错的有本很可笑把光敏电阻写成了光头电阻,有本把电感单位写成了UF。。。。我很无语,于是我在心里骂了几句就走了。。。。

使用特权

评论回复
68
xd54622| | 2011-7-26 11:20 | 只看该作者
嘿嘿,翻一下看看

使用特权

评论回复
69
gaoyiyiyi| | 2011-7-26 14:06 | 只看该作者
每次遇到消抖,都是争吵一堆。可以将消抖贴看成二姨的月经了。。。。哈哈
大家还是争技术吧,不要互相攻击,天热,伤肝。

使用特权

评论回复
70
Chaos_zc| | 2011-7-26 18:31 | 只看该作者
每次遇到消抖,都是争吵一堆。可以将消抖贴看成二姨的月经了。。。。哈哈
大家还是争技术吧,不要互相攻击,天热,伤肝。
gaoyiyiyi 发表于 2011-7-26 14:06

顶六十九楼。技术上要多探讨,相互尊重不能忘。贬低、攻击别人并不能显出自己博学,往往暴露出自己的浅薄。

使用特权

评论回复
71
雪落有声| | 2013-12-31 14:34 | 只看该作者
我把这贴从头仔细看到尾,也是深有70楼的感触。开始看着技术上的争论很兴奋,但越往后看越没意思。美在技术的PK而不在相互攻讦。

使用特权

评论回复
72
零度888| | 2014-4-11 20:12 | 只看该作者
eeproom 发表于 2009-5-16 14:49
       延时20mS以上原地等待是一种变相的自杀行为,除非你的程序任务 ...

这个是我要的答案,尼玛  今天就因为这个被批了     菜鸟一枚飘过

使用特权

评论回复
73
WM~~~| | 2014-4-21 16:10 | 只看该作者
你又来这里吹牛b了,害我找了几个论坛,翻了几百页帖子,终于找到你了。 工头让我告诉你,明天去工地早些,要搬3车水泥两车砖头,如果搬不完,连昨天的工钱也不给你了。 还有隔壁寡妇村的凤姐叫我问你,你还娶不娶她,不娶她就要嫁给工地的那个歪嘴了。

使用特权

评论回复
74
周炎33| | 2014-7-18 18:50 | 只看该作者
我也用了延时来去抖,可是效果不好,按键按下去有时还是会多跳一下,请问怎么准确的去抖啊,保证按键按一下就跳一下

使用特权

评论回复
75
NWPU_CHEN| | 2014-7-21 15:25 | 只看该作者
周炎33 发表于 2014-7-18 18:50
我也用了延时来去抖,可是效果不好,按键按下去有时还是会多跳一下,请问怎么准确的去抖啊,保证按键按一下 ...

新手就用这个延迟,看来你的延迟时间不够才会导致多次执行,当然中断添加标志也可以,或者多次检测,对结果进行处理等都可以,新手就用delay吧,加长点延时时间
按键进行这样处理保证一次
void KeyRead( void )
{
    unsigned char ReadData = P1^0xff;           // 1
    Trg = ReadData & (ReadData ^ Cont);         // 2
    Cont = ReadData;                                             // 3
}

1:读P1的端口数据,取反,然后送到ReadData 临时变量里面保存起来。
2:算法1,用来计算触发变量的。一个位与操作,一个异或操作,我想学过C语言都应该懂吧?Trg为全局变量,其它程序可以直接引用。
3:算法2,用来计算连续变量。

使用特权

评论回复
76
kamen588| | 2014-7-21 19:54 | 只看该作者
yewuyi 发表于 2009-5-19 17:33
用MP的话,其实就是一个概率论的东西,如果你的按键做是简单的套用延迟20MS再检测一次的方法,不管是丑陋的 ...

同意 我就是这样处理的

使用特权

评论回复
77
peter_wjp| | 2014-7-22 09:38 | 只看该作者
我是一个菜鸟,目前写的程序都很简单,对于键盘我很惭愧我还在使用延时和timer,我的目的很简单,就是防止手按键盘时候会出现抖动,然后导致了很多次的输入程序的执行。 当然,如果能在检测到按键输入后进行一些处理(比如按键短时间内多次触发仅仅接受第一次),那么我就完全可以取消所谓的delay和timer。 所以,我感觉就我自己的实际应用而言,无论怎么处理,只要保证用户按键按一下,有一次的输入执行就行了。(当然,如果碰到那种一直按着不放的用户,我也没办法,不可能花大把的程序时间放在那里去不停检测,完了再去执行)

当然对于编码器的干扰消除,我之前仅仅接触过一点点,用的简单的增量式编码器,用的51单片机中断完成的,因为当时频率很低(5K以下),精度也要求不高,我根本没有使用消除干扰处理。当然,仅仅是个人玩玩而已。就实际工控而言,消除干扰是肯定要做的。楼上很多高手给出了很多解决方案,以我目前所能够理解的程度,我感觉都不错。做出东西简单适用最好。

使用特权

评论回复
78
周炎33| | 2014-7-22 10:32 | 只看该作者
NWPU_CHEN 发表于 2014-7-21 15:25
新手就用这个延迟,看来你的延迟时间不够才会导致多次执行,当然中断添加标志也可以,或者多次检测,对结 ...

谢谢您的指导,等我回去试试

使用特权

评论回复
79
周炎33| | 2014-7-22 10:32 | 只看该作者
NWPU_CHEN 发表于 2014-7-21 15:25
新手就用这个延迟,看来你的延迟时间不够才会导致多次执行,当然中断添加标志也可以,或者多次检测,对结 ...

谢谢您的指导,等我回去试试

使用特权

评论回复
80
caowent| | 2015-5-11 15:53 | 只看该作者
我认为按键检测是一个频率采样的过程。软件消抖可以这样理解,人按按键最高频率假设是10HZ,抖动信号的频率假设是100HZ。我们目的是采到人的按键信号,同时剔除抖动的影响。根据采样定理,“当采样频率fs.max大于信号中最高频率fmax的2倍时(fs.max>2fmax),采样之后的数字信号完整地保留了原始信号中的信息”。我们的采样频率只要比20HZ大,比200HZ小,就能完整得呈现按键信号,同时屏蔽抖动干扰。(比如设为100HZ,效果更好,可以自行分析)所以软件消抖是体现在延时上,很多采用延时10ms的 。

使用特权

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

本版积分规则