LCD-Ansteuerung funktioniert nicht

Gast #2062987
Lesenswert?

Hallo!

Ich mache dertzeit gerade das AVR-Tutorial auf der Website durch und 
habe Probleme mit dem LCD-Teil. Ich habe das LCD wie beschrieben 
(http://www.mikrocontroller.net/articles/AVR-Tutorial:_LCD) 
angeschlossen und das dazugehörige Programm per AVR-Studio compiliert 
und mit meinem USB-ISP-Kabel in den Kontroller (ATMEGA8) erfolgreich 
eingefügt. Leider passiert dann aber überhaupt nichts. Das einzige was 
ich sehe sind die 2 schwarzen Balken, die ich aber sehe sobald ich 
Spannung über das Board (Olimex P28) anlege.


MfG
AP
Gast #2063009
Lesenswert?

Ich hab's schon mehrmals überprüft. Das einzige was ich geändert habe 
ist, dass ich für den 3. Pin des LCD kein Poti benutzt habe. Den 
Quelltext konnte ich eins zu eins übernehmen. Verstanden habe ich ihn 
denke ich schon. Zwischen dem 15. Pin (Bildschirmbeleuchtung)und VCC 
habe ich noch einen 220 Ohm Widerstand eingefügt. Das sind die einzigen 
Änderungen die ich vorgenommen habe.
#2063025
Lesenswert?

AP schrieb:
> Das einzige was ich geändert habe
> ist, dass ich für den 3. Pin des LCD kein Poti benutzt habe.

Schonmal an eine fehlerhafte Kontrastspannung gedacht?
Ist die Spannung zu hoch/niedrig, kann man nicht mehr zwischen ein- und 
ausgeschalteten Segemente unterscheiden - entweder erscheint alles 
"schwarz" (eingeschaltet) oder "grün" (ausgeschaltet) - ja nach dem, 
welche Farbgebung das Display hat.

Auf welchem Potential liegt VEE denn bei dir?
Moderator (Firma: Titel) Persönliche Seite #2063027
Lesenswert?

AP schrieb:
> Das einzige was ich geändert habe
> ist, dass ich für den 3. Pin des LCD kein Poti benutzt habe.
Was hast du denn sonst gemacht?
Was hat der Pin für eine Funktion?
Welche Spannung sollte denn da anliegen?

Das ist, wie wenn du ein Autorennen fährst, das dann verlierst und 
hinterher sagst: ich habe alles gleich gemacht, nur den Zündschlüssel 
habe ich nicht rumgedreht...   :-/
Gast #2063232
Lesenswert?

Der 3. Pin auf dem LCD ist für die Kontrastspannung zuständig. Bei mir 
liegt er auf GND. Man kann den Kontrast anscheinend über ein Poti 
erhöhen, das man zwischen GND und +5V schaltet. Über diese Poti soll man 
dann eine negative Spannung legen. Ich weiß leider nicht wie ich so eine 
negative Spannung ohne zusätzliche Stromquelle erzeugen kann.

Ich glaube eigentlich nicht, dass es sich um einen Fehler beim Kontrast 
handelt. Wenn ich Strom an das Board lege sehe ich die einzelnen Felder, 
sowie die Zwischenräume sehr deutlich.

Eine Frage noch:
Im Tutorial steht, dass man den VCC-Pin des LCD mit +5V verbinden soll. 
Liege ich Recht in der Annahme, dass damit der VCC-Pin des Controllers 
gemeint ist?


MfG
AP
Gast #2063312
Lesenswert?

Kann es etwas mit der Taktfrequenz zu tun haben?
Der ATMEGA8 hat ja eien Taktfrequenz von 4MHz. Mein Board verfügt aber 
über ein externes Quarz mit 8MHz. Ich weiß aber leider nicht ob es 
aktiviert ist. Wie könnte ich das denn herausfinden?
Gast #2063325
Lesenswert?

Hi

>Über diese Poti soll man
>dann eine negative Spannung legen. Ich weiß leider nicht wie ich so eine
>negative Spannung ohne zusätzliche Stromquelle erzeugen kann.

Eine negative Spannung gegenüber VCC .

MfG Spess
Gast #2063335
Lesenswert?

Hallo!

Ich habe im AVR-Studio bei "Fuses" auf "Read" gedrückt und es erscheint:

Int. RC Osc. 1MHz

Wenn der AVR intern getaktet wird, sollte doch hier eigentlich 4MHz 
stehen, oder?

Könnt ihr mir sagen wie ich das mit "negativ gegen VCC" anstelle?
#2063343
Lesenswert?

AP schrieb:
> Hallo!
>
> Ich habe im AVR-Studio bei "Fuses" auf "Read" gedrückt und es erscheint:
>
> Int. RC Osc. 1MHz

Dann läuft der Controller nur mit 1MHz - Es sind aber bis zu 4MHz intern 
möglich . (Plenken wegen der Formatierung.)

"The device is shipped with CKSEL = “0001” and SUT = “10” (1 MHz 
Internal
RC Oscillator, slowly rising power)."

