我曾参与过一个基于 STM32 和 FXOS8700 的项目。
一些信息
I2C @400kHz
启用自动休眠(但不中断)
混合模式
仅在 CTRL_REG4 中启用 int_en_lndprt,在 CTRL_REG5 中启用 int_cfg_lndprt
传感器设置为在改变方向时产生中断 (INT1)。在中断代码中,我读取了 PL_STATUS,并可以检查发生了哪个(端口/景观/前方/后方)移动。
但是,有时在读取 PL_STATUS 之后,INT1 引脚并没有清零。由于这个中断不可能像 freefall 或 vectormag 中断那样 " unlatched ",所以当这种情况发生时我无法再恢复IDLE状态了。
有人使用过这项功能并且效果良好吗?
你好,罗伯托、
增加消抖计数器并不是真正的解决办法。这只是为了确保不会出现准永久性中断。它可以过滤一下中断。但是,如果触发条件仍然有效,则在清除 flag + debounce 时间后,中断将恢复到较高水平。
你可以看看应用笔记 AN4068。
我在等你的测试。让我知道你的进展!
此致,
安东尼
嗨,安东尼、
我照你说的做了,看起来还行。但我会再等几天,因为问题是随机出现的。这很难再现。无论明天之前是否一切正常,我都需要减少消抖计数器,因为方向移动的响应时间增加了很多(将近 1.5 秒)。
我会让你知道我的测试结果。
谢谢!
罗伯托
你好,罗伯托斯、
我建议您使用消抖计数器,以确保 INT1 不会因其他事件而再次被设置。(使用大值来增加下一个事件发生前的死区时间)。
如果中断仍为高电平,则需要清除标记。如果下降了一段时间(去抖时间),则是阈值问题。
试试看,然后告诉我。
谢谢!
安东尼