1
\$\begingroup\$

I have designed a board with an AD7616 chip on, connected to a microcontroller. The AD7616 chip is configured in software mode and with SPI interface (one MISO and one MOSI wire). I have read the whole datasheet, and believe that the connections are okay. This is my schematic:

AD7616 connections These are my findings:

1. SPI doesn't function
The first problem I encounter is the nonfunctional SPI connection. I attempt to write the CONFIGURATION_REG at address 0b00010, and read it out again to verify if the value really changed. I read out only zeros. The MISO pin (master in, slave out) remains low. In short - the SPI connection doesn't work. I've checked the signals with my oscilloscope. The microcontroller outputs the expected waveforms. The AD7616 remains dead.

2. All power supplies are connected
I have checked the presence of 3.3V and 5V on all the power-pins of the AD7616. The power supplies to the chip are okay. So the problem is not related to wrong or missing power levels.

3. No voltage on the REFCAP pin
All the following pins should have a specific voltage: REFCAP, REFINOUT, REGCAPD and REGCAP. They are all okay, except REFCAP. This pin should output 4.096V, but I don't measure any voltage.

What could be wrong?

\$\endgroup\$
  • \$\begingroup\$ Can you tell us what you're doing to the \$ \bar{RESET}\$ pin on boot? How are you sequencing your startup? \$\endgroup\$ – Scott Seidman Apr 20 '17 at 13:10
  • \$\begingroup\$ Why are you adding 10u caps to places where the data sheet doesn't tell you to? \$\endgroup\$ – Scott Seidman Apr 20 '17 at 13:16
  • \$\begingroup\$ The RESET pin is pulled high automatically by the 20k resistor at power up. The microcontroller pulls it low just before starting an SPI transfer. Perhaps I should introduce some extra waiting time between pulling the RESET pin low and starting the SPI transfer.. Anyway, I repeat the exact same SPI transfer every few milliseconds, to look at it with my scope \$\endgroup\$ – K.Mulier Apr 20 '17 at 13:23
  • \$\begingroup\$ You are right about the 10u cap. From what I can see in the datasheet right now, I have put 1x a 10u cap too much - the one on the REFINOUT pin. However, this pin seems to have the correct voltage. \$\endgroup\$ – K.Mulier Apr 20 '17 at 13:26
  • \$\begingroup\$ Look at Figure 50, and follow the requirements for \$t_{RESETWAIT}\$ \$\endgroup\$ – Scott Seidman Apr 20 '17 at 13:26
1
\$\begingroup\$

From what I see, provided only that the supplies are correct and REFSEL is high you should get ~4.096V on REFCAP.

So check that REFSEL is actually high (on the AD7616 side of R24), and check that there are no shorts to ground on REFCAP. You can do that by measuring the resistance across the REFCAP capacitors with power off.

Assuming the supplies are okay, then the chip must be faulty. I would guess that chances are fairly good there is a short of some kind.


As to your other issues, that sort of thing is typically timing-related. You can troubleshoot by adding delays everywhere. Ensure you are in the correct SPI mode (a common issue). The 1K resistors will add some delay so slow down the SPI clock for testing.

\$\endgroup\$
1
\$\begingroup\$

The problem was indeed related to the startup sequence (Thanks a lot to Mr. Scott Seidman for pointing that out in the chat). The startup sequence for the AD7616 can be found in the datasheet on page 30:

enter image description here This is how I practically implement the startup sequence:

    /*
     * Startup sequence of AD7616 adc-chip and
     * mbed-os SPI settings for communication with
     * AD7616 adc-chip.
     */
    void ad7616_spi_init()
    {
        // Disable the SPI cs
        cs.write(1);

        // Startup the ADC chip
        reset.write(0);
        Thread::wait(2);  // Wait 2ms (minimum would be 1ms)
        reset.write(1);
        Thread::wait(1);  // Wait 1ms (minimum would be 240us)

        // Format SPI channels
        spi.format(16,2);
        spi.frequency(SPI_FREQUENCY);

        // Attach function pointers
        spi_compl_int_p.attach(spi_compl_int);
    }

As Mr. Scott Seidman pointed out in the chat, I also had to pay more attention to the SPI timings - see Fig 6 on page 9.
Now everything works!

\$\endgroup\$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.