I wandered through Axman (you can imagine) last week and saw they had some LCD panels. I bought one out of curiosity and today I soldered headers on and tried it out. It seems to be significantly slower than anything I've tried before. Interesting experience after having played with quite a variety of different LCDs to find one that seems so far off the specs of the others.
Running the test program that I've used in writing the enhanced LiquidCrystal, it displays garbled output for a long time, then eventually seems to sync properly and start displaying output that makes sense. This is quite reminiscent of the 16x2 LCD that was a LITTLE slower than all the others I have tested.
I could see that it was dropping a couple of characters after clear, and I increased the delay after clear() from 2000 millisec to 2500 which solved that. I did the same for home().
Running it without a busy test and with delayMicroseconds(100) was problematic and things seemed to improve when I increased that to delayMicroseconds(140).
I've increased the delays in the initialization several times without success yet; it still displays garbled output for a few seconds after startup despite doubling some of the delays. Anyway once it does sync, several seconds after it should have started, it does work perfectly.
The on the back it says "Hyundai Korea HC 20401". rather than round bumps (as most LCDs have) you can see the ICs; the controller chip says 4L3 HD44780A00. it is a 20x4 display.
I've increased the startup delays
// SEE PAGE 45/46 FOR INITIALIZATION SPECIFICATION!
// according to datasheet, we need at least 40ms after power rises above 2.7V
// before sending commands. Arduino can turn on way before 4.5V so we'll wait 50
delayMicroseconds(60000); //I don't think I can adequately test this number; it will depend a little on which Arduino or clone you have and probably
//could also vary with the power source applied to that board. The way to test is really to load your program, remove power
//and then reapply power so that the program starts up as power is applied. If anyone finds they need a larger number please
//let me know: raine001 at tc dot umn dot edu
// Now we pull both RS and R/W low to begin commands
digitalWrite(_rs_pin, LOW);
digitalWrite(en, LOW);
//put the LCD into 4 bit or 8 bit mode
if (! (_displayfunction & LCD_8BITMODE)) {
// this is according to the hitachi HD44780 datasheet
// figure 24, pg 46
// we start in 8bit mode, try to set 4 bit mode
//at this point we are in 8 bit mode but of course in this interface 4 pins are dangling unconnected and the values on them don't matter for these instructions.
write4bits(0x03,LOW);
delayMicroseconds(7000); // I have one LCD for which 4500 here was not long enough.
// second try
write4bits(0x03,LOW);
delayMicroseconds(300); // wait
// third go!
write4bits(0x03,LOW);
delayMicroseconds(300);
// finally, set to 4-bit interface
write4bits(0x02,LOW);
without success yet. An interesting experience and I hope somewhat instructive even if not further solved.