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.

[参考译文] ADS1220:ADS1220 RDATA 命令错误

Guru**** 2390735 points
Other Parts Discussed in Thread: ADS1220

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

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/963257/ads1220-ads1220-rdata-command-error

器件型号:ADS1220

您好!
需要支持才能使用 ADS1220读取温度。

我在项目中使用 ADS1220读取热电偶温度。


这是我用来写入的命令

uint8_t buffer[3]={0、0、0};

Buffer[0]= 0x10;//RDATA 命令
SPI_intf.Write (reinterpret_cast (&buffer[0])、0x03);


这是我使用 RDATA 命令读取数据时使用的命令

SPI_intf.read (reinterpret_cast (&buffer[0])、0x03);

但我在读取时没有得到正确的值。

这些是我可以读取的值(buff [0]= 0x23、buff [1]= 0x40 buff [2]=0x80)
但对于25度温度测量、近似值应为 buff [0]= 0x03且 buff [1]= 0x20


那么、我是否在这里遗漏了任何东西(任何其他设置) 、还想知道上面的命令(读取和写入) 是正确的?

此致、

Anil

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

    尊敬的 Anil:

    欢迎来到 E2E 论坛!  SPI 通信将全双工检索数据。  在您写入或传输数据的同时、缓冲区还将接收数据。  因此、发送 RDATA 命令时、实际传输的数据为4个字节、实际数据为最后3个字节。  因此、不清楚代码函数的工作方式、但您需要确保恢复正确的内容。  我器件上的猜测是开始在 buff [1]而不是 buff [0]处读取数据。  另外、在传输时、请确保传输的是4个字节、而不仅仅是3个字节。

    我强烈建议您将示波器或逻辑分析仪连接到 SPI 通信信号、并验证您在代码中收集的是实际传输的信号。

    如果仍有问题、请向我发送正在使用的寄存器设置和通信图。

    此致、

    Bob B

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


    尊敬的 Bob:
    感谢您的答复和时间。

    这些是我的寄存器配置

    多路复用设置:

    uint8_t buffer[]={0、0};
    缓冲器[0]= 0x40;
    Buffer[1]= 0x30<< 4;//连接到 AN1和 AN2

    SPI_intf.Write (reinterpret_cast (&buffer[0])、0x02);

    设置温度传感器:

    uint8_t buffer[]={0、0};
    缓冲器[0]= 0x44;
    缓冲区[1]= 0x02;

    SPI_intf.Write (reinterpret_cast (&buffer[0])、0x02);

    转换模式趋稳:

    uint8_t buffer[]={0、0};
    Buffer[0]= 0x44;
    缓冲区[1]= 0x04;

    SPI_intf.Write (reinterpret_cast (&buffer[0])、0x02);

    温度读数:

    uint8_t buffer[3]={0、0、0};
    uint32_t t32;
    Buffer[0]= 0x10;//RDATA 命令
    ERR = SPI_intf.Write (reinterpret_cast (&buffer[0])、0x04);

    if (err.IsOk())(如果(err.IsOk())

    ERR = SPI_intf.read (reinterpret_cast (&buffer[0])、0x03);


    T32 =(uint32_t)缓冲器[1];
    T32 <<= 8U;
    t32 |=(uint32_t) buffer[2];

    if ((t32 & 0x00008000U)!= 0)//进行负温度计算

    * rtntemp = static_cast (~(t32-1)*(-0.03125F));

    其他

    * rtntemp = static_cast (T32 * 0.03125F);

    我在这里有3个问题

    1)我的配置是否正确?

    2)为什么我没有在缓冲区[1]和缓冲区[2]中得到正确的值

    3)想知道我的温度转换对于负温度是否是正确的 ESP

    此致、

    Anil

    此致、

    Anil

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

    尊敬的 Anil:

    您是否在写入配置寄存器后尝试读回它们?  我认为这将很好地表明您的沟通是否正常。  我还建议返回并查看 ADS1220数据表中的命令结构。

    最好使用示波器或逻辑分析仪查看数据、以验证您认为与 ADS1220通信的内容实际上是什么。

    1)我的配置是否正确? [BOB]不、您比较接近、但并不完全。  例如、对于寄存器0、您将发送0x40 (0x30<<4)、这不是 AIN1/AIN2、而是发送0x40 0xC0、该0xC0将设置为外部基准输入的基准监控器。  在以下语句中、您可以使用0x44 0x02后跟0x44 0x04写入寄存器1。  第一个命令将温度传感器设置为开、但下一个命令会覆盖第一个命令并将配置设置为连续模式。  因此、寄存器1的第二个命令将开启内部温度传感器测量。  如果您希望同时打开温度传感器并以连续模式运行、应发送0x44 0x06。

    2)为什么我没有在缓冲区[1]和缓冲区[2]中获得正确的值,您没有得到预期的代码,因为您没有正确配置器件。   

    3)想知道我的温度转换是否是针对负温度的 ESP [BOB]、我建议您查看有关内部温度传感器的数据表信息。   温度传感器在数据内为14位左对齐。  ADS1220为24位、但您似乎是通过短周期和仅读取最高有效2个字节来读取结果。  因此,在某些时刻捕获转换数据后,您需要将结果右移2 (>>2)至14位。  负值也存在问题。  反转时、将反转整个32位整数。  我要使用的方法是将温度结果保存为一个短有符号整数(16位)、然后>> 2表示一个14位值。  该值应该已经为正或负、无需进一步操作。  将结果乘以系数即可。

    此致、

    Bob B

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

    尊敬的 Bob:

    再次感谢您的回复。

    你是对的、我有错的地方。 现在、我更正了代码、将多路复用器配置为0x40 0x30 (用于 AN1和 AN2)、然后配置为0x44 0x06进行选择

    转换模式和温度传感器模式。  我将回读我的值以进行交叉检查。(仍然需要执行此部分)

    现在、如果我从 RDAA 读取缓冲区值->它的读数为  

    buff1]、buff[2] = a3、63
    buff1]、buff[2] = A2、fb
    buff1]、buff[2] = a3、2f
    buff1]、buff[2] = A3、bf
    buff1]、buff[2] = A3、db

    对于25度值、我应该将 buff [1]设置为0x09或0x10

    因此、我仍然无法从传感器读取正确的值。  

    此致、

    Anil

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

    尊敬的 Anil:

    我始终编写代码。  我无法始终从读取代码或调试器中的值的响应中得知它们是正确的。  您需要使用示波器或逻辑分析仪等合适的工具、以确保与 ADS1220的通信正确、并且当您从 ADC 读回数据时、示波器图中显示的结果与代码中显示的数据匹配。

    今天早些时候、我看到一篇文章、其中客户确定他们的代码是正确的、而事实证明、SPI 通信显示他们使用了错误的 SPI 相位、因此数据在读取时在同一个边沿上发生变化。  找到这些问题的唯一方法是使用适当的工具。  向我发送您通信的示波器或逻辑分析仪照片、我可以提供进一步的帮助。

    此致、

    Bob B