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.

ADS8684A: Reading 65535 on every channel and in every mode

Part Number: ADS8684A

Hello everyone

I am using the ADS8684A in a system with a F28379D.

The F28379D is the SPI master and I can communicate with the ADS because I can read the program register as the range of the channel...

But when I try to read the value of the channels they are always at the maximum value even when I send nothing on the entry...

I send you my hardware config and my soft but do enyone has an idea about this ? Thank you in advance guys !

then if ret == 1 I start the auto rst mode by sending NO_OP command

Here is my hardware config

Again, thank you in advance...

  • Hi Guillaume,

    Can you please provide a timing plot for /CS,SCLK,SDI and SDO with an oscilloscope when reading the data? Are you using GPIOs to simulate SPI peripheral on your controller? I could not see more details in your code.

    Also, where are AIN_xGND pins connected to? These pins should be connected to GND because this ADC only supports single-ended input.

    Can you please measure the voltage on the REFIO and REFCAP pin to see if they are 4.096V.

    Thanks&regards,

    Dale

  • Hi Dale,

    First thank you for your quick answer...

    I can't have the 4 signals in the same time on my oscillo because this is very tiny... I will try something to give you the signals.

    here is my GPIO's config :

    Here is where are going my AINx_GND and AINx_P pins (the hardware design has been made in a potential upgrade of dual measures...

    all the AINxx_EXT are going on a connector to arrive in an other PCB and then :

    and for the + :

    then MES_x_OUT_UC are connect to my hardware measure treatment.

    I already checked that REFIO and REFCAP are +4.096V.

    Sorry for my approximate english and thank you for your time.

    I will try to get my 4 signals on the oscillo.

  • Hi again Dale,

    I found a way to have my signals on oscillo... here is all the tram in the order of the first picture of code I sent you (set range 3 times then set auto seq...)

    The last two captures are a salve of get_Auto_RST_mode_data_opti_for3() (the last is just a zoom)

  • Hi Guillaume,

    Thank you for providing more information. I saw the code shown on SDO are always high. Range 3 is +/-0.3125Vref which is +/-1.28V range. What's your test signal/voltage? Can you measure the voltage on AIN_xP? It's good to connect AIN_xGND pins to the ground locally.

    To address the issue, I would suggest you to simplify the test:

    1. Apply a precision DC signal on channel 0, measure the voltage on AIN_0P.
    2. Use default input range (+/-2.5Vref which is +/-10.24V). Only capture the data on channel 0 by using Manual mode, for example, sending only 0xC000 0000 to the ADC for channel 0.
    3. Check the data read from the ADC.

    Please let me know once you get the code.

    Thanks&regards,

    Dale

  • Hi Dale,

    From now I had nothing on my test signal. Now I have a 1VDC nad I checked that it arrives well on my AIN_0P.

    I did your test I send you the signals but the result is the same... I noticed a weird thing on SDO maybe you will have an idea about it...

    So, I set the range by default, then I send the command to read the channel 0 manually :

    then i just send NO_OP :

    The SDO signal beetween the set range and the manually command is weird (like charging a capacitance ????)

    Maybe this is connected to my maximum value ? ... If you have any idea please let me know !

  • Hi Guillaume,

    Your timing is incorrect. Please see my feedback below:

    1. In the 1st cycle of your 1st image, you are sending 0x0B0000 on SDI with 24 clocks, you are configuring the CH0 Input Range register with 0x00 data, this cycle does not do anything because the default value in CH0 Input range register has been all 0s after the ADC is powered up.

       In the 2nd cycle of your 1st image, you are sending 0x0C00 and try to select CH0, this is a wrong command because 0xC000 should be sent to the ADC to select CH0.

    2. In your 2nd image, this is an incorrect way to read data because the NO_OP command(0x0000) should be sent in the same cycle as the command, also you are sending 0x0000 (first 16 clocks) as a command to the ADC which means nothing to the ADC and you are sending another 0x0000 (second 16 clocks). Actually 16 clocks for NO_OP is enough.

       Please see the typical timing in figure 1 in the ADS8684A datasheet, the first 16 clocks are used to send a command to ADC for selecting a channel, the second 16 clocks are NO_OP(0x0000) for retrieving the data. Total 32 clocks in one cycle.

    3. For the phenomenon you saw on the SDO, you may have to check if there is a large capacitance on the trace/signal.

    4. In your previous test, you set the input range to Range 3 which is +/-0.3125Vref (+/-1.28V) range. When the ADS8684A's input is floating, 1.6V will be seen for +/-0.3125Vref range which is related to internal bias voltage. This 1.6V voltage actually has exceeded +1.28V max voltage for this range, this is the reason why you saw 65536 conversion code. When an external signal is applied to the input, the bias voltage will not be seen. See the bias voltages with input ranges in the following table. Try other ranges or apply a signal to the ADC input for test.

    I would suggest you to apply a DC signal for the test, also please make sure that your command is correct and your timing is correct.

    Best regards,

    Dale

  • Hello Dale,

    I resolved my problem, in fact my "write command register" function was wrong, I was writting the command with an offset of 4 bits as you mentionned (0x0C000 instead of 0xC000)...

    Sorry for the mistake and thank you a lot for your time and help.. !