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.

[参考译文] HDC2010:随机读取来自HDC的0 % rrr h和0°C或0 % rr h和-40°C

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

https://e2e.ti.com/support/sensors-group/sensors/f/sensors-forum/1085870/hdc2010-randomly-we-read-0-rh-and-0-c-or-0-rh-and--40-c-from-the-hdc

部件号:HDC2010
主题中讨论的其他部件: HDC2080

大家好

我们使用HDC2010开发了一个室内恒温器,我们还有大约100个原型。

我们在"自动测量模式"下使用HDC (湿度和温度),14位,每分钟1个采样,仅启用数据就绪中断

我们只在一个设备上遇到问题,有时每小时或 每天一次,我们从HDC读取错误的湿度和温度值0x0000或0x0001,下一次测量值正常。

我们在固件中检测到的0x0000,在本例中,我们使用旧值,这对我们来说没问题。但是,当我们不知道0x0001是否始终为0x0000/0x0001或0001或有时也是其他错误值(0x0002?)时,我们无法检测到它。

我们如何处理此错误,以便室内恒温器在集成显示屏上不显示0 % r.h和-40°C?

提前感谢

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

    亲爱的Loris -  

    HDC20x0设备具有名为DRDY/INT的固件行为可选引脚。 此引脚的用途是在HDC20x0设备置于自动测量模式时,为具有中断功能的GPIO (允许MCU在传感器测量之间休眠)或轮询GPIO (如果MCU不休眠)的MCU提供中断,测量完成后, 唤醒MCU并触发对寄存器0x00至0x03例程的读取。  

    如果您使用的是DRDY/INT, 则 应确保使用0x80写入寄存器0x07,然后写入寄存器0x0E以设置所选的自动模式。 然后,建议在中断触发后读取0x80 (数据就绪)的寄存器0x04,以便在读取温度和湿度寄存器之前对新数据是否就绪进行冗余检查。 如果 由于 未知约束而没有路由DRDY/INT线,或者设计使用单触发模式,我建议在读取温度和湿度寄存器之前,至少读取寄存器0x04的值0x80,以避免异步获取值, 在您的情况下,它为您提供了空值。  

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

    亲爱的Josh

    感谢您的回答。

    我们将值0x80写入寄存器0x07,将值0x26写入寄存器0x0E。 您可以在附件中找到启动过程的捕获。

    HDC的DRDY/INT引脚连接到我们的MCU并在MCU上生成外部interupt,我们仅在检测到interurpt后才读取寄存器0x00 - 0x03。 它在DRDY上升边缘发出I2C命令以读取值之间切换6.5ms。

    建议的寄存器0x04检查目前尚未实施,但我会这样做。

    e2e.ti.com/.../HDC2010_5F00_startUp_5F00_logicdata.zip

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

    亲爱的Loris -  

    我在HDC2080上执行了此操作,但它与HDC2010相同。  

    这是关于如何设置的捕获-我在这里将0x07设置为0x80,然后将0x0E设置为0x56 (在您的情况下是较长的间隔),然后(在本例中,我读出了以0x04开头的所有寄存器)-您不需要执行此操作, 然后我发送了开始转换,然后固件等待中断,然后读出0x04表示0x80,然后读temp和%rh寄存器(0x00到0x03)

    此外,这里还提供了图像不好时的捕获。  

    e2e.ti.com/.../HDC2080_5F00_HDC2010_5F00_comparison_5F00_DRDY.logicdata</s>2010

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

    亲爱的Josh

    昨天,我实施了建议的寄存器0x04检查,但这不能解决我的问题。 如果我从HDC读取0x0000/0x0000,0000,则设置DRDY_STATUS位,TL_STATUS位和HL_STATUS位。 如图所示。

    对我来说,HDC意味着测量已完成,且值正常。 此样本位于我的办公室,大约有24.5°C和35 % r.h。

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

    洛里斯-  

    您是在DRDY/INT上触发还是等待时间? 如果等待时间过长,则必须等待>1.3毫秒才能读取(对于首次读取,这是因为在设置设备并发出开始转换后,第一个测量值将在该时间内就绪)-之后,您应该等待0x80。 最好的方法是在DRDY/INT行上触发,读取0x80的0x04,然后读取0x00 - 0x03。  

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

    亲爱的Josh

    我们在DRDY/中断时触发,而不是在等待时间! 在DRDY信号上升边缘之后,我们的固件需要6毫秒才能读取寄存器。

    失败的测量不是第一次测量,在本例中是2小时后,我们每分钟读取一次传感器。 我将对捕获进行附加,故障序列的时间戳为1.0312万s :525ms。 故障序列完成后,我们对HDC执行软重置并重新配置HDC。 e2e.ti.com/.../HDC_5F00_DRDY-flag-set-an-0x0000.zip

    我们只在一个设备上看到此故障,其他100个设备使用预期的相同固件工作。

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

    洛里斯-  

    我看到您在捕获中所说的内容-我根本不会使用软重置,我不确定上次正确读取和您获得0xA8之间发生了什么,然后在temp和%RH寄存器中读取0x00 0x00。 为了完全避免这种情况,我所做的就是不要继续读取0x00-0x03,除非0x04是0x80。 如果可能,您还可以在得到0xA8时读出所有寄存器,以便进一步排除故障。  

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

    亲爱的Josh

    很抱歉回答延迟。 但需要一段时间才能再次捕获错误。

    我在我们的HDC例行程序中实施,如果寄存器0x04 ist设置为0xA8,我们将从HDC读取所有寄存器。

    如果我看到coorect,则寄存器0x0F测量配置设置为0xF6,这是一个不正确的值,但我们在配置例程0x01中将其写入此寄存器。 这是怎么发生的? 自从上次良好的测量后,我不再写此记录。 所有其他寄存器都有一个合理的值。

    请参阅附加的捕获,时间戳1.396万s:276ms

    e2e.ti.com/.../Read-all-registers-on-Error-Capture.zip

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

    亲爱的Loris:  

    正如我所说,不建议将重置发送到部件(0x80到0x0E)。 在这种情况下,您必须拥有一些稍旧的设备(我们在一年前修复了这些设备),这些设备存在一个问题,即在2.3Vdc以上,这些设备可能会导致注册损坏。  如果在寄存器0x0F中看到0x00以外的任何内容,请使用此固件解决方法。  

    https://e2e.ti.com/support/sensors-group/sensors/f/sensors-forum/100.8725万/hdc2080-faulty-0x0f-register-initialization-with-2-3v-custom-command-sequence?tisearch=e2e-sitesearch&keymatch=HDC<xmt-block0>20802080 % 2520register# 

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

    亲爱的Josh

    感谢您的回答。

    如果我在开机后在寄存器0x0F中读取0x00,则这是一个新设备,如果我在开机后从寄存器0x0F中读取到0x00以外的内容,则这是一个旧设备,我理解正确不正确。 ->我必须使用这个特殊的配置例程。如果我对新设备使用特殊的配置例程,是否有负面影响?

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

    亲爱的Loris -  

    这里唯一的轻微负面影响是,在运行变通办法后,只要通电且未应用软件重置,该部分将持续消耗200uA,因为变通办法是打开设备中的子稳压器,将该部分重置为已知良好状态, 然后重新打开子电脑控制器,以确保问题不会发生。  

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

    亲爱的Josh

    这意味着在设备通电的钻孔时间内,设备将消耗200uA而不是50nA的睡眠时间? 我们的PCBA由电池(CR2032)供电,这种更高的功耗对我们的应用不适用。 我们没有断开HDC电源的选项。 是否有其他固件解决方法? 我们在仓库中存放了一年的零件。

    提前感谢

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

    亲爱的Loris -  

    这是这些旧件的解决方法。 您只能使用0x80重置设备以注册0x0E,然后部件将正常关闭,但随后您可能再次出现这种情况。  我可以考虑 在这里做的唯一其他事情是定期读取寄存器(0x04到0x0F),并且只在这些不是默认值时运行变通办法。