LCD Display 20x4 mit python

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Hey,
    ich versuch schon seit einer Ewigkeit dieses Display über python anzusprechen: http://www.amazon.de/Display-Anzeigen-Zeichen-kompatibel-HD44780/dp/B00ALNHTVY/ref=sr_1_1?ie=UTF8&qid=1380988897&sr=8-1&keywords=display+20x4&tag=psblog-21 [Anzeige]
    Dazu bin ich der Anleitung auf dieser Website gefolgt:

    http://www.raspberrypi-spy.co.uk/2012/08/20x4-l…l-using-python/
    Doch leider bekomme ich immer zuerst diese Fehlermeldungen wenn ich das script ausführe:

    lcd.py:61: RuntimeWarning: This channel is already in use, continuing anyway. Use GPIO.setwarnings(False) to disable warnings.
    GPIO.setup(LCD_E, GPIO.OUT) # E
    lcd.py:62: RuntimeWarning: This channel is already in use, continuing anyway. Use GPIO.setwarnings(False) to disable warnings.
    GPIO.setup(LCD_RS, GPIO.OUT) # RS
    lcd.py:63: RuntimeWarning: This channel is already in use, continuing anyway. Use GPIO.setwarnings(False) to disable warnings.
    GPIO.setup(LCD_D4, GPIO.OUT) # DB4
    lcd.py:64: RuntimeWarning: This channel is already in use, continuing anyway. Use GPIO.setwarnings(False) to disable warnings.
    GPIO.setup(LCD_D5, GPIO.OUT) # DB5
    lcd.py:65: RuntimeWarning: This channel is already in use, continuing anyway. Use GPIO.setwarnings(False) to disable warnings.
    GPIO.setup(LCD_D6, GPIO.OUT) # DB6
    lcd.py:66: RuntimeWarning: This channel is already in use, continuing anyway. Use GPIO.setwarnings(False) to disable warnings.
    GPIO.setup(LCD_D7, GPIO.OUT) # DB7
    lcd.py:67: RuntimeWarning: This channel is already in use, continuing anyway. Use GPIO.setwarnings(False) to disable warnings.
    GPIO.setup(LED_ON, GPIO.OUT) # Backlight enable
    backlight
    text

    Das Display hingegen leuchtet und mann kann auch weiße Kästchen erkennen. Jetzt zu meinem Quelltext:
    (Hierbei verwende ich zum definieren von LCD_RS usw. immer die Nummer des Gpio Ports, also z.B. für gpio 7 die 26, weil ich das über nen einfaches script mit einer LED getest habe und ich nur so den gpio port ansprechen konnte, in der Anleitung hingegen werden immer die Nummern des Gpio Ports benutzt)

    #!/usr/bin/python
    #
    # HD44780 20x4 LCD Test Script for
    # Raspberry Pi
    #
    # Author : Matt Hawkins
    # Site : http://www.raspberrypi-spy.co.uk/
    #
    # Date : 09/08/2012
    #

    # The wiring for the LCD is as follows:
    # 1 : GND
    # 2 : 5V
    # 3 : Contrast (0-5V)*
    # 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**
    # 16: LCD Backlight GND

    #import
    import RPi.GPIO as GPIO
    import time

    # Define GPIO to LCD mapping
    LCD_RS = 26
    LCD_E = 24
    LCD_D4 = 22
    LCD_D5 = 18
    LCD_D6 = 16
    LCD_D7 = 12
    LED_ON = 13

    # Define some device constants
    LCD_WIDTH = 20 # 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
    LCD_LINE_3 = 0x94 # LCD RAM address for the 3rd line
    LCD_LINE_4 = 0xD4 # LCD RAM address for the 4th line

    # Timing constants
    E_PULSE = 0.00005
    E_DELAY = 0.00005

    def main():
    # Main program block

    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
    GPIO.setup(LED_ON, GPIO.OUT) # Backlight enable

    # Initialise display
    lcd_init()

    # Toggle backlight off-on
    GPIO.output(LED_ON, False)
    time.sleep(1)
    GPIO.output(LED_ON, True)
    time.sleep(1)
    print("backlight")

    # Send some centred test
    lcd_byte(LCD_LINE_1, LCD_CMD)
    lcd_string("--------------------",2)
    lcd_byte(LCD_LINE_2, LCD_CMD)
    lcd_string("Rasbperry Pi",2)
    lcd_byte(LCD_LINE_3, LCD_CMD)
    lcd_string("Model B",2)
    lcd_byte(LCD_LINE_4, LCD_CMD)
    lcd_string("--------------------",2)
    print("text")

    time.sleep(3) # 3 second delay

    lcd_byte(LCD_LINE_1, LCD_CMD)
    lcd_string("Raspberrypi-spy",3)
    lcd_byte(LCD_LINE_2, LCD_CMD)
    lcd_string(".co.uk",3)
    lcd_byte(LCD_LINE_3, LCD_CMD)
    lcd_string("",2)
    lcd_byte(LCD_LINE_4, LCD_CMD)
    lcd_string("20x4 LCD Module Test",2)

    time.sleep(20) # 20 second delay

    # Blank display
    lcd_byte(LCD_LINE_1, LCD_CMD)
    lcd_string("",3)
    lcd_byte(LCD_LINE_2, LCD_CMD)
    lcd_string("",3)
    lcd_byte(LCD_LINE_3, LCD_CMD)
    lcd_string("",2)
    lcd_byte(LCD_LINE_4, LCD_CMD)
    lcd_string("",2)

    time.sleep(3) # 3 second delay

    # Turn off backlight
    GPIO.output(LED_ON, False)

    def lcd_init():
    # Initialise display
    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,style):
    # Send string to display
    # style=1 Left justified
    # style=2 Centred
    # style=3 Right justified

    if style==1:
    message = message.ljust(LCD_WIDTH," ")
    elif style==2:
    message = message.center(LCD_WIDTH," ")
    elif style==3:
    message = message.rjust(LCD_WIDTH," ")

    for i in range(LCD_WIDTH):
    lcd_byte(ord(message),LCD_CHR)

    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
    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)

    if __name__ == '__main__':
    main()


    Ich hoffe ihr könnt mir helfen :)

  • Mit

    Code
    GPIO.setmode(GPIO.BCM)


    stellst du aber GPIO-Nummerierung ein, also solltest du bei der Signaldefinition auch diese Nummerierung verwenden.

    Wenn das Display zwei Zeilen mit Kästchen anzeigt, heisst das, dass das Display mit Spannung versorgt, aber noch nicht initialisiert ist. Das kann man dafür nehmen, um den Kontrast richtig einzustellen.

    Anfragen ausserhalb des Forums (Mail o.ä.) werden ignoriert!


  • Wenn das Display zwei Zeilen mit Kästchen anzeigt, heisst das, dass das Display mit Spannung versorgt, aber noch nicht initialisiert ist. Das kann man dafür nehmen, um den Kontrast richtig einzustellen.

    Hi digiart,

    das hört sich so an, als ob Du Dich mit diesem LCD-Teil auskennst.
    Ich dreh bald am Rad mit dem Teil ... ich bekomme es nicht initialisiert.

    cu,
    -ds-

  • Also bei mir lag es daran, dass ich es nocht nicht mit den Pins richtig verlötet hatte, sondern nur lose draufgesteckt hatte. Nach dem Löten Initialisiert es sich endlich richtig.

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!