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.

[参考译文] ADS1299EEGFE-PDK:ADS1299始终从 SPI 读取零(Arduino UNO)

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

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/949119/ads1299eegfe-pdk-ads1299-always-read-zeros-from-spi-arduino-uno

器件型号:ADS1299EEGFE-PDK
主题中讨论的其他器件: ADS1299

大家好!

我目前正在研究 BCI 应用、该应用使用 ADS1299EEGFE-PDK 来获取 EEG 信号。 在当前设置中、我使用 Arduino UNO 通过 SPI 与子卡连接、而 MMB0仅用作电源。

GPIO 引脚按如下方式连接(子卡上的跳线保留默认设置)

------------------------------------------

            Arduino UNO  <-->   ADS1299

  • SCLK [引脚13]   <-->  CLK    [J3.3]
  • MISO [引脚12]   <-->   DOUT [J3.13]
  • MOSI [引脚11]   <--> DIN        [J3.11]
  • SS    [引脚10]   <-->   CS       [J3.7]
  • DRDY [引脚9]    <-->   DRDY [J3.15]
  • GND [引脚14]   <-->   GND   [J3.4]

------------------------------------------

我使用的 sketch 是 Arduino 库 ADS1299中的一个示例、应读取和写入一些寄存器:

#include 

ADS1299 ADS;

//Arduino Uno -引脚分配;需要将 ICSP 用于更高的 AVR 板
// SCK = 13
// MISO [DOUT]= 12
// MOSI [DIN]= 11
// CS = 10;
// DRDY = 9;

// 0x###-> Arduino 十六进制格式
// 0b##-> Arduino 二进制格式

布尔值 IDReturned = false;
布尔 staredLogging = false;

void setup(){

Serial.begin(115200);
Serial.printn();Serial.tln
("ADS1299-bridge has started!");

ADS.setup(9、10);//(DRDY 引脚、CS 引脚);
延迟(10); //延迟以确保连接

ads.reset();
}

