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.

ADS1115: Data in "Read Conversion Register" incorrect

Part Number: ADS1115

I struggle getting the result I expected from ADC. I have checked everything again and again believing I did something wrong in the protocol but everything should be correct to data sheet. Here is what is happening :

  • ADC value seems only to have 12 bits as last 4 bits always are zero
  • Even I set ²2.048 Volt VREF it seems is is only 25% in reality
  • Regardless of MUX settings I seem to read AIN0 (+) and GND (-) (Setup is AIN0 (+) and AIN3 (-)
  • AIN1/AIN3 and AIN2/AIN3 reads similar as AIN0/AIN3 

The chip I have is marked "BOGI" as order code "ADS1115IDGSR" says but still it appears that this in reality is a different ADC. I found others having the same problem with this device.

https://forum.arduino.cc/t/ads1115-problems-or-fake/658746

Init and start ADC:

Read ADC:

BR

Morten

  • Hi Morten,

    Sorry to hear that you are experiencing some issues. To further help with the debug, I have a couple of questions:

    - Where was the device purchased?

    - Are you able to provide a schematic?

    - The write and read commands look good with the exception of the NAK after reading the last byte of the conversion register. 

    - What input are you providing to the inputs?

    Regards,
    Aaron Estrada

  • Hi Aaron,

    Part was bought from Farnell Element 14, https://www.farnell.com in beginning of May 2021.

    The prototype I am working on is a copy if the previous one that had two small I2C ADCs, MCP3421A0T-E. Since I needed 3 ADC channels I now have changed board to use ADS1115. I have extracted the important part of schematic below.

    Schema on my ADS1115.pdf

    I now have changed firmware so that last byte read also have NAK but still ADC read the same. Thanks for noting me.

    Inputs are reading +/- 65V DC voltages on 3 similar circuits (like on PDF) on AIN0, AIN1 and AIN2. An OpAmp creates a fake zero point that is 2.5V (half of ADC) allowing me to measure negative down to -65V. My circuit is insulated from the DC voltages measured on but they all connect to the 1/2 volt external GND point (AIN3).  Circuit is fairly simple reading these 3 voltages, the trick is in the firmware where these values are used in formulas to calculated different measurements.

    And I have a working prototype with 2 small single ADCs but because of different product variations I needed this 3'rd ADC input.

    Since no supplier have any stock of ADS1115IDGSR I now have ordered a demo board from Farnell, part 3106067. Hopefully this will allow me to unsolder a working ADC I can work with.

    Thanks for replay.

    Best regards

    Morten Bogevik

  • Just had to add that I have tried to read back the Config register 0x01 and clearly the ADC replies with the exact same bits I writes to it, except for bit 15 (OS) that always is "0", also on repeated read longer than sample period. A bit confusing as data sheet says "0 : Device is currently performing a conversion", but as I clearly get a low RDY signal from ADC I have not looked more into this.

    BR

    Morten

  • Hi Morten,

    I looked through the schematic and it seems like the input levels the device is seeing are OK. Once you receive the demo board, please let me know how it works. 

    Regards,

    Aaron Estrada

  •  Hi Aaron,

    The ADC that was on Farnell part 3106067 is working the exact same way. I never get anything other than zero's on the last 4 bits and it seems that when AIN0 and AIN3 both are 2.5V the ADC reads value 0x17C0. If I short input to ADCs GND pin the ADC reads back zero or sometimes 0x0010 (16). ADC reads AIN0 to GND, not to AIN3 as set to.

    I have tried changing the sample rate from 860 SPS to 475SPS and that is working fine, RDY line then is high about double (2.164mS) before going low with ready sample.

    I took a photo of IC in circuit to verify marking: (not the best quality)

    And ADC read now when NAK is fixed :

    At the moment I have no clue where to go from here.

    Best regards

    Morten

  • Hi Morten, 

    When you say AIN0 and AIN3 are both 2.5V, are you actually measuring these inputs? As a sanity check, can you capture a scope shot of the input signals provided to AIN0 and AIN3?

    Regards,
    Aaron Estrada

  • Hi Aaron,

    MUX bits are bit 14:12 and I write them to "001 : AINP = AIN0 and AINN = AIN3". Reg 1 MSB = 0x95 = 0b10010101.

    From logic analyser:

    Best regards

    Morten

  • Hi Morten,

    I see the logic analyzer capture but what I am asking if you can provide measurements of the analog inputs themselves on AIN0 and AIN3. Are you able to probe the analog inputs and verify their value?

    Regards,
    Aaron Estrada

  • Hi Aaron,

    My external circuit is actually not connected when I read 0x17C0 from ADC. AIN3 is connected to 2.5V and AIN0 will have the same voltage through the 6.98k (R33) (220k out is open). I have measured ADS1115 pin 4 (AIN0) with scope, see picture below. Moving probe to pin 7 give the exact same measurement. I also have changed time/DIV to 200mS to be sure there is no low freq. AC component involved.

    Best regards

    Morten

  • Hi Morten,

    Thanks for sharing. I will look into this and discuss this behavior with the team and get back to you on Monday. I appreciate your patience.

    Regards,

    Aaron Estrada 

  • Hi Morten,

    Thank you for your patience, again. 

    Based on the information you have given thus far, I am have some follow up suggestions:

    - Can you share a full Saleae plot of both configuration and read from the device with both inputs at 2.5V? Sharing the output file would be best if you can share that. 

    - Are there multiple ADC's on the PCB? If there are, I would double check that multiple ADC's don't share the same I2C address. Can you confirm?

    - For the comparator, can you write 0x7FFF to register 2 instead of 0x0000?

    - I would like to try some single-ended measurements as well. If you can configure the device so that AINp = AIN3 and AINn = GND, this will use the inputs in single-ended mode. Note that the FSR of the device will need to be set to +/- 4.096V. If you can share the Saleae output file for this, that would be great. 

    When 2.5V is on both AINp and AINn, the output code of 0x17C0 tells us that there is a differential of 380mV between AINp and AINn. There are resistors such as the 6.9k and the 10kohm resistors that will drop some voltage due to the bias current but I would not think it would be as high as 380mV and there seems to be some underlying cause. I am hoping that with the new information you can provide, we can come closer to helping find a solution for you. 

    Regards,
    Aaron Estrada

  • Hi Aaron,

    Unfortunately I am assigned to a different job at the moment that is urgent (meaning a sale depends on a programming job) so I am not able to do this now and will have to get back to this later.

    Best regards

    Morten