Go Down

Topic: I2C Bus with 3.3v and 5.0v Device (Read 19315 times) previous topic - next topic


Hi.. I need a small help.
I need to connect 4 device on the same I2C bus. 2 device is in a 5.5v and 2 device in a 3.3v.
No problem for connect to the power.
My problem is:
I know that need to use 2 pull-up resistor for connect the SDA and SCL chanell to the the power, but with different voltage is possible ?
Connect the resitor to 5.0v or to 3.3v power ?... or i need to remove the resistor ?
Is possible connect device with differrent power ?

thank you


Which Arduino board are you using? What is the revision?

All signals should be converted to the signal level (voltage) used by the processor.

Post a circuit diagram of what you want to do.


Hi.. thank you..
I using the Arduino UNO rev 3.
This is the list of the sensor that I want connect:
1) http://arduino-direct.com/sunshop/index.php?l=product_detail&p=333 ( I know that in this sensor need to remove the pull-up resistor)
2) http://www.adafruit.com/products/264
3) https://www.adafruit.com/products/439
I hope I've given you enough information



You should use something like this


to convert the levels for the 3V3 devices (given that your Arduino runs on 5V).


You may be able to just connect the i2c resisters to 3.3v.  You can check the datasheet for everything so see what they consider to be on for there i2c it's pretty common for it to be a good deal lower than it's operating voltage.  As long as everything considers something below 3.3v to be on it should work ok.  Worst case you will need a converter as others have said but there is no harm in giving it a go.


I just tried this with a Leonardo and pro mini 3.3 volt. I hooked up 4.7k resistors between I2C lines and +3.3 volts and it works great. The two arduinos are a couple inches apart.


Sep 05, 2012, 12:58 am Last Edit: Sep 05, 2012, 01:05 am by Joi F Reason: 1
Some 3.3v devices handle 5v, so you might get away with it for some time, but it is likely that you're shortening the lifetime of your 3.3v devices significantly. You might also run into 5v devices where 3.3v input voltage is not enough to trigger a HIGH.

You'll need a level shifting circuit, something like the one pylon mentioned. You can also build your own if you like.

The tricky bit that confuses a lot of beginners is that for I²C, it has to be bidirectional.
NXP (Philips) have an application note that describes all of this to you: http://www.nxp.com/documents/application_note/AN10441.pdf
It seems to me that the level converter pylon posted is the same thing you see in that document: basically a couple of mosfets.  :)


I use the specification page on arduino.cc for each board I use often. The problem is it doesn't include what voltage the boards' i2c/TWI oppatare at. Example :ArduinoBoardZero The Due mentions, "While SDA and SCL have internal pullup resistors, SDA1 and SCL1 have not. Adding two pullup resistor on SDA1 and SCL1 lines is required for using Wire1." This makes sense as the board is larger, why not include built in pullup resistors? Do other 3.3 volt boards (like the Zero) operate of 3.3 volt bus communication?
What about the 5 volt boards? Do they work at 5 volt bus communication?

Go Up