Forum: Mikrocontroller und Digitale Elektronik LCD Display macht Probleme


von FeeJai (Gast)


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!

von FeeJai (Gast)


Lesenswert?

Es gibt doch bestimmt jem., der das so bei sich hat. Könntet ihr das dnn
bitte posten? Hab erst vorgestern mit Mikrocontrollern angefangen.

von Johannes (Gast)


Lesenswert?

Hört sich nach falsch initialisiert an.

Kug mal hier:
http://www.geocities.com/dinceraydin/djlcdsim/djlcdsim.html

von Werner (Gast)


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.

von Gerd Vergin (Gast)


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

von emax (Gast)


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.

von FeeJai (Gast)


Lesenswert?

Danke, dass hilft mir schon alles weiter, hat jemand vielleicht ein
programm, welches funktioniert?? bin da leider noch sehr unbeholfen.

von emax (Gast)


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.

von FeeJai (Gast)


Lesenswert?

Danke, das werde ich gliech mal ausprobieren. Wieviel MHZ hast du??

FeeJai

von emax (Gast)


Lesenswert?

Ja mei, alles muss Du Dir jatzt aber nicht vorkauen lassen. Les doch
erst mal die Kommentare in der Source. Was da nicht frin steht, dass
kannste gerne fragen.

von FeeJai (Gast)


Lesenswert?

Entschuldigung! Werds mir mal genau ansehen und dann mal versuchen, in
Assemblercode zu überstzen.

von Divison (Gast)


Lesenswert?

Hmmm bei mir läuft das, nur leider hab ich keine Fernbedienung mit dem
das Funktioniert!

Aber sieht schick aus!

von emax (Gast)


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.

von Divison (Gast)


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!

von FeeJai (Gast)


Lesenswert?

Ich hab schon wieter rumgespielt, aber ich kriegs einfach nicht hin. ich
bin zu blöd.

von emax (Gast)


Lesenswert?

Tja, das ist echt Pech.

von FeeJai (Gast)


Lesenswert?

So leute, ich glaub ich kauf mir jetzt dann nen atmega8 und einen 4 Mhz
quarzoszillator, damit sollte es dann funktionieren. Trotzdem danke für
deine hilfe!

von auch Boris (Gast)


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

von Axel Rühl (Gast)


Lesenswert?

hat der 8ter nich einen internen 4Mhz? brauchste keinen kaufen...

Gruß AxelR

von FeeJai (Gast)


Lesenswert?

Ja, eigentlich will ich mir ja weder nen mega8 noch nen 4mhz oszi
kaufen, aber wenn ich keine Progs für find und es selber net
hinkrieg,... dann bleibt eigentlich nix anderes übrig

von ThiloG (Gast)


Lesenswert?

Ich habe das selbe Problem :-(
Allerdings versuche ich es mit dem AT90S2313.
Bei mir erscheint auch nur ein schwarzer Balken...

von ThiloG (Gast)


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...

von Axel Rühl (Gast)


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

von ThiloG (Gast)


Lesenswert?

da ich erst vor einer Woche mit µC und so angefangen habe, sagt mir das
mit der Zählschleife nicht besonders viel.
Könntest du mir vielleicht ein Beispiel Code zeigen?
Danke!

von LameM (Gast)


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

von ThiloG (Gast)


Lesenswert?

Also das mit den LEDs hab ich ja auch schon gemacht ;-)
nur halt ohne Zählschleife...
...ich kenn die Befehle ja noch gar nicht...

von ThiloG (Gast)


Lesenswert?

so... habs nun endlich geschafft mit dem LCD-Display...
Nun hab ich aber noch eine Frage.
Wie kann ich Texte in der 2. Zeile anzeigen lassen?
Geht das nur mit 8-Bit???

von emax (Gast)


Lesenswert?

Warum ignoriert ihr die Antworten? Oben im Thread ist doch ein ganz
klarer Hinweis auf eine Source, in der gibts auch eine Lösung für die
Cursorpositionierung auf die zweite Zeile.

e.

von ThiloG (Gast)


Lesenswert?

Ups... stimmt ;-)
...allerdings hab ich hier im Büro (mach grad Schülerpraktikum :-) kein
winZip... :-P

Muss ich wohl warten bis ich wieder zu Hause bin...

von emax (Gast)


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.

von emax (Gast)


Lesenswert?

Hm. so nützt das gar nix, sehe ich gerade, da fehlen Dir noch ein paar
defines und so.

Also saug dir mal WinZip, und dann schau mal elber rein.

e.

von ThiloG (Gast)


Lesenswert?

Danke!
Ne, saugen tu ich hier lieber nicht... ;-)
...ich kann ja warten...

von FeeJai (Gast)


Lesenswert?

Proggst du in assembler???

Wenn ja, kanns du mal den SOurce uploaden?? ich kriegs leider nicht
hin

FeeJai

von FeeJai (Gast)


Lesenswert?

Also, ich hab nen 4MHZ Quarz hingehängt und noch ein wenig im code
rumgeschrieben, jetzt funtkioniert es; werd noch versuchen, auch für 8
Mhz zu bauen.

MfG,
FeeJai

von ThiloG (Gast)


Lesenswert?

@ emax

Das ist ja alles in C geschrieben. Ich versuch mit dem Assembler klar
zu kommen ;-)

von emax (Gast)


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.

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.