Bild

Anschlüsse

1 GND 2 +5V 3 Kontrast, hier ein Spindelpotentiometer zwischenschließen 4 Register Select (RS) an GPIO anschließen (26) 5 Read Write (RS) —> auf GND legen 6 Enable an GPIO anschließen (19) 7 unbenutzt 8 unbenutzt 9 unbenutzt 10 unbenutzt 11 D4 an GPIO anschließen (13) 12 D5 an GPIO anschließen (6) 13 D6 an GPIO anschließen (5) 14 D7 an GPIO anschließen (11) 15 Backlight +5V —→ hier kann man auch ein Potentiometer einbauen 16 Backlight GND (Hinweis : wenn ihr andere als die im Code angegebenen PINs verwenden wollt, dann stellt das im Python Code entsprechend um)

Spindelpotentiometer

Das Spindelpotentiometer (ihr könnt auch ein anderes Potentiometer nehmen, jeweils seitlich und in der Mitte verbinden) dient dazu, den Kontrast einzustellen. Wird der Kontrastpin auf GND gesetzt, ist das Display schlecht zu lesen

CODE

LCD_klein.py
# The wiring for the LCD is as follows:
# 1 : GND
# 2 : 5V
# 3 : Contrast (0-5V)* --> hier das Spindelpotentiometer zwischen GND und LCD PIN anschliessen
# 4 : RS (Register Select)
# 5 : R/W (Read Write)       - GROUND THIS PIN
# 6 : Enable or Strobe
# 7 : Data Bit 0             - NOT USED
# 8 : Data Bit 1             - NOT USED
# 9 : Data Bit 2             - NOT USED
# 10: Data Bit 3             - NOT USED
# 11: Data Bit 4
# 12: Data Bit 5
# 13: Data Bit 6
# 14: Data Bit 7
# 15: LCD Backlight +5V** --> wer will, kann auch hier ein Potentiometer einbauen, um die Helligkeit zu regulieren
# 16: LCD Backlight GND
 
#import
import RPi.GPIO as GPIO
import time
 
# Define GPIO to LCD mapping --> wer das Shield des RPi weiterverwendet, muss die PINs aendern
LCD_RS = 26
LCD_E  = 19
LCD_D4 = 13
LCD_D5 = 6
LCD_D6 = 5
LCD_D7 = 11
 
 
# Define some device constants
LCD_WIDTH = 16    # Maximum characters per line
LCD_CHR = True
LCD_CMD = False
 
LCD_LINE_1 = 0x80 # LCD RAM address for the 1st line
LCD_LINE_2 = 0xC0 # LCD RAM address for the 2nd line
 
# Timing constants
E_PULSE = 0.0005
E_DELAY = 0.0005
 
def main():
  # Main program block
 
  GPIO.setwarnings(False)
  GPIO.setmode(GPIO.BCM)       # Use BCM GPIO numbers
  GPIO.setup(LCD_E, GPIO.OUT)  # E
  GPIO.setup(LCD_RS, GPIO.OUT) # RS
  GPIO.setup(LCD_D4, GPIO.OUT) # DB4
  GPIO.setup(LCD_D5, GPIO.OUT) # DB5
  GPIO.setup(LCD_D6, GPIO.OUT) # DB6
  GPIO.setup(LCD_D7, GPIO.OUT) # DB7
 
 
  # Initialise display
  lcd_init()
 
  while True:
 
    # Send some test
    lcd_string("Hallo Studenten",LCD_LINE_1)
    lcd_string("16x2 LCD Test",LCD_LINE_2)
 
    time.sleep(3) # 3 second delay
 
    # Send some text
    lcd_string("wenn ihr das",LCD_LINE_1)
    lcd_string("lest ist gut",LCD_LINE_2)
 
 
 
    time.sleep(3) # 3 second delay
 
    # Send some text
    lcd_string("Computerarchitek-",LCD_LINE_1)
    lcd_string("tur rules !",LCD_LINE_2)
 
    time.sleep(3)
 
    # Send some text
    lcd_string("jetzt seid ihr",LCD_LINE_1)
    lcd_string("dran...und los",LCD_LINE_2)
 
    time.sleep(3)
 
def lcd_init():
  # Initialise display
  lcd_byte(0x33,LCD_CMD) # 110011 Initialise
  lcd_byte(0x32,LCD_CMD) # 110010 Initialise
  lcd_byte(0x06,LCD_CMD) # 000110 Cursor move direction
  lcd_byte(0x0C,LCD_CMD) # 001100 Display On,Cursor Off, Blink Off
  lcd_byte(0x28,LCD_CMD) # 101000 Data length, number of lines, font size
  lcd_byte(0x01,LCD_CMD) # 000001 Clear display
  time.sleep(E_DELAY)
 
def lcd_byte(bits, mode):
  # Send byte to data pins
  # bits = data
  # mode = True  for character
  #        False for command
 
  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
  lcd_toggle_enable()
 
  # 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
  lcd_toggle_enable()
 
def lcd_toggle_enable():
  # Toggle enable
  time.sleep(E_DELAY)
  GPIO.output(LCD_E, True)
  time.sleep(E_PULSE)
  GPIO.output(LCD_E, False)
  time.sleep(E_DELAY)
 
def lcd_string(message,line):
  # Send string to display
 
 
 
 
  message = message.ljust(LCD_WIDTH," ")
 
  lcd_byte(line, LCD_CMD)
 
  for i in range(LCD_WIDTH):
    lcd_byte(ord(message[i]),LCD_CHR)
 
if __name__ == '__main__':
 
  try:
    main()
  except KeyboardInterrupt:
    pass
  finally:
    lcd_byte(0x01, LCD_CMD)
    lcd_string("Str C gedrueckt",LCD_LINE_1)
    GPIO.cleanup()

Weitere Quellen