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.

[参考译文] LAUNCHXL-CC2650:Sensor Controller Studio + I2C +温度传感器 SHT21

Guru**** 2553260 points


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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/580895/launchxl-cc2650-sensor-controller-studio-i2c-temperature-sensor-sht21

器件型号:LAUNCHXL-CC2650

我尝试在 Sensor Controller Studio 中使用温度传感器 SHT21。

代码:

i2cStart();

i2cTx (I2C_OP_WRITE | ALS_I2C_ADDR);//0x40<<1.
i2cTx (trig_T_measuring_HM);//0xe3
i2cStop();
fwDelayU (100、FW_DELAY_RANGE_100_MS);

i2cStart();
i2cTx (I2C_OP_Read | ALS I2C_ADDR);

if (state.i2cStatus = 0x0000){
U16结果 H;
U16结果 L;
U16 CRC;

i2cRxAck (resultH);
i2cRxAck (resultL);
i2cRxNack (CRC);

output.value =(resultH << 8)| resultL;

i2cStop();

有时(40%的样本)、它返回正确的值、有时(40%)- 0、有时(20%)-随机值。

已尝试播放延迟,RepeatedStart(),i2cStatus -运气不好。

Arduino 板上具有相同传感器的相同代码工作正常。

我出了什么问题?  

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

    您好、Rustem、

    • 您是否在 SDA 和 SCL 线路上添加了适当的上拉电阻器?
    • 您是否尝试过100kHz 和400kHz I2C SCL 频率?
    • 您是否评估了 Sensor Controller Studio 中的 I2C 光传感器项目?
    • 100us 延迟是否足够长?
      • 数据表中给出的 T TYP 测量时间在9-85ms 范围内。  
      • 您可以像上述示例中所做的那样设置计时器事件触发器、也可以只是增加延迟(fwDelayU (100000、FW_DELAY_RANGE_100_MS);
    • 也许可以尝试 触发 T 测量无保持主机1111’0011 (0xF3)?

    如果上述所有操作都失败、您可以将逻辑分析仪连接到 I2C 线路并捕获一些流量、以便进一步评估出什么问题?

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

    您好、Erik! 感谢您的快速回答!

    NoHoldMaster +增加的延迟解决了我的问题!

    工作代码:

    i2cStart();

    i2cTx (I2C_OP_WRITE | ALS_I2C_ADDR);//0x40<<1.

    i2cTx (trig_T_measurement);/0xf3

    i2cStop();

    fwDelayU (100000、FW_DELAY_RANGE_100_MS);

    i2cStart();

    i2cTx (I2C_OP_Read | ALS I2C_ADDR);

    if (state.i2cStatus = 0x0000){

    U16结果 H;

    U16结果 L;

    U16 CRC;

    i2cRxAck (resultH);

    i2cRxAck (resultL);

    i2cRxNack (CRC);

    output.value =(resultH << 8)| resultL;

    i2cStop();

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