PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : LCD an PCF8574 über I2C - 2*16 läuft / 4*20 LCD nicht?



stfan1409
14.04.2012, 16:49
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?



$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

hans99
14.04.2012, 18:11
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

stfan1409
14.04.2012, 18:31
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.

hans99
14.04.2012, 18:45
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

hans99
15.04.2012, 07:23
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

stfan1409
15.04.2012, 14:23
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...




_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-gruen/LCD-204B-LED/index.html?ACTION=3&GROUPID=3005&ARTICLE=31660&SHOW=1&START=0&OFFSET=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.

hans99
15.04.2012, 16:06
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:
https://www.roboternetz.de/community/threads/9657-Initialisierung-des-LCD-Display-%2820x4%29

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

MfG.
Hans