I2C LCD Ansteuerung über Linux Konsole

L I V E Stammtisch ab 20:30 Uhr im Chat
  • Hallo Forum,

    ich möchte gerne ein I2C Display über den PI ansteuern. Dazu habe ich mir folgendes Display besorgt: Firma Batron 16x2 Display; Bezeichnung BTHQ 21605V-FSRE-I2C-COG. Angeschlossen habe ich es laut dem Datenblatt, Hintergrundbeleuchtung hat es keine. Jetzt versuche ich das Display über die Konsole anzusteuern. Ich habe mit i2cdetect -y 1 eine Liste der teilnehmer auf dem I2C Bus erhalten und konnte mein Display orten (Adresse 0x3b). Die Kommunikation scheint also erstmal i.O. zu sein. Aber leider bekomme ich nichts am Display angezeigt.
    Mit dem Befhel i2cset dachte ich ich könnte am Display irgendwas schreiben, aber leider Fehlanzeige. Im ersten Step wollte ich die Ansteuerung über die Konsole testen und dann später ein C Programm dafür schreiben. Wenn ich das richtig sehe: i2cset -y 1 0x3b 1 0xB0 sollte mir an der ersten Stelle eine 0 ausgeben. Oder hab ich da einen Denkfehler drin?
    Hab schon alles mögliche versucht, aber es wird nichts. Hat einer von euch erfahrungen mit diesem Display und kann mir weiterhelfen? Hab auch bereits mit der Baud Rate gespielt, aber auch ohne erfolg (aktuell bei 100k). Treiber sind installiert, die Kommunikation scheint zu klappen. Ich weiß leider keinen Rat mehr.

    Gruß

    ace....
    forum-raspberrypi.de/attachment/650/

  • Ich hab auch lange gebraucht, um ein i2c Display mit Tasten aus einem alten Laserdrucker, zum Betrieb zu bewegen. Bei disem LCD wird erst das Register ausgewählt und dann die Daten hinterher geschoben. In dieser Art: i2cset -y <busnummer> <LCD Device Adresse> <Register> <Daten/Text>. Du könntest auch mal versuchen mit i2cdump -y 1 0x3b alle möglichen Bitkombinationen an das LCD zu senden, um zu schauen ob dann irgendetwas damit pasiert. Man könnte auch den Debugmode im i2c Kernelmodul aktivieren, dann kann man nach jedem Befehl sehen, ob dieser erfolgreich war (ACK) oder nicht (NACK).

  • Hallo,

    Ich habe bereits verschiedene bitkombinationen probiert. Was mir noch aufgefallen ist wenn ich mit i2cdump mir mal den Inhalt der Register anschaue ändern sich diese nicht mit meiner gewünschten bitkombi. Muss ich was beim Modi noch beachten? Wie kann ich den Debugger freischalten und sehen ob ein ack gesendet wurde?
    Das mit der ASCII Kombination werde ich mal testen .
    Gruss

  • Bei sowas lohnt es sich immer Datenblätter zu lesen. Das Display hat den PCF2119 als Controller. Das Datenblatt findest Du da: http://www.nxp.com/documents/data_sheet/PCF2119X.pdf
    Beim überfliegen scheint der kompatibel zu den üblichen HD44780 Controllern zu sein, Du mußt aus dem Datenblatt jetzt nur raussuchen wie Du über i2c Daten und Controllregister ansprichst und Du kannst einen der HD44780-Treiber anpassen.

    dreamshader: Falsche Kiste. I2C ist RasPi und I2C+SPI ;-p

    Einmal editiert, zuletzt von orb (19. Juni 2013 um 19:59)

  • Moin,

    jetzt muss ich orb mal danken... Hab mir das Datenblatt angeschaut und jetzt mal die Console außenvorgelassen. Hab mir in C ein Programm geschrieben und mit Hilfe des Datenblattes kann ich jetzt endlich das Display ansteuern und schreiben.

    Danke für die Infos...

  • Hallo,
    bist du weitergekommen mit dem Display??? Ich hatte da auch Schwierigkeiten.....
    So hat es dann funktioniert:

    lcdlib.py

    Grüsse

    Edit: Bitte in Zukunft den Code-Block benutzen. Danke. Gruß Georg

    Einmal editiert, zuletzt von boandlkramer (14. Juli 2013 um 11:35)

  • Hallo,
    die ursprüngliche Frage war ja, ob es eine schnelle Ansteuerungsmöglichkeit über die konsole gibt. Ich wollte eigentlich nur sicher gehen, dass das Display ordentlich läuft und keine Fehler mehr aufweist. Das Problem war damals, dass das Display wirklich gar nichts ausgegeben hat. Bis mir orb den Hinweis mit den Registern gegeben hat. Ich habe dann die ursprüngliche Idee mit der Konsole zu arbeiten verworfen und habe mir ein C Programm geschrieben, welches die Initialisierung der Regsiter laut Datenblatt vornimmt. Danach eine Funktion geschrieben, die einen Text auf das Display bringt und fertig. Hat alles super funktioniert.

    Gruß
    ace


  • ... Ich habe dann die ursprüngliche Idee mit der Konsole zu arbeiten verworfen und habe mir ein C Programm geschrieben, welches die Initialisierung der Regsiter laut Datenblatt vornimmt. Danach eine Funktion geschrieben, die einen Text auf das Display bringt und fertig. Hat alles super funktioniert.

    Gruß
    ace


    Hallo,

    ich habe dieses Display (Serial IICI2CTWI 2004), welches auf einem Arduino dank der Library (LiquidCrystal_I2C.h) absolut problemlos läuft. Nun möchte ich dies auch auf dem Rasberry (Debian) zum Llaufen bekommen.

    Eigentlich wäre mir ein Stück C-Code (vermutlich Dein oben erwähnter) am liebsten.

    Ich habe auch schon LCDproc ausprobiert, bekommen auch keine Fehlermeldung - es erscheint nur nix auf dem Display. Per I2CDetect wird auch die 0x20 als Adresse erkannt.

    Kann mir jemand helfen ???

    Einmal editiert, zuletzt von herbert-f (6. September 2013 um 09:46)

  • Das Problem ist, daß die Beschaltung Deines Displays + Adapter nicht zu der Beschaltung passt, die LCDProc erwartet.
    Ich hab hier: RasPi und I2C+SPI was dazu geschrieben, wie man die anpassen kann.
    Wenn ich den Beispielcode bei Deinem Display richtig deute ist die Belegung
    Bit 0 - RS
    Bit 1 - RW
    Bit 2 - E
    Bit 3 - Backlight
    Bit 4-7 - Datenbits 4-7

  • Hallo,

    Deinen Artikel habe ich gelesen - aber nicht verstanden ;-((((
    Die Einstellungen Deiner LCDd.conf hatte ich schon ausprobiert, haben abe rnicht funktioniert. Wie passe ich denn die Einstellungen an, oder kann ich Deine Vorbereitung (http://orb-soft.de/temp/hd44780.so) nehmen? Wohin soll die Datei - in /usr/share/ gibt es bei mir kein lcd ??

    :wallbash::wallbash::wallbash::wallbash::wallbash:


  • Nein, das File kannst Du nicht übernehmen, das ist wieder für eine andere Belegung.
    Wie hast Du LcdProc installiert?

    Okay, wie ich schon schrieb nach obiger Anleitung. Habe CVS auch installiert, da ja dieser Punkt zutraf:

    "
    # after system reboots, check that /etc/LCDd.conf has a ConnectionType
    # available called piplate, if so set: ConnectionType=piplate
    # and set Device=, Port=, etc. per the sample config files.

    # if piplate not available for ConnectionType
    # need to make and install the CVS version of LCDproc (see below)
    "

  • Guten Morgen Orb,

    ich hoffe, Du willst mir weiter helfen .... ohne Hilfe wird es mir wohl nicht gelingen.

    Ich bin aber wahrscheinlich bis morgen Nachmittag familiär unterwegs, also sei mir bitte nicht böse, wenn ich mich erst morgen nachmittag wieder melde ...

    Beste Grüße
    :thumbs1::thumbs1::thumbs1::thumbs1:

  • Ich hab mir die original LiquidCrystal_I2C.h mal angesehen, wenn das Display damit läuft, sollte es auch mit der hd44780.so ( http://orb-soft.de/temp/hd44780.so ) von mir laufen.
    Das würde auch zu der Platine passen, die man in dem Angebot erkennen kann.

    Wenn Du die Version genommen hast, die Du in dem Angebot runterladen kannst, dann klappt es nicht. Dafür müßtes Du die Ansteuerung komplette umschreiben (High- und Low-Nibble tauschen).


  • Ich hab mir die original LiquidCrystal_I2C.h mal angesehen, wenn das Display damit läuft, sollte es auch mit der hd44780.so ( http://orb-soft.de/temp/hd44780.so ) von mir laufen.
    Das würde auch zu der Platine passen, die man in dem Angebot erkennen kann.

    Wenn Du die Version genommen hast, die Du in dem Angebot runterladen kannst, dann klappt es nicht. Dafür müßtes Du die Ansteuerung komplette umschreiben (High- und Low-Nibble tauschen).

    Hallo Orb,

    vielen Dank.

    Wenn ich LCDProc mittels "Driver=curses" starte erhalte ich in der Konsole (Putty) korrekte Ausgaben.

    Stelle ich auf den "Driver=hd44780" um (deine hd44780.so habe ich ins angegebene Verzeichnis nach usr/lib/lcdproc kopiert und die vorhandende gelöscht) erhalte ich beim start von LCDProc (LCDd):

    pi@raspberry-1 ~ $ LCDd
    hd44780: timing_init() failed (Operation not permitted)
    Driver [hd44780] init failed, return code -1
    Could not load driver hd44780
    There is no output driver
    Critical error while initializing, abort.
    pi@raspberry-1 ~ $


    In die Sektion der hd44780 meiner lcd.conf habe ich folgendes eingetragen:

    ## Hitachi HD44780 driver ##
    [hd44780]
    ConnectionType=i2c
    Port=0x20
    Device=/dev/i2c-1
    Backlight=yes
    Size=20x4
    DelayBus=false
    DelayMult=1
    Keypad=no


    Was kann ich tun?

Jetzt mitmachen!

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