【问题标题】:Measuring time between 2 external interrupts测量 2 个外部中断之间的时间
【发布时间】:2017-05-11 10:52:51
【问题描述】:

我想测量两个不同相信号之间的时间,我正在使用 arduino Uno。我已将 2 个正弦信号转换为方波,并分别将它们馈送到 INT0 和 INT1。为了测量两个信号之间的延迟,我想使用中断测量信号的上升沿或下降沿之间的时间。在接收到第一个上升沿时,我想启动一个定时器,比如定时器 3,在接收到第二个上升沿时,我想停止定时器。我的问题是我找不到允许我启动和停止计时器 3 并使用它在 store 中的值的库。我该怎么做?

【问题讨论】:

    标签: arduino


    【解决方案1】:

    假设您谈论的是边缘之间的整数微秒,您可以创建一个全局变量来存储触发第一个中断的时间INT0LastTime=micros(),并让第二个中断将“现在时间”与第一次中断的时间。Lag=micros()- INT0LastTime;

    【讨论】:

    • 谢谢让我试试,但方法 micros() 不使用中断,因为我读过一些文章说如果启用中断,该方法只在几个微秒内正常运行,然后它的行为就会消失很抱歉,如果我的问题太琐碎或者我对这个 MC 领域不熟悉
    • 这是因为其他中断可能会干扰任何依赖于 'micros()' 的代码。假设你有一个 while 循环,它在每个循环上检查 'micros()' 并在 x micros 过去后做了一些事情;这存在不准确的风险,因为中断可能会在您的计时器到期时决定执行某些操作,而您的 while 循环必须等待。在这种情况下,我们在中断中使用微,所以这不是问题(我认为!我不是中断专家)。无论如何,Micros 只能精确到 4 ms,假设时钟速度为 16mhz,较低的时钟(例如内部时钟)将不太准确。
    猜你喜欢
    • 2014-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多