LCD 2 x 20 an PCF8574

OP #1034878
Lesenswert?

Hallo Forum...

Auch wenn Ihr mich jetzt steinigen wollt, aber ich habe zu meinem 
Problem leider nichts gefunden.
Ich möchte ein LCD am PCF8574 betreiben. Die Adresse ist 78. Das ganze 
versuche ich mit CCBAsic zu programmieren. Das Ansprechen der Adresse 
scheint zu funktionieren.

Wenn ich ein LCD direkt an den Ports des μC betreibe, sage ich dem LCD 
ja über RS = 1, dass ein Comando erfolgt. Dann pulse ich E.

Wie gestaltet sich das jetzt am I2C-Bus?
RS hängt am PCF8574 an P0, E an P2 des PCF8574.
Muß man zu dem Wert, den ich schicke 128 (für RS = 1) hinzuaddieren,
weiterhin 32 für E und dann die 32 wieder abziehen? Zwischen den 
einzelnen Schritten, den Wert jeweils an den PCF schicken?

gosub I2C_Start
Daten = Adr_LCD                 '78
gosub I2C_Write
Daten = 40
gosub I2C_LCD_Comand            '128 hinzuaddieren > RS = 1
gosub I2C_Write
gosub I2C_LCD_Write             '32 hinzuaddieren > E = 1
gosub I2C_Write
gosub I2C_LCD_WriteOff          '32 hinzuaddieren > E = 0
gosub I2C_Write

Leider funzt das auf diesem Wege auch nicht. Vielleicht hat jemand eine 
Idee, wo mein Fehler liegt.

Ich danke schonmal für Eure Hilfe.
Grüße, René
Gast #1035180
Lesenswert?

Hallo,

schreib dir doch erstmal nen vernünftigen Treiber für deinen PCF, so 
dass man den wie Ports ansprechen kann. Dann die Initialisierung des 
Displays aus dem manual abschreiben und dann Daten senden. Versuch 
garnicht erst, es direkt auf I2C zu coden, da blickt man nicht durch. Du 
brauchst erst eine Funktion, die ein Kommando oder Daten an das LCD 
schickt.

Wenn dir das zu kompliziert ist: Es gibt auch I2C-Displays.

Und wenns dich richtig ärgert, dann werd die C-Control los!

Selbst wenn das dann geht, kannst du mit den Fingern mitzählen, wie die 
Zeichen gemalt werden.

Grüße,

Peter

ps: Bei mir gibts schon lang keine C-Control mehr.
Gast #1035185
Lesenswert?

Hi!

>Wenn ich ein LCD direkt an den Ports des μC betreibe, sage ich dem LCD
j>a über RS = 1, dass ein Comando erfolgt. Dann pulse ich E.

Die Aussage ist falsch.

Bei RS = 1  erwartet das Display Daten also keine Komandos.
Bei RS = 0  erwartet das Display ein Komando. Also einen Befehl.
Daten oder Komandos werden mit fallender flanke vom LCD-Display 
übernommen.

Ich gehe jetzt davon aus das es sich um einen HD44780 Controller 
handelt. Glaskugel ist leider defekt.

Bei der Ansteuerung über I2C-Bus ist die sache schon erheblich 
aufwendiger.

Im Prinzip geht es so:

* I2C-Bus initialisieren
* Adresse zum ersten PCF8574 (Daten/ Komandos) senden. (write)
* dann Daten oder Kommando senden.
* I2C-Stop
* I2C-Bus initialisieren
* Adresse zum zweiten PCF8574 senden.
* Dann Enable = 1   senden.
* I2C-Stop
* Adresse zum zweiten PCF8574 senden.
* Dann Enable = 0   senden.
* I2C-Stop
* Daten werden vom LCD-Display übernommen.

Ich hoffe es hilft dir ein wenig weiter.
OP #1035206
Lesenswert?

Vielen Dank für Eure Antworten.

