Guten Morgen!
Ich hab hier im mement noch ein kleines Problem mit einem LCD. Da hoffe
ich, daß sich da jemand auskennt und mir evtl. gedanklich auf die
Sprünge helfen kann...:
Aaaalso, was ich habe:
ich benutze einen ATMega32. An seinem PortC hängt ein LCD, was im
4-bit-Mode angesteuert werden soll. Die technichen Details sind in den
Datenblättern im Anhang zu finden.
Das LCD ist von Optrex und vom Typ C-51847 NFQJ-LG-ACN. Laut dem DB ist
da ein Controller vom Typ NT3881 drauf.
Ich programmiere in C, zur Ansteuerung habe ich den Quellcode aus dem
Tutorial dieser Seite benutzt, wobei ich den Code so angepasst habe, daß
es bei mir passt. Weil bei mir hängt der Datenbus vom LCD namlich an
PinC[4-7] und nich an PinX[0-3] wie im Tutorial...
So, was kann ich noch sagen? Ich habe das JTAG-Interface deaktiviert, so
daß der PortC komplett als Ausgang benutzt werden kann.
Mittlerweile bin ich soweit, daß das LCD sogar was anzeigt. Aber es ist
nur Unfug! Es werden, ohne ein bestimmtes Muster feststellen zu können,
nur die Zeichen "o", "O", "°", "/", "?", und "<-" dargestellt. Ein Blick
ins DB hat mir gezeigt, daß diese Zeichen alle im LCD bei Adresse xF
liegen. Das brachte mich aber bei meiner Erkenntnis auch nicht weiter...
Leider kann ich niergends eine Routine finden, wie man den NT3881
richtig initialisiert. Auch keine Timing-Diagramme... Es wäre echt
super, wenn ihr euch das mal näher angucken könntet... Ein bißchen habe
ich noch den Verdacht, daß bei der Initialisierung was falsch läuft. Wo
bei ich echt keine Fehler in meinem Code finden kann...
Danke schonmal,
Soman
schon ok, ich ja auch nicht ;)
aber das ist es ja ...
ich war ja der ansicht das so gemacht zu haben. Aber es wird eben nüscht
vernünftiges angezeigt. Und ich bin den Code schon XX-mal durchgegangen
und komm nicht drauf. Wobei ich ja schon froh bin, daß überhaupt was
angezeigt wird...
Der Code sieht eigentlich gut aus. Die Schreibroutine sollte passen, die
Initialisierung habe ich immer genauso.
Mir fallen nur 2 Möglichkeiten ein: Deine Pausen sind zu kurz, oder du
hast irgendwas etwas falsch verdrahtet.
Hey, danke, daß du dir die Mühe gemacht hast! Die verdrahtung hab ich
gerade Kontrolliert, die ist i.O. . Die Pausen zu kurz? Wo denn?! ich
hab doch sogar mehr und längere Pausen eingebaut als im Tutorial :) ...
* nochmal ans Busy-flag denk... *
Sicher, daß wirklich alles mit der Maskiererei und so stimmt? Da bin ich
nämlich noch nicht so sicher, weil ich nicht sooo viel Ahnung von C
habe.
vg!
nee, ich frag das busy nicht ab. aber ich denk da eben langsam drüber
nach, wenn das mit den zeiten so schwierig ist :)
habe die zeiten auch vorher schon mal z.t. ganz krass verändert. hab es
mal auf 70µs hoch gestellt. aber das brachte alles nichts. und statt 1
µs mal 10 µs warten und so... an den zeiten hab ich schon rumgefummelt
wie sonstwas... ist ja nicht so, daß ich nicht selbst schon viel
probiert hätte ;)
ich glaube echt mit meiner initialisierung stimmt was nicht... weil wenn
ich meine test-ausgabe im hauptprogramm deaktiviere bleiben nur zwei
olle balken auf dem lcd... was doch irgenmdwie dafür spricht, daß es
nicht richtig initialisierrt wird, oder?
Morgen :) !
Also die Ausgabe habe ich jetzt hinbekommen. Ist mir peinlich, darum sag
ich nicht, worans lag ;)
Jetzt hab ich den ADC in Gang gebracht und wollte eigentlich "nur" von
zwei Kanälen Messwerte einlesen und den einen dann in der einen Zeile
und den anderen in der anderen Zeile ausgeben.
Aber das klappt nicht so richtig. Und an der der Stelle wäre es schön,
wenn einer von euch sich einmal angucken könnte, woran das liegt. Denn
im Moment ist es so, daß auf dem LCD die Messwerte zeilenmäßig
vertauscht stehen und an der Stelle für den ersten Messwert (der in der
2. Zeile steht) springt die Anzeige ganz schnell zwischen Messwert 1 und
2 hin und her. Sieht für mich so aus, als würde was mit der
Variablenübergabe nicht klappen. Aber ich finds einfach nicht... :( im
Anhang wie immer der Code (von "meinem" Programm und von der
lcd-routines.c
Danke schonmal,
VG!
schade dass du uns nicht an deinem Erfolg teilhaben läßt und andere
somit vielleicht den gleichen Fehler vermeiden können - höchstens der
war soooo dämlich, dass den kein anderer machen würde...
@Manfred
genau das ist es :)
ich glaube, daß nicht sooo viele andere auf die idee kommen zu versuchen
erst das lcd und dann die ports zu initialisieren... hey! nicht lachen!
jetzt hab ich mal folgendes verändert:
aus:
strom_messen();
spannung_messen();
lcd_test();
wurde:
strom_messen();
lcd_test();
spannung_messen();
lcd_test();
das hatte nun zur folge, daß der eine messwert nicht mehr flacker. aber
sie werden immer noch genau zeilenvertauscht angezeigt. das check ich
nicht...
hast du mal kontrolliert ob die Zeilen wirklich an den angenommenen
Adressen beginnen? einfach einmal in Adresse für Adresse ein Zeichen
schreiben und schauen wo das erscheint... mach es im Sekundentakt, dann
kommst auch mit dem Kucken hinterher...
ja, also aus dem datenblatt geht leider nicht so viel hervor, aber ich
habe natürlich am anfang, beovor ich mit messwerten gearbeitet habe und
so, testanzeigen gemacht. das hat mit den routinen aus der
lcd-routines.c super geklappt. also da konnte ich explizit sagen wenn
ich das-un-das eingebe erscheint der text auch da-und-da.
weil der normale text steht ja auch da, wo er soll.
beispiel: die anzeige SOLL anzeigen:
"Messwert 1 = xxxxx"
"Messwert 2 = yyyyy"
"Messwert 3 = zzzzz"
es wir aber angezeigt:
"Messwert 1 = zzzzz"
"Messwert 2 = xxxxx"
"Messwert 3 = yyyyy"
und das ist doof. und ich habe schon einen kumpel darauf angesetzt, der
sich eigentlich sehr gut damit auskennt, aber der kam auch nicht
dahinter. und cih will das nicht irgendwie zurecht schummeln. das soll
einfach richtig sein... :(
gruß!
Soman