LCD 16x2 zeigt nur Kästchen an

  • Hallo liebe Forenmitglieder,

    Ich habe mir bei Bürklin https://www.buerklin.com/de/lcd-display/p/71s321 mit einem HD44780-Compatible IC-Controller bestellt. Habe das ganze mit einem Breadboard angeschlossen. Dabei befolgte ich diese Anleitung: https://raspberry.tips/raspberrypi-tu…play-ansteuern/ im Einklang mit dem Datenblatt des Displays. Verkabelung muss nach mehrfachen prüfen passen. Ein Poti zur Kontrastanpassung ist auch eingebaut und funktioniert.

    Wenn ich nun das Skript laufen lasse (GPIO-Pins wurden angepasst) erscheint in der zweiten Zeile durchgehend schwarze Kästchen. Die erste Zeile ist leer. Wenn ich am Poti drehe ändert sich der Kontrast, aber man kann nichts ablesen.
    Das Programm läuft auch ohne Fehlermeldung. Habe mehrere Skripte probiert, aber immer der selbe Fehler!

    Gruß,
    Matthias

    Hier das Skript:


  • Das LCD sollte diese schwarzen Kästchen schon anzeigen, wenn Betriebsspannung angelegt wird. Ist die normale Initialisierung des chip ohne jeden Code.
    Sollte dies nicht der Fall sein, so fehlt (offensichlich) die Versorgung an das Display.
    Überprüfe die +5V und/oder die GND Leitungen


  • Das LCD sollte diese schwarzen Kästchen schon anzeigen, wenn Betriebsspannung angelegt wird. Ist die normale Initialisierung des chip ohne jeden Code.
    Sollte dies nicht der Fall sein, so fehlt (offensichlich) die Versorgung an das Display.
    Überprüfe die +5V und/oder die GND Leitungen

    Da habe ich mich unklar ausgedrückt sorry. Er hat die Kästen schon BEVOR ich das Programm draufgespielt habe angezeigt.

  • Sicher, dass die Einrückungen in deinem Code gleich sind, wie hier gepostet?

    Wenn ja, dann steht das Programm bei

    Code
    while 1:

    und die nächsten Befehle werden nicht ausgeführt, da sie für den Python-Interpreter nicht mehr zur while-Schleife gehören.

    Einrückungen sind bei Python essentiell!

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

  • du versorgst das Display mit 5V aber die Logik kommt mit 3,3V das kann schief gehen.

    Entweder dein Display arbeitet mit 3,3V dann sollte man diese verwenden oder dein Display braucht 5V dann empfehlen sich an den Datenleitungen Pegelwandler auf 5V denn der PI gibt nur 3,3V aus und mag auch keine 5V rückwärts sehen durch evtl. pullups im Display.

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)


  • Sicher, dass die Einrückungen in deinem Code gleich sind, wie hier gepostet?

    Wenn ja, dann steht das Programm bei

    Code
    while 1:

    und die nächsten Befehle werden nicht ausgeführt, da sie für den Python-Interpreter nicht mehr zur while-Schleife gehören.

    Einrückungen sind bei Python essentiell!

    Leider nicht der Fehler. Ich denke mit der Initialisierung stimmt was nicht.

    Code
    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

    Mein Datenblatt sagt folgendes. (siehe Anhang)
    Da passen meiner Meinung nach die Bytes nicht zusammen. Oder sehe ich das falsch? :denker:

  • hi


    UPDATE:

    Anscheinend muss auf dem Display etwas angekommen sein. Man sieht an paar Pixel wie der Cursor durchläuft, aber er ergibt nichts vernünftiges aus. Jemand sowas schon mal gesehen?

    :wallbash:

    ... deine init-sequenz ist falsch, der 0x32 Dummy muss 3x gesendet werden.
    Auserdem seh ich beim Iinit keine wait()'s in der Sequenz.

    gruß root


  • hi

    ... deine init-sequenz ist falsch, der 0x32 Dummy muss 3x gesendet werden.
    Auserdem seh ich beim Iinit keine wait()'s in der Sequenz.

    gruß root

    Danke für die Antwort!
    Kannst du mir Anhand eines Codesbeispiels erläutern wie es gemeint ist? Bin kein Python Crack -.-

    EDIT: Habe mal mit time.sleep(0.1) Pausesequenzen zwischen den Befehlen eingefügt und den 0x32 Dummy 3x gesendet. Hat nicht funktioniert. Vermutlich stimmen die anderen Befehlen nach den drei 0x32 Dummies nicht.

    Einmal editiert, zuletzt von Mano_46 (1. März 2017 um 15:40)

  • hi.

    mit Python kann ich leider nicht dienen, aber hier als c-schnipsel.
    Da kann dir z.B meigrafd helfen.

    wen du 4-bit initialisierst , musst du nach Data-lengt auch die Bytes nibble-weise rausschreiben. Also upper first, dann lower.

    Das busy-flag abfragen kannst dir sparen, und durch wait(() 3msec ersetzen

    gruß root


  • hi.

    mit Python kann ich leider nicht dienen, aber hier als c-schnipsel.
    Da kann dir z.B meigrafd helfen.

    wen du 4-bit initialisierst , musst du nach Data-lengt auch die Bytes nibble-weise rausschreiben. Also upper first, dann lower.

    Das busy-flag abfragen kannst dir sparen, und durch wait(() 3msec ersetzen

    gruß root

    Danke für die Antwort! Ich kann leider mit dem C-Code nicht viel anfangen :( Ich werde mal meigrafd fragen!

Jetzt mitmachen!

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