AnsweredAssumed Answered

AD7731 Communication Issues

Question asked by ISAN on Apr 24, 2014
Latest reply on May 1, 2014 by ChrisD.Rama

Hello all,

I am pulling my hair out. I cannot get any communication from either of the 2 AD7731 ADCs I have.

I am creating a new hardware rev of a  water sanitation system.

The OLD hardware was AD7731 and Atmel128.

New hardware is AD7731 and PIC18f45k22.


I have ported the code from the atmel to the PIC. I am confident in the Code as I can talk to other SPI devices on the board just fine.


As for the AD7731 I cannot get any response from the IC at all. No !RDY pin low, no ability to read the registers, etc.

!RDY stays high at all times.


I received the parts as samples.


I have attached schematics for the MCU and the ADC






The !RDY pin NEVER goes LOW. No matter how long I wait.



Here are snippets of my setup and communication code...


// Initialize SPI

// MCU is running @32Mhz, divide  FOSC/64 to run SPI @ 500Khz.

//(Have tried, 2Mhz, 4Mhz, and 8Mhz)




void Setup_AD7731(void){

    write_register(0x03, 0x13, 0x34);   //Initialize filter register.


// Self calibrate millivolt input  (Electrode Inputs)


// Calibrate Zero point

  write_register(0x02, 0x90, 0xF6); //Self calibrate mV input zero.

  while(AD7731_DR != LOW); //Wait for the ready pin to go low.


  // Set to Full Scale

  write_register(0x02, 0xB0, 0xF6); //Self calibrate mV input full scale.

  while(AD7731_DR != LOW); //Wait for the ready pin to go low.





void write_register(char reg, char msb, char lsb)



  SELECT_AD7731;         //Select the a/d converter.

  SPI1_Write(reg);            //Select the required a/d register.

  SPI1_Write(msb);          //Send msb byte.

  SPI1_Write(lsb);            //Send lsb byte.

  DISABLE_AD7731;       //De-select a/d converter.






This is a direct port from a working system. I am loosing my mind here.

Anyone see what I am doing wrong?