void loop(){

if (deviceIDReturned = false){

ads.getDeviceID();//Funciton 返回器件 ID

//打印虚线以分隔串行打印段
serial.println ("------------------------------------------------ ");

//读取地址0x00处的 ADS1299寄存器(有关 SPI 命令的更多信息、请参阅数据表第35页)
ADS.RREG (0x00);
serial.println ("------------------------------------------------ ");

//打印所有寄存器... 从地址0x00开始读取0x17地址(这些数字可被二进制或整数值替换)
ADS.RREG (0x00、0x17);
serial.println ("------------------------------------------------ ");

//写入寄存器命令(有关 WREG 的更多信息、请参阅数据表第38页)
ads.WREG (CONFIG1、0b11010110);
serial.println ("------------------------------------------------ ");

//重复打印所有寄存器以验证 WREG 是否更改了 CONFIG1寄存器
ADS.RREG (0x00、0x17);
serial.println ("------------------------------------------------ ");

//开始数据转换命令
ads.start();//必须在连续读取数据之前启动
deviceIDReturned = true;
}

//仅在
while (millis ()<10000){的第一个10秒内将数据打印到串行控制台
if (startedLogging =false){
serial.print ("Millis:");//这是为了查看数据开始打印的时间以检查计时精度(默认采样率为250样本/秒)
serial.println (毫秒());
startedLogging = true;
}

//将连续读取数据(RDATAC)打印到 Ardiono 串行监视器...
//此方法的时间还不是很完美。 一些数据正在丢失
//我认为这是因为串行监视器花费了太多时间打印数据,并且没有准备好接收数据包
ads.updateData();
}


它在串行监视器中返回以下输出:

 
ADS1299桥接器已启动!
0
------------------------
ID、0x00、0x00、0、0、 0、0、0、0、0、 0
------------------------
ID、0x00、0x00、0、0、 0、0、0、0、0、 0
CONFIG1、0x01、0x00、0、0、 0、0、0、0、0、 0
CONFIG2、0x02、0x00、0、0、 0、0、0、0、0、 0
CONFIG3、0x03、0x00、0、0、 0、0、0、0、0、 0
LOFF、0x04、0x00、0、0、 0、0、0、0、0、 0
CH1SET、0x05、0x00、0、0、 0、0、0、0、0、 0
CH2SET、0x06、0x00、0、0、 0、0、0、0、0、 0
CH3SET、0x07、0x00、0、0、 0、0、0、0、0、 0
CH4SET、0x08、0x00、0、0、 0、0、0、0、0、 0
CH5SET、0x09、0x00、0、0、 0、0、0、0、0、 0
CH6SET、0x0A、0x00、0、0、 0、0、0、0、0、 0
CH7SET、0x0B、0x00、0、0、 0、0、0、0、0、 0
CH8SET、0x0C、0x00、0、0、 0、0、0、0、0、 0
BIAS_SENSP、0x0D、0x00、0、0、 0、0、0、0、0、 0
BIAS_SENSN、0x0E、0x00、0、0、 0、0、0、0、0、 0
LOFF_SENSP、0x0F、0x00、0、0、 0、0、0、0、0、 0
LOFF_SENSN、0x10、0x00、0、0、 0、0、0、0、0、 0
LOFF_FLIP、0x11、0x00、0、0、 0、0、0、0、0、 0
LOFF_STATP、0x12、0x00、0、0、 0、0、0、0、0、 0
LOFF_STATN、0x13、0x00、0、0、 0、0、0、0、0、 0
GPIO、0x14、0x00、0、0、 0、0、0、0、0、 0
MIPSC1、0x15、0x00、0、0、 0、0、0、0、0、 0
MIPSC2、0x16、0x00、0、0、 0、0、0、0、0、 0
CONFIG4、0x17、0x00、0、0、 0、0、0、0、0、 0
------------------------
修改了寄存器0x1。
------------------------
ID、0x00、0x00、0、0、 0、0、0、0、0、 0
CONFIG1、0x01、0x00、0、0、 0、0、0、0、0、 0
CONFIG2、0x02、0x00、0、0、 0、0、0、0、0、 0
CONFIG3、0x03、0x00、0、0、 0、0、0、0、0、 0
LOFF、0x04、0x00、0、0、 0、0、0、0、0、 0
CH1SET、0x05、0x00、0、0、 0、0、0、0、0、 0
CH2SET、0x06、0x00、0、0、 0、0、0、0、0、 0
CH3SET、0x07、0x00、0、0、 0、0、0、0、0、 0
CH4SET、0x08、0x00、0、0、 0、0、0、0、0、 0
CH5SET、0x09、0x00、0、0、 0、0、0、0、0、 0
CH6SET、0x0A、0x00、0、0、 0、0、0、0、0、 0
CH7SET、0x0B、0x00、0、0、 0、0、0、0、0、 0
CH8SET、0x0C、0x00、0、0、 0、0、0、0、0、 0
BIAS_SENSP、0x0D、0x00、0、0、 0、0、0、0、0、 0
BIAS_SENSN、0x0E、0x00、0、0、 0、0、0、0、0、 0
LOFF_SENSP、0x0F、0x00、0、0、 0、0、0、0、0、 0
LOFF_SENSN、0x10、0x00、0、0、 0、0、0、0、0、 0
LOFF_FLIP、0x11、0x00、0、0、 0、0、0、0、0、 0
LOFF_STATP、0x12、0x00、0、0、 0、0、0、0、0、 0
LOFF_STATN、0x13、0x00、0、0、 0、0、0、0、0、 0
GPIO、0x14、0x00、0、0、 0、0、0、0、0、 0
MIPSC1、0x15、0x00、0、0、 0、0、0、0、0、 0
MIPSC2、0x16、0x00、0、0、 0、0、0、0、0、 0
CONFIG4、0x17、0x00、0、0、 0、0、0、0、0、 0
------------------------
毫秒:224

遗憾的是、通过 SPI 检索到的数据在所有寄存器中都是零、在完成我在本主题中可以找到的所有线程后、似乎没有任何帮助。 目前、我无法访问逻辑分析仪或探测设备、我只是希望错误是由我进行的硬件连接中的新错误引起的。

如果您能给我任何建议、我将不胜感激!

L.G.

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

    更新:

    我认为这个问题可能与 SPI 通信有关、但是在我安装 Windows 7来运行 ADS1299EEG-FE 评估软件(用于电路板)之后、软件返回的寄存器映射(经过一段时间后)再次填充为零。

    此时、我发现自己有一个很大的问题、因为我的整个论文工作都依赖于此套件的使用...  

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

    您好 Lorenzo、

    当您使用 ADS1299EEG-FE EVM 时、能否查看以下几项?

    • 驱动程序是否正确安装在 PC 上? 将 USB 连接到 ADS1299EEG-FE 评估板时、您应该会在设备管理器的 libusb-Win32设备下看到 USBStyx。

    • 如果驱动程序安装正确、您应该能够从 ADS1299EFG-FE 评估软件(ADC 寄存器->寄存器映射)中读取默认寄存器值。 请参阅下面随附的图片、了解硬件和软件是否正常工作。  

    如果您能够获取 ADS1299EEG-FE 评估 EVM 以与评估软件配合使用、请告诉我。

    我们将无法帮助您使用 Arduino UNO 硬件或软件。 您可以在下面找到一些有关将 ADS1299连接到 Arduino 硬件的相关文章。 当您将 ADS1299连接到 Arduino 硬件时、请参阅数据表的图67、了解加电时的初始流程。  

    https://e2e.ti.com/support/data-converters/f/73/t/787501

     ADS129x BIOFAQ 中的分步调试方法 有助于器件处于正确的运行条件(请参阅下面的直接链接)。

    如何验证 ADS129x 器件是否仍然正常工作?

    谢谢。

    -TC

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

    大家好、非常感谢您的回答!

    1) 1)我已验证是否存在驱动程序、并且所有内容都是最新的;

    2)我设法让软件显示寄存器映射、尽管完成读数需要很长时间(平均10分钟)、并且在进度条达到100%后、寄存器似乎包含所有零值(甚至是 ID 寄存器)。 我将随附一张屏幕截图、说明其外观:

    3) 3)子板的跳线配置是默认配置、我还将附上该板的照片:

    再次感谢您花时间研究这个问题、如果还有其他我可以提供的信息、请告知我。

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

    您好 Lorenzo、

    您是否计划在 JP13-17的器件上使用外部 CLK? EVM 图片显示您正在将 JP18设置为 Pos 1-2、这需要 JP3-17的外部 CLK、而不是在 EVM 板上使用振荡器。 有关时钟配置、请参阅用户指南中的 Secio 4.2。 您能否将 JP18切换到位置2-3并查看是否可以读取所有默认寄存器?  

    谢谢。

    -TC

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

    感谢先生给我们的最后一个建议! 实际上没有注意到跳线不在位、我检查过、但可能我与引脚枚举混淆了。 这也说明了等待寄存器读取的时间很长、时钟脉冲完全丢失。 目标设置是让 Ads1299具有其自己的时钟、并仅通过 SPI 与微控制器连接。

    现在、我可以正确且一致地读取所有寄存器、我将通过下面的屏幕截图向您展示:

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

    您好 Lorenzo、

    很高兴听到您能够让 EVM 正常工作。

    谢谢。

    -TC