Forum: Mikrocontroller und Digitale Elektronik LCD Display initialisiert nicht


von Micha S. (e-tec)


Lesenswert?

Guten Abend zusammen,

habe zum ersten mal ein lcd display.
habe es wie im tutorium zusammengelötet und am avr angeschlossen.
wenn ich jetzt den strom anschliesse (nur den strom) dann kommt nur ein 
schwarzer balken auf dem display statt den 2 die ich brauchen würde 
(2x16).
woran könnte es liegen?

ich hab mal versucht das programm zu starten aber das display will auch 
nicht initialisieren :(

wäre dankbar für jede hilfe :))

grüße

ps ich verwende die subroutinen aus dem lcd tutorium

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Die Fehlerbeschreibung passt zu dem Bild Softwareinitialisierung geht 
schief.

Hardwaremäßig kann die Schaltung Probleme haben und/oder ein 
inkompatibles LCD verbaut sein. Man müsste also mal kritisch auf das 
unbekannte Datenblatt und den nicht vorhandenen Schaltplan linsen, um 
grobe Designfehler auszuschließen und anschließend auf die tatsächlich 
aufgebaute Geheimschaltung spieken und vielleicht sogar mit einem 
spitzen Voltmeterchen daran rumpeeken.

Softwaremäßig kann es an Timingfehlern liegen. Das ist möglich, wenn 
das Projekt in der Entwicklungsumgebung falsch aufgesetzt wurde, also 
der µC hardwaremäßig nicht zur Software passt. Ausschließen könnte man 
dies, wenn du es schaffst Projekte aufzusetzen, die ein reproduzierbares 
Timing im µs und ms Bereich einhalten, wie z.B. die berüchtigte genau 
blinkende LED.

von Micha S. (e-tec)


Lesenswert?

hi,
erst mal danke für deine antwort.
also das display nennt sich lcd162c (kontroller ist der ks0070b) also 
auf jeden fall kompatibel.

die timings habe ich erst mal weit über die im db gesetzt, 
sicherheitshalber (ja unnötig aber ich wollte erst mal fehlerquellen 
auslöschen)

mit dem voltmeter habe ich auch bereits geschaut, alles hat verbindung 
wie es sollte.

pinbelegung sieht wie folgt aus:
1
/*
2
Pin #-LCD   Bezeichnung-LCD   Pin-µC         Pin an J40     Farbe Kabel
3
-----------------------------------------------------------------------
4
1           Vss               GND            GND            Schwarz
5
2           Vcc               5V             Vcc            Weiß
6
3           Vee               GND / Poti     GND            Braun
7
4           RS                PD4            30             Grau
8
5           RW                GND            GND            Braun
9
6           E                 PD5            31             Lila
10
7           DB0               offen
11
8           DB1               offen
12
9           DB2               offen
13
10          DB3               offen
14
11          DB4               PD0            26             Blau
15
12          DB5               PD1            27             Grün
16
13          DB6               PD2            28             Gelb
17
14          DB7               PD3            29             Orange
18
*/

ich denke es muss was damit zu tun haben das auf einem zweizeiligen lcd 
nur eine zeile angezeigt wird, wenn ich den strom einschalte sollten ja 
eigentlich  2 schwarze balken erscheinen.

von Spess53 (Gast)


Lesenswert?

Hi

>ich denke es muss was damit zu tun haben das auf einem zweizeiligen lcd
>nur eine zeile angezeigt wird, wenn ich den strom einschalte sollten ja
>eigentlich  2 schwarze balken erscheinen.

Nein. Nach dem Einschalten sieht der Controller das Display als 
einzeilig an. Einzeilig korrespondiert aber nicht unbedingt mit den 
sichtbaren Zeilen eines Displays.

MfG Spess

von Micha S. (e-tec)


Lesenswert?

okay ich dachte es eben weil es so im tutorium stand...

von Stefan B. (stefan) Benutzerseite


Lesenswert?

> Pin-µC

Welchen µC hast du?

> Pin an J40

J40 hört sich nach der Kontaktleiste auf einem der Pollin-Boards an. Ist 
das so?

> die timings habe ich erst mal weit über die im db gesetzt,
> sicherheitshalber (ja unnötig aber ich wollte erst mal fehlerquellen
> auslöschen)

Worst case hast du z.B. einen Faktor 16 im Timing drin, z.B. 1 MHz statt 
16 MHz. Nach oben oder unten... Bist du sicher, dass deine 
sicherheitshalber gesetzten Zeitwerte dann auch noch stimmen?

>> ps ich verwende die subroutinen aus dem lcd tutorium

Welches? AVR-Tutorial: LCD (Assembler) oder 
AVR-GCC-Tutorial/LCD-Ansteuerung

