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
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
> 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.
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
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.
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
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
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. ...
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
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 !!
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
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
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. ...
...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).
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
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? ...
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
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
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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.