Hi,
I'm interfacing SAMC21 Xplain Pro Eval board to 24-bit ADC AD7734EBZ Eval board from Analog Devices.
I'm interfacing AD7734 using SPI, Checked Waveforms from SAMC21 and are according to the timing diagram given in AD7734 datasheet.
But i'm unable to receive data from adc.
Anyone has used AD7734 ?
Can anyone tell me how to resolve the issue?
Timing Diagram:
Code:
char Reset[5] = {0x00,0xFF,0xFF,0xFF,0xFF};
char ModeRegister[2] = {0x38,0x40};
char StatusRegister[1] = {0x44};
char ChlRead[1] = {0x48};
char recval[5];
uint16_t value;
uint8_t value1, value2, value3;
int main ( void )
{
/* Initialize all modules */
SYS_Initialize ( NULL );
// AD7734 Reset
SERCOM5_SPI_Initialize();
delay(3);
SPI_SS_GPIO_Clear();
SERCOM5_SPI_Write(&Reset[0], 1); // 0x00
SERCOM5_SPI_Write(&Reset[1], 1); // 0xFF
SERCOM5_SPI_Write(&Reset[2], 1); // 0xFF
SERCOM5_SPI_Write(&Reset[3], 1); // 0xFF
SERCOM5_SPI_Write(&Reset[4], 1); // 0xFF Reset Sequence
SPI_SS_GPIO_Set();
delay(5);
// AD7734 Mode Register
SPI_SS_GPIO_Clear();
SERCOM5_SPI_Write(&ModeRegister[0], 1); // 0x38
SPI_SS_GPIO_Set();
delay(5);
SPI_SS_GPIO_Clear();
SERCOM5_SPI_Write(&ModeRegister[1], 1); // 0x40 16-bit Single Channel
SPI_SS_GPIO_Set();
delay(5);
while ( true )
{
// AD7734 ADC Status Register
do
{
delay(5);
SPI_SS_GPIO_Clear();
SERCOM5_SPI_Write(&StatusRegister[0], 1); // 0x44 Status Register
SERCOM5_SPI_Read(&value1,1);
SPI_SS_GPIO_Set();
delay(3);
SERCOM3_USART_Write(&value1,1);
delay(100);
}while(value1 != 0x00); // Waiting for RDYx bit to go Low
// AD7734 Channel 1 Read Register
SPI_SS_GPIO_Clear();
SERCOM5_SPI_Write(&ChlRead[0], 1); // 0x48 Reading Channel 1 Data
SPI_SS_GPIO_Set();
delay(5);
SPI_SS_GPIO_Clear();
SERCOM5_SPI_Write(0x00, 1); // 0x00 Data byte 1 to Read
SERCOM5_SPI_Read(&recval[1],1);
SPI_SS_GPIO_Set();
delay(5);
SPI_SS_GPIO_Clear();
SERCOM5_SPI_Write(0x00, 1); // 0x00 Data byte 2 to Read
SERCOM5_SPI_Read(&recval[2],1);
SPI_SS_GPIO_Set();
delay(3);
value = recval[1];
value = value << 16;
value = value | recval[2];
value2 = value >> 8;
value3 = value & 0x00FF;
SERCOM3_USART_Write(&value2,1);
delay(3);
SERCOM3_USART_Write(&value3,1);
delay(3);
/* Maintain state machines of all polled MPLAB Harmony modules. */
SYS_Tasks ( );
}
/* Execution should not come here during normal operation */
return ( EXIT_FAILURE );
}
Thanks & Regards,
Nitish