LCD Display macht Probleme

Gast #64281
Lesenswert?

Hallo Mikrocontroller-Freunde!

Hab mir ein 2x16 Zeichen Display von reichelt gekauft, nach tutorial
angeschlossen und geproggt. Leider funzt das teil nicht.

Hab einen 8 Mhz Oszillator dran und einen 4433. bitte helft mir, es
bleibt einfach ein schwarzer Balken stehen.


FeeJai

PS: Codebeispiele wären super!
Gast #64284
Lesenswert?

1.) 14 Min zwischen der ersten und der zweiten Anfrage sind deutlich zu
kurz.
2.) Du hättest die Zeit besser genutzt um mit dem Stichwort "schwarzer
Balken" mal in die Suche zu gehen. Da tauchen dann erstaunlicherweise
die verschiedensten Einträge auf.
3.) Meistens liegt es an der Kontrasteinstellung deines Displays.
Gast #64285
Lesenswert?

Hallo,

ich habe das gleiche Display an einen Atmege8 angeschlossen,
meines läuft bis 4 Mhz problemlos.
Bei 8 MHz bleibt auch bei mir das Display mit schwarzen Balken stehen,
also ist es sehr wahrscheinlich ein Timing-Problem.
Veränder mal die Zeitschleifen.

Gruss

Gerd
Gast #64286
Lesenswert?

Du wirst u.U. nicht drumrumkommen, und z.B. mit AVRStudio step by step
durch Dein Programm zu gehen.

Schau Dir auf der linken Seite an, was Deine "Stopwatch" sagt, da
kannst Du genau sehen, welche "Prozessorzeit" gerade ist.

Dann schau Dir die Portausgänge an, besonders natürlich den, an dem das
Display hängt.

Nun musst Du für jede Ausgabe an den LCD-Pins genau schauen, WAS das
ausgegeben wird, und WANN es ausgegeben wird (Stoppwatch).

Achte auch auf das DDR! Und beachte auch den Enable-Pin fuer das LCD
genau!

Das ist zwar alles etwas mühsam, führt aber IMMER zu tiefgreifenden
Erkenntnissen, auch über so manch andere Dinge, die da passieren.
Ich habe beim ersten Mal so etwa eine Stunde gebrauchtm, bis ich hinter
alles gestiegen bin, was da so falsch lief.

Du kannst übrigens den LCD-Ausgabe-Port auch loggen. Die Ausgabedatei
enthält alle ausgegeben Muster inclusiver genauer
Prozessor-"Uhrzeit".

Wenn Du das in Excel weiterverarbeitest, und ein paar Makros
drumrumprogrammierst, dann kriegste exakt, was Du wissen willst: Timing
und Daten am LCD-Port. Ist dann so eine Art virtuelles Oszi inclusive
Logik-Analyser...

WICHTIG: im AvrStudio den Prozessortakt auf deine Takt einstellen (ich
glaube das geht bei den Debug-Optionen).

Damit kannst Du alles rauskriegen, was Du wissen musst.

e.
Gast #64288
Lesenswert?

Ich habe eine Demo mit Stoppuhr, LCD-Display, DCF-77,
Infrarot-Fernbedienung usw. geschrieben. Da ist alles drin, was Du
braucht. Allerding ist meine LCD-Ansteuerung und auch die
Initialisierung etwas anders aufgebaut, als die meisten das machen.

Die Initialisierung arbeitet einfach eine Tabelle mit den Kommandos ab,
die das Diaplay braucht. Dieses Verfahren kann (wenn man auch die
Timings mit in die Tabelle schreibt) für alle möglichen Displays
verwendet werden.

Im Betrieb wird das Display asynchron von einer eigenen Engine
angesteuert. Es wird einfach im Programm ein DisplayBuffer beschrieben,
egal, ob das Display gerade "Zeit hat", oder nicht.

In einer Interrupt Service Routine wird dann aus diesem Buffer (sofern
was drinsteht) immer je ein Zeichen ans Display übertragen und dann aus
dem Buffer gelöscht.

Das funktioniert prima, nur ob es zum Lernen optimal ist, weiss ich
nicht.

Die neueste Version findest Du hier:

http://www.mikrocontroller.net/forum-extern/read-4-65410.html

Schau aber ganz unten in Thread, weil immer wieder mal ein Update
hinzukommt. Aktuell ist es V1.5rc2, kannst Du hier runterladen:

