Forum: Mikrocontroller und Digitale Elektronik LCD-Ansteuerung funktioniert nicht


von AP (Gast)


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

von M. P. (phpmysqlfreak)


Lesenswert?

Dann funktioniert die Initialisierung des LCDs nicht korrekt.

Wie hast du es denn genau angeschlossen?

Hast du auch alle Teile des Quelltextes übernommen und auch - ich sag 
mal - verstanden?

von holger (Gast)


Lesenswert?

Schon wieder einer;) Der wievielte ist das jetzt?

>Ich habe das LCD wie beschrieben
>(http://www.mikrocontroller.net/articles/AVR-Tutorial:_LCD)
>angeschlossen

Das kann ja jeder sagen. Prüf mal deine Verdrahtung.

von Peter D. (peda)


Lesenswert?


von AP (Gast)


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.

von AP (Gast)


Lesenswert?

Danke Peter...ich werde mir die Seite mal anschauen. An sich bin ich ja 
gerade dran das ganze auf Assembler zu lernen. Allerdings kann ich C 
schon besser. Vielleicht sollte ich also damit anfangen.

von M. P. (phpmysqlfreak)


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?

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


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...   :-/

von AP (Gast)


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

von AP (Gast)


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?

von M. P. (phpmysqlfreak)


Lesenswert?

Du könntest die Fuse-Bits auslesen und damit sehen, auf welche Takt-Rate 
und welchen Takt-Typ der Controller eingestellt ist.

von spess53 (Gast)


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

von AP (Gast)


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?

von M. P. (phpmysqlfreak)


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."

von holger (Gast)


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.

von AP (Gast)


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???

von M. P. (phpmysqlfreak)


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.

von AP (Gast)


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...

von Michael R. (mexman) Benutzerseite


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

von Jobst M. (jobstens-de)


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

von AP (Gast)


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

von Jobst M. (jobstens-de)


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

von AP (Gast)


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

von AP (Gast)


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

von Jobst M. (jobstens-de)


Angehängte Dateien:

Lesenswert?

Wenn Du einen ATmega8 benutzt und ihn wie in der Tabelle ( 
http://www.mikrocontroller.net/articles/AVR-Tutorial:_LCD#Anschluss_an_den_Controller 
) verdrahtet hast, sollte das hexfile problemlos laufen.


Gruß

Jobst

von Jobst M. (jobstens-de)


Lesenswert?

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

Das Display muss doch trotzdem seine 8-Bit an Daten bekommen.
Es werden 2 4-Bit Pakete gesendet.


Gruß

Jobst

von AP (Gast)


Lesenswert?

Wenn im Datenblatt bei der Initialisierung für den 4-bit Modus pro 
"Befehl" 2 Zeilen stehen, meint man damit in der ersten das obere Nibble 
und in der unteren das untere Nibble?

von Jobst M. (jobstens-de)


Lesenswert?

AP schrieb:
> Wenn im Datenblatt bei der Initialisierung für den 4-bit Modus pro
> "Befehl" 2 Zeilen stehen, meint man damit in der ersten das obere Nibble
> und in der unteren das untere Nibble?

Jopp

von AP (Gast)


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.

von Jobst M. (jobstens-de)


Lesenswert?

Ich glaube nicht, daß das Display kaputt ist.

RW liegt an GND ?

Bilder wären hilfreich ...

Welche Spannungen liegen, nachdem mein Programm durchgelaufen ist, an 
den Pins des Displays? Angefangen bei Pin1

Nachtrag: Das Programm braucht keine Sekunde.


Gruß

Jobst

von AP (Gast)


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

von Jobst M. (jobstens-de)


Lesenswert?

Dann würde ich es nun nochmal an den D-Port hängen.

Na denn ...


Gruß

Jobst

von -schumi- (Gast)


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-

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.