Hallo Zusammen, Ich habe mir ein 4x20 LCD Display gekauft, mit einem I2C IO-Expander dran. Das Display wäre wohl Arduino kompatibel. Ich nutze gern die Hardware von Arduino, weil man sich da keine Gedanken mehr über eine Schaltung machen braucht, man kann sich auf die Software konzentrieren. Bisher habe ich es immer so gemacht, dass ich dann die Bibliotheken von Arduino studiert habe und genau so in C die Software nachprogrammiert. Da ich aber kaum C++ kann, bin ich bei dem LCD einfach überfordert und bekomme es nicht hin. Ich habe einen Steckbrettaufbau und nutze bei meinem Atmega8 die Hardware TWI Schnittstelle. Diese funktioniert, ich habe zwei weitere 7-Segment Baugruppen daran am laufen. Wenn ich an die Adresse des Displays einfach 0x00 schicke, geht die Hintergrundbeleuchtung aus, schicke ich 0xff, geht sie wieder an. Also die prinzipielle Kommunikation funktioniert. Kontrast habe ich auch eingestellt. Kann mir irgendwer einen Tipp geben, wie die Daten aussehen müssen, damit das Display das macht, was ich will? Ich bekomme es nicht raus. Das Display habe ich: https://botland.de/alphanumerische-und-grafische-anzeigen/2640-lcd-display-4x20-zeichen-blau-i2c-lcm1602-konverter-5904422331061.html Hier ist die Doku von Arduino, die ich nicht verstehe: https://github.com/fmalpartida/New-LiquidCrystal/blob/master/LiquidCrystal_I2C.cpp Danke für eure Antworten Denis
Wahrscheinlich kollidiert deine 7-Segment TWI Ansteuerung mit #include "I2CIO.h"
Nein, ich nutze ja nicht die Arduino Umgebung. Ich klaue mir da immer nur die Art der Ansteuerung. Von Arduino habe ich keine wirkliche Ahnung.. Denis
Dennis H. schrieb: > Kann mir irgendwer einen Tipp geben, wie die Daten aussehen > müssen, damit das Display das macht, was ich will? Bevor du die Software umdichtest, probiere doch erstmal, ob das Beispielprogramm aus der Produktbeschreibung bzw. die mit der Bibliothek heruntergeladenen Beispiele, tun was sie sollen? Welche Sequenz schickst du für die Initialisierung zum Display?
:
Bearbeitet durch User
Rainer W. schrieb: > Bevor du die Software umdichtest, probiere doch erstmal, ob das > Beispielprogramm aus der Produktbeschreibung bzw. die mit der Bibliothek > heruntergeladenen Beispiele, tun was sie sollen? Ich denke, ohne die ganze Arduino Umgebung wird der Code nicht funktionieren, aber ansich hast du Recht, eigentlich sollte ich probieren, ob mit dem Code mein Display das tut, was es soll. Rainer W. schrieb: > Welche Sequenz schickst du für die Initialisierung zum Display? Zur Zeit noch gar keine. Ich habe bisher Displays nur ohne I2C genutzt. Da ist es ja am Anfang notwendig, 3x Soft-Reset zu machen. Damit geht es schon los, ich habe nirgends in dem Arduino-Code etwas gefunden, was nach 3x Reset aussieht. Ich vermute, die haben einen kleinen Controller auf dem Display, welcher sich darum kümmert. Das Display ist einfach nicht dokumentiert, das ist mein Problem. Ich wollte die Arduino-Bibliothek als Doku nutzen und scheitere daran. Denis
Dennis H. schrieb: > Wenn ich an die Adresse des Displays einfach 0x00 schicke, geht die > Hintergrundbeleuchtung aus, schicke ich 0xff, geht sie wieder an. Also > die prinzipielle Kommunikation funktioniert. Kontrast habe ich auch > eingestellt. Kann mir irgendwer einen Tipp geben, wie die Daten aussehen > müssen, damit das Display das macht, was ich will? Ich bekomme es nicht > raus. Wenn Du ein Byte per I2C schreibst, kommt es an den 8 Ausgangspins raus. Diese Pins sind üblicherweise so verbunden: Bit 7: LCD BL Hinterschrundbeleuchtung ein/aus Bit 6: LCD EN Signal Bit 5: LCD RW Signal Bit 4: LCD RS Signal Bit 3: LCD Datenbit 7 Bit 2: LCD Datenbit 6 Bit 1: LCD Datenbit 5 Bit 0: LCD Datenbit 4 Das LCD ist im 4-Bit Modus, d.h. Du musst die beiden Halbbytes nacheinander senden - zuerst das obere, dann das untere. RW ist auf 0, wenn Du schreibst. EN ist 0, und geht kurz auf 1, dann wieder auf 0, um ein Halbbyte zu übernehmen. RS ist 0 für ein Datenbyte, 1 für ein Befehlsbyte. DU musst immer alle Bits auf einmal neu schreiben, nur ein Bit setzen und alle anderen in Ruhe lassen geht nicht. Wenn Du also das Datenbyte Hex 41 schreiben willst, musst Du auf dem I2C ausgeben: BL EN RW RS D7 D6 D5 D4 1 0 0 0 0 1 0 0 0x84 ; Oberes Halbbyte senden, EN=0 1 1 0 0 0 1 0 0 0xc4 ; EN=1, sonst alles gleich 1 0 0 0 0 1 0 0 0x84 ; EN=0, sonst alles gleich 1 0 0 0 0 0 0 1 0x81 ; Unteres Halbbyte senden, EN=0 1 1 0 0 0 0 0 1 0xc1 ; EN=1, sonst alles gleich 1 0 0 0 0 0 0 1 0x81 ; EN=0, sonst alles gleich Der Rest mit den ganzen Details steht dann hier: https://www.mikrocontroller.net/articles/HD44780 Du darfst auch nicht zu schnell sein, sonst kommt das Display nicht hinterher. fchk
Jetzt verstehe ich einiges, alles klar. Frank, ich danke dir, genau das habe ich gesucht. Ich werde es probieren und mich bei Erfolg melden. Vielen Dank! Denis
Dennis H. schrieb: > Ich habe mir ein 4x20 LCD Display gekauft, mit einem I2C IO-Expander > dran. Das Display wäre wohl Arduino kompatibel. Die I2C-Zusatzplatinen können unterschiedlich sein und brauchen dementsprechend eine Initialisierung, welcher Port für was zuständig ist. Auch deren I2C-Adresse ist nicht immer die, die der Verkäufer angibt. Dennis H. schrieb: > Ich denke, ohne die ganze Arduino Umgebung wird der Code nicht > funktionieren, aber ansich hast du Recht, eigentlich sollte ich > probieren, ob mit dem Code mein Display das tut, was es soll. Besorge Dir einen UNO, gerne als China-Clone und bringe es erstmal damit zum Fliegen.
Dennis H. schrieb: > Ich denke, ohne die ganze Arduino Umgebung wird der Code nicht > funktionieren omg - installiere sie halt Frank K. schrieb: > Das LCD ist im 4-Bit Modus Sicherheitshalber sollte man es bei der Initialisierung erstmal in den 4-Bit Modus versetzen - deshalb auch vorhin meine Frage.
:
Bearbeitet durch User
Dennis H. schrieb: > Da ist es ja am Anfang notwendig, 3x Soft-Reset zu machen. Das ist so nicht richtig. Es geht darum, das LCD-Interface in einen definierten Zustand zu bringen. Ein Reset des LCD erfolgt dabei nicht. Nach einem Power-On ist es immer im 8-Bit Mode. Nach einem µC-Reset kann es aber auch im 4-Bit Mode 1. Nibble oder im 4-Bit Mode 2. Nibble sein. Daher benutzt man die Sequenz aus dem Datenblatt, um aus diesen 3 Möglichkeiten immer in einen bekannten Zustand zu kommen. Insbesondere die Wartezeiten sind einzuhalten, da bei einem unbekannten Zustand natürlich noch kein Busy-Polling möglich ist.
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.