加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

在两个输入引脚上检测两个同时信号的最佳做法

发布时间:2020-12-16 10:29:54 所属栏目:百科 来源:网络整理
导读:我需要做以下事情:我在微控制器上有2个输入引脚,并且有可能在一个或另一个上接收到一个信号,但也可能两者在外部物理连接,并且信号同时到达. 问题:如果我使用类似的东西 if (PINB.1 PINB.2){ // ...} 存在百万分之一的机会,信号在两个值被加载到寄存器之间
我需要做以下事情:我在微控制器上有2个输入引脚,并且有可能在一个或另一个上接收到一个信号,但也可能两者在外部物理连接,并且信号同时到达.

问题:如果我使用类似的东西

if (PINB.1 && PINB.2)
{
  // ...
}

存在百万分之一的机会,信号在两个值被加载到寄存器之间到达以进行逻辑AND操作.当我离开if时,两个引脚都很高,但我仍然检测到只有第二个引脚很高.

我尝试了不同的解决方案,到目前为止,最好的选择是在任何一个输入高电平时启动一个非常短的倒计时,当计时器(最多几毫秒)运行时,我再次检查.

有谁知道更简单或更好的解决方案?我认为这个问题非常普遍,但到目前为止我找不到任何“经过验证的”方法.

编辑:我从硬件上知道,在一个边缘之后,引脚将保持其值至少几十毫秒.噪音已被照顾.

PINB.1和PINB.2就是例子.它们可能位于不同的端口上,因此对整个端口进行位掩码可能存在不够灵活的风险.

解决方法

您已经回答了自己的问题:只需使用计时器并再次检查引脚,它是您可以使用的最简单的数字滤波器形式.但是,当检测到引脚电平变化时,必须启动定时器.如果你有一个非常陡峭的上升沿,即引脚连接到某个数字IC,那么根据CPU时钟与上升沿相比的速度,读取引脚的次数甚至可能就足够了.

如果MCU具有此功能,则另一种解决方案是使用边沿敏感中断.然后保证在更改后立即读取引脚.每个引脚有一个中断,程序可以存储引脚的最新值以进行==比较.您必须确保使用中断和“main”之间的信号量来保护值,或者您回到开始的位置.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读