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.

[参考译文] ADS1298:ADS1298 SPI

Guru**** 2551130 points
Other Parts Discussed in Thread: ADS1298

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

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/733372/ads1298-ads1298-spi

器件型号:ADS1298

您好,我无法 使用 SPI 协议从 ADS 1298 with Arduino 获取数据。

请帮帮我。

在下面、我连接了硬件和软件配置。。。

与 ADS 1298 ECGFE 板进行 Arduino 连接


J3.3 SCLK 连接到 Arduino 引脚13

J3.4 GND 连接到 Arduino 引脚 GND 公共。

J3.7 CS 补码连接到 Arduino 引脚10

J3.8重置连接到 Arduino 引脚7。

J3.11 DIN 连接到 Arduino 引脚11  

J3.13 DOUT 连接到 Arduino 引脚12  

J3.15 DRDY 连接到 Arduino 引脚3 (已编程)

J4.9电源为3.3V

J4.5连接到 Arduino GND

ADS 1298 (带 Arduino UNO)的软件代码。

#include "ADS1298.h"
#include "adsCMD.h"
#include 

int gMaxChan = 8;
//int gIDval = 0;
//int activeSerialPort = 0;
//const int kPIN_LED = 13;

void setup (){
使用命名空间 ADS1298;

pinMode (IPIn_CS、输出);
pinMode (PIN_START、输出);
引脚模式(IPIn_DRDY、输入);
引脚模式(IPIn_RESET、输出);

SPI.beginTransaction(SPISettings(16000000、MSBFIRST、SPI_MODE1));
SPI.begin();
// SPI.setBitOrder(MSBFIRST);
SPI.setClockDivider(SPI_CLOCK_DIV4);
// SPI.setDataMode(SPI_MODE1);
delay (100);

adc_send_command (SDATAC);
delay (10);
Serial.begin(9600);
adc_rreg (0x20);
while (Serial.read()>= 0){}
delay (200);
}

