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.

ADS8699: binary conversion to a voltage

Part Number: ADS8699
Other Parts Discussed in Thread: ADS8691


We are testing out an ADS8699 ADC and I have two questions:

My understanding is that if one uses the default values for range, etc., one should be able to read out the ADC values at +/- 3*Vref by sending CS low, providing a clock signal, and transferring out the bytes via SPI:

byte firstByte = SPI.transfer (B00000000);
byte secondByte = SPI.transfer(B00000000);
byte thirdByte = SPI.transfer(B00000000);
byte fourthByte = SPI.transfer(B00000000);

and that no further setup is necessary (again, for the ADC default setup, range = -12.288 to 12.288). 

In testing, I get an output from this ADC (for example, if I am reading a 5v source on the analog in):

02:10:11.146 -> first byte: 10101111
02:10:11.146 -> second byte: 110010
02:10:11.146 -> third byte: 11000000
02:10:11.146 -> fourth byte: 0

bits 14 to 31 should contain the output, is that at least the right idea?

2) I read the spec sheet, but I'm still uncertain about how to interpret the result using a bipolar range. I wish there were examples or more information. I did see this document: and I'm wondering if the ADS8699 uses the bipolar offset binary scheme or ??? 



  • Hi Brecky,

    The conversion code you got is close to the code for 5V input since you missed two bits also you have to make sure your are using a precision DC signal generator instead of a power supply as input to the ADC

    1.  The second byte should have 8 bits, however you are only showing 6 bits, so 2 bits were missed.

    2.  The ADC shifts out the conversion codes starting with 1st clock on SCLK, so your 18-bit code should be 10101111 110010xx 11, you only need 18 or 24 clocks to retrieve the conversion code.

    3.  To get an accurate result:

    • Your SPI configuration should be CPOL = 0 and CPHASE = 0 which is the default mode without register programming on ADS8699 device.
    • Make sure you read the code after conversion time.
    • Make sure you have correct circuit connections and capacitor decoupling.
    • Make sure you are using a precision signal generator, not a power supply as a DC input.

    I made and attached a simple Format Conversion sheet for ADS8691/8695/8699 as below, you can input the code you got as a quick check.



    Dale Li

  • Thank you. I think this resolved my issue of converting the ADC output to a voltage. However, I get very erratic results. For example, for a 9v battery (9.12v on my meter), I get:






    I don't have a power supply available (or a scope) at the moment due to Covid restrictions at work, but even so, I would expect to be able to do far, far better than this. 

    I have a simple circuit using an Arduino with the SPI lines, ground wires, the analog supply at 5v, the digital supply at 3.3v wired to the ADC on a breadboard. All grounds are tied together and going to the Arduino ground. RST goes to an Arduino 3.3v digital IO pin and is kept HIGH.

    This wiring seems consistant with figure 67 of the datasheet. Between the CS line going low and the result transfer, I have a 5 microsecond delay.

    I have a 0.1 uF cap going to ground between the digital supply of the Arduino and the ADC. Should I also have a capacitor between the analog supply and the ADC also? 

    I'll experiment, but what modifications do you think I should make to the circuit to reduce what I think is noise. 



  • Hi Brecky,

    First of all, are you using your own circuit board soldered with a ADS8699 device or not? if yes, please share your schematic. If not, please let me know how you connected the pins especially REFIO and REFCAP, a picture for your wiring would be very helpful to understand.

    Secondly, wiring digital signals can involve noise and interference signal, wiring is not a good solution to evaluate a 16-bit ADC.

    To answer your question, definitely a 0.1uF decoupling capacitor is needed on AVDD  also a 10uF is preferred as well.

    Best regards,