Forum: Mikrocontroller und Digitale Elektronik lcd tutorial problem


von Toni B. (toni_b)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

hab mich nun endlich mal durchgerungen en bissel was mit
mikrocontrollern zu versuchen. Bin daher grad dabei, das tutorial hier
auf der Seite durch zu arbeiten. Jetzt weiß ich allerdings nicht mehr
weiter. Habe versucht etwas auf ein lcd display zu bekommen, habe dazu
das meiste aus dem tutorial übernommen. Außer das busy flag das wollte
ich lesen können ;-). (will ja net alles 1zu1 kopieren g).
Wie soll es anderst sein g es funktioniert gar nichts. (hab meine
source als anhang angehängt) ... hab nun schon einges probiert, das
ganze programm im avr-studio simuliert und bin eigentlich der Meinung
dass es genau das macht was ich eigentlich wollte.
Zig mal die verkabelung überpüft aber auch das müsste alles stimmen.

Habe irgendwie den eindruck dass am lcd gar nichts von dem ankommt was
der uC ausgibt. Wenn ich das lcd nur an die versorungsspannung
anschließe wird in der ersten zeile ein schwarzer balken angezeigt. Und
genau gleich sieht es aus wenn alles mit dem mikrocontroller verkabelt
ist, in der ersten zeile ein schwarzer balken und sonst nichts.

hier mal die verkabelung:
------------|nix|__|RS |__|R/W|__| E |__|DB7|__|DB6|__|DB5|__|DB4|___
Controller__|PD7|__|PD6|__|PD5|__|PD4|__|PD3|__|PD2|__|PD1|__|PD0|___

Displaydatenblatt:
http://www.reichelt.de/inhalt.html?SID=17veFqrqwQARIAAGLZqCg80ac84ad2dc41760a287bd1845b92bab;ACTION=7;LASTACTION=6;SORT=artikel.artnr;GRUPPE=A5211;WG=0;SUCHE=LCD%20162C%20LED;ARTIKEL=LCD%2520162C%2520LED;START=0;END=16;STATIC=0;FC=669;PROVID=0;TITEL=0;DATASHEETSEARCH=LCD%20162C%20LED;FOLDER=A500;FILE=LCD162C%2523DIS.pdf;DOWNLOADTYP=1;DATASHEETAUTO=;OPEN=0

Habt ihr da eine Idee? Zudem würd mich mal interesieren wie man da
vorgeht soetwas zu debuggen ...

Vielen Dank schonmal

Toni

von Stephan H. (stephan-)


Lesenswert?

Was ist mit Kontrast ????? Schon beschaltet ??

erste Zeile Schwarz bei 2 Zeilig ?? Init Problem !!
So wie es aussieht sendest Du im Init 3h .
Gesendet werden aber erstmal 30h. So sieht die Folge für 4 Bit bei mir
aus.

30h,30h,30h,20h,28h,08h,01h,06h,0fh

von mh789 (Gast)


Lesenswert?

> Zudem würd mich mal interesieren wie man da
> vorgeht soetwas zu debuggen ...

Ich würde folgendes machen: Zunächst einmal sicherstellen, dass die
Hardware (also Display und Verbindungen) richtig funktioniert. In
Deinem Fall geht das ganz einfach, indem Du das Tutorial-Programm für
kurze Zeit unverändert übernimmst und schaust, ob Dein Display etwas
anzeigt.

Erst dann würde ich mir wieder mein eigenes Programm ansehen. Manchmal
sucht man sich im Programm dumm und dämlich und am Ende stellt sich
heraus, dass es "nur" ein Hardwareproblem ist.

von Stephan H. (stephan-)


Lesenswert?

ps.: hast Du D0 - D3 vom LCD auf Masse ?????

von Toni B. (toni_b)


Lesenswert?

