Forum: Mikrocontroller und Digitale Elektronik Probleme mit LCD


von Dennis B. (danrulz81)


Angehängte Dateien:

Lesenswert?

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?

von Klaus W. (mfgkw)


Lesenswert?

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.

von Dennis B. (danrulz81)


Lesenswert?

Ja, daher merk ich ja, dass es nicht stimmt. Das mit dem RW versuch ich 
gleich mal.

von Klaus W. (mfgkw)


Lesenswert?

Wenn du eine Ausgabe schon hast und lesen kannst, liegt es nicht
an RW.

von Dennis B. (danrulz81)


Lesenswert?

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

von Klaus W. (mfgkw)


Lesenswert?

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?

von Dennis B. (danrulz81)


Lesenswert?

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.

von Klaus W. (mfgkw)


Lesenswert?

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.

von Dennis B. (danrulz81)


Lesenswert?

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?

von Hannes L. (hannes)


Lesenswert?

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.

...

von Dennis B. (danrulz81)


Lesenswert?

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?

von Karl H. (kbuchegg)


Lesenswert?

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.

von Dennis B. (danrulz81)


Lesenswert?

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?

von Klaus W. (mfgkw)


Lesenswert?

Höchstens am Bit für ein- oder zweizeilig im Kommando function set.
Ansonsten evtl. an der Adressierung (Zuordnung Position zu
Adresse im DDRAM).

von Dennis B. (danrulz81)


Lesenswert?

Ich mach das ganze in Bascom, nicht im Assembler. D.h., ich greif nicht 
direkt ins function set ein.

von Klaus W. (mfgkw)


Lesenswert?

Dann kann es sein, daß der falsche Typ beim Initialisieren angegeben 
ist.
Mit Bascom habe ich aber nichts zu tun...

von Dennis B. (danrulz81)


Lesenswert?

Wieso der falsche Typ? Ich kann ja höchstens zwischen 8x2 oder 16x2 
Zeichen wählen, oder nicht?

von Klaus W. (mfgkw)


Lesenswert?

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.

von Dennis B. (danrulz81)


Lesenswert?

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

von spess53 (Gast)


Lesenswert?

Hi

>Wen es interssiert, hier meine Init-Routine:

Als Beispiel, wie man es nicht macht, gut zu gebrauchen.

MfG Spess

von Dennis B. (danrulz81)


Lesenswert?

Warum? Weil ich keine Aliase verwendet habe? Immerhin läuft mein 
Display.

von Karl H. (kbuchegg)


Lesenswert?

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.

von Dennis B. (danrulz81)


Lesenswert?

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?

von spess53 (Gast)


Lesenswert?

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

von Dennis B. (danrulz81)


Lesenswert?

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.

von spess53 (Gast)


Lesenswert?

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

von Dennis B. (danrulz81)


Lesenswert?

Und warum geht es dann so, ohne nicht?

von hihi (Gast)


Lesenswert?

Ä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
Noch kein Account? Hier anmelden.