Go Down

Topic: No problem, just a question (LCD: 4 bit v. 8 bit) (Read 6 times) previous topic - next topic


More complicated than that. Newer devices tend to be much faster than the Hitachi device. Some can be initialized by the standard HD44780 sequence or their own initialization sequence.

JHD1602 is one such example.


More complicated than that.

I really don't see how a newer device that runs a bit faster but uses the same instruction set makes things more complicated.  If you want your program to work with a wide range of devices, older and slow as well as newer and less slow, you just write to the lowest common denominator.

Some can be initialized by the standard HD44780 sequence or their own initialization sequence.

Be careful about devices that have what looks like their own initialization sequence.  Other than the New Haven Displays (which do not fit in the category of controllers that I am discussing) I tend to think that many of these 'unique' initialization schemes could very well be due to incorrect editing of the Hitachi datasheet that they were copying.

I am pretty sure that you will find that all of the devices that have the same instruction set as the HD44780 can be properly initialized by an program that correctly follows the 'Initialization by Instruction' flowcharts in the Hitachi datasheet.  Your statement does not contradict this - I just want to emphasize it because, unfortunately, I have found very few examples of such programming in my experience.  That would include every version of the LiquidCrystal library that I have seen so far.

JHD1602 is one such example.

I did a quick search for JHD1602 and the ones that I found were distributed primarily by Chinese wholesalers and no two search hits seemed to reference the same device.   I initially thought that this could be be because they are different varieties of essentially the same board just with different displays until I saw that different controllers were specified as well.  I didn't find any datasheets yet or follow up on the various controllers mentioned so I don't know about their recommended initialization sequence.

For reasons that you and I have expressed before there is no practical reason to try to speed up a program, especially one using the Arduino IDE, by tinkering with the LCD timing or by skimping on the initialization sequence which only runs once.



It won't fetch me a beer if I hook up four more wires?

That would have been nice though.


For reasons that you and I have expressed before ...

I don't question that you did but if I did express that view, I must have done it under the influence of Ambien. What I did express, as I recall, is that there are theoretical but practically immaterial speed gain going from 4-bit to 8-bit.

Many of the newer LCDs for example can work with the EN pulse between 100ns - 200ns. And they boot up almost instantaneously (can be initialized in a matter of ms). Code calibrated on those LCDs would not work on a regular HD44780.


I've been using the 4 bit configuration to connect my LCD, and it has performed as expected.

What could I do if I connect it in 8 bit configuration that I can't do now?  What would the other 4 pins get me?

Assuming you are using the shipped LiquidCrystal library,
not much other than 4 less digital pins to use.
Given that the Arduino digitalWrite() routines are so slow and the shipping LiquidCrystal
library has much longer delays in certain places than are necessary, there will only be a very small amount
of gain.
The gain will be mainly due to the library unnecessarily delaying between nibbles that will no longer be done.

Much bigger gains can be achieved by eliminating the unnecessary delays than by going to 8 bit mode
with the existing LiquidCrystal library.
Going to raw port i/o vs using the Arduino core code digitalWrite() functions  can help speed things
up even more. (Raw port i/o is about 75x faster than digitalWrite() )

If you want to play around with an optimized library switch to this LiquidCrystal replacement library:
This library supports multiple interfaces and also supports backlight control)
In 4 bit mode and not using raw port i/o, it is close to 3.5x faster than the Arduino supplied LiquidCrystal library.
Run the included LCDiSpeed sketch to see the speed of the interface.
(It works on the original as well as the replacement library)
You will have to slightly modify the sketch to select your interface (LCDIF_4BIT in your case)
and then fix the 4BIT lcd constructor to match the pins you are using.
It is a great sketch to demonstrate the speed of the interface and very useful for comparing
the speed of different interfaces.
It will display the speed information on the LCD display.

--- bill

Go Up