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:获取温度值为零。

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

https://e2e.ti.com/support/sensors-group/sensors/f/sensors-forum/831736/hdc2010-getting-values-of-zero-for-temperature

器件型号:HDC2010
主题中讨论的其他器件: MSP430FR5969

你好。

我已通过读取两个制造 ID 寄存器来确认与 HDC2010的通信。  我现在尝试使用 MSP430FR26xx I2C 示例中显示的单字节方法读取温度。  我收到的值为零。  我是否遗漏了什么?

我使用了以下步骤:

0)复位。  检查制造标识。

1) 1)写入0x0F (指向 CONFIG 寄存器)

2) 2)写入0x01 (开始转换)

3)写入0x0F (继续指向 CONFIG 寄存器)

4) 4)读取值。 (等待位0清零、因为数据表显示这是一个"测量完成时自行清零位")

位被立即清除、所以...

5) 5)写入0x00 (指向 temp lsb)

6) 6)读取一个字节。  

7) 7)写入0x01 (指向 temp MSB)

8) 8)读取一个字节。

下面是 I2C 总线的逻辑分析仪跟踪。  

在此示例中、他们使用计时器等待、因此我尝试仅等待温度值非零。  这不奏效。

http://www.ti.com/product/HDC2010/toolssoftware

我还阅读了这 篇文章 、这篇文章似乎描述了我看到的同一个问题、尽管我要设置转换位。  便捷的流程图似乎与我正在执行的操作相匹配、而不是超时。

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

    尊敬的 Jason -在发出启动转换的命令后-需要等待时间、时间取决于您设置的分辨率。 在本例中、您发送了0x01到0x0F (14位)、因此该值为~1300uSec。   

    下面是使用 Saleae 进行的两次捕获。 (请单击图像以查看更大的图像)

    第一种方法是事先将器件置于 AMM 模式、并使用 DRDY 引脚-在我的软件中、我还读取0x04、然后使用以下事实:DRDY 线路处于高电平且寄存器中的 DRDY 位置位、然后读取温度和湿度寄存器。  

    在这里、我正在执行一次性转换、只需等待(在本例中为~2mSec)、然后开始读取。  

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

    除了 Josh 的答复、还查看 HDC2010METER-EVM 的源代码。 它使用 MSP430FR5969上的计时器在等待 HDC2010转换时间时将 MCU 置于睡眠状态。

    谢谢、

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

    感谢 Josh 和 Ren 的回答。

    Q1:我添加了一个应该大于足够的延迟-大约30mS。  您可以在这里看到设置0x0F、位0开始转换和读取之间的时序:

    首先、我开始转换:

    我等待30ms、然后读取温度 LSB 和 MSB 的值0x00:

    Josh 的示例使用多字节读取和写入、但在他的示例和结果之间没有任何逻辑上的区别。

    Q2:不读取0x0F 位0是否知道初始测量何时完成?  我知道、理想情况下、在应用中命令测量后睡眠、但这只是加电时作为测试进行的单次读取。

    感谢您的帮助!

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

    Jason -

    尝试将指针和值一起写入-这是一个更接近的捕获。  

    然后等待>1300uSec

    然后读出字节

    您还可以在尝试读取0x00到0x03寄存器之前读取0x04寄存器-如果它是0x80、则转换已完成且数据就绪