kontrastspannung hab ich über poti angeschlossen und d0-d3 auf gnd. Hab
jetzt auch versucht beim init 30h zu senden. Als das auch nicht
funktioniert hat, hab ich nochmal alles umgestöpselt und das beispiel
Programm aus dem tutorial genommen ... aber selbst bei dem das gleiche
ergebniss ... einzeiliger, schwarzer balken und mehr nicht :(.

Hab ich das jetzt geschrottet? ... glaub ich werd nachher nochmal alle
lötstellen überprüfen viell. hilft das was.

Oder habt ihr sonst noch ideen?

toni

von Stephan H. (stephan-)


Lesenswert?

die 30h hasttest Du ja schon. Fehler bei mir.
Da Du ja D0-D3 vom uC an D4-7 vom Display hast und kein Swap machst.
Bleibt eigentlich nur Timing, wenn Hardware definitiv i.O ist.

MCU läuft definitiv ?? Test mit LED Blinken zB. ??
Richtiger Takt ?
Durchgangsmessung der Portpins zum Display direkt vom Chip ??
Fassungen können auch spinnen.

von Toni B. (toni_b)


Lesenswert?

der takt war zuvor wohl noch 1mhz hab jetzt die fusebits geändert und
auf 4mhz trotzdem kein erfolg g...

werd jetzt als nächstes mal messen ob alles richtig "kontakt" hat.

Toni

von Toni B. (toni_b)


Lesenswert?

so, hab jetzt alles durchgemessen und ist auch niergens nen
"wackelkontakt" ... der controller scheint auch zu machen was er
soll, da am port, wenn das programm abgelaufen ist: 00000110 anliegt,
was dem zweiten nibbel vom "t" entsprechen müsste. Solangsam glaub
ich dass das lcd en macken hat :(.

toni

von Hannes L. (hannes)


Lesenswert?

Schau dir einfach mal im Datenblatt des LCDs die
Initialisierungs-Sequenz an und achte besonders auf das Timing, also
die erforderlichen Wartezeiten zwischen den einzelnen Befehlen.

...

von Toni B. (toni_b)


Lesenswert?

ja gut, da steht 15ms bis power on, dann 4.1ms und dann 100us ... liegt
das daran dass ich immer 5ms warte? versteh ich dann aber nicht weil es
heißt ja "weit for more than 100us"

Toni

von Stephan H. (stephan-)


Lesenswert?

das sind die Midestwartezeiten.
mid. 15mS dann 30h, jetzt mind.4,1mS und 30h, jetzt mind.100uS und noch
mal 30h und erstjetzt kannst du mit Busy fragen ob das letzt 30h durch
ist. jetzt auf 2 zeilig stellen, display off, modus einstellen, clr
display an und Voila !!

von Toni B. (toni_b)


Lesenswert?

hmmm also ich hab das ja genauso gemacht zumindest mit den Zeiten.
Ich versteh allerdings immernoch net warum man 30h senden soll ... mit
03h leg ich ja an pin P0 und P1 high an was nach meiner verkablung db4
und db5 entspricht ... so steht ja im datenblatt. Dass ich das display
auschalten muss hab ich ganz übersehen :( werd ich mal probieren ...
ist das notwendig, weil im tutorial wirds ja auch nicht gemacht ...
oder liegt das an den unterschiedlichen controllern?

Toni

von Toni B. (toni_b)


Angehängte Dateien:

Lesenswert?

so hab jetzt mal meinen aktuellen source angehängt, mit ein und
ausschalten des displays + clear usw. (genauso wie im datenblatt
beschrieben) Nur passiert leider immer noch nicht mehr :( ...

Irgendwie hab ich das Gefühl, dass es nur wieder ne winzige kleinigkeit
ist die da schief geht ... zu winzig um sie zu finden.

Toni

von Hannes L. (hannes)


Angehängte Dateien:

Lesenswert?

Kannst ja mal im Anhang nachschaun, vielleicht findest du ja dann deinen
Fehler. Diese Routinen sind zwar noch nicht endgültig fertig,
funktionieren aber zuverlässig.

...

von jack (Gast)


Lesenswert?

Das LCD wird durch den Befehl 0010 xxxx in den 4-Bit-Modus versetzt
(20h).

von jack (Gast)


Lesenswert?

...20h steht ja drin.
Vielleicht folgendes: Beim Schreiben muß das High-Nibble zuerst
gesendet werden. Beim Lesen des Busy-Bits erhält man im vierten Bit
das Busy-Flag. Nachfolgend muß nochmal gelesen werden, obwohl die
Daten egal sind (wichtig für Display-Timing).

von Toni B. (toni_b)


Angehängte Dateien:

Lesenswert?

so hab jetzt nochmal einiges rumprobiert. Das mit busy bit lesen lass
ich vorerst mal, bin schon froh wenn das Beispiel aus em tutorial
funktioniert. Habe das beispiel so abgeändert, dass wie Stephan sagte,
das display nochmal ausgeschaltet wird, nach dem 2 line modus
eigestellt wurde. dann display leeren, danach set function und danach
wieder einschalten. Source hab ich wieder angehängt. Der aufruf der
funktionen ist gleich wie im tutorial.

Das ging natürlich auch nicht. Das Display init. sich ja selbst beim
anlegen der spannung, zwar nur im 1line Modus aber um auszuschließen
dass es am display liegt hab ich es mal fest mit gnd und 5V verbunden:


0   0   00001111
RS  R/W

dann enabled mal kurz auf high und wieder low ... und ein wunder +g*
ich hatte einen cursor der blinkt ;-). Dann müsste man ja davon
ausgehen können dass ich es noch nicht geschrottet hab oda?

Jetzt frag ich mich warum das ding mein Programm nicht mag. Es
scheitert ja scheinbar schon am init (sowohl an dem im tutorial, wie
auch an meinem eigenen) Ansonsten müsste man ja zumindest 2 schwarze
balken auf em display sehen wenn man den kontrast auf gnd legt.

Toni

von Hannes L. (hannes)


Lesenswert?

Die schwarzen Balken siehst du, solange das LCD nicht ordentlich
initialisiert wurde.

Also:
Erstmal nur Betriebsspannung und Kontrastspannung anlegen,
dann Kontrast so einstellen, dass sich die Balken deutlich von den
anderen Pixeln abheben.
Nun ist Kontrast richtig und jetzt kann man sich um die korrekte
Initialisierung kümmern. Klappt die Initialisierung, dann verschwinden
die Balken.
Dann das LCD so einstellen, dass es den Text auch im sichtbaren Bereich
ausgibt.

Hast du mal die Init-Routine aus meinem LCD-Treiber probiert?

...

von Toni B. (toni_b)


Lesenswert?

Die werd ich nachher mal ausprobieren ;-) hoffe ich versteh die dann
noch g hab kA was es mit dem sram auf sich hat ;-). Naja ma schauen
viell. klappts damit dann ;-).  Wobei ich langsam immer mehr das gefühl
hab, dass das ding eifnach nur kaputt ist :(.

toni

von blubber (Gast)


Lesenswert?

Womit enablest du dein Display? Das passiert ja immer bei einer
fallenden Flanke auf en.

Ich bin mal fast wahnsinnig geworden, weil ich (warum auch immer) in
der Enable routine nach der fallenden flanke wieder auf high gesetzt
habe - später irgendwo im Programm wurde dann was gesetzt, dass eine 0
auf en bewirkt hat --> ein "enable" an der falschen stelle...

Gruß Andreas

von Tom (Gast)


Lesenswert?

Hi Toni,

ich hatte mal so ein ähnliches Problem. Bei mir hat das Display einfach
nicht funktioniert.
Ich hab dann testweise mal einen anderen uC angeschlossen(zuerst mega8
- ging net, dann mega 16). Anfangs ging es auch nicht, aber schließlich
hab ich festgestellt, dass ein paar Pin für JTAG hergenommen werden u
diese standardmäßig aktiviert waren --> fuse bits abändern --> siehe
da: es ging!
...was ich damit sagen will: Es sind meisstens die Kleinigkeiten, die
man gern übersieht ;o). Kontrollier nochmal ganz genau die
sekundärbelegungen deiner Pin und überprüfe, ob da auch wirkl alles
passt und net 2fach belegt is...

