mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Probleme mit LCD


Autor: Dennis Brenzel (danrulz81)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

ich hab ein kleines Problem mit diesem LCD:
http://www.conrad.de/ce/de/product/181652/LCD-MOD-...

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?

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Dennis Brenzel (danrulz81)
Datum:

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

Autor: Klaus Wachtler (mfgkw)
Datum:

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

Autor: Dennis Brenzel (danrulz81)
Datum:

Bewertung
0 lesenswert
nicht 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/17...

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Dennis Brenzel (danrulz81)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Dennis Brenzel (danrulz81)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht 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.

...

Autor: Dennis Brenzel (danrulz81)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Dennis Brenzel (danrulz81)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht 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).

Autor: Dennis Brenzel (danrulz81)
Datum:

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

Autor: Klaus Wachtler (mfgkw)
Datum:

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

Autor: Dennis Brenzel (danrulz81)
Datum:

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

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Dennis Brenzel (danrulz81)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So, jetzt funktioniert es einwandfrei. Es war falsch initialisiert, 
hattest wohl recht.

Wen es interssiert, hier meine Init-Routine:
$regfile = "m8515.dat"
$crystal = 2000000
Baud = 9600
Config Portd = Output
Init:
Waitms 50
Portd = &B11111100
Waitms 10
Portd = &B11111100
Waitms 10
Portd = &B11111100
Waitms 10

Portd = &B11111101
Portd = &B11111101
Portd = &B11110111
Portd = &B11111111
Portd = &B11110111
Portd = &B11111111
Portd = &B11111110
Portd = &B11111111
Portd = &B11111011
Return
End

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

>Wen es interssiert, hier meine Init-Routine:

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

MfG Spess

Autor: Dennis Brenzel (danrulz81)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Warum? Weil ich keine Aliase verwendet habe? Immerhin läuft mein 
Display.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Dennis Brenzel (danrulz81)
Datum:

Bewertung
0 lesenswert
nicht 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:
power on
    |
Warten > 15 ms
    |
RS R/W DB7 DB6 DB5 DB4
0   0   0   0   1   1
    |
Warten > 4.1 ms
    |
RS R/W DB7 DB6 DB5 DB4
0   0   0   0   1   1
    |
Warten >100µs
    |
RS R/W DB7 DB6 DB5 DB4
0   0   0   0   1   1
    |
   ...
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?

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Dennis Brenzel (danrulz81)
Datum:

Bewertung
0 lesenswert
nicht 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/17...
auf der letzten seit.

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Dennis Brenzel (danrulz81)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und warum geht es dann so, ohne nicht?

Autor: hihi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Änder:
Waitms 50
Portd = &B11111100
Waitms 10
Portd = &B11111100
Waitms 10
Portd = &B11111100
Waitms 10

in:
Waitms 50
Portd = &B11111100
Waitms 50

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.