Ich vermute die C Version. Dann wäre deine Pinbelegung die unveränderte 
aus der Includedatei lcd-routines.h.

> wenn ich den strom einschalte sollten ja
> eigentlich  2 schwarze balken erscheinen.

Eigentlich nicht, weil

1. der gleichzeitig eingeschaltete µC in der Initialisierung ziemlich 
fix das LCD löscht, wenn alles richtig ist und

2. Anwender normalerweise den Kontrast so einstellt, dass das Display 
nicht dauerhaft zwei schwarze Balken zeigt.

von Spess53 (Gast)


Lesenswert?

Hi

Es gibt viel mehr Dinge in Tutorials als sich Himmel und
Erde träumen lassen.

MfG Spess

von e-tec (Gast)


Lesenswert?

Stefan B. schrieb:
>> Pin-µC
>
>
>
> Welchen µC hast du?
>
>
>
>> Pin an J40
>
>
>
> J40 hört sich nach der Kontaktleiste auf einem der Pollin-Boards an. Ist
>
> das so?

also als controller setze ich meinen kleinen liebling ein, den tiny2313. 
hätte aber auch noch ein paar atmega16 rumliegen so ist es nicht..
das board stimmt so, ist das funk avr board von pollin.

>> die timings habe ich erst mal weit über die im db gesetzt,
>
>> sicherheitshalber (ja unnötig aber ich wollte erst mal fehlerquellen
>
>> auslöschen)
>
>
>
> Worst case hast du z.B. einen Faktor 16 im Timing drin, z.B. 1 MHz statt
>
> 16 MHz. Nach oben oder unten... Bist du sicher, dass deine
>
> sicherheitshalber gesetzten Zeitwerte dann auch noch stimmen?

also mit den timings das müsste stimmen, dazu verwende ich die delay 
routinen und keinen timer (cpu speed ist ebenfalls richtig eingestellt 
auf 8MHz)

>>> ps ich verwende die subroutinen aus dem lcd tutorium
>
>
>
> Welches? AVR-Tutorial: LCD (Assembler) oder
>
> AVR-GCC-Tutorial/LCD-Ansteuerung
>
>
>
> Ich vermute die C Version. Dann wäre deine Pinbelegung die unveränderte
>
> aus der Includedatei lcd-routines.h.

genau, die c version. sind recht einfache routinen und ich habe sie 
meinen bedrürftnissen ein wenig angepasst, aber funktionieren dennoch 
nicht (die originalen habe ich gestern auch noch probiert)

>
>> wenn ich den strom einschalte sollten ja
>
>> eigentlich  2 schwarze balken erscheinen.
>
>
>
> Eigentlich nicht, weil
>
>
>
> 1. der gleichzeitig eingeschaltete µC in der Initialisierung ziemlich
>
> fix das LCD löscht, wenn alles richtig ist und

wie gesagt ich hatte erst einmal nur den strom eingeschalten, ohne 
angeschlossenes lcd. ist das dann trotzdem so???

>
> 2. Anwender normalerweise den Kontrast so einstellt, dass das Display
>
> nicht dauerhaft zwei schwarze Balken zeigt.

den kontrast (Vee) habe ich dauerhaft auf masse, also max kontrast. 
werde ihm heut mal ein kleines poti verpassen um auch diese fehlerquelle 
auszulöschen.

danke für die antwort, werde auf jeden fall nochmal die timings 
durchschauen, vielleicht habe ich im avr studio die falsche taktung 
eingestellt. sicher ist sicher :))

noch ideen???

von Stefan B. (stefan) Benutzerseite


Lesenswert?

e-tec schrieb:

> also mit den timings das müsste stimmen, dazu verwende ich die delay
> routinen und keinen timer (cpu speed ist ebenfalls richtig eingestellt
> auf 8MHz)

Sorry, ich halte es da mit dem alten Herrn Lenin 
http://de.wikipedia.org/wiki/Vertrauen_ist_gut,_Kontrolle_ist_besser!

Anfänger meinen oft, die Einstellung der cpu speed sei mit der Angabe 
der F_CPU im Quelltext oder in den Projekteinstellungen (AVR Studio) 
erledigt. Das ist aber nur ein Viertel der notwendigen 
Voraussetzungen.

Des weiteren muss

1. eine funktionsfähige externe Taktquelle angeschlossen sein (bei dir 
wahrscheinlich OK: 8 MHz Quarz)

2. die AVR Fuses auf die externe Taktquelle programmiert sein. Dabei 
"beliebte" Probleme: Falsche Taktquelle oder Teiler-durch-8

3. bei Benutzung von delay.h mit Optimierung kompiliert werden

Der Praxistest mit genau blinkender LED zeigt im Erfolgsfall, dass alle 
vier Punkte richtig erfüllt sind.

> genau, die c version. sind recht einfache routinen und ich habe sie
> meinen bedrürftnissen ein wenig angepasst

Software kann Fehler haben, selbst die Routinen aus dem Tutorial. 
Vielleicht wurden die inzwischen aktualisiert und nicht mehr geprüft 
oder sind für einen anderen AVR usw.

Deshalb würde ich immer die Quellcodes an meine Fragen anhängen. Das 
vermeidet zeitaufwändige Rückfragen ("Quellcode?") aber stört als Anhang 
den Lesefluß nicht. Und die eigenen Änderungen gegen das Original würde 
ich auffallend kennzeichnen.

von Markus P. (sebastianwurst)


Lesenswert?

> Des weiteren muss
>
> 1. eine funktionsfähige externe Taktquelle angeschlossen sein (bei dir
> wahrscheinlich OK: 8 MHz Quarz)


Muss es denn unbedingt eine externe Taktquelle sein ?!?!? Geht da nicht 
auch der interne Takt ?

von Karl H. (kbuchegg)


Lesenswert?

Sebastian K. schrieb:
>> Des weiteren muss
>>
>> 1. eine funktionsfähige externe Taktquelle angeschlossen sein (bei dir
>> wahrscheinlich OK: 8 MHz Quarz)
>
>
> Muss es denn unbedingt eine externe Taktquelle sein ?!?!? Geht da nicht
> auch der interne Takt ?

Natürlich.
Solange er auch tatsächlich aktiv ist.
So kritisch ist das bei LCD nicht, im Zweifel bleibt man eben etwas auf 
der sicheren Seite (sprich: Alle delays etwas länger). Wichtig ist nur, 
dass man wenigstens ungefähr mit dem Takt rechnet, den der µC auch 
tatsächlich macht. Vertrauen ist gut, Kontrolle ist besser. Mit einer 
blinkenden LED abzuklären, ob die vermuteten 8Mhz auch tatsächlich 8Mhz 
sind, kostet nichts. Und so mancher hat sich hinterher schon gewundert, 
warum seine blinkende LED nicht 1-mal in der Sekunde blinkt (wie im 
Programm vorgesehen), sondern nur alle 8 Sekunden einmal.

Ob das jetzt 8Mhz oder 7.9 oder 8.1Mhz sind, ist bei LCD nicht relevant. 
Wenn aber der µC tatsächlich nur 1Mhz macht, im Programm aber mit 8 
gerechnet wird, dann ist das relevant.

von Markus P. (sebastianwurst)


Lesenswert?

Ok, weil ich habe den LCD an meinen Controller nur an den internen Takt 
(Atmega8) auf 4Mhz gefuset. Ich verfolge das Thema hier da ich auch ab 
un zu ein schwarzen Balken in der ersten Zeile habe wenn ich die 
Versorgungspannung (12 Volt) von dem ganzen Board abziehe. Bei jedem 
zehnten mal startet das LCD nicht mehr..... Kann das mit dem Takt zu tun 
haben ?

von Karl H. (kbuchegg)


Lesenswert?

Sebastian K. schrieb:
> Ok, weil ich habe den LCD an meinen Controller nur an den internen Takt
> (Atmega8) auf 4Mhz gefuset. Ich verfolge das Thema hier da ich auch ab
> un zu ein schwarzen Balken in der ersten Zeile habe wenn ich die
> Versorgungspannung (12 Volt) von dem ganzen Board abziehe. Bei jedem
> zehnten mal startet das LCD nicht mehr..... Kann das mit dem Takt zu tun
> haben ?

Mach die erste Wartezeit, nach der dann die Initialisierung des LCD 
beginnt, etwas länger.
Auch ein LCD benötigt nach dem Anlegen der Versorung eine gewisse Zeit, 
bis sein interner µC soweit ist, dass er das erste Kommando annehmen 
kann.

von Markus P. (sebastianwurst)


Lesenswert?

Guten Ansatz, warum bin ich da nicht drauf gekommen ?!?!?! Danke....

von tt2t (Gast)


Lesenswert?

> Mach die erste Wartezeit, nach der dann die Initialisierung
> des LCD beginnt, etwas länger.

und manche Displays brauchen nicht nur 1 (eine) Initialisierung sondern 
deren 3 (drei) !!!

Schau Dir mal folgende Seite an, da steht das genau beschrieben (und die 
Wartezeiten müssen manchmal noch länger sein, manchmal reicht auch 
kürzer, das muss man ausprobieren)
http://sprut.de/electronic/lcd/index.htm -> Beispiel für eine 
Initialisierung mit 8-Bit Interface

