Is this ok? Would it work?

Hello All,

Is this possible? I am using an Arduino Nano 33 IOT with two 3v3 I2C devices on different addresses, and I want to power one from the 3v3 rail, and the other via a DIO pin. I have tried it and run into issues, so wondered if it is possible or not. Both devices work, and do what they are meant to, when both powered by the 3v3 rail, but not when in the configuration in the image. Both are low current devices (750uA and 50uA), so power is not an issue.

I wondered if anyone knows, and the reasons why it wouldn't work, if that is the case?

Thank you in advance.
Kind regards, ExplicitChimp

Hi, @explicitchimp

Why?

If you power Device 1 off, will you have to rerun the setup statements for that device when you power it back up?

Thanks.. Tom.. :grinning: :+1: :coffee: :australia:

Hi Tom,

Thanks for the response. I don't have a reason; I am messing with the Nano 33 IOT and some 3v3 I2C devices. I got them working and then wondered if it were theoretically possible to do this. Once I tried and failed, I then questioned if it were something I have done wrong, or it is just not possible. So I thought I would put it out there to understand, start a conversation and hopefully learn on the way.

Kind regards, ExplicitChimp

Are you putting the I/O pin into input mode, or setting to LOW output? Do both devices have pullup resistors on the I2C lines?

Hi David,

Both devices do not have pullup resistors, pinMode is set to OUTPUT and HIGH and left there, no alteration once set. When both are on the 3v3 rail, they work fine, when one is powered from pin 13 (and the arduino reset to run the code again) they fail. I seems odd to me, and the only thing I could think of is that the 3v3 rail ramps up instantly, but pin 13 would have a delay while the code is ran to set as output and drive high.

Kind regards, ExplicitChimp

Hi @TomGeorge,

Your conversation helped "rubber duck" the situation. Your statement about rerunning the setup statements got me thinking... did I set the pins after Wire.begin()... well I did like an idiot! so I moved Wire.begin(); after the pin assignment and setup, adding a couple of small delays in for good measure and would you Adam and Eve it, it actually worked. I knew it must have been somehting I had done, but couldn't see the wood for trees.

Thanks mate, ExplicitChimp.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.