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.

[参考译文] LPSTK-CC1352R:HDC2080仅在 i2ctmp 示例中返回0

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

https://e2e.ti.com/support/wireless-connectivity/zigbee-thread-group/zigbee-and-thread/f/zigbee-thread-forum/1256923/lpstk-cc1352r-hdc2080-returns-zero-only-with-i2ctmp-example

器件型号:LPSTK-CC1352R
主题中讨论的其他器件:HDC2080TMP116

尊敬的专家:

我已经尝试使用 i2ctmp 示例从 HDC2080读取温度和湿度值、但我只得到0。 我已将我的代码与 syscfg 文件共享给大家参考、请检查并指出我犯的错误。

e2e.ti.com/.../i2ctmp.c

此致

苏里亚

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

    i2ctmp 示例用于 TMP 传感器。 如果您使用 HDC2080、我认为您需要修改源代码才能使其正常工作。

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

    谢谢回复、是的、我知道我更改了器件地址和其他设置。 我不知道该怎么办。" 我分享了串行日志作为参考。

    启动 i2ctmp 示例

    I2C 已初始化!

    检测到具有从器件地址0x41的 TMP116传感器
    I2C 从器件地址0x40未确认!

    采样使用最后一个已知的传感器。
    样本0:-40.0000 (C)、0.0000
    样本1:-40.0000 (C)、0.0000
    样本2:-40.0000 (C)、0.0000
    样本3:-40.0000 (C)、0.0000
    样本4:-40.0000 (C)、0.0000
    样本5:-40.0000 (C)、0.0000
    样本6:-40.0000 (C)、0.0000
    样本7:-40.0000 (C)、0.0000
    样本8:-40.0000 (C)、0.0000
    样本9:-40.0000 (C)、0.0000
    样本10:-40.0000 (C)、0.0000
    样本11:-40.0000 (C)、0.0000
    样本12:-40.0000 (C)、0.0000
    样本13:-40.0000 (C)、0.0000
    样本14:-40.0000 (C)、0.0000
    样本15:-40.0000 (C)、0.0000
    样本16:-40.0000 (C)、0.0000
    样本17:-40.0000 (C)、0.0000
    样本18:-40.0000 (C)、0.0000
    样本19:-40.0000 (C)、0.0000
    I2C 已关闭!

    此致

    Surya.

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

    请尝试访问 https://sunmaysky.blogspot.com/2016/02/basic-example-to-use-hdc1080-on-cc2650.html 。 HDC2080应该类似。

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

    我尝试了链接、我收到了器件 ID 和制造商 ID、但温度和湿度仍然为零、请检查我的代码和串行日志。

    对于(采样= 0;采样< 5;采样++)
    {
    txBuffer[0]=0x00;
    i2cTransaction.slaveAddress=0x41;//HDC_ADDR;
    i2cTransaction.writeCount = 0;
    i2cTransaction.readBuf = rxBuffer;
    i2cTransaction.ReadCount = 4;
    如果(I2C_transfer (i2c、&i2cTransaction))
    {
    /*
    *从收到的数据中提取 C 级;
    *参见 TMP 传感器数据表
    */
    temperature = rxBuffer[0];
    temperature =(temperature << 8)|(rxBuffer[1]);
    display_printf (display、0、0、"\n data OK:0x%x 0x%x"、rxBuffer[0]、rxBuffer[1]);


    //温度*= 0.0078125;
    浮点 f =温度;
    f =((f * 165.0f)/ 65536.0f)- 40.0f;

    int16_t HUMIDITY = rxBuffer[2];
    HUMIDITY =(HUMIDITY << 8)| rxBuffer[3];
    浮点 H =湿度;
    H =(H/65536.0)* 100.0;

    display_printf (display、0、0、"样本%u:%0.2f (C)、%0.2f "、样本、f、H);

    否则
    {
    i2cErrorHandler (&i2cTransaction、display);

    串行日志!!!!!!

    启动 i2ctmp 示例

    I2C 已初始化!


    制造编号:4954

    器件 ID:D07
    检测到具有从器件地址0x41的 TMP2080传感器
    I2C 从器件地址0x40未确认!

    采样使用最后一个已知的传感器。

    数据正常:0x0 0x0
    样本0:-40.0000 (C)、0.0000

    数据正常:0x0 0x0
    样本1:-40.0000 (C)、0.0000

    数据正常:0x0 0x0
    样本2:-40.0000 (C)、0.0000

    数据正常:0x0 0x0
    样本3:-40.0000 (C)、0.0000

    数据正常:0x0 0x0
    样本4:-40.0000 (C)、0.0000
    I2C 已关闭!

    此致

    苏里亚

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

    请分享 I2C 总线上发生的事件的逻辑分析仪图。 然后、掌握 HDC2080知识的人可以验证您是否与传感器正确通信。

    Siri

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

    尊敬的 Siri:

    我已经将我的 DSO- Hantek DSO5102P 输出作为您的参考、目前我使用的是 CC1352-Sensor 标签模块和内置的 HDC 传感器。

    蓝色为 CLK

    黄色表示数据

    此致

    苏里亚

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

    默认情况下、禁用自动测量模式(AMM)。 复位时 RH 和温度寄存器也为零。 您必须在配置寄存器中选择一个 AMM、或在 测量配置寄存器中触发单个测量。

    来自 HDC2080.c dev.ti.com/.../index.html

    /*
     *  ======== HDC2080_read ========
     *  Read temperature and humidity registers
     */
    void HDC2080_read(HDC2080_Handle sensor, uint32_t result[])
    {
        uint8_t txBuf[2];
        uint8_t rxBuf[4] = {0};
    
        /* If AMM is disabled trigger conversion */
        if (!(sensor->config & HDC2080_CONFIG_AMM_MASK)) {
            /* Reset AMM to start measurement */
            txBuf[0] = HDC2080_MEAS_CONFIG;
            txBuf[1] = sensor->measConfig | HDC2080_MEAS_CONFIG_MEAS_TRIG_START;
            mcu_i2cTransfer(sensor->busId, sensor->devAddr, txBuf, 2, NULL, 0);
    
            /* Wait for conversion to complete */
            mcu_msWait(sensor->convWaitHum);
        }
    
        /* Read registers, LOW and HIGH bytes */
        txBuf[0] = HDC2080_TEMP_LOW;
        mcu_i2cTransfer(sensor->busId, sensor->devAddr, txBuf, 1, rxBuf, 4);
    
        result[0] = (uint16_t)rxBuf[1] << 8 | rxBuf[0];
        result[1] = (uint16_t)rxBuf[3] << 8 | rxBuf[2];
    }

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

    您好,

    感谢您的回复,下面这行我找不到  sensor->measConfig 值,请帮助查找该值,并且我已按照您的建议修改了代码,请检查并告诉我这是否可以...

    txBuf[1]= SENSOR->measConfig | HDC2080 _MEAS_CONFIG_MEAS_TRIG_START;

    //#define HDC2080_MEAS_CONFIG 0x0FU
    //#define HDC2080_MEAS_CONFIG_MEAS_TRIG_START 0x01U
    
    txBuffer[0] =0x0F;
    txBuffer[1] =0x01;
    i2cTransaction.slaveAddress=0x41;//HDC_ADDR;
    i2cTransaction.writeCount = 2;
    i2cTransaction.readBuf = rxBuffer;
    i2cTransaction.readCount = 0;
    if (I2C_transfer(i2c, &i2cTransaction))
    {
        Display_printf(display, 0, 0, "RESET_AMM_OK");
    }
    
    txBuffer[0] =0x00;
    i2cTransaction.slaveAddress=0x41;//HDC_ADDR;
    i2cTransaction.writeCount = 1;
    i2cTransaction.readBuf = rxBuffer;
    i2cTransaction.readCount = 4;
    if (I2C_transfer(i2c, &i2cTransaction))
    {
    /*
    * Extract degrees C from the received data;
    * see TMP sensor datasheet
    */
    temperature = rxBuffer[0] ;
    temperature = (temperature << 8) | (rxBuffer[1]);
    Display_printf(display, 0, 0, "\n DATA OK: 0x%x 0x%x", rxBuffer[0], rxBuffer[1]);
    
    
    //temperature *= 0.0078125;
    float f =temperature;
    f = ((f * 165.0f) / 65536.0f) - 40.0f;
    
    int16_t humidity = rxBuffer[2];
    humidity = (humidity << 8) | rxBuffer[3];
    float H = humidity;
    H = (H/65536.0) * 100.0;
    
    Display_printf(display, 0, 0, "Sample %u: %0.2f (C), %0.2f ", sample, f,H);
    }
    此致
    苏里亚
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我提供的链接提供了完整的驱动程序源代码。 这只是一个展示需要延迟的读取操作的片段。

    https://dev.ti.com/sysconfig/index.html?product=ascstudio&module=/ti/sensors/humiditysensor/HDC2080

    谢谢。

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

    每次读取测量之前,请确保在地址0x0F 测量配置中将位0 (MEAS_TRIG )写入1。 我在 LPSTK-CC1352R 上对其进行了测试、我可以 从 HDC2080成功读取温度和湿度测量值、而不会出现任何问题。

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

     

    您能否共享配置和读取代码部分???

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

    请尝试参阅 LPSTK-CC1352R/HDC2080测量

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

    您好,

    感谢链接我会检查,让你知道结果...

    此致

    苏里亚

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

    大家好!

    感谢您的全力支持、

    我从 HDC2080获得该值、  

    此致

    苏里亚