I2C LCD display long distance

Hello!

I want connect to my arduino two I2C LCD 20x4 display, distance between them will be aprox. 35m
over UTP CAT5 cable ( 5V, GND, SCL, SDA )

The screen does not work at this distance over I2C.

How can I solve the problem?

Is there any module on ebay for range extend ?

Use another Arduino to drive the second display.

What resistors are you using?

aarg:
Use another Arduino to drive the second display.

And how to connect two arduino ?

INTP:
What resistors are you using?

I have not tried yet... what do you recommend ?

Serial should work over 35m. Depending on what else is nearby (electrical interference) then RS232 Serial would be less affected by noise.

On twisted pair, RS485 will be good for kilometers, even with lots of external noise. CAN Bus too, but that's overkill for just 2 Arduinos.

I've seen (and purchased) range extenders for I2C but they only claim 20m as the maximum.

svedr:
How can I solve the problem?

Maybe look into this one....

click here

LCD backpack could be I2C FM+ (post link).
In that case, low value pull up resistors can be used.

Clock must be on a twisted pair with ground.
Data must be on a different pair with ground.
Needed to minimise crosstalk.
Remaining two pairs for 5volt and ground.
Use four 1k pull up resistors, two at one end and two at the other end of the cable.
Report back. This (I2C over that distance) has been a long standing argument.
Leo..

Thank you all....

If I understand it right, i connect resistor between SDA - 5V and SCL - 5V, about 4.7k
It probably does not matter which side, on the LCD or at the arduino ?
Must the values be the same ? ( SDA-5V=4.7k and SCL-5V=4.7k ?
It will probably be easier with a potentiometer 5K ....

i try and then report....

I also order from ebay RS-485 module , but it will take time to fly the pigeon with the package from China.... ::slight_smile:

1 Like

Just putting this one here for reference ...... hopefully it works.

click here....

The pullup resistor values should be close. They don't have to be the same. The reason is the slave waits until it sees the SCL pass the HIGH threshold, then it waits for about half the expected bit time and looks at SDA to see if it's HIGH or LOW. If the pullup on SDA is significantly weaker then it may still be halfway between LOW and HIGH when the slave examines it.

For short cables, it doesn't matter if the resistors are at one end or the other, or even if there's many resistors. For longer cables then impedance-mismatch reflections off the end of the cable become important. Then you may want to have equal resistors at each end but the impedance of the required pullups will never match the cable impedance.

4.7K is too much resistance. 1K is probably much closer.

ok... i try when I get home, thanks

Now o try with 1Kohm resistor ( SDA-5V=1k and SCL-5V=1k ) and then with 15cm on 2 display.
Work aprox. one day then booth display frozen-show strange simbols.....

Let me try with a greater or lesser resistance ?
I would have to resist it before every screen or just in the end of cable and then SDA and SCL on two display ?

The I2C bus was designed for communication between chips on a single board. On occasion I have pushed length successfully (but not 35m).

Others have made some good suggestions and should be considered, however I have a quick suggestion; drop the I2C clock to 10k (or maybe less). This will give the clock and data pulses time to stabilize.

Jon

Don't generalise I2C. There is more than one standard.
FM+ is 10x more powerful than standard I2C.

I run default (100k) I2C 24/7 from a Mega to two PCA9685 chips over ~6meters of Cat-6 with zero problems.
Leo..