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é
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.
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.
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é
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.
Ich werde versuchen, das Ganze nochmal komplett neu zu strukturieren und mal auszuprobieren. Mir ist schon klar, dass sich kein Geschwindigkeitsrekord damit aufstellen lassen wird. LG & schönen Abend René
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
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é
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
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.
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é
Hi! hier mal ein kleiner Auszug aus meiner LCD_CMD Routine. Allerdings in Assembler für 8051er Derivate. Ich hoffe es ist verständlich genug und hilft dir etwas weiter.
Hallo Klaus... Bisher habe ich von Assembler noch keinen großen Plan. Aber ich will mich damit auseinandersetzen und es lernen. Somit kann ich Dein Beispiel schon mal als Ansporn betrachten. Hab vielen Dank! Gruß René
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.