主题中讨论的其他器件: ADS1292
您好!
当我尝试使用函数"ECG_SENSOR_ADS1292R.getAds1292EcgAndRespirationSamples()"时、ESP32将重新启动、它似乎进入了数学无效条件。 您能在这里提供帮助。
此致、
Nitine2e.ti.com/.../3632.ECG.txte2e.ti.com/.../Error.txte2e.ti.com/.../data_5F00_output_5F00_AD1292r.txt
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.
您好!
当我尝试使用函数"ECG_SENSOR_ADS1292R.getAds1292EcgAndRespirationSamples()"时、ESP32将重新启动、它似乎进入了数学无效条件。 您能在这里提供帮助。
此致、
Nitine2e.ti.com/.../3632.ECG.txte2e.ti.com/.../Error.txte2e.ti.com/.../data_5F00_output_5F00_AD1292r.txt
您好!
有关 SPI 问题、请参阅以下门票-
谢谢
您好、杨
感谢您的建议和及时的反馈。
我尝试了这两个选项、但没有什么对我有用的。 但是、我尝试读取 ADS1292r 的芯片 ID、但这是读取零。
上面是用于读取寄存器的函数、我将其添加到库文件中。
char ads1292r:::ads1292RegRead (const int chipSelect、const int pwdnPin、const int startPin、unsigned char REG_address、byte REG_DATA){
/*//寄存器地址
#define ADS1292_REG_ID 0x00
#define ADS1292_REG_CONFIG1 0x01
#define ADS1292_REG_CONFIG2 0x02
#define ADS1292_REG_LOFF 0x03
#define ADS1292_REG_CH1SET 0x04
#define ADS1292_REG_CH2SET 0x05
#define ADS1292_REG_RLDSENS 0x06
#define ADS1292_REG_LOFFSENS 0x07
#define ADS1292_REG_LOFFSTAT 0x08
#define ADS1292_REG_RESP1 0x09
#define ADS1292_REG_RESP2 0x0A */
//启动 SPI 库:
ads1292StopReadDataContinuous(chipSelect);// SDATAC 命令
延迟(300);
//将(逻辑 ORing)寄存器地址与读取命令操作码 RREG (001R)=h'2组合成一个字节:
字节 regToRead = REG_ADDRESS | RREG;
//将芯片选择设置为低电平来选择器件:
digitalWrite (芯片选择、低电平);
延迟(10);
spi.transfer (regToRead);//发送寄存器位置
SPI.transfer (0x00);//要读取的寄存器数量
//延迟(100);
REG_DATA=SPI.transfer (CONFIG_SPI_SLAVE_ADUmy);//发送要记录到寄存器中的值
//将芯片选择设置为高电平以取消选择:
digitalWrite (芯片选择、高电平);
}
e2e.ti.com/.../ECG_5F00_debug.txt
请告诉我如何解决该问题。
此致、
Nitin
您好、Nitin、
我不熟悉 ESP32 uController 及其专用 SPI 端口和/或引擎。
我是否可以询问您是否遵循了数据表第10节和10.1节"加电排序"中提到的正确加电序列和复位?
您是否会提供有关上述内容的示波器屏幕截图?
如果以上内容正确、请检查以下内容-
是否将 SPI 设置设置为 CPOL = 0和 CPHA = 1?
当您尝试读取 8.6.1.1 ID:ID 控制寄存器(出厂编程、只读)(地址= 00h)时、您能否在 CLK、/CS、SCLK、DIN、DOUT 上进行探测
并查看探测信号是否遵循 数据表第11页和 第8.5.2.11节"从寄存器读取"和图54中的时序图。
谢谢
您好、杨
我已经按照您的要求对信号进行了范围界定、请在下面找到。

下面是我遵循的启动顺序。
digitalWrite (pwdnPin、HIGH); //将 RESET/pwdn 引脚拉高1秒。
延迟(1000);
digitalWrite (pwdnPin、low);//然后将 RESET 引脚拉至低电平500ms 以生成脉冲。
延迟(500);
digitalWrite (pwdnPin、HIGH);//将其拉高并等待9秒
延迟(9000);
ads1292StopReadDataContinuous(chipSelect);// SDATAC 命令
延迟(100);
digitalWrite (芯片选择、低电平);//将 CS 引脚拉至低电平。
延迟(100);
如果我错过了任何内容、请告诉我。 此外、我还使用面向 SPI 的 Arduino 命令将 SPI 模式的设置更改为 Mode1。
SPI.beginTransaction(SPISettings(1000000、MSBFIRST、SPI_MODE1));
延迟(100);
如果 我需要在 ADS1292r 中设置任何其他寄存器才能进行更改、请告诉我。
此致、
Nitin
您好!
您是否还会发送 上电序列的示波器图像?
而且、我假设 MOSI 是 DIN、请澄清我是否错了。
您尝试读取多少个寄存器?
您是否遵循数据表第42页并注意到 DIN 锁存在 SCLK 下降沿、DOUT 在 SCLK 上升沿上移出?
您的主系统是否请求阅读屏幕截图? 即、先在 DIN 中发送操作码、然后在 SCLK 中等待来自 DOUT 的数据。
我提出这一要求的原因是、从您的屏幕截图中可以看出、开始时 SCK 的下降沿正好与 DIN 的边缘对齐、如果这是为了要求读取、它可能无法正常工作。

请参阅表15。 以及8.5m Ω 有关如何发送操作码以进行读取或写入的信息2.11~12。
谢谢。
您好!
先前讨论中的这个问题是否已得到解决?
"
您的主系统是否请求阅读屏幕截图? 即、先在 DIN 中发送操作码、然后在 SCLK 中等待来自 DOUT 的数据。
我提出这一要求的原因是、从您的屏幕截图中可以看出、开始时 SCK 的下降沿正好与 DIN 的边缘对齐、如果这是为了要求读取、它可能无法正常工作。
"
此外,我还简要介绍了您的设置(),请问以下内容是什么意思? 您在哪里以及为什么要调用以下内容?
我提出的原因是、对于 ADS1292R、PWRDN_PIN 为低有效/低有效、因此如果您将其写入低电平、则意味着 ADS1292R 被要求断电。
如果我误解了您的代码、请更正我。
"
digitalWrite (ESP32_V_SPI_CS_PIN、低电平);
digitalWrite (ADS1292R_PWRDN_PIN、LOW);
digitalWrite (ADS1292R_START_PIN、HIGH);
"
EVM 的源代码是为 MSP430编写的、可能不适合您的 MCU。
但是、您可以在此处查看 TI 是否提供 ADS1292REVM 的源代码-
https://www.ti.com/tool/ADS1192ECG-FE
否则、这意味着 TI 不会为此 EVM 提供源代码。