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.

[参考译文] ADS124S08EVM:ADS124S08 EVM 板与 Arduino UNO 之间存在连接问题

Guru**** 2582155 points
Other Parts Discussed in Thread: ADS124S08

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

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/803082/ads124s08evm-interfacing-problem-with-ads124s08-evm-board-to-arduino-uno

器件型号:ADS124S08EVM
主题中讨论的其他器件:ADS124S08

您好、SIR/MAA 是、

实际上、我想将 ADS124S08 ADC 与 Arduino UNO 连接。 首先、我通过短接 JP1跳线禁用了 Tiva 处理器、现在我已将 J3的硬件侧 SPI 引脚连接到 Arduino UNO 、而我的输入侧硬件是 J8配置的应变片

SCLK =13;

MOSI =11;

MISO = 12;

起始= 6;

RESET=7;

CS=4;

代码如下所示

#include
#include
#define start 6.
#define RESET 7
const int CS = 4;
int stat;
int stat1;
int stat2;
int stat3;
SPI 设置设置1 (4000000、MSBFIRST、SPI_MODE1);  
void setup(){
SPI.begin();
引脚模式(CS、输出);
引脚模式(RESET、输出);
引脚模式(启动、输出);
digitalWrite (重置,高电平);  
Serial.begin(115200);
SPI.beginTransaction(settings1);
digitalWrite (CS、low);
digitalWrite (start、low);
void loop(){
for (int i=0;i>=0;i++)
if (i=0){
SPI.transfer (0x42);// WREG 寄存器地址
SPI.transfer (0x02);// WREG 字节编号-1
SPI.transfer (0x24);// WREG 写入 AIN2-AIN4
SPI.transfer (0x07);//(PGA 增益=128)
SPI.transfer (0x1E);//数据速率为4000 SPS
SPI.transfer (0x08);//开始转换命令
delayMicroseconds (1000);
其他
//Serial.println ("开始转换");
SPI.transfer (0x12);//RDATA 命令
delayMicroseconds (1000);
STAT = SPI.transfer();
stat1= spi.transfer();
STAT2= SPI.transfer();
serial.println ("ADC 输出");
serial.print(stat);
serial.print ("\t");
serial.println (stat1);
serial.print ("\t");
serial.print (stat2);
serial.print ("\n");
spi.endTransaction();
因此、当我将硬件和 SPI 引脚连接到 Arduino UNO 时、我无法在 Arduino UNO 的串行监视器上获得任何 ADC 输出。我仅获得零输出。 请帮助我完成此操作。

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

    确保 EVM 和 UNO 之间存在接地连接。 此外、验证 RESET 引脚是否为高电平、并确保 MOSI 连接到有线 SDI 的 J3引脚、MISO 连接到标记为 SDO 的引脚。

    我建议您通过在寄存器被写入后读回它们来验证通信是否按预期工作、并使用示波器的逻辑分析仪监控通信。 您可能还需要在命令之间切换 CS、以确保器件不会卡在奇怪的状态。 例如、在将 RESET 引脚设置为高电平之后、您不会给出任何延迟。 RESET 引脚变为高电平后、必须在 SCLK 的第一个边沿之前等待至少4096个 tCLK 周期(最小1ms)(请参阅 ADS124S08数据表第14页 RESET 引脚下的第7.6节)。 如果在延迟时间完成之前进行通信、则可能会导致通信损坏。

    我不确定我是否遵循您的'loop'代码。 您有一个 for 循环从未有结束点、并且您发出 start 命令的唯一时间是当 i=0时。 因此、如果通信损坏、器件可能永远不会正确解码 START 命令。 在循环的集合部分,发出 RDATA 命令,然后等待1000US。 在执行 RDATA 命令后没有理由等待、因为在读取数据之前将完成另外4个转换。

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

    尊敬的 Bob:

    感谢您的解释。 实际上、我也更改了代码、正如您说过 的、我错误的循环解压、我也更改了。 我还提供了 RDATA 命令后的延迟。 但是、当我在 Arduino 上载代码时、我在串行监视器上观察到只有3位数据、而我们的 ADC 为24位、因此 其范围应为0至2^23、但数据介于0至255之间。 我的代码如下:

    #include

    #include

    #define start 6.

    #define RESET 7

    const int CS = 4;

    int stat;

    int stat1;

    int stat2;

    SPI 设置设置1 (4000000、MSBFIRST、SPI_MODE1);

    void setup(){

    SPI.begin();

    引脚模式(CS、输出);

    引脚模式(RESET、输出);

    引脚模式(启动、输出);

    digitalWrite (重置,高电平);

    延迟(1000);

    Serial.begin(9600);

    SPI.beginTransaction(settings1);

    digitalWrite (CS、low);

    digitalWrite (start、low);

    void loop(){

    for (int i=0;i<=5;i++)

    if (i=0){

    SPI.transfer (0x42);// WREG 寄存器地址

    SPI.transfer (0x02);// WREG 字节编号-1

    SPI.transfer (0x24);// WREG 写入 AIN2-AIN4

    SPI.transfer (0x07);128增益

    SPI.transfer (0x1E);//数据速率为4000 SPS

    SPI.transfer (0x12);//RDATA 命令

    delayMicroseconds (1000);

    其他

    SPI.transfer (0x08);//开始转换命令

    STAT = SPI.transfer (0);//从 MISO 获取数据

    serial.println (stat);

    spi.endTransaction();

     

     

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

    您好、Sushmita、

    请参阅下面我的评论。  您似乎交换了 RDATA 和 START 命令。  您还需要确保在读取结果之前等待每次转换完成。

    此致、

    Bob B

    [引用用户="Sushmita Chaudhary"]

    尊敬的 Bob:

    感谢您的解释。 实际上、我也更改了代码、正如您说过 的、我错误的循环解压、我也更改了。 我还提供了 RDATA 命令后的延迟。 但是、当我在 Arduino 上载代码时、我在串行监视器上观察到只有3位数据、而我们的 ADC 为24位、因此 其范围应为0至2^23、但数据介于0至255之间。 我的代码如下:

    #include

    #include

    #define start 6.

    #define RESET 7

    const int CS = 4;

    int stat;

    int stat1;

    int stat2;

    SPI 设置设置1 (4000000、MSBFIRST、SPI_MODE1);

    void setup(){

    SPI.begin();

    引脚模式(CS、输出);

    引脚模式(RESET、输出);

    引脚模式(启动、输出);

    digitalWrite (重置,高电平);

    延迟(1000);//[BOB]此延迟必须足够长、以便器件在开始任何通信之前启动;如果延迟是指每个计数1ms、则延迟将足够。

    Serial.begin(9600);

    SPI.beginTransaction(settings1);

    digitalWrite (CS、low);

    digitalWrite (start、low);

    void loop(){

    for (int i=0;i<=5;i++)

    if (i=0){

    SPI.transfer (0x42);// WREG 寄存器地址

    SPI.transfer (0x02);// WREG 字节编号-1

    SPI.transfer (0x24);// WREG 写入 AIN2-AIN4

    SPI.transfer (0x07);128增益

    SPI.transfer (0x1E);//数据速率为4000 SPS

    SPI.transfer (0x12);//RDATA 命令[BOB]由于两个原因、此命令毫无意义。  一个是尚未进行转换、第二个原因是命令未完成。  RDATA 命令后跟从器件读取的3字节数据。  本应该在此处发送的是用于启动转换的 START 命令(0x08)。  此处的命令应为:

    SPI.transfer (0x08);//开始转换命令

     

    delayMicroseconds (1000);

    其他

    spi.transfer (0x08);//开始转换命令[BOB]在此处启动转换、但没有时间完成转换、因此此时从器件读取的任何数据都将毫无意义。  在这里、您应该已经发出 RDATA 命令来读取数据、然后发出3个字节的 NOP 来检索数据。  因此、您在代码中交换了 START 和 RDATA 命令。  此外、由于您不使用 CS、因此未完成上一条命令、因此这实际上是 RDATA 命令的第一个检索字节。  当 CS 保持低电平时、应使用 SPI 超时功能、该功能通过将系统控制寄存器(0x09)中的 TIMEOUT 位设置为1来启用。  这将允许在超时周期后取消重置 SPI 接口的不完整命令(ADS124S08数据表第63页的第9.5.1.6节)。

    命令应为:

    SPI.transfer (0x12);//RDATA 命令  

    STAT = SPI.transfer (0);//从 MISO [BOB]获取数据原始 RDATA 命令仍然不完整,因此这实际上是 ADS124S08的中间字节3。  命令的其余部分应为:

    STAT =(stat<<8)| SPI.transfer (0);//使用 RDATA 命令、第一次保存到 stat 是 MSB、这是中字节

    STAT =(stat<<8)| spi.transfer (0);//使用 RDATA 命令、save to stat 包括 LSB、它现在是32...no的24位、需要负值的符号扩展。

    //在此处添加符号扩展代码以实现负值

    serial.println (stat);//[Bob]由于您在原始代码中只捕获1个字节,因此您只传输一个字节。  当'stat'被声明为整数时、您还必须将24位二进制补码结果符号扩展到32位。

    delayMicroseconds (250);// [Bob]您还需要一个额外的延迟、以允许下一个转换周期结束

    spi.endTransaction();

     

     

    [/报价]

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

    尊敬的 Bob:

    感谢您的帮助。

    我已经按照您的建议进行了更改、但我没有在转换期间更改 CS 位、而是将超时位1设为低电平、因此当我将 CS 位永久置为低电平时、它会很重要。

    我得到的满量程读数为2补码(8388607、即6HX 中的7FFFFF)、但当我将负载放在皮肤摩擦传感器上时、我的输出保持满量程值不变、因为负载在变化。

    此致

    Sushmita

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

    您好、Sushmita、

    您可以将原理图发送给我吗?  您能否验证 DRDY 是否正在切换并发出转换结束信号?  您能告诉我您使用什么作为参考吗?  您的配置寄存器设置是什么?

    谢谢、

    Bob B

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

    尊敬的 Bob:

    我的代码如下所示、

    #include

    #include

    #define start 6.

    #define RESET 7

    #define CS 4.

    long signed int stat;

    SPI 设置设置1 (4000000、MSBFIRST、SPI_MODE1);

     

    void setup(){

    SPI.begin();

    引脚模式(CS、输出);

    引脚模式(RESET、输出);

    引脚模式(启动、输出);

    digitalWrite (重置,高电平);

    延迟(5);//

    Serial.begin(9600);

    SPI.beginTransaction(settings1);

    digitalWrite (CS、low);

    digitalWrite (start、low);

     

    void loop(){

    for (int i=0;i<10;i++)

    if (i=0){

    SPI.transfer (0x42);// WREG 寄存器地址

    SPI.transfer (0x07);// WREG 字节编号-1

    SPI.transfer (0x24);// WREG 写入 AIN2-AIN4

    SPI.transfer (0x07);//128增益

    SPI.transfer (0x1E);//数据速率为4000 SPS

    SPI.transfer (0x10);//REF

    SPI.transfer (0x00);// IDAC MAG

    SPI.transfer (0xFF);// IDAC 多路复用器

    SPI.transfer (0x00);// Vbias

    SPI.transfer (0x14);//超时位 second =1,默认值为10h

    SPI.transfer (0x08);//开始转换命令

    延迟(1);

    其他

    SPI.transfer (0x12);//RDATA 命令

    STAT = SPI.transfer (0);

    STAT =(STAT<<8)| SPI.transfer (0);

    STAT =(STAT<<8)| SPI.transfer (0);

    serial.print(stat);

    serial.print ("\n");

    delayMicroseconds (250);//需要一个额外的延迟以使下一个转换周期结束

    //digitalWrite (CS、HIGH);

    spi.endTransaction();

    但是 、转换不需要 DRDY 引脚、这就是我未将其包含在代码中的原因。

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

    您好、Sushmita、

    您的代码似乎正常、但在某种程度上、您需要验证您的通信以及设备是否正常运行。  使用示波器或逻辑分析仪将帮助您确定通信是否正确。  您不能短切此步骤。  请将您的通信照片发送给我。  使用示波器或分析器检查 DRDY、以确保其以您编程到器件的数据速率进行脉冲。  如果没有、则表示您缺少电源、所需的引脚设置不符合要求(可能存在接线问题)、或者您未正确与器件通信。

    此致、

    Bob B

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

    尊敬的 Bob:

    有时数据会发生变化、有时会显示满量程读数、这可能是相关问题 、以及我们如何确保特定数字值正确与否?

    明天我将向您发送示波器图。

    谢谢

    此致

    Sushmita