Hallo zusammen, ich hab ein kleines Problem mit diesem LCD: http://www.conrad.de/ce/de/product/181652/LCD-MOD-STN-BLAU-NEGLED-WEISS-16X2/0212040 und zwar kann ich den Kontrast nicht richtig einstellen. Die untere Zeile hat immer einen höheren Kontrast als die obere. Belegung siehe Bild oben. Woran kann das liegen?
Wenn du dich über den Kontrast beschwerst heißt da, du siehst überhaupt irgendeine Ausgabe? Wenn nicht: RW am LCD sollte vielleicht auch noch auf Masse gezogen werden.
Ja, daher merk ich ja, dass es nicht stimmt. Das mit dem RW versuch ich gleich mal.
Ne, bringt auch nix. @ Klaus, sorry, hab dein post zu spät gesehen. Sorry, ich hab das falsche Display erwischt oben, hier das Richtige: http://www.produktinfo.conrad.com/datenblaetter/175000-199999/181651-da-01-en-LCD_MOD_STN_BLAU_NEG_LED_WEISS_16X2.pdf
An der Schaltung wird es dann nicht liegen, sonst hättest du keine vernünftige Ausgabe. Dann sehe ich als Möglichkeiten: - LCD defekt (eher unwahrscheinlich, aber soll ja vorkommen) - SW-Problem, z.B. zu schnelle Ausgabe Willst du mal nach der Ausgabe eine Pause einlegen und z.B. im Sekundentakt einen Wert hochzählen, um zu sehen, ob der MC sich nicht gleich nach der Ausgabe aus irgendeinem Grund resettet?
LCD ist schon das 3. dieser Art, hab schon 2 zurück geschickt. Die Pausen bringen leider nichts. Ich müsste ja auch bei unangesteuertem Display den Kontrast richtig einstellen können.
Es kann ja sein, daß die erste Zeile gemalt wird, dann die 2. und dann der MC resettet und dadurch die erste Zeile länger sichtbar ist als die 2. bevor die nächste Initialisierung kommt. Dann sehen die beiden Zeilen unterschiedlich aus.
Das versteh ich nicht ganz: Wenn ich das Display nicht ansteuere, dass heißt keine Anzeige sende, sondern nur initialisiere, sollte sich der Kontrast ja schon vorher richtig einstellen lassen, oder nicht?
Den Kontrast stelle ich ohne Controller ein. Ist das LCD noch nicht initialisiert, dann hat die Hälfte der Zeichen die Pixel gesetzt, die andere Hälfte die Pixel gelöscht. Damit kann man den Kontrast wunderbar einstellen. ...
D.h. das könnte auf mein Problem passen? Ist das das selbe Display, dass ich verwende? Und wie stell ich den Kontrast dann richtig ein? Eine Zeile soll zu sehen (weiß) sein, der andere nicht zu sehen?
Dennis Brenzel schrieb: > D.h. das könnte auf mein Problem passen? Ist das das selbe Display, dass > ich verwende? Und wie stell ich den Kontrast dann richtig ein? Eine > Zeile soll zu sehen (weiß) sein, der andere nicht zu sehen? Ja. Das ist bei nicht initialisiertem LCD erst mal eine gute Grundeinstellung. Danach initialisiert man das LCD, schreibt Text hin und stellt ihn eventuell nach Bedarf noch einmal nach. > LCD ist schon das 3. dieser Art, hab schon 2 zurück geschickt. Ich denke auch, dass du möglicherweise einen ganz banalen Softwarefehler hast. Ständig Display löschen und hinschreiben und schon kann man nichts mehr bzw. nur seh schlecht etwas am LCD sehen. Das 1 LCD mal kaputt ist, ok kann sein. Aber 3 hintereinander ... das glaub ich nicht.
So, jetzt funktioniert es mit dem Kontrast. Aber ich hab schon das nächste Problem: In der oberen Zeile werden die 8 letzten Zeichen nicht angezeigt. Kann das an der Initialisierung liegen?
Höchstens am Bit für ein- oder zweizeilig im Kommando function set. Ansonsten evtl. an der Adressierung (Zuordnung Position zu Adresse im DDRAM).
Ich mach das ganze in Bascom, nicht im Assembler. D.h., ich greif nicht direkt ins function set ein.
Dann kann es sein, daß der falsche Typ beim Initialisieren angegeben ist. Mit Bascom habe ich aber nichts zu tun...
Wieso der falsche Typ? Ich kann ja höchstens zwischen 8x2 oder 16x2 Zeichen wählen, oder nicht?
Zumindest bei 1x16 gibt es zwei Varianten, die unterschiedlich initialisiert werden und die Zeichen an anderen Stellen haben (ab dem 8 Zeichen, deshalb fällt mir das ein). Weiß jetzt nicht, ob es daß bei 2x16 auch gibt. Falls ja, gibt es evtl. zwei verschiedene Typen dafür. Welche du auswählen kannst, weiß ich nicht. Da musst du die Doku zu deinem Bascom lesen. Das ist gottseidank nicht meine Baustelle.
So, jetzt funktioniert es einwandfrei. Es war falsch initialisiert, hattest wohl recht. Wen es interssiert, hier meine Init-Routine:
1 | $regfile = "m8515.dat" |
2 | $crystal = 2000000 |
3 | Baud = 9600 |
4 | Config Portd = Output |
5 | Init: |
6 | Waitms 50 |
7 | Portd = &B11111100 |
8 | Waitms 10 |
9 | Portd = &B11111100 |
10 | Waitms 10 |
11 | Portd = &B11111100 |
12 | Waitms 10 |
13 | |
14 | Portd = &B11111101 |
15 | Portd = &B11111101 |
16 | Portd = &B11110111 |
17 | Portd = &B11111111 |
18 | Portd = &B11110111 |
19 | Portd = &B11111111 |
20 | Portd = &B11111110 |
21 | Portd = &B11111111 |
22 | Portd = &B11111011 |
23 | Return |
24 | End |
Hi
>Wen es interssiert, hier meine Init-Routine:
Als Beispiel, wie man es nicht macht, gut zu gebrauchen.
MfG Spess
Dennis Brenzel schrieb: > Warum? Weil ich keine Aliase verwendet habe? Immerhin läuft mein > Display. 1) Weil niemand damit etwas anfangen kann Oder siehst du irgendwo, an welche Pins welche LCD Leitung angeschlossen ist 2) Weil sie höchst unsinnig ist. Das dieser Unsinn tatsächlich für die korrekte Initialisierung deines LCD verantworltich ist - ich galubs nicht Waitms 50 Portd = &B11111100 Waitms 10 Portd = &B11111100 Waitms 10 Portd = &B11111100 Waitms 10 was soll das sein? Da wird nirgends auch nur 1 Bit getoggelt. Aus Sicht des LCD haben die Leitungen ständig konstanten Pegel. Wenn du behauptest, das Initialisiert das LCD, dann kann man höchstens sagen: du hast nicht im geringsten verstanden, wie die Kommunikation mit dem LCD überhaupt funktioniert.
Karl heinz Buchegger schrieb: > 1) Weil niemand damit etwas anfangen kann > > Oder siehst du irgendwo, an welche Pins welche LCD Leitung > angeschlossen ist O.k., da hast du recht, so kann mann es auch nicht gebrauchen. Wobei ganz oben, in meinem ersten Post ein Belegungsplan vorhanden ist. > 2) Weil sie höchst unsinnig ist. > Das dieser Unsinn tatsächlich für die korrekte Initialisierung > deines LCD verantworltich ist - ich galubs nicht > > Waitms 50 > Portd = &B11111100 > Waitms 10 > Portd = &B11111100 > Waitms 10 > Portd = &B11111100 > Waitms 10 > > > was soll das sein? > Da wird nirgends auch nur 1 Bit getoggelt. Aus Sicht des LCD haben die > Leitungen ständig konstanten Pegel. Wenn du behauptest, das > Initialisiert das LCD, dann kann man höchstens sagen: du hast nicht im > geringsten verstanden, wie die Kommunikation mit dem LCD überhaupt > funktioniert. O.k., bevor man motzt, sollte man sich ersteinmal das Datenblatt anschauen welches besagt:
1 | power on |
2 | | |
3 | Warten > 15 ms |
4 | | |
5 | RS R/W DB7 DB6 DB5 DB4 |
6 | 0 0 0 0 1 1 |
7 | | |
8 | Warten > 4.1 ms |
9 | | |
10 | RS R/W DB7 DB6 DB5 DB4 |
11 | 0 0 0 0 1 1 |
12 | | |
13 | Warten >100µs |
14 | | |
15 | RS R/W DB7 DB6 DB5 DB4 |
16 | 0 0 0 0 1 1 |
17 | | |
18 | ... |
Hier im Forum wird dauernd gepredigt, man solle sich erst im Datenblatt schlau machen. Das habe ich getan, und werde dafür als blöd hingestellt. Es steht so im Datenblatt, ich habe mir diesen Schrott nicht ausgedacht, sondern übernommen. Verstanden habe ich es, und es funktioniert auch. Datenblatt ist Datenblatt. Hast du es dir mal angesehen?
Hi > ich habe mir diesen Schrott nicht ausgedacht, >sondern übernommen. Verstanden habe ich es, und es funktioniert auch. Willst du uns veralbern? Wie es genau geht, steht im Datenblatt deines Displaykontrollers (KS0066). MfG Spess
spess53 schrieb: > Willst du uns veralbern? Wie es genau geht, steht im Datenblatt deines > Displaykontrollers (KS0066). > > MfG Spess Nein, will ich nicht. Ich hatte schonmal eine Init nach dem Datenblattes des KS0066 geschrieben, diese hatte aber nicht funktioniert. Bei Conrad gibts ein Datenblatt mit Init, welche ich auch verwendet habe und diese funktioniert auch. Sieh selbst: http://www.produktinfo.conrad.com/datenblaetter/175000-199999/181651-da-01-en-LCD_MOD_STN_BLAU_NEG_LED_WEISS_16X2.pdf auf der letzten seit.
Hi >Ich hatte schonmal eine Init nach dem Datenblattes des KS0066 geschrieben, >diese hatte aber nicht funktioniert. Ich auch. Nur meine funktioniert. >Bei Conrad gibts ein Datenblatt mit Init, welche ich auch verwendet habe >und diese funktioniert auch. Das ist keine Init, sondern lediglich die zu setzenden Bits. Und auch der KS0066 übernimmt die Daten erst mit der fallenden Flanke von E. Das ist lt. deiner Schaltung PD5. Und da sehe ich, genau wie Karl Heinz, kein Bitwackeln. MfG Spess
Änder:
1 | Waitms 50 |
2 | Portd = &B11111100 |
3 | Waitms 10 |
4 | Portd = &B11111100 |
5 | Waitms 10 |
6 | Portd = &B11111100 |
7 | Waitms 10 |
in:
1 | Waitms 50 |
2 | Portd = &B11111100 |
3 | Waitms 50 |
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.