Getting to Grips With The OSEPP LCD Keypad Shield
The OSEPP LCD Keypad Shield is one of several very similar display devices on the market. They provide an adjustable backlit LCD display with two lines of 16 characters, six programmable pushbutton switches, and a reset switch.
They're available at reasonable cost and look to be a good solution for adding a minimal user interface to a prototype or lab project.
Unfortunately there are a few problems with these that will tax your sanity and possibly fry your Arduino. Hopefully my experience with it will save you some time and trouble.
Several online vendors sell boards that appear to be identical to this one so this information ought to apply to them as well, but the OSEPP one is the only one I've had direct experience with.
Important! Disabling backlight control.
This and similar boards allow the LCD backlight to be switched on and off by toggling the state of the D10 digital output pin. When D10 goes high, the backlight is switched off.
Unfortunately, there's a design fault that will eventually fry your Arduino if the backlight is switched off. At least one online vendor specifically warns users not to play with D10.
Several solutions to this issue have been devised but the only one that's likely to be feasible and infallible, especially in an educational setting, is to disable the backlight control altogether by cutting off the D10 pin on the bottom of the display board. This will make the backlight stay on all the time.
You'll need a pair of fine wire cutters for this. When in doubt, take it to your IT person. If you don't do this, my bet is you're going to have an epidemic of blown microcontrollers.
Here is very informative forum thread that outlines the problem in detail.
Restoring access to unused pins.
If you're going to be doing more with this than printing messages on the LCD, you're going to need access to the Arduino interface pins that aren't used by the display. The unit itself takes seven digital I/O pins (D4 through D10) and one analog input (A0). Three of the four sets of interface pins on the display board have a parallel row of holes, but no connectors.
I've heard of people just sticking jumper wires into those holes but that didn't seem like a particularly robust solution to me.
After a few experiments, I opted to use a set of stackable headers. It was necessary to shorten a couple of these by removing pins from them. I put the connectors in a vise and carefully cut off the required number of pins with a cutoff wheel in a Dremel tool.
Rather than having the new header connecters mounted at right angles to the board, which would have interfered with mounting it in an enclosure, so I clamped the pins of each connector in a vise and carefully bent them to a 90-degree angle.
Finally, I soldered the connectors in place from the back side of the board and cut the pins off flush with the back of the board. That is to say, I cut the newly-installed pins, not the ones that were already there. You need those.
After using this for a while, I'm not sure I'd do it this way again. Having the jumper wires for the power and digital pins connect on the sides of the device is awkward and if all you're not putting the display in an enclosure, not really necessary. Next time I mod one of these boards I might just install the headers perpendicular to the circuit board without bending the pins.
Finding the unused pins.
The pinouts of the two connectors on the "bottom" edge of the board are incompletely but usefully labelled and in any case follow are in the same order as the pins they connect to on the Arduino.
The "top" connector, which carries the unused digital I/O pins, does not follow the order on the Arduino. It is also unlabelled and I guarantee you will never be able to figure out the pinout from the wretched excuse for a schematic diagram provided by the vendor.
The pinout of the top connector, from left to right when looking at the board from the front, is as follows:
While we're on the subject, note that D1 and D0 are also used for serial communication and can't be used if your program uses serial communication.
Also, I found that if there was anything connected to D1 or D0, it had to be unplugged before uploading a sketch (that is, a program) to the Arduino.
Bruce Grant's Web Page is licensed under a Creative Commons Attribution 4.0 International License.
Based on a work at http://www.wbga.ca..