ADS1115 and Wemos D1

Hi, I am using an ADS1115 board (adafruit copy) with a wemos d1 mini. I found the D1 mini doesn't like 5V on the IO pins at all (2 boards dead). I can run the ADS1115 with 3.3V input easy enough but that limits its range a little. Are there any options that are fairly simple? Can I just add some resistors to pull the voltage down to 3.3V? Or a couple of Schottky diodes?

The ESP8266 on the WeMos D1 mini is a 3.3volt processor, and it's I/O is not 5volt tolerant.
You must power the ADS1115 from the 3.3volt pin of the WeMos, and keep ADS inputs between 0 and 3.3volt. That also means a PGA gain of 2 (or higher) if you want to use it's full resolution.

If sensors output a higher voltage, then reduce that with a 2-resistor voltage divider.
Note that the ADS has an absolute (fixed reference) A/D, and should not be used for ratiometric sensors like pots, thermistors and most current or pressure sensors.
Leo..

Thanks for the reply. That is what I am currently doing, and that will work. I was just wondering if it's possible to power the ADS1115 from 5V and use a simple mechanism to run the IO at 3.3V. I could add a resistor to pull it down to 3.3V as they are only pulled high by a 10k resistor. The only issue I can see is whether the ADS would see 3.3V as a 1 or a 0 but I presume that would be more than enough voltage.

Can't you use a voltage divider on your secret sensor?
Yes, you could power it from 5volt, and use an I2C level converter board.
But 5volt also "limits it's range", unless you set PGA to 1, and use a voltage divider to 4.096volt.
Better tell us exactly what your project is.
Leo..

I don't think that is a good idea, certainly not for an analog input and not in general.

Those I²C level converter boards are appropriate for interconnecting 3.3 V and 5 V I²C busses and very little else.

You want to know why? Because they are based on pull-ups. :roll_eyes:

I'm just trying to measure a voltage. It might sound silly but the issue I have is that I only have 24.9k and 5k resistors in 0.1%. So basically I can only divide the voltage down so much. I'm really just interested to know if I can do what I described. I can decide if it's a good idea or not later. From memory the ADS just pulls the lines low so I guess it should work if I add some resistors to pull the voltage down from 5V to 3.3

I'm not too interested in doing that, it will just add more complexity. The options I see are

  1. Run the ADS at 3.3V
  2. Run it at 5V but use something to pull the IO down to 3.3V

Personally I don't see why the second wouldn't work. The only issue I could see is the ADS doesn't see 3.3V as a 1 but I'm fairly certain it would.

You do not need 0.1% resistors. You will have to calibrate it - in the software - in any case. :roll_eyes:

1 Like

That's an entirely different conversation but I have chosen to use accurate resistors. A 1% resistor isn't just 1% off, it can drift by 1%. That means you can't really rely on calibration. If something is 1% out then for 12V that's 0.12V which is a fair bit.

I was of course talking about the I2C link between the ADS1115 and the WeMos D1 mini.
Leo..

Hmmm. Where did you get that notion? :face_with_raised_eyebrow:

I should have said by more than 1%. I've seen this myself and seen many people say the same thing. The point is I like to use accurate resistors. I think it most certainly makes sense to start with high tolerances.

I'm more interested in my original question. What is the easiest way to run the ADS1115 at 5V and the wemos at 3.3V?

Here is a schematic of a level shifter board I purchased a long time ago.

image

It should work with your Wemos and A/D.

You may want to reduce the 10k's if you are having connection issues.

I2C level shifter boards are common, and contain four circuits from post#13.

That still leaves the question ( assuming you want maximum resolution) why you want to drop down from 5volt (the secret sensor/source) to 4.096volt, but don't want to drop down to 2.048volt.
Dropping down to 2.048 volt is the same (only different resistor values), and it doesn't need a level converter.

I assume you use official (15-bit single-ended) ADS1115 boards with your 1% resistors, because the ones from the far-east have been reported to contain 11-bit chips.
Leo..

I really appreciate all the replies but it seems everyone is answering everything except the question I asked, which was "can I run the IO on the ADS1115 at 3.3V and power it at 5V". I looked up the data sheet and the answer is a resounding no. A high level is considered 0.7 VDD which comes out to 3.5V. A low is considered 0.3 VDD which 1.5V. So having a high of 3.3V would land in the unknown area. It might work but would be outside the manufacture specs and so introduces high potential for unreliability.

Thanks everyone for the replies, please don't think I haven't taken everything onboard.

Yes.
I2C is open collector/drain, so independent of supply voltage.

Yes, the ADS1115 chip can be powered from 3.3volt or from 5volt.
But note that input voltage must stay in the boundaries of that supply.

But boards they come on have pull up resistors on the I2C lines to VCC of the ADS1115,
so if you power an ADS1115 board from 5volt, the I2C lines have connections to 5volt.

You could remove those (4k7 or 10k) pull up resistors, and only use pull up resistors to 3.3volt on the WeMos.
Or... use an I2C level converter board, which has individual sets of pull up resistors on both sides, with a mosfet switch in between. See HV (high voltage) LV (low voltage) in the diagram of post#13.
Leo..

The data sheets says the ADS will register a high as being 3.5V, so 3.3V would technically be too low. I strongly suspect it would work but it would be outside the recommendations of the data sheet.

Sorry, correct. Switch points are 0.3VDD and 0.7VDD.
Just use an I2C level converter if you must run the ADS on 5volt.
Leo..