Und:

"The calibrated internal RC Oscillator provides a fixed 1.0, 2.0, 4.0, 
or 8.0 MHz clock. All frequencies
are nominal values at 5V and 25°C. This clock may be selected as the 
system clock by
programming the CKSEL Fuses as shown in Table 9."
Gast #2063347
Lesenswert?

>Eine negative Spannung gegenüber VCC .

Wozu? Siehe unten.

>Das einzige was ich sehe sind die 2 schwarzen Balken,

Auf was für einem Display? Zwei Zeilen?
Dann ist der Kontrast evtl. zu weit aufgedreht.

>Der 3. Pin auf dem LCD ist für die Kontrastspannung zuständig. Bei mir
>liegt er auf GND.

Dann schliess da ein Poti an. Oder
Vcc-10k-Vee-1k-Gnd.
Gast #2063399
Lesenswert?

So...

Ich habe jetzt die Schaltvariante mit VCC-10K-VEE-1k-GND ausprobiert.

Dabei konnte ich beobachten, dass bei dieser Schaltung der untere Balken 
des LCD verschwindet. Der obere bleibt.

Selbst wenn ich überhaupt keine Verbindung zu GND habe, bleibt der obere 
Balken erhalten.
Weiß jemand wie das möglich ist? Lötdefekte oder ähnliches???
#2063404
Lesenswert?

Bei meinem 16x2-LCD ist es so:

Spannung ein:

Zeile 1 schwarz, Zeile 2 blau.

µC (Tiny2313) initialisiert das Display (wie im Tutorial) im 4bit-Modus.
Konfiguration auf 2 Zeilen.

Zeile 1 und Zeile 2 sind danach schwarz.

Display-Clear-Befehl wird gesendet.

Beide Zeilen des Display werden blau.

Danach folgt noch ein Cursor-Reset nach oben links, und danach wandern 
meine Texte lustig in das Display, wie sie sollen.
Gast #2063435
Lesenswert?

Ich habe jetzt wirklich alles nochmal überprüft.
- die Lötstellen
- die Taktfrequenz
- den Codev (darauf geachtet, dass es ein 2x16 LCD mit 5x8 Matrizen ist)

Ich weiß jetzt echt nicht mehr weiter...
Persönliche Seite #2063465
Lesenswert?

AP schrieb:
> Ich habe jetzt wirklich alles nochmal überprüft.
> - die Lötstellen
> - die Taktfrequenz
> - den Codev (darauf geachtet, dass es ein 2x16 LCD mit 5x8 Matrizen ist)
>
> Ich weiß jetzt echt nicht mehr weiter...

Logikanalysator anschliessen oder einfacher:
uC in EInzelschrittbetrieb laufen lassen une bei jedem Schritt den Pegel 
an den LCD-Pins messen.

Gruss

Michael
#2063527
Lesenswert?

AP schrieb:
> Dabei konnte ich beobachten, dass bei dieser Schaltung der untere Balken
> des LCD verschwindet. Der obere bleibt.

Nun ist zumindest der Kontrast korrekt!
Bei einem uninitialisierten Display wird nämlich nur die erste Zeile 
angesteuert.

Mach doch mal ein Foto von Deinem Aufbau und stell dies hier ein. Besser 
2: Eins von oben, eins von unten. Aber bitte die Bildgrößen beachten!


Gruß

Jobst
Gast #2065204
Lesenswert?

Hallo!

Ich habe leider gerade keine Möglichkeit meinen Aufbau zu fotografieren 
(Kamera nicht funktionstüchtig).
Allerdings habe ich im Internet das Datenblatt meines LCD gefunden.
http://www.lcd-module.de/pdf/doma/2_16.pdf

Darin ist ein Initialisierungsbeispiel für den 4-bit Modus gegeben, dass 
deutlich anders aussieht als das im Tutorial. Ich wäre sehr dankbar wenn 
das jemand der sich auskennt mal etwas anschauen könnte.

Den Link zum Tutorial habe ich bereits oben angegeben.
Was mich noch wundert ist, dass im Datenblatt (bei der Initialisierung) 
angegeben ist, dass es sich um 7x5 Matrizen und nicht um 8x5 Matrizen 
handelt. Auf zweiteres komme ich aber wenn ich beim LCD nachzähle. Wie 
kann man das verstehen?

Fotos kommen in Bälde.

MfG
AP
#2065293
Lesenswert?

Wie stehts mit den Timings?


So siehts bei mir aus:
1
LCD_init:  CALL  WAIT_15ms
2
    CALL  WAIT_15ms
3

4
    LDI  temp, 0x30    ; jeweils immer mit pause im 8-Bit modus auf 8-Bit setzen
5
    CALL  LCD_command_8
6
    CALL  WAIT_15ms
7

8
    LDI  temp, 0x30
9
    CALL  LCD_command_8
10
    CALL  WAIT_15ms
11

12
    LDI  temp, 0x30
13
    CALL  LCD_command_8