Grüße

          Tom

von Toni B. (toni_b)


Angehängte Dateien:

Lesenswert?

Hallo,
habe jetzt alles mal auf einen anderen Port verlegt (PortC) und auch
nochmal nachgemessen ob irgendwelche pins schon high sind usw usw.
Stimmt alles wie ich finde. Am enabled dürfte es nicht liegen, das mach
ich ja in enabled: high für 3 takte und dann wieder auf low. Leider
wieder keinen Erfolg.

Würde jetzt nen anderen Controller, bzw ncoh viel lieber ein anderes
Display ausprobieren, hab aber leider nix hier :(. Mit der nächstens
Reichelt bestellung werd ich mir nochwas mitschicken lassen.

Mittlerweile geh ich zu 80% davon aus, dass ich irgendwas geschrottet
hab. Ich hab jetzt mal mein derzeitiges Programm mit angehängt (hier
noch auf PortD) ... wenn irgendjemand Zeit/Lust hat das mal in nen
atmega8 zu schreiben und ein LCD Display dran zu hängen wäre ich
unendlich dankbar. Pinbelegung hab ich in meinem ersten Post
geschrieben. Wenn ich da jetzt weitere Stunden an Zeit reinhänge (ist
jetzt schon einiges) und es liegt einfach nur an einem kaputten LCD
würd ich mich krumm ärgern.

Toni

von Karl H. (kbuchegg)


Lesenswert?

Besorg dir mal Hapsim
http://www.helmix.at/hapsim/
Das simuliert ein Standard-Display im AVR-Studio.
(Soweit ich weiss kommt es auch mit einem Demo-Pgm
daher).
Damit kannst du mal einen Hardware-Defekt relativ gut
ausschliessen.

Kommst du da nicht weiter, dann würde ich mal die LCD-
Library von Peter Fleury probieren. Ist zwar in C
geschrieben, aber wenn das Demo von dort auf deinem
Display was ausgibt, dann weist du mit Sicherheit, dass
es devinitiv nicht an der Hardware sondern an Deinem
Pgm liegt (und das tut es in 98& aller Fälle).

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.