www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik LCD-Ansteuerung funktioniert nicht


Autor: AP (Gast)
Datum:

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

Autor: Marcel Papst (phpmysqlfreak)
Datum:

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

Autor: holger (Gast)
Datum:

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

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: AP (Gast)
Datum:

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

Autor: AP (Gast)
Datum:

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

Autor: Marcel Papst (phpmysqlfreak)
Datum:

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

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

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

Autor: AP (Gast)
Datum:

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

Autor: AP (Gast)
Datum:

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

Autor: Marcel Papst (phpmysqlfreak)
Datum:

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

Autor: spess53 (Gast)
Datum:

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

Autor: AP (Gast)
Datum:

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

Autor: Marcel Papst (phpmysqlfreak)
Datum:

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

Autor: holger (Gast)
Datum:

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

Autor: AP (Gast)
Datum:

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

Autor: Marcel Papst (phpmysqlfreak)
Datum:

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

Autor: AP (Gast)
Datum:

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

Autor: Michael Roek (mexman) Benutzerseite
Datum:

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

Autor: Jobst M. (jobstens-de)
Datum:

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

Autor: AP (Gast)
Datum:

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

Autor: Jobst M. (jobstens-de)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie stehts mit den Timings?


So siehts bei mir aus:
LCD_init:  CALL  WAIT_15ms
    CALL  WAIT_15ms

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

    LDI  temp, 0x30
    CALL  LCD_command_8
    CALL  WAIT_15ms

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

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

  ; Function Set
      ; 20 = code
      ; 10 = 8Bit - /4Bit
      ;  8 = 2 Zeilen - /1 Zeile   (16x1 = 8x2 !)
      ;  4 = 5x10 - /5x7
    LDI  temp, 0x28
    CALL  LCD_command
    CALL  WAIT_15ms
    
  ; Display AN
      ;  8 = code
      ;  4 = Display ein - /aus
      ;  2 = cursor aus - /ein
      ;  1 = cursor blink - /still
          LDI  temp, 0x0C
          CALL  LCD_command
    CALL  WAIT_15ms

        ; Display loeschen
      ;  1 = code
          LDI  temp, 0x01
          CALL  LCD_command
    CALL  WAIT_15ms

  ; Entry Mode set
        ; Nicht schieben (egal welche Richtung :)
      ;  4 = code
      ;  2 = increment - /decrement
      ;  1 = shift display
          LDI  temp, 0x06
          CALL  LCD_command
    CALL  WAIT_15ms

    RET

... und das funktioniert ...



Gruß

Jobst

Autor: AP (Gast)
Datum:

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

Autor: AP (Gast)
Datum:

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

Autor: Jobst M. (jobstens-de)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Wenn Du einen ATmega8 benutzt und ihn wie in der Tabelle ( 
http://www.mikrocontroller.net/articles/AVR-Tutori... 
) verdrahtet hast, sollte das hexfile problemlos laufen.


Gruß

Jobst

Autor: Jobst M. (jobstens-de)
Datum:

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

Autor: AP (Gast)
Datum:

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

Autor: Jobst M. (jobstens-de)
Datum:

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

Autor: AP (Gast)
Datum:

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

Autor: Jobst M. (jobstens-de)
Datum:

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

Autor: AP (Gast)
Datum:

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

Autor: Jobst M. (jobstens-de)
Datum:

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

Na denn ...


Gruß

Jobst

Autor: -schumi- (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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-Gra...
fast ganz oben, "Um der Verwirrung zu vorzubeugen:" (Schreibfehler fällt 
mir gerade auf^^)

Gruß
-schumi-

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.