Part Number: ADS1298R
We are planning to use ADS1298 R in one of our medical device, which is in design stage now.
Before finalizing the final design we conducted few experiments with the device.
In one of the experiment, we have provided output of cardio simulator as input to ADC channels of ADS1298.
we have interfaced ADS1298 AFE board with STM32L4R9I controller through SPI. SPI working was verified by writing and reading back ADS1298 registers.
I captured ADC data and tried to plot it, to my surprise I got irrelevant waveform which doesn’t have any pattern/periodicity.
When I go back and check the ADC values captured through SPI reading were varying abruptly, same was not the case with ADS1298R PDK.
I am not sure why this was happening.
I am debugging this issue from past 15 days and yet to resolve it. Anticipating quick support on resolving this issue.
Below is the waveform plotted for ADC data read
Below is the expected waveform
Below is the register configuration used
ADS1298 PDK register configuration
conf|config1 0x01 0x86
conf|config2 0x02 0x10
conf|config3 0x03 0xDC
conf|loff 0x04 0x03
conf|ch1set 0x05 0x00
conf|ch2set 0x06 0x00
conf|ch3set 0x07 0x00
conf|ch4set 0x08 0x00
conf|ch5set 0x09 0x00
conf|ch6set 0x0A 0x00
conf|ch7set 0x0B 0x00
conf|ch8set 0x0C 0x00
conf|rldsensp 0x0D 0x00
conf|rldsensn 0x0E 0x00
conf|loffsensp 0x0F 0xFF
conf|loffsensn 0x10 0x02
conf|loffflip 0x11 0x00
conf|gpio 0x14 0x00
conf|pace 0x15 0x00
conf|resp 0x16 0xF0
conf|config4 0x17 0x22
conf|wct1 0x18 0x0A
conf|wct2 0x19 0xE3.
ADC data read function : it reads first 24 bits status information followed by 24 bit ADC data of 8 channels.
for(i = 0; i < 3; i++){ // read 3 byte status register (1100+LOFF_STATP+LOFF_STATN+GPIO[7:4])
inByte = transferSPI( 0x00);
stat_1 = (stat_1<<8) | inByte;
}
cnv_cnt = 0;
for(i = 0; i < 8; i++)
{
// HAL_GPIO_WritePin(ADS_CS_GPIO_Port,ADS_CS_Pin,GPIO_PIN_RESET);
inByte1 = transferSPI( 0x00);
// HAL_Delay(50);
inByte2 = transferSPI( 0x00);
// HAL_Delay(50);
inByte3 = transferSPI( 0x00);
// HAL_Delay(50);
//adc_cnv_data[cnv_cnt++] = (inByte1 << 16) | (inByte2 << 8) | inByte3;
adc_ch8_data[i][temPcnt] = ((inByte1 << 16) | (inByte2<<8 ) | inByte3);
}