The LCD display is approx 6 ft from the UNO and connected with an 8 wire Ethernet cable.
The Arduino's task is to control a central heating system with boiler, fireplace and solar collector.
When one of the 8 relays switches a circulation pump, the text "*heating" always changes into *0eating. The texts are static and assigned in the setup() section, so the cause must be a spike on the wiring. There are pull-up resistors on the data lines and the cable is not near any AC grid wiring. All relays are optically coupled and have their own 5VDC supply.
Is there anything else I can do to fix this or should I just rewrite the text after the relay changes state?
If you have control of the relays, you simply re-initialise and re-write your LCD whenever you change the relay state.
It might help if you place a BFC e.g. 1000uF on the LCD module's VCC line.
I suspect that you are actually getting the glitch on the I2C lines. Your cat5 pairing should help.
Thank you David.
Will 1000 uF across Vcc and GND not hurt the regulator on the Arduino board when power is removed?
I could not really use the cat5 pairing because the display housing also contains a Dallas temp sensor and 3 buttons. I took blue and white together for GND, red and gray for Vcc. Light green and brown are SC and SD, dark green is the sensor output and pink is connected to a ladder network for the 3 push buttons connected to an analog input.
The wires seem to be aluminum or an alloy that cannot be soldered. I would rather have used a shielded 6 wire cable but that was not available.
Replaced the suspect cable with Logilink cat6. Each pair foil shielded with a braided shield around the 4 pairs. SC and SD are in separate pairs, so are the Dallas sensor and analog pushbutton.
This completely solved the issue!
Cable length is approx. 5m (15 ft), I guess longer cables would not present a problem.