Using a Dual Bidirectional I2C Bus Voltage-Level Translator in my circuit

Thread Starter

Henry603

Joined Nov 19, 2018
69
I have made a circuit that uses this ADC powered with 3.3V (MCP3422): Datasheet

Now I would like to communicate with it over I2C using an Arduino Mega.
The problem is that the Arduino's I2C is operating on 5V level and the I2C bus of the ADC (can handle up to 5V supply but is only supplied with 3.3V) is on 3.3V level only.

Now I guess in order to ensure a stable communication I should use an I2C Bus Voltage-Level Translator like e.g. the PCA9306: Datasheet

As far as I know the Arduino Mega has internal 50 kOhm pullups that can be disabled.
In addition there are fixed 10 kOhm pullups on the Arduino Mega that can not be avoided/disabled (so I can not connect the two devices directly).

Now my plan is to disable the 50 kOhm resistors on the Arduino and use the PCA9306 level-shifter.
One the V_ref1 side of the PCA9306 I will attach my 3.3V circuit I2C domain and on the V_ref2 side of the PCA9306 the Arduino 5V I2C domain will be connected.
I will use 5.1 kOhm pullups on both sides of the PCA9306 (because I have them here and also I want to make sure the current draw will be limited to less than 10mA).

Question:
  1. Do you have experience with the PCA9306? Any Pitfalls I should know about? Or would you even recommend another method to interface both of my I2C domains? The use of the PCA9306 seems pretty straightforward (at least regarding the datasheet).
  2. Will I be able to limit the current draw of the PCA9306 to about 10mA? As far as I understand the current draw of the device is mainly determined by the pullup resistors that are used. If I'm not mistaken I should be able to limit the current consumption down to <10mA (~3.25mA) when using the 5.1 kOhm pullups on both sides if my calculation is right.Would really appreciate it if someone could confirm this. :)
  3. Do you see any problems with this approach? The resistor values I have chosen should not be a problem I guess? Im not really concerned regarding bus speed.

Thank you very much.
 

Thread Starter

Henry603

Joined Nov 19, 2018
69
Since the MCP3422 can handle up to 5.5 volts, can you just resupply the chip with 5 volts from the Arduino?
SG
Unfortunately that is not possible.
The ADC is used on a circuit board that is powered (together with some other components) with 3.3V.
A low noise LDO is powering the board.
 

geekoftheweek

Joined Oct 6, 2013
1,429
  1. Do you have experience with the PCA9306? Any Pitfalls I should know about? Or would you even recommend another method to interface both of my I2C domains? The use of the PCA9306 seems pretty straightforward (at least regarding the datasheet).
  2. Will I be able to limit the current draw of the PCA9306 to about 10mA? As far as I understand the current draw of the device is mainly determined by the pullup resistors that are used. If I'm not mistaken I should be able to limit the current consumption down to <10mA (~3.25mA) when using the 5.1 kOhm pullups on both sides if my calculation is right.Would really appreciate it if someone could confirm this. :)
  3. Do you see any problems with this approach? The resistor values I have chosen should not be a problem I guess? Im not really concerned regarding bus speed.
I don't have experience with this part, but I have used a couple TCA9543 for connecting PI Zeros to PICs running 5 Volt I2C busses. http://www.ti.com/lit/ds/symlink/tca9543a.pdf Although the part you are looking at should work just fine as far as I can tell the TCA9543 has the added interrupt logic as well as a bus reset feature that may or may not be nice to have depending on what you want or need to do.

As far as everything else goes I would say you are on the right track.
 
Top