i2c with 5V Pullups on Due (using Wire1.<code>)

Hi Guys,

I have a problem to make my i2c bus running. My network shows like following shematic grafic:

The Problem: Every MEGA has an 10k pullup resistor fix included and on the Logic Level Converter are also 10k Pullups are soldered on. The pullups from the UNO are deactivalable by digitalWrite(SDA, LOW) and digitalWrite(SCL, LOW) in setup() after Wire.begin().
In summary there are 3 10k pullups parallel in 5V Line, which I can't eliminate. A stable running is not possible in standard Mode (every time the bus freezes). In hours of testing I come to the result, that in 5V level a pullup resistance of only 10k works best, if I want to let to communicate one Arduino to another.

in 3v3 line the Due has an 1,5k pullup resistor and 10k Resistor from the Logic Level Converter parallel. The joint resistance is about 1,3k, which causes a sink current of 1mA.

Now my idea: Connecting a Mega directly from the SDA/SCL pins to the SDA1/SCL1 pins of the Due. This results, that a 5V voltage is pulling up the i2c bus lines.

Warning: Unlike other Arduino boards, the Arduino Due board runs at 3.3V. The maximum voltage that the I/O pins can tolerate is 3.3V. Providing higher voltages, like 5V to an I/O pin could damage the board.

This text i got from the main information site of the Due from arduino.cc. I confirm to this statement, but if I have a 5V voltage an my SDA1/SCL1 pins, is this also valid?

I testet it in risk of damaging the Due by using the Wire examples "Master Writer" and "Slave reciever". Take a look on following draft:

The Master in this case is the Mega and the Slave is the Due.

I got the following results:

Due:

x is 0
x is 1
x is 2
x is 3
x is 4
x is 5
x is 6
x is 7
x is 8
x is 9
x is 10

Mega:

writing i2c: x is 0
writing i2c: x is 1
writing i2c: x is 2
writing i2c: x is 3
writing i2c: x is 4
writing i2c: x is 5
writing i2c: x is 6
writing i2c: x is 7
writing i2c: x is 8
writing i2c: x is 9
writing i2c: x is 10

It's already running for 2 hours yet, without any problems.

My Question is: Is it possible to run the Due safety with 5V pullups on i2c line permanently and without issues (concerning to the "damaging statement")?

No it is not safe. Disconnect the pullups to 5V and connect them to 3.3V.

If you measure the I2C line voltage (with no data) you will find that the Due is dragging them down to 3.3V via its internal protection diodes.

Hi,

I solved my problem on other way. I made my own Logic Level Converter with the 2N7000 (TO-92) without any pullups an the converter platine. It's now contructed like this shematic art:

The Onboard Pullups of the Megas and the Due are already enough to keep safety running.

Logic Level Converters like this or this are constructed like this circuit layout:

So...all of the "ready to plug" LLCs have 10k pullups soldered on. The whole pullup resistance of the i2c is too less, if there are too much pullups parallel. In this case the sink current became too high (and overloads the SDA/SCL Pins of Arduino) and the i2c may freeze.

With my LLC concept without pullups there is not any longer a sink current occured by the LLC. The 3V3 and the 5V i2c Levels are running seperated by the 2N7000 and the communication between them is made possible too on this way. There is not any longer a damage hazard and a stable running is ensured :slight_smile:

Problem solved