HD44780
Das HD44780 hat zwei Zeilen mit je 16 Zeichen zur Darstellung. Es ist ein Industriestandard für diese Art von Bildschirmen.
Das HD44780 hat 16 Pins, man kann es mit 4 und 8 Bit steuern. In der Tabelle ist zu sehen welche Pins mit dem Raspberry Pi verbunden werden.
HD44780 | RASPBERRY PI |
---|---|
VSS – Ground | Pin 6 – GROUND |
VCC – (+5V) | Pin 1 – 3.3V |
VE – Contrast adjustment | Pin 6 – GROUND |
RS – Register Select | Pin 26 – SP10 CE1 N |
RW – Read/Write | Pin 6 – GROUND |
EN – Clock (Enable) | Pin 24 – SP10 CEO N |
D0 – Data Bit 0 | |
D1 – Data Bit 1 | |
D2 – Data Bit 2 | |
D3 – Data Bit 3 | |
D4 – Data Bit 4 | Pin 12 – GPIO 18 |
D5 – Data Bit 5 | Pin 16 – GPIO 23 |
D6 – Data Bit 6 | Pin 18 – GPIO 24 |
D7 – Data Bit 7 | Pin 22 – GPIO 25 |
BLA – Backlight Anode (+) | Pin 1 – 3.3V |
BLK – Backlight Cathode (-) | Pin 6 – GROUND |
Nachdem alles verkabelt ist sollte das Display nach dem einschalten aufleuchten.
Daten und Kommandos werden über die 8 Data Pins und RS gesendet.
RS teilt dem Modul mit ob die 8 Data bits Daten oder einem Kommando zugeordnet werden.
Um Daten und Kommandos and das Modul zu senden:
- Enable auf 1 setzen
- RS und D0-D7 setzen
3 .Enable auf 0 setzen
Zwischen den Operationen muss eine kurze Zeit gewartet werden.
RW ist an GROUND angeschlossen, da nur geschrieben aber nicht gelesen werden soll.
Mit einem Python Skript kann man nun Informationen auf dem HD44780 darstellen.
import time
import RPi.GPIO as GPIO
# Define LCD to GPIO pin mapping
LCD_RS = 7
LCD_E = 8
LCD_D4 = 25
LCD_D5 = 24
LCD_D6 = 23
LCD_D7 = 18
# Define device constants
LCD_WIDTH = 16 # Max characters per line
LCD_CHR = True
LCD_CMD = False
LCD_LINE_1 = 0x80 # RAM address for the 1st line
LCD_LINE_2 = 0xC0 # RAM address for the 2nd line
# Timing constants
E_PULSE = 0.00005
E_DELAY = 0.00005
GPIO.setmode(GPIO.BCM)
GPIO.setup(LCD_E, GPIO.OUT) # E
GPIO.setup(LCD_RS, GPIO.OUT) # RS
GPIO.setup(LCD_D4, GPIO.OUT) # D4
GPIO.setup(LCD_D5, GPIO.OUT) # D5
GPIO.setup(LCD_D6, GPIO.OUT) # D6
GPIO.setup(LCD_D7, GPIO.OUT) # D7
def lcd_init():
lcd_byte(0x33,LCD_CMD)
lcd_byte(0x32,LCD_CMD)
lcd_byte(0x28,LCD_CMD)
lcd_byte(0x0C,LCD_CMD)
lcd_byte(0x06,LCD_CMD)
lcd_byte(0x01,LCD_CMD)
def lcd_string(message):
message = message.ljust(LCD_WIDTH," ")
for i in range(LCD_WIDTH):
lcd_byte(ord(message[i]),LCD_CHR)
def lcd_byte(bits, mode):
GPIO.output(LCD_RS, mode) # RS
# High bits
GPIO.output(LCD_D4, False)
GPIO.output(LCD_D5, False)
GPIO.output(LCD_D6, False)
GPIO.output(LCD_D7, False)
if bits&0x10==0x10:
GPIO.output(LCD_D4, True)
if bits&0x20==0x20:
GPIO.output(LCD_D5, True)
if bits&0x40==0x40:
GPIO.output(LCD_D6, True)
if bits&0x80==0x80:
GPIO.output(LCD_D7, True)
# Toggle 'Enable' pin
time.sleep(E_DELAY)
GPIO.output(LCD_E, True)
time.sleep(E_PULSE)
GPIO.output(LCD_E, False)
time.sleep(E_DELAY)
# Low bits
GPIO.output(LCD_D4, False)
GPIO.output(LCD_D5, False)
GPIO.output(LCD_D6, False)
GPIO.output(LCD_D7, False)
if bits&0x01==0x01:
GPIO.output(LCD_D4, True)
if bits&0x02==0x02:
GPIO.output(LCD_D5, True)
if bits&0x04==0x04:
GPIO.output(LCD_D6, True)
if bits&0x08==0x08:
GPIO.output(LCD_D7, True)
# Toggle 'Enable' pin
time.sleep(E_DELAY)
GPIO.output(LCD_E, True)
time.sleep(E_PULSE)
GPIO.output(LCD_E, False)
time.sleep(E_DELAY)
try:
lcd_init()
lcd_byte(LCD_LINE_1, LCD_CMD)
lcd_string("Raspberry PI")
lcd_byte(LCD_LINE_2, LCD_CMD)
lcd_string("HD44780 LCD")
time.sleep(5)
GPIO.cleanup()
except KeyboardInterrupt:
print "Bye..."
GPIO.cleanup()