von Markus P. (sebastianwurst)


Lesenswert?

ich benutze die Routenen lcd-routines.h und .c da wird da ist das ja 
alles schon ontegriert.
Habe die Wartezeit vergrössert, bis dato ist noch nichts wieder 
passiert. (50mal ausgeschaltet)

von Wilhelm F. (Gast)


Lesenswert?

Nimm das Datenblatt, da wird ein Flußdiagramm zur Initialisierung drin 
sein. Vergleiche dieses mit der Software.

Zu schnell dürfen die Timings auf gar keinen Fall werden, da der 
Display-Controller diese Mindestzeiten benötigt.

Wird das Timing zu langsam, z.B. wenn der µC aus Energiespargründen den 
Takt niedriger schaltet, macht das in der Regel nichts. Höchstzeiten an 
Timings sollte es nicht geben. Notfalls sollte so ein Display sogar noch 
von Hand z.B. mit DIP-Schaltern bedienbar sein.

Ich selbst habe einen µC, der den Takt schon mal durch 8 teilt. Dann 
funktioniert das Display immer noch bestens.

Zur Fehlersuche könntest du also den Takt verringern, bzw. auch alle 
Timings mal verlängern.

Und: Bei mir gab es auch anfangs Probleme, bis es reibungslos lief.

von e-tec (Gast)


Lesenswert?

Stefan B. schrieb:
> Des weiteren muss
>
>
>
> 1. eine funktionsfähige externe Taktquelle angeschlossen sein (bei dir
>
> wahrscheinlich OK: 8 MHz Quarz)
>
>
>
> 2. die AVR Fuses auf die externe Taktquelle programmiert sein. Dabei
>
> "beliebte" Probleme: Falsche Taktquelle oder Teiler-durch-8
>
>
>
> 3. bei Benutzung von delay.h mit Optimierung kompiliert werden
>
>
>
> Der Praxistest mit genau blinkender LED zeigt im Erfolgsfall, dass alle
>
> vier Punkte richtig erfüllt sind.

na also ein blutiger anfänger bin ich nun auch wieder nicht...:) die 
fusebits werden bei mir bei jedem neuen avr gesetzt, zudem der 
praxistest mit der led wird auch ab und an mal gemacht (hierzu t0 auf 
prescaler von 1024 bei 8 MHz gibt das ca 33ms (genau 32768µs), nun das 
ganze bei jedem 30ten mal die led anschalten und schon blinkt sie schön 
regelmässig mit 1Hz)

bei der init habe ich mich genau an das datenblatt gehalten mit den 
befehlen und den zeiten.

mir ist gestern abend aufgefallen das der enable immer mal wieder das 
blinken anfängt (auf dem pollin bard ist an pd5 eine led)

von Stefan B. (stefan) Benutzerseite


Lesenswert?

e-tec schrieb:

> na also ein blutiger anfänger bin ich nun auch wieder nicht...:)

Sorry, bei registrierten Usern schaue ich manchmal nach, wie viele 
Beiträge bereits geschrieben wurden (<10 oder >1000). Und per Suche was 
bisher geschrieben wurde, eventuell sogar ob die Hardware irgendwo 
ausführlicher beschrieben ist.

> mir ist gestern abend aufgefallen das der enable immer mal wieder das
> blinken anfängt (auf dem pollin bard ist an pd5 eine led)

Das wäre IMHO mal beruhigend: Wenn diese Leitung statisch wäre, könnte 
das LCD nicht funktionieren.

von Micha S. (e-tec)


Lesenswert?

so, eingeloggt... sorry bin im geschäft deswegen eig nur als gast :)

> Das wäre IMHO mal beruhigend: Wenn diese Leitung statisch wäre, könnte
> das LCD nicht funktionieren.

???

von Stefan B. (stefan) Benutzerseite


Lesenswert?

> ???

Ich rate mal, du verstehst irgendwas nicht. Dann erläutere ich mal 
irgendwas.

Um das LCD anzusteuern wird vom µC regelmäßig auf der E Leitung 
geklappert.

Die an den Datenleitungen anliegenden Daten werden bei fallender Flanke 
der E Leitung vom LCD Controller übernommen. Die E Leitung muss eine 
gewisse Mindestzeit logisch low bleiben und vorher eine gewisse Zeit 
logisch high sein (Timing).

Also müsste einem eine E Leitung, die überhaupt nicht klappert (sichtbar 
durch die "Spion"-LED die statisch/immer aus oder an ist), einem Sorgen 
machen.

von Micha S. (e-tec)


Lesenswert?

ahhh :))
danke für die erklärung, bin was lcd displays angeht nicht wirklich 
fit...
aber das kommt noch

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.