Character LCDs based on the industry standard HD44780, or some more or less compatible clone, are among the most recurring topics here at AVRfreaks. The HD44780 data sheet holds all information needed, but is is not perfectly organized for a newcomer to the subject, and it might be daunting to plow through the 100 or so pages.
In my world the basic procedure for reading or writing a byte (or nibble in the 4-bit interface) is best illustrated by the timing diagrams. Still they are clobbered with some detail that has little consequence when using AVRs - specifically the rise/fall time requirements.
Redrawing them, removing rise/fall times, and putting the actual numbers into the diagram, yields two remarkably clear diagrams.
Since my LCD tutorial never got written (or at least not yet) I've decided to create this mini-tutorial with my simplified, but sufficient, timing diagrams.
In the diagram for a read operation, the timing in red is a promise on what the 44780 will perform. All other timings, black, in both diagrams, are minimum timing requirements on how your AVR app must perform.
[I had some problem going from my original SVG files to something that AVRfreaks accepted as an attachement. I ended up PNGs of rather low quality. Please do not re-distribute to other sites, but point here instead as I will update when I find a better conversion path and/or target.]