Post Go back to editing

ADC Continuous Read Interrupt

Category: Hardware
Product Number: AD4111

Hi,

My AD4111 is setup with Continuous conversion and Continuous read mode. I am using a A6M3AH3CFC chip  (Custom Device equivalent configuration to Renesas RA6M3) as controller. My clock is set at 1MHz with CPOL and CPHA to 1 (SPI Mode 3) and MOSI idle value fixing low. I am using DMA to read the data and my SPI is configured to use in Direct Register access. Everything works well  for the first few minutes. I start reading the data for 8 channels (4 voltage & 4 current) with below configurations. After reading a certain sets of data my AD4111 suddenly stops sending interrupts and all the signals are still. I checked all the connections and settings on my microcontroller and everything is fine. Why would the ADC stop sending interrupts? And the timing when it stops changes, sometimes it happens at the start as well.

uint8_t adc_data[3] = {0x82, 0x00, 0x00};
uint8_t if_data[3] = {0x00, 0xC0, 0x00};
uint8_t setup_data[3] = {0x1F, 0x20, 0x00};
uint8_t gpio_data[3] = {0x10, 0x00, 0x00};
uint8_t gain_data[3] = {0x55, 0x56, 0x7C};
uint8_t filter_data[3] = {0x05, 0x07, 0x00};
uint8_t v0[3] = {0x80, 0x10, 0x00}; // V0_VCOM
uint8_t v1[3] = {0x80, 0x30, 0x00}; // V1_VCOM
uint8_t v2[3] = {0x80, 0x50, 0x00}; // V2_VCOM
uint8_t v3[3] = {0x80, 0x70, 0x00}; // V3_VCOM
uint8_t i0[3] = {0x81, 0xE8, 0x00}; // I0+_I0-
uint8_t i1[3] = {0x81, 0xC9, 0x00}; // I1+_I1-
uint8_t i2[3] = {0x81, 0xAA, 0x00}; // I2+_I2-
uint8_t i3[3] = {0x81, 0x8B, 0x00}; // I3+_I3-


ADC_writeReg(AD4111_CHMAP0_REG, &v0);
ADC_writeReg(AD4111_CHMAP1_REG, &v1);
ADC_writeReg(AD4111_CHMAP2_REG, &v2);
ADC_writeReg(AD4111_CHMAP3_REG, &v3);
ADC_writeReg(AD4111_CHMAP4_REG, &i0);
ADC_writeReg(AD4111_CHMAP5_REG, &i1);
ADC_writeReg(AD4111_CHMAP6_REG, &i2);
ADC_writeReg(AD4111_CHMAP7_REG, &i3);

ADC_writeReg(AD4111_GPIOCON_REG, &gpio_data);
ADC_writeReg(AD4111_SETUPCON0_REG, &setup_data);
ADC_writeReg(AD4111_FILTCON0_REG, &filter_data);
ADC_writeReg(AD4111_GAIN0_REG, &gain_data);
ADC_writeReg(AD4111_ADCMODE_REG, &adc_data);
ADC_writeReg(AD4111_IFMODE_REG, &if_data);

  • Hi  ,

    Did you try to write to any registers? In continuous read mode, the only possible operations are reads from the data register. Have you tried exiting continuous read mode by issuing a dummy read of the ADC Data Register command (0x44) while RDY output is low or alternatively, apply a software reset by providing 64 SCLKs with CS=0 and DIN=1.

    Are you pulling /CS pin low? One thing to note, the DOUT/RDY pin will be tri-stated when /CS is high, the DOUT/RDY pin is tri-stated. The /CS must be low in order for DOUT/RDY to pulse. 

    Regards,

    JC

  • Hi JCCillion,

    My /CS is always on low and I have not tried any dummy read of reg read. I am only sending 4 clock cycles (4*8 = 32 Clock pulses) to read 4 bytes of data. I can see the ADC is not reset because the GPIO LEDS are still turned on but it just stops sending the interrupts.



    Regards,
    Lumi

  • 0
    •  Analog Employees 
    •  Super User 
    in reply to Lumi

    Hi  ,

    One other thing I noticed from the register settings you have provided is the Setup configuration register. The input buffers must be enabled for voltage inputs but should be disabled for current inputs. I would recommend using another Setup Configuration register with buffers disabled for all the current inputs.

    Does the ADC_Status indicate any error flag before the ADC stops sending interrupts? Could you also try just operating in continuous conversion mode so we can see if the issue still occurs?

    Regards,

    JC