16x4 LCD topic discussion

@Nick

First of all you are talking Apples and Oranges. The KS0108B is a driver chip for a Graphical LCD not for a Character mode LCD. A similar Hitachi chip is the HD61202U, not the HD44780 chip that we are dealing with here. It's easy to get confused especially when one is dealing with an abbreviated data sheet. I have not been able to find anything more than an 18 page datasheet for the Samsung chip.

The Hitachi datasheet for the HD44780U does, however, contain a statement very similar to the one that you quoted for the KS0108B:

When the busy flag is 1, the HD44780U is in the internal operation mode, and the next instruction will not 
be accepted. When RS = 0 and R/ = 1 (Table 1), the busy flag is output to DB7. The next instruction 
must be written after ensuring that the busy flag is 0.

There is nothing in your quote or in this one that implies that this is the way you are 'supposed' to do anything. It just states how the busy flag relates to processor activity.

In the Hitachi datasheet, just above the Instruction set is this note:

Note:     Be sure the HD44780U is not in the busy state (BF = 0) before sending an instruction from the 
          MPU to the HD44780U. If an instruction is sent without checking the busy flag, the time between 
          the first instruction and next instruction will take much longer than the instruction time itself. Refer 
          to Table 6 for the list of each instruction execution time.

The second sentence needs some interpretation. I believe it says that if you don't make provisions to check the busy flag before sending an instruction then you must allow enough time for the previous instruction to complete before you send the next one. This time (delay) must be "much longer" than the instruction execution time given in the table.

The note does not emphasize the fact that Table 6 gives typical, not worst case, execution times but notice that it does say that the delay should be "much longer" than that value. Unfortunately the LiquidCrystal library and most other programs that I have examined do not do this. They work the majority of the time, but then again the majority of chips probably operate close to their nominal specifications.

As for missing part of "Hello, world" that also could be an artifact of the display not being ready after reset.

This was my initial thought as well but it is not correct since the controller is obviously being initialized (mostly) correctly.

Don