@Peter: Die Idee mit den Treibern werde ich versuchen umzusetzen. Die 
C-Control ist eine Station, mit der ich die Technik meines Aquariums 
steuern will. Grundsätzlich ist aer ein Umstieg geplant. Allerdings muß 
ich damit noch etwas warten. Außerdem will ich es es jetzt erstmal 
hinbekommen, dass es funzt.

@ Klaus: Tut mir leid, dass Deine Glsakugel defekt ist. ;-)
Ja, es handelt sich um einen HD44780 kompatiblen Controller. Sorry, 
hatte ich vergessen, zu posten.
Du hast natürlich Recht, dass ich das Kommando mit RS = 0 schreibe.

Ich denke, das wird mir weiterhelfen.

LG, René
Gast #1035208
Lesenswert?

Hi!

Hatte ich ganz ignoriert.
>gosub I2C_Start
>Daten = Adr_LCD                 '78
>gosub I2C_Write
>Daten = 40
>gosub I2C_LCD_Comand            '128 hinzuaddieren > RS = 1
>gosub I2C_Write
>gosub I2C_LCD_Write             '32 hinzuaddieren > E = 1
>gosub I2C_Write
>gosub I2C_LCD_WriteOff          '32 hinzuaddieren > E = 0
>gosub I2C_Write


Wie gesagt ist es nicht so einfach!

eher so vielleicht!

gosub I2C_LCD_INIT     ; Initialsiert erstmal das LCD
gosub I2C_LCD_Comand   ; In diesem Unteprogramm sollten die zu
sendenden Daten/ Komandos sowie die Einstellungen E,RS,R/W erledigt 
werden.

Ich empfehle dir das Datenblatt zum PCF8574 zu studieren sowie das zu 
deinem LCD-Display.
Gast #1035335
Lesenswert?

Hallo nochmal,

wenn ich so nachdenke, kann es ja eigentlich nur die Station zweiter
Generation sein, die du benutzt. Hat die nicht genug Ports, um ein LCD
im 4 bit-Modus direkt anzusteuern? Das wäre erheblich einfacher. Das was
vorher auf den Ports war, muss für ein Aquarium bestimmt nicht schnell
sein und kann daher bequem über den PCF erledigt werden.

Oder ist da ein Denkfehler drin?

Peter
OP #1036371
Lesenswert?

Hallo Peter...

Ja, Du hast Recht. Es ist die Station II.
Eiegtnlich hat die genug Ports. Und die Anwendungen sind auch alles 
andere als zeitkritisch. Aber irgendwie habe ich mir das in den Kopf 
gesetzt, und es nagt auch an mir, dass es bisher nicht klappt.
Wenigstens würde ich es sehen wollen, dass es geht. Du weißt sicherlich, 
was ich meine.

LG, René
OP #1038053
Lesenswert?

Hallo Klaus...

Ich besitze den Schaltplan nur auf dem Papier und habe momentan keinen 
Scanner zur Verfügung.
Aber hier ist mal die Zuordnung der PCF8574-Ausgänge zu den Eingängen 
des LCD:

PCF.0   RS
PCF.1   RW
PCF.2   E
PCF.3   LCD-Licht
PCF.4   D4
PCF.5   D5
PCF.6   D6
PCF.7   D7
Gast #1038449
Lesenswert?

So wie es aussieht hast du den 4bit modus gewählt also über einen 
PCF8574.


Da ist zu beachten das du das Highnibble zuerst sendest und dann das 
Lownibble.

Ich hoffe dir ist das klar!

Du musst als das LCD erst auf den 4bit modus Initalisieren bevor du 
irgendwelche Zeichen senden kannst.
OP #1038548
Lesenswert?

Ja, Du hast Recht. Das LCD ist im 4bit-Modus angeschlossen.
Ich hatte das schon mit einem LCD gemacht, das ich direkt an den 
μC-Ausgängen angeschlossen hatte. Das hat auch prima funktioniert.

Nur hier habe ich das Problem, wie ich das Byte in das High- und das 
Low-Nibble zerlegen soll, um es dann an den PCF8574 zu senden.

Gruß, René

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren