Those of you who follow my blog know that I like to tinker with character LCD displays. Until recently, that tinkering was focused on the software side. What started me down the road to hacking the hardware was an attempt to reduce the power consumption of the displays. The photo above shows the modified resistor network used to provide the bias voltages used by the LCD controller. One end of the resistor ladder is connected to Vcc, and the other is connected to the bias/constrast pin (#3). My modules came with 5 resistors of 2.2K Ohms each for a total of 11K. Powered from 5V, the bias network will use about 450uA even when the LCD display is off. When I changed the middle resistor in the ladder to 15K, the display stopped working, so I started investigating how the voltages are used to drive the LCD.
I remembered coming across an AVR application note on driving LCD displays, which helped explain some of the basic theory. I also read a Cypress application note on driving LCD displays. What I lacked was a full description of how the HD44780 drives the LCD, as the manual only describes the waveform for the common lines and not the segment lines. From the application notes, I knew that the difference between the segment and common lines would be around the LCD threshold voltage. The first information I found indicated a threshold voltage of over 2V, but modifying the bias resistors for a 2V threshold voltage resulted in a blank display. Further investigation revealed the threshold voltage to be much lower, close to 1V. Therefore the segment waveform looks something like the green line in the following diagram:
With the stock 2.2K resistor ladder, my modules gave the best contrast with 0.3-0.4V on the contrast pin. With Vcc at about 5.05V, that means the difference between each step in the bias ladder was 0.94V. To confirm the theory, I calculated the resistance values needed to maintain 1.2V between V2 and V3, and ~0.95V between the rest, for a total of 5V. This means the middle resistor in the ladder needs to be 1.2/0.95 = 1.26 x the resistance of the rest. Using some 7.5K 0805 resistors I have on hand meant I needed something around 9.5K for the middle resistor. The next size up I have in chip resistors is 15K, which was too much, but I could re-use one of the original 2.2K resistors in series with a 7.5K to get a close-enough 9.7K. After the mod, I plugged it into a breadboard, and it worked:
With additional hacking to the bias network, it should even be possible to get the modules to work at 3.3V. That would require flipping V2 and V3, so that V3 > V2, and V3-V4 = ~1V. And that likely requires removing the resistor ladder, and adding an external ladder with taps going back to the PCB pads on the LCD module. That's a project for another day.