14
    CALL  WAIT_15ms    ; Display sicher im 8-Bit Mode
15

16
    LDI  temp, 0x20    ; von 8 auf 4 Bit umschalten
17
    CALL  LCD_command_8
18
    CALL  WAIT_15ms
19
            ; Display nun im 4-Bit Mode
20

21
  ; Function Set
22
      ; 20 = code
23
      ; 10 = 8Bit - /4Bit
24
      ;  8 = 2 Zeilen - /1 Zeile   (16x1 = 8x2 !)
25
      ;  4 = 5x10 - /5x7
26
    LDI  temp, 0x28
27
    CALL  LCD_command
28
    CALL  WAIT_15ms
29
    
30
  ; Display AN
31
      ;  8 = code
32
      ;  4 = Display ein - /aus
33
      ;  2 = cursor aus - /ein
34
      ;  1 = cursor blink - /still
35
          LDI  temp, 0x0C
36
          CALL  LCD_command
37
    CALL  WAIT_15ms
38

39
        ; Display loeschen
40
      ;  1 = code
41
          LDI  temp, 0x01
42
          CALL  LCD_command
43
    CALL  WAIT_15ms
44

45
  ; Entry Mode set
46
        ; Nicht schieben (egal welche Richtung :)
47
      ;  4 = code
48
      ;  2 = increment - /decrement
49
      ;  1 = shift display
50
          LDI  temp, 0x06
51
          CALL  LCD_command
52
    CALL  WAIT_15ms
53

54
    RET

... und das funktioniert ...



Gruß

Jobst
Gast #2066008
Lesenswert?

Hast du vielleicht den gesamten Code zur Verfügung (mit Unterfunktionen 
und Co.)?
Dann könnte ich es mal mit meinem vergleichen und schauen was genau 
anders ist.
Was genau ist zum Beispiel LCD_command
Gast #2066036
Lesenswert?

Um den 4-bit Modus zu initialisieren, muss man ja zuerst sicher im 8-bit 
Modus sein. Deshalb die drei Wiederholungen.
Im Datenblatt habe ich nun gelesen, dass man dazu
folgendes setzten muss:

DB7  DB6  DB5  DB4  DB3  DB2  DB1  DB0
0    0    1    1    1    0    0    0

Im Tutorial steht nun, dass man DB3 überhaupt nicht anschließen muss.
Wie soll ich das verstehen?


MfG
AP
Gast #2066121
Lesenswert?

Sobald das Display initialisiert ist, sollten beide Balken sichtbar 
sein, oder?
Obwohl, sobald ich die Spannung am Kontrast-Pin ändere sehe ich ja auch 
beide Balken. Den Code habe ich jetzt einmal vollkommen durchgearbeitet 
und zum Teil auch verändert...nichts.
Der Code den du (jobst) mir gegeben hast geht auch nicht. Die 
Beschaltung stimmt 100%-ig.

Das alles richtig läuft und ich es wegen dem Kontrast nicht sehe glaube 
ich eigentlich nicht. Entweder das Board ist kaputt (den Controller habe 
ich bereits ausgetauscht), oder das LCD.
Mein letzter Versuch wird sein, alles einmal auf den B-Pins 
durchzuziehen.
Sollte das nicht gehen kaufe ich mir ein neues LCD. Ich will das 
hinbekommen.
Gast #2066179
Lesenswert?

Ja...es funktioniert!!!!!

Ich habe jetzt alles mit den B-Pins gemacht und es funktioniert 
hervorragend.

Offensichtlich haben meine D-Pins irgend einen Schaden genommen (Was 
natürlich sehr schlecht ist.) Allerdings ist es Controller unabhängig. 
Daher kann ich wohl ausgehen dass mit den Lötstellen etwas nicht stimmt 
(Obwohl ich eigentlich mehrmals die Stellen überprüft habe, und auch die 
Spannungen gemessen habe). Was sonst könnte dazu führen, dass die D-Pins 
versagen?

Bis hier her auf jeden Fall schon einmal vielen Dank an alle. Vor allem 
jobst. Schön dass ihr die Nerven auf bringt solchen Anfängern wie mir zu 
helfen.


MfG

AP
Gast #2066741
Lesenswert?

Um diese Frage von dir noch zu beantworten:

>Was mich noch wundert ist, dass im Datenblatt (bei der Initialisierung)
>angegeben ist, dass es sich um 7x5 Matrizen und nicht um 8x5 Matrizen
>handelt. Auf zweiteres komme ich aber wenn ich beim LCD nachzähle.

Die 7x5 gelten für die Buchstaben, die unterste Reihe Pixel in jeder 
Zelle ist für den Cursor. Du kannst aber bei selbst definierten Zeichen 
auch die 8. Pixelzeile nutzen

Von hier: 
http://www.mikrocontroller.net/articles/Pseudo-Graphische_LCD-Ansteuerung
fast ganz oben, "Um der Verwirrung zu vorzubeugen:" (Schreibfehler fällt 
mir gerade auf^^)

Gruß
-schumi-

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren