I2C-LCD und Bascom

    This site uses cookies. By continuing to browse this site, you are agreeing to our Cookie Policy.

    • I2C-LCD und Bascom

      Ein freundliches Hallo in die Expertenrunde !
      Ich besitze ein I2C-LCD-Modul 20 x 4. Es trägt "huckepack" eine aufgelötete Platine mit dem PCF 8574.
      Prgrammiert mit der Arduino IDE funktioniert es am Arduino UNO auch tadellos.
      Aber, ich will ja mit Bascom programmieren.
      Dazu liegt SDA an Port C.4 und SCL an Port C.5. Habe ich auch mit LEDs ausgetestet - ist richtig.
      Ich bekomme jedoch das LCD nicht zum Anzeigen.
      In Forumbeiträgen und auf Internetseiten werden in den I2C-Beispielen stets die LCDs voll beschaltet.
      Bei I2C braucht man jedoch nur 2 Leitungen: Clock und Daten (natürlich auch +/- 5 V).
      Nun meine Frage und Bitte: Wer kann Hinweise geben oder hat Erfahrungen mit I2C-Displays gesammelt.
      Ein Traum wäre möglichst ein kleines Testprogramm zu geben.
      Ich sage im Voraus herzlichen Dank
      und Grüße vom Heiner
    • Hallo,
      erst ein Mal Danke für Eure Antworten, werde nachher alles testen.

      Aber an stefanhamburg eine Frage: Da keine Pullup-Widerstände eingebaut sind, wie groß müssen sie sein ?

      Noch etwas: In den Beispielcodes ist das Display voll beschaltet, ich habe aber für I2c nur 2 Drähte als Anschluss.

      Gruß Heiner
    • Hallo Heiner:

      Bei der Hardware ist noch wichtig, dass von den Pins SDA und SCL jeweils ein Widerstand (4k7) nach Plus geschaltet wird. Die Adresseingänge sollten außerdem immer auf festem Potential liegen, also entweder GND (0) oder VCC (1)

      Quelle hier: bascomforum.de/lexicon/index.p…/58-portexpander-pcf8574/, falls Du Dich mit dem I²C- Bus näher beschäftigen möchtest.

      Gruß Christian
      Wenn das die Lösung ist, möchte ich mein Problem wieder haben.
    • Hallo, Ihr freundlichen Helfer,
      ich bedanke mich für die neuen Beiträge ganz herzlich.
      Meine Hoffnung ist nun ganz groß, dass es klappt. Wenn nicht, naja warten wir es ab.
      Jetzt habe ich leider noch andere Aufgaben.
      Morgen bin ich wieder hier und berichte.
      Gruß Heiner
    • Für Bascom gibt es für diese Module eine Bibliothek zum einbinden (YwRobot_Lcd_i2c.lib). Wenn diese in dein Programm eingebunden ist, funktionieren alle BasCom-LCD-Befehle so wie wenn das Modul direkt angeschlossen wäre. Dies natürlich nicht in der gleichen Geschwindigkeit, da ja jetzt die entsprechenden Daten anstatt über acht oder vier Leitungen nur mehr über eine Leitung übertragen werden.
      Aber es funktioniert brauchbar. Selbst die Hintergrundbeleuchtung ist damit schaltbar.
      Die Module haben meistens die geforderten PullUp-Widerstände drauf. Dies solltest du kontrollieren weil wenn man da mehrere verschiedene I2C-Module anschließt (es gibt ja auch noch RTC, EEPROMs usw.) und jedes dieser Module diese Widerstände mitliefern (das ist eine Seuche in China, weil jeder denkt, nur sein Modul findet Verwendung), wird es sicher eng mit der Funktion weil der Widerstandswert durch die mehreren Module immer kleiner wird und auch wieder zu Störungen am I2C-Bus führen kann.
    • Hallo an Alle, die sich bemüht hatten mir zu helfen.
      Herzlichen Dank Euch für alle gegebenen Hinweise.
      Die Pullups muss ich noch nachmessen.
      Aber der Hinweis vom Zitronenfalter ergab die Lösung - alles funktioniert prima -DANKE dir !!!

      Damit ist dann auch dieses Problem gelöst. Danke und weiterhin viel Erfolg bei der Hilfe von Ratsuchenden.

      Bis zum nächsten Problem sagt Danke der
      Heiner
    • Hallo, stefanhamburg, eigentlich galt ja der Beitrag als beendet.
      Aber sehr gerne poste ich mein Programm, denn evtl. hilft es ja anderen bei diesem Problem -und wir wollen uns ja alle helfen.
      Also hier das komplette 4-zeilige LC-Display in dem in allen 4 Zeilen eine Variable hochgezählt wird.

      Ansonsten allen weiterhin viel Erfolg beim Programmieren mit Bascom und DANK an alle hilfreichen "Helfer".
      Viele Grüße von Heiner

      '##############################################################
      ' Ein "Vierzeiliges I2C-LCD" am "Arduino UNO" betreiben
      '##############################################################
      $regfile = "m328pdef.dat"
      $crystal = 16000000
      $hwstack = 64
      $swstack = 10
      $framesize = 40

      $lib "YwRobot_Lcd_i2c.lib"

      Const Pcf8574_lcd = 78 'Adresse des I2C-LCDs
      Dim _lcd_e As Byte
      _lcd_e = 128

      Dim A as Integer
      A = 0
      Dim B as Integer
      B = 50
      Dim C as Integer
      C = 100
      Dim D as Integer
      D = 150

      Const Pcf_d4 = 4 'Pinzuordnung PCF8574 -> LCD
      Const Pcf_d5 = 5
      Const Pcf_d6 = 6
      Const Pcf_d7 = 7
      Const Pcf_rs = 0
      Const Pcf_rw = 1
      Const Pcf_e2 = 3 '3./4. Zeile bzw. Backlight
      Const Pcf_e1 = 2 'E

      Config Scl = Portc.5 'Konfigurieren von I2C
      Config Sda = Portc.4

      Config Lcd = 20 * 4
      Config I2cdelay = 1
      Waitms 300

      Dim Lcd_backlight As Byte '1 = aus; 0 = an. Wird erst durch einen folgenden LCD-Befehl umgesetzt!
      Lcd_backlight = 0
      Locate 1, 1 'Damit Backlight-Zustand an LCD übermittelt wird

      Do

      Cls
      Locate 1, 1
      Lcd "Zeile 1:"
      Locate 1, 15
      LCD A
      Locate 2 , 1
      Lcd "Zeile 2:"
      Locate 2, 15
      LCD B
      Locate 3 , 1
      Lcd "Zeile 3:"
      Locate 3, 15
      LCD C
      Locate 4 , 1
      Lcd "Zeile 4:"
      Locate 4, 15
      LCD D
      Waitms 1000
      Incr A 'Hochzählen in den 4 Zeilen
      Incr B
      Incr C
      Incr D
      '
      Loop
      End