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.

ADS8694: Not able to get the data from device ADS8694IDBT

Part Number: ADS8694

Hii,

I am using ADS8694,

When i am going to communicate this IC with Arduino, communication is happening but

when i am going to acquire the data , i am not able to get the correct data. below data is getting when i am giving 1v as input to the channel_0

below attached file is arduino code.

7725.New Text Document.txt
#include <SPI.h>
#include "string.h"
#include "stdio.h"
#include "stdlib.h"

#define cs_pin              7

void setup() {
  
  Serial.begin(9600);
  
  SPI.begin();
  SPI.setDataMode(SPI_MODE1); 

  pinMode(cs_pin, OUTPUT); //cs
  digitalWrite(cs_pin,HIGH); //cs
  delay(1000);

 digitalWrite(cs_pin,LOW);
   SPI.transfer(0x03);
   SPI.transfer(0x01);
   digitalWrite(cs_pin,HIGH);
   ///// Range select register //////////
   digitalWrite(cs_pin,LOW);
   SPI.transfer(0x05);
   SPI.transfer(0x06);
   digitalWrite(cs_pin,HIGH);
////// Manual channel slelction ///////
   digitalWrite(cs_pin,LOW);
   SPI.transfer(0xC0);
   SPI.transfer(0x00);
   //digitalWrite(cs_pin,HIGH);

  //digitalWrite(cs_pin,LOW);
  //SPI.transfer(0x00);
  SPI.transfer(0xFF);
  SPI.transfer(0xFF);
  SPI.transfer(0xFF);
  digitalWrite(cs_pin,HIGH);

  digitalWrite(cs_pin,LOW);
  SPI.transfer(0x00);
  SPI.transfer(0x00);
  Serial.println(SPI.transfer(0xFF));
  Serial.println(SPI.transfer(0xFF));
  Serial.println(SPI.transfer(0xFF));
  digitalWrite(cs_pin,HIGH);
}

void loop() {
  uint32_t adc = 0;
  delay(1);
  digitalWrite(cs_pin,LOW);
  SPI.transfer(0x00);
  SPI.transfer(0x00);
  adc |= SPI.transfer(0xFF) << 10;
  adc |= SPI.transfer(0xFF) << 2;
  adc |= SPI.transfer(0xFF);

  Serial.println(adc);

  digitalWrite(cs_pin,HIGH);
  delay(1000);
}

Thanks & Regards,

  • Hi daggupati,

    The code you got is less than 20000h which is 0V input if your ADC input is configured as bipolar range. Can you please let me know more information about your connections?

    1. Did you design a circuit board soldering with the ADC DUT? if yes, please provide your schematic. If not, how did you connect analog input also external components to the ADC?
    2. Are you using blue wires to connect the digital signals of ADC to your Arduino?
    3. Have you measured the voltage on REFIO and REFCAP pin of ADC?

    A timing plot (SCLK,/CS,SDO,SDI) captured with an oscilloscope will be very helpful to adress the issue.

    Regards,

    Dale

  • Hi,

    Thankyou for your Quick response.

    1) Schematic files of interfacing ADS8694 with Arduino

    2) No , I'am not using blue wires and giving 1V externally on ADC point.

    3) Voltage on REFIO and REFCAP is 4.096V.

    Thanks & Regards,

  • Hi daggupati,

    Your ADC has necessary capacitors on the reference and power supply which is good. However, using a single dedicated ground plane is strongly encouraged and recommended in the ADS8694 datasheet, please check layout guideline in the datasheet. The jumper you are using on J8 and improper layout can involve more noise and interference signals.

    Also, your AIN_0GND is connected to a ground which is different from the ground on AGND and DGND pins of the ADC. I suggest you to modify this ground to the same ground, also connect your 1V signal's ground to this ground as well. If the issue still exists, it may be caused by the digital timing. However, you should keep this modification as I suggested. 

    What's your 1V input signal? is it created by a precision signal generator? 

    What's your CPOL and CPHA configuration for SPI on your Arduino CPU? Have you programmed ADC's internal register to match the mode? Please provide a timing plot (SCLK,/CS,SDO,SDI) captured with an oscilloscope.

    Regards,

    Dale

  • Hii,

    Thank you for your response,

    In schematic , I sorted J8 connector with Jumper and Capacitor C11 was not mounted.

    At input to the AIN_0P point, Giving 1V from external power supply.

    please once go through the below code. Let me know any changes needed in the code for configure the ADS8694.

    ADS8694_code.txt
    #include <SPI.h>
    #include "string.h"
    #include "stdio.h"
    #include "stdlib.h"
    
    #define cs_pin              10
    
    void setup() {
      
      Serial.begin(9600);
      
      SPI.begin();
      SPI.setDataMode(SPI_MODE1); //MODE 1
    
      pinMode(cs_pin, OUTPUT); //cs
      digitalWrite(cs_pin,HIGH); //cs
      delay(1000);
    
     digitalWrite(cs_pin,LOW);
       SPI.transfer(0x03);
       SPI.transfer(0x01);
       digitalWrite(cs_pin,HIGH);
       ///// Range select register //////////
       digitalWrite(cs_pin,LOW);
       SPI.transfer(0x05);
       SPI.transfer(0x06);	//input range is set to 0 to 1.25*Vref= 0 to 5.12V 
       digitalWrite(cs_pin,HIGH);
    ////// Manual channel slelction ///////
       digitalWrite(cs_pin,LOW);
       SPI.transfer(0xC0);
       SPI.transfer(0x00);
       //digitalWrite(cs_pin,HIGH);
    
      //digitalWrite(cs_pin,LOW);
      //SPI.transfer(0x00);
      SPI.transfer(0xFF);
      SPI.transfer(0xFF);
      SPI.transfer(0xFF);
      digitalWrite(cs_pin,HIGH);
    
      digitalWrite(cs_pin,LOW);
      SPI.transfer(0x00);
      SPI.transfer(0x00);
      Serial.println(SPI.transfer(0xFF));
      Serial.println(SPI.transfer(0xFF));
      Serial.println(SPI.transfer(0xFF));
      digitalWrite(cs_pin,HIGH);
    }
    
    void loop() {
      uint32_t adc = 0;
      delay(1);
      digitalWrite(cs_pin,LOW);
      SPI.transfer(0x00);
      SPI.transfer(0x00);
      adc |= SPI.transfer(0xFF) << 10;
      adc |= SPI.transfer(0xFF) << 2;
      adc |= SPI.transfer(0xFF);
    
      Serial.println(adc);
    
      digitalWrite(cs_pin,HIGH);
      delay(1000);
    }

    Thanks & Regards,

  • Hi daggupati,

    As I said, the ground connection is the biggest concern, next time you should use a solid ground to design your circuit board. Please follow my suggestion to modify your existing board to test again:

    Connect your  AIN_0GND to the ground which is same as the ground of AGND and DGND pins of the ADC.

    Use a precision DC signal source instead of a power supply as input signal because the power supply may be very noisy.

    Make sure CPOL = 0, CPHA = 1 for your SPI configuration. You are using mode 1 in your code, however different controllers may have a different definition about the SPI mode, hence please verify.

    Also, the controller is supposed to read the data at the falling edge of SCLK and your controller should be able to retrieve the data during 10ns after the falling edge of SCLK, please see tHK_CKDO parameter in page 10 in the ADS8694 datasheet. I am afraid your controller(Arduino) can not meet this requirement. Please try other fast controller if you have.

    Best regards,

    Dale