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.

[参考译文] TMP126-Q1:集成问题、使用两个单独的器件读取奇怪的结果。

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

https://e2e.ti.com/support/sensors-group/sensors/f/sensors-forum/1103727/tmp126-q1-integration-trouble-reading-strange-results-with-two-separate-devices

器件型号:TMP126-Q1
主题中讨论的其他器件: TMP126

你(们)好。

我最近在一些 PCB 上添加了 TMP126-Q1、但在尝试与其通信时、我收到了奇怪的值。  

在我的第一个过程中、我将布线布置到 FTDI 串行电缆 C232HM-EDHSL-0、 尝试使用 SPI 进行通信但是、随电缆提供的 DLL 仅提供读/写功能、而没有同步 传输选项、因此我认为 CS 可能在命令数据包和主机读取数据包之间重新变为高电平。 请参阅下面的"尝试":

然后、我尝试使用 Arduino nano、因为他们的 SPI 库似乎更易于使用。 我用 Josh Wyatt 的示例 作为基础、但收到了类似的结果-奇怪的读数与任何逻辑温度读数不匹配。 请参阅下面的"尝试":

我希望您可以查看并了解我为什么会获得这些奇怪的读数。 谢谢!

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

    您好、Anthony、

    请确认您已将控制器的输出连接到电阻器、并已将其与控制器的输入连接到 TMP126的 SIO、如此处所示。

    在 Arduino 尝试中、16MHz 速度太快。 TMP126的额定最大值为10MHz 限流电阻器将难以实现高速;我建议在500kHz 或不超过1MHz 的初始频率下进行测试。  

    由于组合输出、当您需要来自 TMP126的响应时、必须写入0xFF。 请将传输代码改回0xFF。

    我还建议使用逻辑分析仪或示波器来查看您的总线活动。  

    谢谢、

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

    你好、任-谢谢你的快速回答。 很抱歉、需要较多的手握。

    根据 图表的要求、我将10k 电阻器与来自 Arduino 的 MOSI 线路内联-但由于我认为初始测试不需要其中任何一个电阻器、因此不需要电压/接地和警报/电压之间的电阻器。

    我已将频率降至500kHz、并根据您的建议将两个写入值更改为0xFF、所有这些都是合理的。 现在它的反应更好、不仅是向我提供垃圾的 E0值、而且 还给我奇怪的读数。 因此、如果我写入0xFF、它将在拔下时按预期读回两个字节上的 FF、但在插入时读回7F 和 FF。

    考虑到我的设置所处的位置、SIO 很难进行探测、但在将示波器连接到 MOSI 和 MISO 引脚的情况下、它会产生以下图形:

    MOSI 信号从热敏电阻上拔出:

     

    MOSI 信号插入热敏电阻:

    从热敏电阻上拔下 MISO 信号:

    MISO  信号插入热敏电阻:

    从信号角度看、一切看起来都正常、只是没有获得预期的输入。

    以下是文本格式的代码、如果更适合您:

    #include

    unsigned char 字节1;
    unsigned char 字节2;
    //引脚排列
    #define CSpin 10 // ss
    #define DATAout 11 //MOSI
    #define datain 12 // mISO
    #define SCLK 13 //SCLK
    #define Alert 8 //状态1

    #define CSpin 10

    void setup(){
    //将您的设置代码放在这里,运行一次:
    PinMode (CSpin、OUTPUT);//将 CS/SS 设置为输出
    SPI.begin();//init SPI 库
    Serial.begin(9600);

    void loop(){
    //将主代码放在此处,重复运行:
    SPI.beginTransaction(SPISettings(500000、MSBFIRST、SPI_MODE0);//SPI 设置(speedMaximum、dataOrder、 和数据模式)、Nano 的最大频率为16MHz
    digitalWrite (CSpin、low);//set CS/SS LOW
    SPI.transfer (0x01);
    SPI.transfer (0x00);//地址
    字节1 = SPI.transfer (0xFF);
    字节2 = SPI.transfer (0xFF);

    digitalWrite (CSpin、HIGH);
    spi.endTransaction();

    float t126 =((((int16_t) byte1 << 8 | byte2)>> 2)* 0.03125;

    延迟(1000);

    serial.print ("byte1:");
    serial.print (字节1、十六进制);
    serial.print ("、字节2:");
    serial.print (字节2、十六进制);
    serial.print ("、temp:");
    serial.print (t126);
    serial.println("C");

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

    在发送0x010C 时、您能否确认收到0x0126? 这是器件 ID 寄存器、无论配置如何、应始终报告相同的值。

    谢谢、

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

    错误、即使将其更改为0x010C 并进行验证/上载、ERR 仍然只为两个字节获取 FF。

    我可以重新连接所有组件、但我很确定所有组件在硬件方面都是正确的。

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

    0xFF 响应表示 TMP126完全没有响应。 请使用示波器查找振铃。 您需要"放大"到更小的时间刻度、以查看时钟周期。 您可能需要添加串联电阻(~50欧姆)以阻止由布线引起的振铃。 由于 TMP126支持10MHz、它不会过滤高频噪声、并且会被它所感知的所有活动所迷惑。  

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

    在 Arduino 本身进行探测时、信号本身看起来有点混乱、但在将时钟速度减至100kHz 后、它看起来是一个相当清晰的信号:

    昨天、我与一些同事签订了合同、我们拆分了整个系统。 事实证明、我们被分配到具有错误引脚的不同外部器件、因此我们将 VCC 发送到 CLK、将 CLK 发送到警报、将 GND 发送到 VCC 等。然后、在我们基于连续性重新布线之后...太神奇了!

    由于 器件 ID 为0x2126、而不是0x0126、但当我尝试读取温度寄存器时、我会得到良好的读数、当您将拇指放在芯片上时、读数会增加/减少。

    很抱歉、当芯片开始出现问题时、我把这个兔子洞带下来。

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

    我很高兴您解决了您的问题。 事实上、我的 TMP126原型响应0x0126、而生产 TMP126将响应0x1126、而 TMP126-Q1响应0x2126。