I tried with ADS 1247 IC many times but didn't get proper ADC conversion.
Please give any suggestions and I have given my code below.
#include <SPI.h>
// set I/O pins used in addition to clock, data in, data out
const byte slaveSelectPin = 10; // digital pin 10 for /CS
void setup()
{
//Enable Serial
Serial.begin(115200);
pinMode (slaveSelectPin, OUTPUT);
digitalWrite(slaveSelectPin,HIGH); // chip select is active low
SPI.beginTransaction(SPISettings(500000,MSBFIRST,SPI_MODE1));
delay(200);
SPI.begin(); // initialize SPI, covering MOSI,MISO,SCK signals
//SPI.setBitOrder(MSBFIRST); // data is clocked in MSB first
//SPI.setDataMode(SPI_MODE1); // SCLK idle low (CPOL=0), MOSI read on rising edge (CPHI=0)
//RESET THE ADS 1247
digitalWrite(slaveSelectPin,LOW);
delayMicroseconds(1);
SPI.transfer(0x06); //Reset the ADS1247//0X06//0x07
delay(1); //
digitalWrite(slaveSelectPin,HIGH);
delay(10);//
Serial.println("ADS1247 RESET");
//CONFIGURE ADS 1247
digitalWrite(slaveSelectPin,LOW);
delayMicroseconds(650000);
delayMicroseconds(50000);
SPI.transfer(0x17); //Issue SDATAC
delayMicroseconds(50000);
SPI.transfer(0x62);//SELFOCAL
delayMicroseconds(650000);
SPI.transfer(0x40);//WREG
SPI.transfer(0x03);//SYS0
SPI.transfer(0x01);//VBIAS
SPI.transfer(0x00);//MUX0 AN 0
SPI.transfer(0x02);//MUX1 AN 1
SPI.transfer(0x15);//SPS
delayMicroseconds(650000);
SPI.transfer(0x05);//SYNC
SPI.transfer(0x05);//SYNC
delayMicroseconds(650000);
SPI.transfer(0x20);//CMD REG
SPI.transfer(0x43);//SYS0
delayMicroseconds(650000);
digitalWrite(slaveSelectPin,HIGH);
delay(100);
Serial.println("ADS1247 CONFIGURED");
}
void loop()
{
digitalWrite(slaveSelectPin,LOW);
delayMicroseconds(650000);
int32_t A2DVal = 0x00; //Reset A2D Storage Value
SPI.transfer(0x13); //Issue RDATA//0x014//0x13//0X12
delayMicroseconds(650000);
A2DVal |= SPI.transfer(0xFF); //Write NOP, Read First Byte and Mask to A2DVal
A2DVal<<=8;//Left Bit-Shift A2DVal by 8 bits
A2DVal |= SPI.transfer(0xFF); //Write NOP, Read Second Byte and Mask to A2DVal
A2DVal<<=8;
A2DVal |= SPI.transfer(0xFF); //Write NOP, Read Third Byte and Mask to A2DVal
A2DVal &= (0x00FF);
delayMicroseconds(650000);
digitalWrite(slaveSelectPin,HIGH); // chip select is active low
//delayMicroseconds(650000);
Serial.print("ADC VALUE : ");
Serial.println(A2DVal,DEC);
//Serial.println(A2DVal,HEX);
delay(1000);
}