What are the different data wires used for in an LCD-screen?

I have stumbled over a project where a guy connects four 1602 LCD-screens to an Arduino Uno, only using 9 (I think) of the I/O pins.

Link to project: 4 LCD displays on 1 Arduino - hackmeister.dk

So I was wondering if anybody knew what the induvidual signal pins was used for? In his example, he has five of the six pins shared between all of the LCD’s, and only one signal pin to each screen from the Uno. All the data has to go through that single signal pin, then, rigth? Since if it didn’t, all the LCD’s would have displayed the same information?

Summary for question:

  1. what are the induvidual pins used for?
  2. are the five pins shared really that useful afterall?

Or is there just something obvious I am missing here?

The only pin that is not shared on each LCD is a CS (chip select) pin.
This allows to select the LCD that accepts the data.

Arduino broadcasts data to all shared pins.
But LCDs that don’t enabled chip select will ignore that data.
Separate display is possible by sending data in take turn using this.

Oh, ok. Thanks!
Would this work even with different dimensions on the LCD?
Example: one 1602 and one 2004?

YES, but you’re about to learn something about character LCD screen positions and addressing rows.

Yes, It is possible if properly good configured.

You will have multiple “instances” of the functions to control the LCDs. The “setup” for each instance will define the dimensions of that instance along with specifying the common data pins and the individual CS pin for that instance. No two displays can be in the process of being updated at the same time since each will respond only ever in the part of the code where its own instance is used to feed data to it.

he shares Rs and datapins amoung the displays. Only the En is separated. This is ok and also done in the 40x4 displays where you have 2 separate enable pins and the other pins are shared.

so only the display with active enable signal will react to the rs and data signals. The ohters will receive data/rs but as they don’t get enable, they will ignore these signals.

That is a very peculiar question indeed. What did you mean? :face_with_raised_eyebrow:

Well, I guess I did not knew my LCD as good as I should, because for me it did not make any sense for two LCD’s to recieve the very same data and not display it, but I get it now :slight_smile: it works kind of like an adressable LED-strip, rigth? All LED’s recieve the same data, but most ignore it? Or am I missing that too?

Not sure about the similarity to the addressable LED strip which uses only one wire, but essentially in the case of the LCDs, the five common wires are used to provide the data to the strip but you can consider it as saying the sixth wire for each individual strip (“Chip Select”) is a switch to switch that chip on or off in respect of listening to the data.

Note in fact that since in general we do not even check on whether the driver chip has responded to the data (the read/ write line is permanently set to “read”), you can actually send the same data to more than one or all the displays at once as long as the data would match them all.

This sixth pin: is it just a HIGH or LOW signal? Could I control it from let’s say another Arduino? Not that that would be practical, it’s just for learning.

you could but it makes no sense. The high/low trigger has to be done in the right moment, which might be tricky for another Arduino.

The “E” signal relies on a transition. Not a steady state.

Some hardware devices interpret an “Enable”, “Chip-Select”, “Chip-Enable”, … as a steady state. But this generally means that there is a separate pin that latches the data, starts a command, …,

Just accept that the HD44780 that is used in your 16x2 LCD require the E pin to wiggle.
The LCDs with non-wiggling E pin will ignore the command.
The LCD with wiggling E pin obey the command.


This topic was automatically closed after 120 days. New replies are no longer allowed.