Whenever you come across a LCD that looks like it has 16 connectors it is most likely using a HD44780 controller. These devices provide the same pinouts making them relatively easy to work with. The LCD uses a parallel interface meaning that we will need many pins from our raspberry pi to control it. In this tutorial we will use 4 data pins (4-bit mode) and two control pins.
The data pins are straightforward. They are sending data to the display (toggled high/low). We will only be using write mode and not reading any data.
The register select pin has two uses. When pulled low it can send commands to the LCD (like position to move to, or clear the screen). This is referred to as writing to the instruction or command register. When toggled the other way (1) the register select pin goes into a data mode and will be used to send data to the screen.
The read/write pin will be pulled low (write only) as we only want to write to the LCD based on this setup.
The enable pin will be toggled to write data to the registers.
- VCC - 5v not 3.3v
- Contrast adjustment (VO) from potentiometer
- Register Select (RS). RS=0: Command, RS=1: Data
- Read/Write (R/W). R/W=0: Write, R/W=1: Read (we won't use this pin)
- Clock (Enable). Falling edge triggered
- Bit 0 (Not used in 4-bit operation)
- Bit 1 (Not used in 4-bit operation)
- Bit 2 (Not used in 4-bit operation)
- Bit 3 (Not used in 4-bit operation)
- Bit 4
- Bit 5
- Bit 6
- Bit 7
- Backlight LED Anode (+)
- Backlight LED Cathode (-)
Before wiring, check that your LCD has an LED backlight, not an EL backlight. LED backlights use 10-40mA of power, EL backlights use 200+ma! EL backlights are often cheap to get but are not usable, make sure you don't use one or you will overload the Pi. Some cheap LCDs that have LED backlights do not include a resistor on the LCD module for the backlight, if you're not sure, connect a 1Kohm resistor between pin 15 and 5V instead of connecting directly. All Adafruit LCDs have LED backlights with built in resistors so you do not need an extra resistor!
The raspberry Pi GPIOs are designed for 3.3v, but our LCD is a 5v device. It's fine to use a 5v display, but only if we are sending data out of the Pi. We are not going to use the 3.3v power rail on the Cobbler, and we will tie the RW (read/write) pin of the display to GND as we do not want the display sending a 5v signal into the Pi.
Don't cross the streams!
First, connect the Cobbler power pins to the breadboard power rail. +5.0V from the Cobbler goes to the red striped rail (red wire) and GND from the cobbler goes to the blue striped rail (black wire)
In order to send data to the LCD we are going to wire it up as follows
- Pin #1 of the LCD goes to ground
- Pin #2 of the LCD goes to +5V
- Pin #3 (Vo) connects to the middle of the potentiometer
- Pin #4 (RS) connects to the Cobbler #22
- Pin #5 (RW) goes to ground
- Pin #6 (EN) connects to Cobbler #17
- Skip LCD Pins #7, #8, #9 and #10
- Pin #11 (D4) connects to cobbler #25
- Pin #12 (D5) connects to Cobbler #24
- Pin #13 (D6) connects to Cobber #23
- Pin #14 (D7) connects to Cobber #18
- Pin #15 (LED +) goes to +5V (red wire)
- Pin #16 (LED -) goes to ground (black wire)
Then connect up the potentiometer, the left pin connects to ground (black wire) and the right pin connects to +5V (red wire)
Here's a sketch of the T-Cobbler Plus version:
Sketch for a 26 pin Cobbler Raspberry Pi (v1, v2)
Preparing the LCD
Before you start, make sure you have a strip of 0.1" male header and a 10K potentiometer. All Adafruit Character LCDs come with these parts so you should be good to go.
Most LCDs have a strip of 16 pins on the top, if the header is a little longer, just break it off until its the right length
Next you'll need to solder the header to the LCD. You must do this, it is not OK to just try to "press fit" the LCD!
Start by connecting the 5V and GND wires from the cobbler to the breadboard. Then connect pins #1, #2 and #15, #16 to the breadboard power rails as shown. The backlight should come on. If it doesn't, check the wiring!
Next, wire up the contrast potentiometer as shown above, with the middle pin connecting to LCD pin #3 and the other two pins going to 5V and ground.
Twist the potentiometer until you see the first line of the LCD fill with boxes. If you don't see the boxes, check your wiring!
Finish the wiring for the RS, RW, EN, D4, D5, D6, and D7 pins as shown in the diagram up top.
That's it! Now you're ready to run the Python script to draw text on the screen!