HD44780 16x2 LCD Fehler

  • Hallo Forumgemeinde,

    ich wolte den nächsten schritt machen um zu meinen Ziel zu kommen.
    Der schritt währe ein 16x2 in Betrieb zu bekommen.
    Jetzt habe ich einen Extender der mich etwas einschrängt bei den GPIO. Ich brauche aber auch I2C um die anderen Funktionen fahren zu können. Zum testen des LCD habe ich mir ein Script runtergeladen:
    [code=php]
    #!/usr/bin/python
    import time
    import RPi.GPIO as GPIO

    # Zuordnung der GPIO Pins (ggf. anpassen)
    LCD_RS = 2
    LCD_E = 3
    LCD_DATA4 = 4
    LCD_DATA5 = 5
    LCD_DATA6 = 6
    LCD_DATA7 = 7

    LCD_WIDTH = 16 # Zeichen je Zeile
    LCD_LINE_1 = 0x80 # Adresse der ersten Display Zeile
    LCD_LINE_2 = 0xC0 # Adresse der zweiten Display Zeile
    LCD_CHR = GPIO.HIGH
    LCD_CMD = GPIO.LOW
    E_PULSE = 0.0005
    E_DELAY = 0.0005

    def lcd_send_byte(bits, mode):
    # Pins auf LOW setzen
    GPIO.output(LCD_RS, mode)
    GPIO.output(LCD_DATA4, GPIO.LOW)
    GPIO.output(LCD_DATA5, GPIO.LOW)
    GPIO.output(LCD_DATA6, GPIO.LOW)
    GPIO.output(LCD_DATA7, GPIO.LOW)
    if bits & 0x10 == 0x10:
    GPIO.output(LCD_DATA4, GPIO.HIGH)
    if bits & 0x20 == 0x20:
    GPIO.output(LCD_DATA5, GPIO.HIGH)
    if bits & 0x40 == 0x40:
    GPIO.output(LCD_DATA6, GPIO.HIGH)
    if bits & 0x80 == 0x80:
    GPIO.output(LCD_DATA7, GPIO.HIGH)
    time.sleep(E_DELAY)
    GPIO.output(LCD_E, GPIO.HIGH)
    time.sleep(E_PULSE)
    GPIO.output(LCD_E, GPIO.LOW)
    time.sleep(E_DELAY)
    GPIO.output(LCD_DATA4, GPIO.LOW)
    GPIO.output(LCD_DATA5, GPIO.LOW)
    GPIO.output(LCD_DATA6, GPIO.LOW)
    GPIO.output(LCD_DATA7, GPIO.LOW)
    if bits&0x01==0x01:
    GPIO.output(LCD_DATA4, GPIO.HIGH)
    if bits&0x02==0x02:
    GPIO.output(LCD_DATA5, GPIO.HIGH)
    if bits&0x04==0x04:
    GPIO.output(LCD_DATA6, GPIO.HIGH)
    if bits&0x08==0x08:
    GPIO.output(LCD_DATA7, GPIO.HIGH)
    time.sleep(E_DELAY)
    GPIO.output(LCD_E, GPIO.HIGH)
    time.sleep(E_PULSE)
    GPIO.output(LCD_E, GPIO.LOW)
    time.sleep(E_DELAY)

    def display_init():
    lcd_send_byte(0x33, LCD_CMD)
    lcd_send_byte(0x32, LCD_CMD)
    lcd_send_byte(0x28, LCD_CMD)
    lcd_send_byte(0x0C, LCD_CMD)
    lcd_send_byte(0x06, LCD_CMD)
    lcd_send_byte(0x01, LCD_CMD)

    def lcd_message(message):
    message = message.ljust(LCD_WIDTH," ")
    for i in range(LCD_WIDTH):
    lcd_send_byte(ord(message[i]),LCD_CHR)

    if __name__ == '__main__':
    # initialisieren
    GPIO.setmode(GPIO.BCM)
    GPIO.setwarnings(False)
    GPIO.setup(LCD_E, GPIO.OUT)
    GPIO.setup(LCD_RS, GPIO.OUT)
    GPIO.setup(LCD_DATA4, GPIO.OUT)
    GPIO.setup(LCD_DATA5, GPIO.OUT)
    GPIO.setup(LCD_DATA6, GPIO.OUT)
    GPIO.setup(LCD_DATA7, GPIO.OUT)

    display_init()


    lcd_send_byte(LCD_LINE_1, LCD_CMD)
    lcd_message("Es scheint zu")
    lcd_send_byte(LCD_LINE_2, LCD_CMD)
    lcd_message("funktionieren :)")

    time.sleep(4)

    msg1 = "Dies ist ein"
    msg2 = "kleiner Test"
    for i in range(len(msg1)):
    lcd_send_byte(LCD_LINE_1, LCD_CMD)
    lcd_message(msg1[:i+1])
    lcd_send_byte(LCD_LINE_2, LCD_CMD)
    lcd_message("")
    time.sleep(0.1)
    for i in range(len(msg2)):
    lcd_send_byte(LCD_LINE_1, LCD_CMD)
    lcd_message(msg1)
    lcd_send_byte(LCD_LINE_2, LCD_CMD)
    lcd_message(msg2[:i+1])
    time.sleep(0.1)

    time.sleep(4)

    GPIO.cleanup()


    [/php]

    Das problem bei der Sache ist das wenn ich es so einrichte einen Fehler bekomme :

    test_LCD.py:76: RuntimeWarning: A physical pull up resistor is fitted on this channel!
    GPIO.setup(LCD_E, GPIO.OUT)
    test_LCD.py:77: RuntimeWarning: A physical pull up resistor is fitted on this channel!
    GPIO.setup(LCD_RS, GPIO.OUT)

    in einen anderen Beitrag habe ich gelesen das es nicht mit gleichzeitigen aktiven i2C bus geht.

    was kann ich da machen?

    der Bus selber ist auf anderen Pins SCL und SDA, aus diesem Grunde verstehe ich die Meldung nicht.
    bedanke mich :)

  • Servus,
    ich hab' zwar von Python keine Ahnung ... aber: Du solltest eigentlich schon wissen, was Du da in Deinem script treibst. Und wenn Du die Broadcom-Adressierung nimmst, dann sind GPIO2 und GPIO3 die Pins des I2C Bus (Pin #3 und Pin #5) und die haben nun mal physikalisch 1k8 als pullup verbaut :fies:

    cu,
    -ds-

  • Hallo Forum

    @  Gnom  
    Habe alles so gemacht wie in der Anleitung beschrieben bekomme auch kein Script Fehler oder sowas. Untere Zeile ist weiß obere dunkel.
    Ich habe Python 3 drauf kann es daran liegen?

    bild Aufbau

    20170425_213134.jpg


    es hat mal funktioniert woran kann es liegen?
    wie kann ich es eingrenzen?
    Danke erstmal

  • In der Anleitung steht, das es mit Python 3 nicht getestet worden ist.

    Die Anleitung geht aber auch von direkten Verbindungen zwischen GPIOs und LCD, unter Verletzung der Pegel, aus. Pegel GPIO 3,3V und LCD 5V. Einige LCD sind tolerant, so dass sie auch mit der 3,3V-Logik funktionieren, jedenfalls so lange, wie die GPIOs alle als Ausgang programmiert sind und alle Anschlüsse des LCDs als Eingänge dienen.

    Aber Du hast was von Extender, vermutlich für den I2C-Bus geschrieben. Dafür gilt die Anleitung natürlich nicht. Wenn die Kommunikation zwischen RPi und LCD über den I2C-Bus laufen soll, benötigst Du einen Levelshifter. Das sind für den I2C 2 FETs und vier Widerstände. Gibt es auch fertig für wenig Geld beim Chinamann.

    Ich habe beides erfolgreich mal ausprobiert. Die direkte Verbindung nach http://www.schnatterente.net/technik/raspbe…hd44780-display und dann habe ich auch mal einen ESP8266 über I2C per Extender mit den LCD verbunden.Ungefähr wie hier: https://www.losant.com/blog/how-to-co…esp8266-nodemcu

    Der Extender ist in meinem Fall aber kein einfaches GPIO-Verlängerungskabel, wie das rote Teil auf Deinem Bild, sondern ein Huckepackbaustein für das LCD, Hauptbestandteil: https://www.mikrocontroller.net/articles/Port-Expander_PCF8574

    Marcus

    Einmal editiert, zuletzt von MarcusFE (25. April 2017 um 22:21)

  • Guten Morgen Forum

    @ MarcusFE Danke fur deine Antwort. Das rote "Ding" auf den Bild ist nur eine verländerung der GPIO Leiste auf das Bord zum stecken da sind keine Bauteile drin.
    Bei dem test mit dem LCD habe ich nur das LCD betrachtet, ich gehe mal davon aus das ich das LCD konventionell ansteuern kann und den I2C paralel laufen lassen kann. Das wollte ich aber erst testen wenn ich das
    LCD wieder zum laufen gebracht habe :)

    Kann es sein das die Massen von 3.3 und 5 Volt nicht verbunden sind so das auf dem LCD kein geschlossener Stromkeis zu stande kommt?

Jetzt mitmachen!

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