-
+ Antworten
Ergebnis 1 bis 7 von 7

Thema: LCD an PCF8574 über I2C - 2*16 läuft / 4*20 LCD nicht?

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    19.07.2011
    Beiträge
    38

    LCD an PCF8574 über I2C - 2*16 läuft / 4*20 LCD nicht?

    Hallo,
    ich habe mir eine Platine von Pollin(810145) besorgt auf der ein PCF8574 ist, den ich über I²C ansteuern möchte. Nun hab ich den standard Code von Bascom genommen um das LCD anzusteuern.
    Wenn ich ein LCD mit 2*16 Zeichen nehme funktioniert der Code.
    Wenn ich ein LCD mit 4*20 Zeichen nutze sehe ich nur Balken.
    Gibt es da noch etwas zu beachten?

    Code:
    $regfile = "m644def.dat"                                    'AT-Mega664
    $crystal = 14745600                                         'Quarz: 14,7456 MHz - Quarz auf Platine
    $baud = 9600                                                'RS232 Baudrate definieren
    
    $hwstack = 250
    $swstack = 250
    $framesize = 450
    
    
    
    $lib "Lcd_i2c.lib" 'My i2c driver for the LCD
    Config I2cdelay = 1
    Const Pcf8574_lcd = &H40                                    'Defines the address of the I/O expander for LCD
    
    Config Scl = Portc.5                                        'Configure i2c SCL
    Config Sda = Portc.4                                        'Configure i2c SDA
    Dim _lcd_e As Byte 'Needed to control 4 line LCD
    
    
    Enable Interrupts
    Config Lcd = 20 * 4                                         'configure lcd screen
    'other options are 16 * 4 and 20 * 4, 20 * 2 , 16 * 1a
    'When you dont include this option 16 * 2 is assumed
    '16 * 1a is intended for 16 character displays with split addresses over 2 lines
    
    
    _lcd_e = 64                                                 'select E2
    Cls
    Lcd "64_1"                                                  'wird auf 2*16 angezeigt
    Lowerline
    Lcd "64_2"                                                  'wird auf 2*16 angezeigt
    Thirdline
    Lcd "64_3"
    Fourthline
    Lcd "64_4"
    
    Wait 1
    
    _lcd_e = 128                                                'select E1
    Cls
    Lcd "128_1"
    Lowerline
    Lcd "128_2"
    Thirdline
    Lcd "128_3"
    Fourthline
    Lcd "128_4"
    
    
    _lcd_e = 192                                                'select both halfs for defining characters
    Cls
    Lcd "192_1"
    Lowerline
    Lcd "192_2"
    Thirdline
    Lcd "192_3"
    Fourthline
    Lcd "192_4"
    
    
    '-------------------------------------------------------------------------------
    
    _lcd_e = 64                                                 'select E2
    Cls
    Locate 1 , 1
    Lcd "L64_1"                                                 'wird auf 2*16 angezeigt
    Locate 2 , 1
    Lcd "L64_2"                                                 'wird auf 2*16 angezeigt
    Locate 3 , 1
    Lcd "L64_3"
    Locate 4 , 1
    Lcd "L64_4"
    
    Wait 1
    
    _lcd_e = 128                                                'select E1
    Cls
    Locate 1,1
    Lcd "L128_1"
    Locate 2 , 1
    Lcd "L128_2"
    Locate 3 , 1
    Lcd "L128_3"
    Locate 4 , 1
    Lcd "L128_4"
    
    
    _lcd_e = 192                                                'select both halfs for defining characters
    Cls
    Locate 1,1
    Lcd "L192_1"                                                'wird auf 2*16 angezeigt
    Locate 2 , 1
    Lcd "L192_2"                                                'wird auf 2*16 angezeigt
    Locate 3 , 1
    Lcd "L192_3"
    Locate 4 , 1
    Lcd "L192_4"
    
    
    Do
    
    Loop
    End

  2. #2
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    27.06.2008
    Beiträge
    139
    Hallo,Ich kenne BASCOM nicht, aber mir fällt auf, dass die Ansteuerung der einzelnen Zeilen nicht korrekt ist. Ich betreibe diese Module auf einer Picaxe 28x1.Bei mir beginnt die erste Zeile mit 128, die zweite mit 192, die dritte mit 148 und die vierte mit 212. MfG.Hans

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    19.07.2011
    Beiträge
    38
    Hallo Hans,
    damit geht es leider nicht.
    In der Lib, die ich nutze steht:

    ;dimension _lcd_e as byte to control the E-lines (4 lines LCD:s)
    ;_lcd_e should have one of the following values
    ;128 to enable E1, 64 to enable E2, 192 to enable both E1 and E2 (cls, deflcdchar)

    denke mal das es so richtig ist - der fehler muss woanders liegen.

  4. #4
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    27.06.2008
    Beiträge
    139
    Mit deinem Programm sollten zumindest 2 Zeilen angezeigt werden. Da das nicht geschieht, solltest du die Anschlussbelegung des LCD's kontrollieren. Ich habe schon LCD's gehabt, die auf den Pins 1 und 2 die Hintergrundbeleuchtung hatten.Sonst fällt mir derzeit nichts mehr ein.MfG.Hans

  5. #5
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    27.06.2008
    Beiträge
    139
    Neuer Tag, neuer Versuch.

    Hat dein 20x4 LCD einen HD44780 oder kompatiblen Controller? Wenn nein dann wird es schwierig.

    Gib einen längeren Text (25-30 Zeichen) auf dem Display aus. Möglicherweise kommt dann irgendwas an.

    MfG.Hans

  6. #6
    Benutzer Stammmitglied
    Registriert seit
    19.07.2011
    Beiträge
    38
    Neuer Tag, neuer Versuch - genau

    neues LCD - nun mit 16*4:
    es funktioniert...aber nur mit

    _lcd_e = 192 'select both halfs for defining characters
    UND dem
    "Locate" - Befehl!!! Der Befehl "Lowerline" funktioniert z.b. nicht...


    Code:
    _lcd_e = 192                                                'select both halfs for defining characters
    Cls
    Locate 1 , 1
    Lcd "L192_1"
    Locate 2 , 1
    Lcd "L192_2"
    Locate 3 , 1
    Lcd "L192_3"
    Locate 4 , 1
    Lcd "L192_4"

    zurück zum 20*4 LCD:
    es ist von Reichelt
    http://www.reichelt.de/Hintergrund-g...16&#av_tabprod
    und hat einen "ST7066U" Controller der aber wohl HD44780 kompatibel ist - habe das LCD gerade erfolgreich an einem Mega8 im 4 Bit Modus getestet. alles in ordnung.

    an der Platine über I²C bleiben nur die 40 schwarzen Balken - wie beim initialisieren
    und den "CLS" Befehl kann man am blinken erkennen...

    ach ja: der längere Text mit 25-30 Zeichen ließ die Balken auch nicht verschwinden - schade
    ich habe noch versucht, den Text in verschiedene Zeilen zu schreiben und ich habe verschiedene LCD Typen("Config Lcd = 20 * 4") eingegeben.

  7. #7
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    27.06.2008
    Beiträge
    139
    Hallo,
    wie gesagt, ich kenne BASCOM nicht. Ich habe jetzt im I-Net gesucht und festgestellt, dass du nicht das pollin I2c Modul verwendest sondern direkt das LCD ansteuerst.
    Hier ein Link:
    http://www.roboternetz.de/community/...lay-%2820x4%29

    Ist aber mit einem KS Controller. Vielleicht hilft dir das weiter.

    MfG.
    Hans

+ Antworten

Ähnliche Themen

  1. Schrittmotor läuft nicht - L297/L298 über LTP
    Von TobiasBlome im Forum PC-, Pocket PC, Tablet PC, Smartphone oder Notebook
    Antworten: 4
    Letzter Beitrag: 14.02.2011, 17:17
  2. Antworten: 3
    Letzter Beitrag: 29.10.2008, 15:21
  3. [läuft+Code] Servotest an ATtiny13 läuft nicht
    Von oberallgeier im Forum Motoren
    Antworten: 4
    Letzter Beitrag: 18.10.2007, 17:49
  4. Temperaturmessung über I2C und LM75 läuft nicht
    Von michaelkoemm im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 3
    Letzter Beitrag: 16.10.2007, 19:50
  5. Antworten: 3
    Letzter Beitrag: 15.08.2005, 17:41

Berechtigungen

  • Neue Themen erstellen: Ja
  • Themen beantworten: Ja
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •