This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] HDC2080:了解阈值中断行为

Guru**** 658810 points
Other Parts Discussed in Thread: HDC2080
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/sensors-group/sensors/f/sensors-forum/1199052/hdc2080-understanding-threshold-interrupt-behaviour

器件型号:HDC2080

HDC2080手册(第11到14页)根据设置的模式和极性描述了阈值交叉中断的行为。

在第11页上、处理温度过高阈值、在模式1、比较器模式下、极性设置为1、驱动2个 中断、当温度超过阈值时驱动1个上升沿中断、当温度再次下降到阈值以下时驱动1个下降沿中断。  当第一个中断发生时、TH_STATUS 的值为1。  当第二个中断发生时、它大概应该是 0、但如下所示的中断服务例程代码仍然为1。  

传感器设置为每10秒自动采集一次温度和湿度

禁用数据就绪中断。 所有阈值中断被启用。 DRDY/INT 引脚设置为在上升沿或下降沿中断。

传感器刚过温度阈值被加热、然后冷却。

我做错了什么? 谢谢。

中断服务例程

uint8_t intStatus = HDC2080 _readInterruptStatus ();//这会读取 HDC20880寄存器0x04
intStatus =(intStatus >> 3)& 0x0F//将位移位至字节起始
HumidityViolation =(intStatus && 0x03);//违反高电平或低电平
TematureViolation =(intStatus && 0x0C);//超出高电平或低电平
if ((tematureViolation == true)||(humidityViolation == true)){// Threshold violation
 当温度超过阈值时、在上升沿中断发生时、在这里做一些工作
 但是、这会在第2个中断和第1个中断上执行
否则{//处于阈值范围内
 在发生下降沿中断以及温度下降到阈值以下时、在这里执行其他操作
 但是、这永远不会被执行
}
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Ron:  

    感谢您发帖、欢迎来到 E2E!

    如果您在阅读下面的内容后仍有问题、将逻辑分析仪置于 I2C 总线上、然后在可能的情况下共享该捕获结果、可能会有所帮助。   

    以下是我针对此类用法执行的示例、其中、在 POR 或 SR 之后运行的设置代码中、  寄存器0x0B (具有0x64、对于24.45°C 为)、0x07 (具有0x40、TH_ENABLE 位设置)、0x0E (具有0x77、5Hz、DRDY/INT 启用、 INT_POL =高电平有效并且 INT_MODE =比较器模式)完成、然后固件开始转换(0x01到寄存器0x0F)

    (单击图像以放大)

    然后、在这个特定示例中、大约2.35秒后、会触发中断、因为我将温度升高 到阈值以上、然后读取寄存器0x04 (我在这里得到的是0x0C)、并以5Hz 的速率开始读取、直到器件冷却回且中断不再有效。  

    放大 IRQ 之后的第一个读数、temp 用红色圆圈标出、在本例中、我将其第二个放在我的 UART 上

    这是一个完整的捕获,你可以从 Saleae 获得查看器软件(这是旧版本)  

    https://support.saleae.com/logic-software/legacy-software/older-software-releases#logic-1-x-download-links 

    e2e.ti.com/.../HDC2_5F00_High_5F00_Temp_5F00_Threshold_5F00_Interrupt_5F00_Usage.logicdata

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Josh、您好、感谢您的答复。

    可能解释得不够好。  问题不在于是否发生中断、我们在 DRDY/INT 脉冲的上升沿和下降沿获得中断、而是在第二个中断发生时温度下降后寄存器0x04中状态位的值。  在温度超过阈值的第一个中断后、移位的值0x04为0x08、这与 TH_STATUS 设置为高电平时的预期结果相同。 然而、在第二个中断时、当传感器已冷却至阈值以下时、值0x04仍然为0x08、当我从阅读手册时、它应该为0x00、或者我是否误解了它的工作方式? 谢谢。 Ron

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Ron -  

    也许您可以通过逻辑分析仪捕获您看到的内容、最好是尽可能从上电开始、这样我就能看到您是如何设置器件的、然后可能重新创建/解释具体情况。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Josh、您好!

    好的、很遗憾、我无法轻松地在引脚上找到一个探针、因为这是为了升级我们现有一个板上的固件。  相反、我有一个 LED 在条件的不同分支上以不同的方式闪烁、并且在中断后也读取0x04值。  由此可以清楚地看出、条件的第一个分支在加热到传感器后执行、然后在允许传感器冷却时执行。  在这两种情况下、TH_STATUS 都设置为0x08 (正确地右移3位)、而我希望在传感器冷却到阈值以下时将其清除。  我要真正想要做的只是确认、当温度回到阈值以下时传感器确实确实会清除 TH_STATUS 位、与 DRDY/INT 阈值脉冲的下降沿相一致(数据就绪中断关闭)。

    实际上、虽然我现在意识到、如果在温度降至阈值以下时清除 TH_STATUS 位、但无论如何也无法检测该事件、因为在温度升高超过阈值后、TH_STATUS 位设置为高电平后、只需读取寄存器即可将其清除。 因此、在这种情况下、 我需要查看中断是上升还是下降、例如  

    bool isRising = HAL_GPIO_ReadPin (DRDY_INT_PORT、DRDY_INT_PIN)
    这似乎可以解决问题。 明白了吗?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Ron -  

    如果这对你来说是有意义的,那么很棒! 您还可以在此处比较您的预期并根据需要调整引脚的极性、触发和不同释放行为、这些行为基于您喜欢的设置或您希望执行的操作(即读取0x04)。

    https://www.ti.com/lit/ds/symlink/hdc2010.pdf (第11页、对于温度高示例用法、以下页面显示了其他内容)

    在这个情况下、使用模式0将导致 IRQ 在被一个读取处理前不变为低电平。 在模式1中、引脚在超过阈值时更改状态。   

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Ron、

    为了补充 Josh 的介绍、中断行为基于 INT_MODE 和 INT_POL 配置。  图7-3显示了高温的行为、图7-4显示了基于 INT_MODE 和 INT_POL 的低温行为。   

      

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Eddie

    从我阅读上述图表的手册中可以看出、在比较器模式下、如果温度过高、当温度降至阈值以下时(POLL 设为1、数据就绪中断关闭、阈值中断开启)、DRDY/INT 脉冲返回低电平、 则应取消设置 TH_STATUS、而根据我的观察、它是设置的、与手册相反。

    这由阈值中断服务例程(配置为在 上升沿和下降沿触发)进行了调查、该例程通过编码来指示 DRDY/INT 的电平(如上所述)、同时还保存了 TH_STATUS 的值、以便稍后可以查看。   在这种情况下、当 DRDY/INT 变为低电平并且读取和存储 TH_STATUS 时、其值显示为高电平(变量3 >>值为8)。  因此,在这方面,我最初提出的关于理解的问题,因为《手册》似乎是不正确的。

    要使用逻辑分析仪检查此情况、需要在 DRDY/INT 变为低电平时确定 TH_STATUS 的值。

    当然、我可能犯了一个错误、因此出现了原始问题、这肯定需要进行此项检查来证明传感器的行为如手册中所示。 谢谢。  Ron。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Ron:

    我理解您的问题。  明天、我会在 EVM 上拿到一个逻辑分析仪、并会复制您的配置、但还会监控 DRDY/INT。  我会让你知道我的发现。   

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Ron、

    请在下面查看我的捕获。  高温阈值设置为28.32C。  当超过该阈值后、DRDY 会被置位、寄存器0x41的读数为0xC0、表示发生中断。  当温度超过阈值以下时、DRDY 不再置位、寄存器0x41读数为0x80、表示没有中断、转换完成。  我已经包括了下面的镜头,但也附上了完整的捕捉,如果你想检查这个。  您需要用到 Saleae 逻辑分析仪软件才能进行查看。

    DRDY 变为高电平指示超出阈值后:

    在 DRDY 变为低电平指示不再超过阈值后:

    如果您可以提供一些逻辑分析仪的输出、这将很有帮助、因为我在数据表中看到的行为。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢 Eddie、感谢你们进行测试。

    如前所述、我无法轻松地将逻辑探头连接到此处提供的定制板的 HDC2080引脚上、前提是可能会损坏板。 因此、我的测试如上所述。 从而存在不确定性。

    在将此问题标记为已解决之前、还有一个问题。 在您的第二次逻辑分析仪捕获中、您是否仅在温度降至阈值以下后才读取寄存器、否则在最初超出阈值时读取寄存器本身是否会清除寄存器位?

    实际上、在给出后一点、即读取寄存器时将清除状态位的情况下、阈值状态交叉寄存器 仅用于识别最初违反了哪种类型的阈值。 但不会在其返回阈值边界内时开启、部分取决于读取 DRDY/PIN 的电压电平、或以其他方式确定中断属于下降中断。 如果同时超过了温度和湿度阈值、则需要将它们的实际值与阈值进行比较、以确定再次越过哪个阈值或两个阈值。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Ron -  

    Eddie 和我正在为您准备一个示例(使用器件中的加热器功能)、以便轻松地实时显示行为。  

    基本循环是从加电开始、我们配置器件、打开加热器并使其达到阈值、然后关闭加热器并保持读数。

    在 DRDY/INT 仍为高电平时、第二次读取发生在压降之前。  

    以下是到目前为止的样子——星期一还有更多!

    (单击图像以放大)

         

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Josh 温度测试的好主意,比热风枪好!

    我们避免了在我们的电池供电的商用冰箱/冷冻柜无线产品中使用加热器、因为它的电流消耗很大、但它对于通过无线命令进行自我测试非常有用。  

    我不清楚的是在不清除标志位的情况下是如何读取0x04的? 手动指示读取本身会清除这些位。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Ron -  

    谢谢-这意味着我在玩固件、我正在寻找在引脚处于高电平期间切换到单次。 这里是一个稍微更简洁的版本、我将其保留在 AM 模式-您可以看到、在读取值之后、我关闭加热器(保持在 AM 模式)、然后 IRQ 降压。  

    复位时的状态

    放大 IRQ -在这里、由于 IRQ、我进行读取、然后关闭加热器

    中断模式决定引脚何时更改状态、即 int_mode =0时、引脚更改被服务的状态;在模式1中、引脚根据温度更改状态。

    我想我们会针对这个问题提出一个 E2E 常见问题解答、因为这有很多细节我们可以详细介绍、谢谢您提出了这个问题。   

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    再次感谢 Josh。

    这是一款出色的传感器器件、绝对值得编写一个常见问题解答。  我们的无线产品现在以睡眠模式运行、每十秒一次 AM 温度/湿度采集一次、使用平均值< 5uA。 当温度超过阈值时、器件将唤醒(上升中断)、针对过热读取0x04寄存器、设置过热阈值计时器然后返回睡眠模式、如果在过热阈值计时器超时之前存在 DRDY/INT 下降中断、则会取消警报、 这种情况是通过读取 DRDY/INT 引脚的电压电平来检测的、在比较器模式下 、该引脚的电压电平当然会立即变为低电平、温度已经降至阈值以下。  如果过热阈值计时器超时、将无线发送过热警报。 此计时器用于在正常工作期间、当冰箱/冷冻柜门打开时、当温度可能短暂超过阈值时、减少错误警报。

    尽管出于某种原因、我仍然无法弄清楚阈值状态位与 DRDY/INT 引脚电压相对应发生的情况。

    以下是我的看法:

    在 INT_MODE = 1中、当 DRDY/INT 引脚由于违反过热阈值而变为高电平后、 如果读取0x04寄存器、它将显示 TH_STATUS 位为设置。  但是、根据手册、读取寄存器本身应该会导致将其清除。 因此、当温度降至阈值以下时、DRDY/INT 引脚电压将变为低电平、但 TH_STATUS 位值不会更改、因为它已从先前的读取中清除。  但是、如果在上升中断后未读取0x04寄存器、则当 DRDY/INT 引脚电压下降时、在下降中断时自动清除 TH_STATUS。  int_mode = 1时对行为的描述是否正确、还是我误解了?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Ron:

    我捕获了一些更多的捕获、以生成您所描述的内容。  将温度高阈值设置为60C。  上电后、加热器会开启并保持开启状态、直到在60C 下触发 DRDY 引脚。  此时、加热器关闭、并发生6秒的延迟、从而使传感器有时间冷却。  DRDY 中断后未发生读取寄存器0x04的情况。  经过6秒的延迟后、传感器远低于60C 阈值(6s 后约为37C)、并读取寄存器0x04。  我正在读取0xC0、指示 TH_STATUS 位未清除。  

    我还理解了数据表、指出模式1应该遵循当前温度转换、因此也会遵循 DRDY 引脚。  我正在内部查看此问题、如有必要、我们可能需要更新文档。

    缩小捕获显示 DRDY 中断、延迟、然后读取0x04。

          

    在温度低于阈值后读取0x04

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,Eddie,感谢您进行这一实验,这听起来我不会完全情绪化。

    同意您阅读的文档中的观点、即当 int_mode = 1、+ve 极性时、应由于下降电平中断而清除 TH_STATUS。

    如果存在新版本的传感器、如果该行为与手册中的情况相同、则会很有用、但在读取0x04寄存器时不会清除该寄存器。 而是  通过特定命令清除。 这将允许确定与中断相关联的特定传感器事件(四种可能组合之一)。  否则、如果湿度和温度都超出阈值、则必须进行温度和湿度比较、以确保中断的触发条件是哪一个。

    再次感谢您自己和 Josh 一直以来所做的实验。

    将您的上述回答标记为已解决。