void loop ()
{
long buffer[50];
int incomingByte = 0;
static unsigned long tLast = 0;

如果(Serial.Available ()>0)
{
IncomingByte = Serial.Read();
}

if (millis ()-tLast < 500)
{
tLast =毫秒();
}
unsigned long tStart =毫秒();
for (int channel = 1;channel <= 8;channel++)
{
字节值[10];
Value[0]=(字节)(buffer[通道]>>8);
//value[1]=(字节)(缓冲区[通道]>>16);
//value[2]=(字节)(缓冲区[通道]>>8);
//value[3]=(字节)(缓冲区[通道]);

serial.println (值[0]);
//Serial.println (Value[1]);
//Serial.println (value[2]);
//Serial.println (value[3]);
}
} 
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Sagar、

    感谢您的发帖、欢迎加入论坛!

    您的引脚连接看起来正常、因此这可能是软件问题。 您能否确认您是否遵循数据表中的第10.1.1节"将器件设置为基本数据采集"?

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

    你好,先生。

    感谢您的回复。

    我能够获得 ID 值为0 (在我附加了此示例代码的下面)。

    ADS 1298正在与 Arduino 通信。但问题是我无法在串行监视器上获取特定通道数据。此外、我已查看建议的部分和论坛以了解 ADS 1298的基本数据捕获过程、并在软件中应用所有配置。但仍然无法获取通道数据。

    另外、我还有一个问题、就是所有8通道是否同时处于活动状态。如果是、Arduino UNO 板是否能够同时接收所有通道数据?

    是否有人能回答我的问题...

    #include "ADS1298.h"
    #include "adsCMD.h"
    #include 
    
    void setup(){
    使用命名空间 ADS1298;
    
    pinMode (IPIn_CS、输出);
    pinMode (PIN_START、输出);
    PinMode (IPIn_DRDY、输入);
    PinMode (IPIn_RESET、输出);
    
    SPI.begin();
    SPI.setBitOrder(MSBFIRST);
    SPI.setClockDivider(SPI_CLOCK_DIV4);
    SPI.setDataMode(SPI_MODE1);
    Serial.begin(115200);
    adc_send_command (SDATAC);
    delay (500);
    }
    
    void loop()
    {
    int ID;
    digitalWrite (IPIn_CS、low);
    spi.transfer (0x20);
    delayMicroseconds (10);
    spi.transfer (ID);
    delayMicroseconds (10);
    digitalWrite (IPIn_CS、HIGH);
    Serial.println (ID);
    延迟(100);
    } 

    这可能对我的项目有所帮助。

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

    很高兴能提供帮助!

    您不应为 ID 接收值0。 根据数据表的第9.6.1.1节、您应该会收到针对 ADS1298的010。

    如果是这种情况、我认为您的设置或早期沟通步骤中存在问题。 我将重点介绍如何正确接收 ID
    捕获数据。 Ryan 在下面的第一个帖子中很好地介绍了启动过程:

    e2e.ti.com/.../658195
    e2e.ti.com/.../631106

    探查您的电源、确保它们按预期运行。 发出额外的/reset 也可以解决此问题。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢您的回复。
    是否需要为 ADS 1298提供5V 电压以及3.3V 电压? 因为在数据表中、ADS 1298的最大 I/p 电压是
    3.6V (DVDD)(如上所述)
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    请回复我。
    这可能对我的项目有所帮助。我真的需要你的帮助。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Sagar、

    很抱歉我的答复有延误,我不在办公室。

    有两个电源、AVDD 和 DVDD。 您可以使用双极或单极配置。 请参阅数据表的第11节、电源建议和7.3建议运行条件。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢你的答复

    我按照数据表的说明连接电源。
    应用于

    J4.5 - GND - Arduino GND
    J4.9 - 3.3V - Arduino 3.3V
    J4.10 - 5V - Arduino 5V

    此外、我对 forum.it 中讨论的 J27跳线设置有疑问。是否确实需要?

    Tom Hendrick 的回答(e2e.ti.com/.../168648)

    CLKSEL 由 JP27控制。 如果引脚1-2上有分流器、CLKSEL = 0、并且需要使用外部调制器时钟。 这由评估板上的2.048MHZ 时钟提供(默认为)。 如果您打开 JP27 (完全移除跳线)、CLKSEL 引脚被拉高、ADS1298将从其内部振荡器运行。

    当我在逻辑分析仪软件上看到 SPI 配置时、SCLK 脉冲发生了变化。 这让我有点困惑。

    是否有任何其他方法可以检查 ADS 1298是否正在通过逻辑分析仪软件将数据传输到 Arduino?
    我对硬件连接感到困惑。

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

    我无法打开该论坛链接。
    我看不到 JP27控制时钟、您是指 JP23吗?

    您希望时钟源同步、以便正确处理数据。 这意味着 Arduino 和设备应共享相同的外部时钟源。

    SCLK、不是 CLK。 SCLK 是发送到器件以计时数据输出的内容、而 CLK 是控制器件时序的内容。

    尝试在 AVSS、JP20.2上放置 GND
    AVDD、JP2.2上为5V
    DVDD、JP19.1上为3.3V
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    大家好、很抱歉、我的侧边有延迟

    我想使用 ADS 1298的内部时钟、以便根据 ADS1298 ecgfe-PDK 的用户指南设置 JP24 (2-3)。对吗?

    根据您的建议、我将电源连接到了

    AVSS-JP20.2上的 GND

    AVDD-JP2.2上为5V

    DVDD-JP19.1上为3.3V

    但是、当我在 给定的测试点测量电源时、它会正确地提供3.3V 电压、但当我测量5V 电压时 、它会显示为零。

    然后、我像这样修改了电源连接

    J4.5 - GND

    J4.9 - 3.3V

    J4.10 - 5V

    当我在给定的测试点测试电源时、它会正确地为我提供3.3V 和5.0V、那么我认为电源问题可以解决吗?

    当 我在代码中存储时、ADS 1298是否能够传输数据@速率为1MHz (SPI_CLOCK DIV16);)?

    根据我的顾虑、硬件连接似乎是正确的、因此代码中存在问题。 我在这里上传我的代码。很长时间后我找不到我的代码中的更正。您能告诉我我我我的代码中的更正(用于捕获广告1298的基本 ID 并打印到 Arduino 的串行监视器)。

    #include "ADS1298.h"
    #include "adsCMD.h"
    #include

    int gMaxChan = 8;
    int gIDval = 0;
    int activeSerialPort = 0;


    void setup()

    使用命名空间 ADS1298;

    PinMode (IPIn_CS、输出);
    引脚模式(PIN_START、输出);
    引脚模式(IPIn_DRDY、输入);
    PinMode (IPIn_RESET、输出);

    digitalWrite (PIN_START、LOW);
    digitalWrite (IPIn_CS、高电平);
    延迟(500);

    SPI.begin();
    SPI.setBitOrder(MSBFIRST);
    SPI.setClockDivider(SPI_CLOCK_DIV16);
    SPI.setDataMode(SPI_MODE1);
    Serial.begin(115200);
    while (Serial.read()>=0){}
    uint8_t gMaxChan = adcSetup();
    if (gMaxChan = 0){
    while (1){
    serial.println ("ADC 错误");
    延迟(1000);



    serial.print ("ADC Detected has ");
    serial.print (gMaxChan);
    serial.print ("通道\n");
    gMaxChan = adcSetup();

    if (gMaxChan = 0){
    while (1){
    serial.println ("ADC 错误");
    延迟(1000);


    serial.print ("ADC Detected has ");
    serial.print (gMaxChan);
    serial.print ("通道\n");

    int8_t adcSetup()

    使用命名空间 ADS1298;

    digitalWrite (IPIn_RESET、HIGH);
    延迟(1000);
    digitalWrite (IPIn_RESET、LOW);
    delayMicroseconds (1);
    digitalWrite (IPIn_RESET、HIGH);
    delayMicroseconds (9);
    ADC_SEND_COMMAND (SDATAC);
    delayMicroseconds (5);

    ADC_wreg (CONFIG3、RLDREF_INT | PD_RLD | PD_REFBUF | CONFIG3_CONST);
    ADC_wreg (RLD_SENSP、0x01);
    ADC_wreg (RLD_SENSN、0x01);
    ADC_wreg (GPIO、0x00);

    ADC_wreg (CONFIG1、HIGH_RES_1k_SPS);
    ADC_wreg (CONFIG2、INT_TEST);
    adc_wreg (CH1SET、电极输入| GAIN_12X);
    对于(int i = 2;i <= 4;i++){
    ADC_wreg (CHnSET + I、PDN |短接);

    int IDval = adc_rreg (ID);

    void loop()

    serial.print ("器件类型(ID 控制寄存器):");
    serial.print (gIDval);
    serial.print ("通道:");
    serial.println (gMaxChan);

    请帮我...

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

    根据我参考的文档:JP24控制数字电源电压、DVDD、而不是内部或外部时钟选择。 JP24 2-3将 DVDD 设置为1.8V、如果您使用3.3V 与 Arduino 通信、则可能无法按预期工作。 我建议匹配数字逻辑电压电平。

    www.ti.com/.../sbau171d.pdf

    很抱歉,我想知道我们是否看过不同的文件。 确认正确的电压使器件的电源引脚处于可确定状态。

    对于 SCLK、1MHz 是可以的。

    您的代码需要确认以下几点:

    确保在上电排序后发出 RESET 命令、如数据表的第11.1节所示。
    按照10.1.1节"为基本数据捕获设置器件"中的步骤操作。

    您是否能够看到 DRDY 脉冲?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    你好,先生

    我使用的用户指南与 TI 为 ADS1298 ECGPCK-FE 提供的用户指南相同。

    以及我如何在示波器上看到 DRDY 脉冲。 您能不能建议我连接。根据我的视点、当我将跳线设置为 OSC1 JP19 1-2时、从器件会被内部振荡器操作:启用 OSC1并使用 JP23 CLKSEL 源1-2:外部主时钟。当我的主器件是 Arduino、为 SPI 通信的 ADS 1298提供时钟。

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

    在这里、我上传了硬件连接图片、请查看此图片、并告诉我这是正确的接线、跳线设置是否正常?

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

    引脚47是/DRDY。 只需连接一个示波器并查找脉冲。 您可能需要在 J3接头上的飞线中焊接。

    从器件不应启用内部振荡器、而应使用与主器件相同的时钟。

    我很难理解这些连接、因为它们是在电路板的底部进行的。 默认跳线位置在用户指南中、我建议查看那里的连接。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好先生,

    是的、我能够在示波器上看到 DRDY 信号、确认 ADS1298 IC 工作正常。 在下面、我附上了 DRDY、DIN、DOUT 和 CLK 信号结果的图片、该结果取自示波 器显示屏。

    那么、您能否验证没有硬件问题。所以我将在软件 方面工作。

    1>DRDY 在示波器上的间核-引脚编号  ADS 1298的-47

    2> DIN 信号-针脚编号 -34.

    3>DOUT 信号、参考 接地(黄色线是接地线。) -ADS 1298的引脚43

    4>具有调节器的 ADS 1298的 CLK 信号 至 GND (引脚37)  

    请帮帮我。

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

    您是否使用正弦波作为时钟信号? 时钟信号应为方波。

    DRDY 应为脉冲、而不是正弦波。 查看该线程的 DRDY 脉冲、了解我的意思: e2e.ti.com/.../666463

    为什么在地面上有正弦波?

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

    你好,先生

    当我将 ADS 1298板连接到主机 MMB0板时、尝试在 TI 软件上检查 ECG 信号、然后获得的结果如下图所示。我使用 ECG 仿真器获取信号。

    当我移除 ECG 模拟器时、也会在 ECG 显示屏(软件)上获得相同的信号。

    它背后的原因是什么?

    我的 ADS 1298 IC 是否损坏?

    图片-在 s / w 上显示 ECG 模拟器信号  

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

    这看起来像内部测试信号、这将解释为什么在连接 ECG 模拟器时没有差异。

    您可以探测 VCAP 引脚以检查您的 IC: e2e.ti.com/.../2677107
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    你好,先生
    根据您的建议、我检查了 ADS 1298 IC 的 VCAP 电压、看起来是这样的

    VCAP1 - 1.17V
    VCAP2 - 2.48V
    VCAP3 - 6.84V
    VCAP4 - 0.18V

    是 VCAP 引脚上的这个常规电压吗? 我是说 ADS 1298 IC 正常吗?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Sagar、

    是的、这是 VCAP 引脚的常规电压。 IC 正常。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好,先生

    当我在逻辑分析仪上看到 SPI 结果时、结果可能与此类似。但 MISO 信号保持不变。原因是什么?

    逻辑软件屏幕上也会显示通知、"屏幕上显示的初始(理想时钟)与设置不匹配"。时钟信号是否正常?

    感谢您的帮助。

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

    我很乐意提供帮助、但我在回答这一问题时遇到了困难。

    您的时钟信号应该是方波、而不是正弦波。 我在几个帖子之前提到过这一点。

    此主题应帮助您解决 SPI 问题: e2e.ti.com/.../2727329

    如果您有具体问题、请告诉我。