http://www.mikrocontroller.net/attachment.php/66658/main-1.5rc2.zip

Wenn Du aber auch im Programmieren Anfänger bist, dann such Dir
vielleicht was Anderes...

Viel Spass damit.

e.
Gast #64293
Lesenswert?

Hierzu ein Tipp:

Irgendwo auf dieser Site hier oder aber bei avrfreaks habe ich eine
IR-Demo gesehen. Lade Dir die runter, und teste, welche Zahlencodes
deine Fernbedienung hat. Dann suche folgende Stelle im Programm:

// Definitionen Fernbedienung, passend fuer Tevion (aelteres Modell)

#define RC_RIGHT    54
#define RC_LEFT      53
#define RC_UP      32
#define RC_DOWN      33
#define RC_HELP      41
#define RC_OK      23
#define RC_MUTE      19
#define RC_KEY_M    55

und trage die entprechenden Tasten (oder die, die Du nehmen willst)
ein, Wenn Du dann neu kompilierst, muss es auch mir Deienr
Fernbedienung gehen.
e.
Gast #64294
Lesenswert?

Hört sich kalasse an. Das wäre auch recht interessant für meine
anwengung. Muss aber mal was einkaufen fahren, sonst haben wir heut
abend nich viel zu essen. :-)

Werde mich aber nacher mal damit bescheftigen.

Vielen Dank!
Gast #64298
Lesenswert?

hai,

es liegt nicht am avr, frag einfach mal das bussy bit vom lcd ab !! hat
dir das noch keiner geschrieben ??
du musst auch ein paar nop befehle zw. den enable und eneable des
display einfügen !! das display ist wesentlich langsamer als der
atmel.

gruss
boris
Gast #64302
Lesenswert?

ich hab dir dem Code nochmal angeschaut.
Wird nicht durch das "ret" bei "delay5ms" das Programm ständig
wiederholt. Fäng das "powerupwait" dann nicht immer wieder von vorne
an???
Ich versteh das nicht ganz...
Vielleicht kann mir ja einer Helfen...
Gast #64303
Lesenswert?

bei mir lief die initialisierung zu schnell, war ein timingproblem,
ich habe einfach zwischen den Befehlen eine zählschleife als Pause
eingefügt, statt das BusyBit abzufragen (das hat irgentwie nicht
funktiioniert)

Gruß
Axel
Gast #64305
Lesenswert?

@die Greenhorns: wie wäre es denn wenn Ihr Euch erstmal ein paar
Grundlagen aneignet und nicht gleich wild mit LCD's hantiert?

Das bringt nichts, außer Frust!

Also probiert erstmal was einfaches, nen LED Blinker oder sowas, da
könnt Ihr solche Sachen, wie Portpin-Ansteuerung und
Warte/Zählschleifen austesten...

Und wenn das klappt und Ihr auch wisst, was Ihr da macht, nehmt Euch
nen Datenblatt von nem LCD und lest das!

Tip: Wenn man das Busy-Flag nicht abfragt muss man Sicherheiten
einrechnen und sollte das LCD nur mit ca. 10-20kHz Datenrate belasten.

also muss ein AVR der mit 8MHz läuft ne menge Warteschleifen
vollführen... oder man bedient sich des Timers und schreibt sich ne
Interrupt-Routine...

Marian
Gast #64310
Lesenswert?

Kein WinZip? Wo gibts denn sowas?

Da Du aber offensichtlich ins Internet kannst, warum hast Dir dann
nicht längst Winzip gesaugt? Kopfschüttel...

Also gut:

/*-----------------------------------
  LCD-Cursor Positionieren
  -----------------------------------*/
void LcdGotoXy(uint8_t Col, uint8_t Line)
{
  const char HD_LineAddr[] = { 0x00, 0x40, 0x14, 0x54 };
  LcdPutch(HD_SET_DD_ADR + (Col % 40)  + HD_LineAddr [Line % 4],
HD_CMD);
} // LcdGotoXy

Col steht für die x-Position, Line fuer die Zeile.

Obs für 4-Zeiler auch geht, hab ich nicht getestet.

e.
Gast #64316
Lesenswert?

Schtümmt.

Du bist mir nicht böse, wenn ich das jetzt nicht alles in Assembler
umschreibe? ;-)

Aber Du könnstest Dir sicher einige Assembler-Teile ansehen, die der
gcc draus macht....

Müsstest Du Dir dann natürlich optimieren.

e.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren