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.

[参考译文] TMS570LS3137:温度传感器(tmp101nA/3k)

Guru**** 2390745 points
Other Parts Discussed in Thread: HALCOGEN, CODECOMPOSER, TMP101, ADS1115, TMS570LS1224, TMS570LS3137

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1421152/tms570ls3137-temperature-sensor-tmp101na-3k

器件型号:TMS570LS3137
主题中讨论的其他器件:HALCOGENCODECOMPOSERTMP101ADS1115TMS570LS1224、

工具与软件:

有人可以帮助我吗?我正在尝试从 tmp101na 中读取温度。我的代码卡在 readTemperature 函数中的第一个 i2c 发送为什么它停止运行我正在使用 halcogen 和 codecomposer 来编写我提供的代码请查看并告诉我问题  

/*用户代码 begin (0)*/
/*用户代码结束*/

/*包含文件*/

#include "sys_common.h"

/*用户代码 begin (1)*/
#include "i2c.h"
#include "sci.h"
#include "sys_core.h"
#include "stdio.h"

uint16_t delay=0;
/*用户代码结束*/

/**@fn void main (void)
*@简要应用程序主函数
*@注意此函数默认为空。
*
*此函数在启动后调用。
*用户可以使用此函数来实现应用程序。
*/

/*用户代码 begin (2)*/

//从 TMP101读取温度数据的函数
uint16_t readTemperature (void)

uint8_t tempData[2];
uint16_t 温度= 0;
uint8_t configData[2];

configData[0]= 0x01;//配置寄存器
configData[1]= 0x60;//配置字节(对于12位分辨率、R1=1、R0=1)
//将配置写入 TMP101
i2cSetSlaveAdd (i2cREG1、0x48);
i2cSetDirection (i2cREG1、I2C_transmitter);
i2cSetCount (i2cREG1、2);
i2cSetMode (i2cREG1、I2C_MASTER);
i2cSetStop (i2cREG1);
i2cSetStart (i2cREG1);//发送 I2C 启动条件
i2cSend (i2cREG1、3、configData);
while (i2cIsBusBusy (i2cREG1)= true);
while (i2cIsStopDetected (i2cREG1)=0);
i2cClearSCD(i2cREG1);
for (delay=0;delay<1000;delay++);

//开始与 TMP101通信以选择温度寄存器
while (i2cIsMasterReady (i2cREG1)!= true);
i2cSetSlaveAdd (i2cREG1、0x48);
i2cSetDirection(i2cREG1,I2C_transmitter );
i2cSetCount (i2cREG1、1);
i2cSetMode (i2cREG1、I2C_MASTER);
i2cSetStop (i2cREG1);
i2cSetStart (i2cREG1);//发送 I2C 启动条件
i2cSendByte (i2cREG1、0x00);//设置指向温度寄存器的指针
while (i2cIsBusBusy (i2cREG1)= true);
while (i2cIsStopDetected (i2cREG1)=0);
i2cClearSCD(i2cREG1);
for (delay=0;delay<1000;delay++);

while (i2cIsBusBusy (i2cREG1)!= true);
i2cSetSlaveAdd (i2cREG1、0x48);
i2cSetDirection (i2cREG1、I2C_RECEIVER);
i2cSetCount (i2cREG1、2);
i2cSetMode (i2cREG1、I2C_MASTER);
i2cSetStop (i2cREG1);
i2cSetStart (i2cREG1);//发送 I2C 启动条件
i2cReceive (i2cREG1、tempData);
while (i2cIsBusBusy (i2cREG1)= true);
while (i2cIsStopDetected (i2cREG1)=0);
i2cClearSCD(i2cREG1);
for (delay=0;delay<1000;delay++);

//合并两字节的温度数据
温度=(tempData[0]<< 8)| tempData[1];
温度>>= 4;//右移可针对12位数据格式进行调整

回流温度;
}

/*用户代码结束*/

int main (void)

/*用户代码 begin (3)*/
//初始化系统和 I2C 通信
i2cInit ();
sciInit();
while (1)

//读取并显示温度数据
uint16_t temperature = readTemperature ();
uint8_t tempBytes[2];

//将16位温度值拆分为两个8位值
tempBytes[0]=(uint8_t)(temperature >> 8);//高位字节
tempBytes[1]=(uint8_t)(temperature & 0xFF);//低位字节

//通过 SCI 发送这两个字节
sciSend (scilinREG、sizeof (tempBytes)、tempBytes);
//如有必要、添加延迟
}

/*用户代码结束*/
}


/*用户代码 begin (4)*/
/*用户代码结束*/

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

    尊敬的 Aditya:

    您是否连接了 i2c 数据线路和 clk 线路上的外部上拉电阻器?

    如果有、它们的值是什么?

    您对温度传感器上的 ADD0线路执行了什么操作? 当您在代码中将从地址用作0x48时、您应将该行接地。

    如果我们将这一行悬空、那么它可能不起作用。

    ——
    谢谢、此致、
    Jagadish。

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

    Yeh 确实在 halcogen 中设置了上拉电阻器

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

    尊敬的 Aditya:

    yeh did 在 halcogen 中设置了上拉电阻器

    这没什么用!

    没有外部上拉电阻器、I2C 将无法工作。

    确保在 SDA 和 SCL 线路上连接外部上拉电阻器。 上拉电阻既不应过高也不应太小、最好在2.2K 到4.7K 之间。  

    即使您也无法使用内部上拉电阻、因为内部上拉电阻太弱、无法用于 I2C。 它们的强度足以防止引脚悬空。  必须为 I2C 信号提供外部上拉。

    因此、请在 I2C 线路和电路板上的3.3V 电源之间连接上拉电阻。

    有关更多详细信息、您可以参考以下主题、此处还有客户最初在没有上拉电阻的情况下尝试、发现通信无法正常工作、最后他使用2.2K 连接了外部上拉电阻、然后发现通信正常工作。

    (+) TMS570LS3137:I2C 无法正常工作-基于 Arm 的微控制器论坛-基于 Arm 的微控制器- TI E2E 支持论坛

    ——
    谢谢、此致、
    Jagadish。

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

    好的,我会尝试,但相同的代码当我尝试使用 tms570ls1224和 ADS1115它的工作也需要上拉电阻器,所以我确实设置在 halcogen 它的工作正常你审查我的代码是正确的还是不正确??

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

    尊敬的 Aditya:

    您查看过我的代码是否正确?

    我验证了您的代码、但我看不到任何问题。

    我从未使用 TMS570LS1224测试 i2c、但如果您在 TMS570LS3137上验证以下线程:

    (+) TMS570LS3137:I2C 无法正常工作-基于 Arm 的微控制器论坛-基于 Arm 的微控制器- TI E2E 支持论坛

    同样的问题也是、代码卡在 i2c API 中、然后在放置阻值为2.7K 欧姆的外部上拉电阻器后得到解决。

    ——

    谢谢、此致、
    Jagadish。