Hallo,
Ich arbeite momentan das AVR-Tutorial durch und mittlerweile hab ich das
gefühl spass am assemblern zu bekommen wenn da nicht mein LCD wäre was
einfach nicht funktionieren will.
Ich habe mir ein 4x20 Charakter LCd-Display gekauft mit der feststellung
das der enthaltene Controller nicht richtig angegeben wird, entweder das
S6A0069 oder das SPLC780D oder auch das KS0066.
Nun habe ich mir die Datenblätter alle besorgt und mir die
Initialisierungsroutinen rausgeschrieben und verglichen und
dementsprechend angepasst. das einzige was ich bisher hinbekommen habe
ist das wenn ich das display ohne µC ansteuere wie gewünscht ind der 1.-
und der 3. Zeile ein Balken entsteht. wenn ich den Microcontroller nun
seine arbeit machen lasse werden alle 4 Zeilen zu einem Balken.
Was mache ich falsch? habe im Forum nachgeschaut wie blöd und finde
einfach nichts. habe den Code ständig durchgeschaut und mit codes
anderer Leute verglichen etc. aber es will einfach nicht funktionieren.
Angeschlossen habe ich es laut Tutorial mit den Ports D0-D3 (DB4-DB7)
sowie E=D5; RS=D4 und R/W=GND. habe die wege vom µC zum LCD mit nem
Durchgangsprüfer ausgeklingelt, alles super. sowie lässt sich der µC
programmieren, habe auch schon einen anderen µC aussprobiert, selbes
resultat.
Entweder bin ich echt zu dumm dafür oder wie keine ahnung.
BITTE HELFT MIR HEUL sitze schon den 4. Tag daran :((((
Ja habe ein 10k Poti dran an denen ich nach jedem probieren dran drehe
um zu checken ob sich was getan hat, hab ihn auch schon direkt gegen GND
gehabt.
Der Port, an dem den LCD angeschlossen ist, funktioniert?
Ich hatte schon ATmegas bei denen der eine oder andere Ausgang defekt
war.
Wie gesagt. Nur ne Idee.
M.Freiberg schrieb:> Ja habe ein 10k Poti dran an denen ich nach jedem probieren dran drehe> um zu checken ob sich was getan hat, hab ihn auch schon direkt gegen GND> gehabt.
Und was passiert, wenn Du daran drehst?
Gruß
Jobst
Wenn ich den poti komplett runterdrehe kommt garnichts mehr, also
nurnoch blauebeleuchtng, und wenn ich den dann aufdrehe kommt langsam
die vier balken zum vorschein.
M.Freiberg schrieb:> wenn da nicht mein LCD wäre was> einfach nicht funktionieren will.
Welchen Controller verwendest Du?
Wo in Deinem Programm includierst Du die Definitionsdatei des
Controllers (z.B. "m8def.inc")?
Bist Du sicher, dass Dein Controller mit den 4 MHz taktet, die Du in der
LCD-Inc angegeben hast?
Die 25 ms Wartezeit vor der Initialisierung könnten für manche
LCD-Module zu knapp sein.
...
Wie ich schon schrieb habe ich 4 controller ausprobiert mit deren
initialisierungsanforderungen. Wobei die hd44780 mit den SPLC780D
identisch sind sowie die KS0066 mit dem S6A... auch identisch. Also habe
ich, wie man in der routine sehen kann, beide drinne nur halt immer
eines auskommentiert. Beide machen letztendlich das selbe. Die Taktungen
habe ich dem Tutorial entnommen und auch schon selbst errechnet mit
ähnlichen Ergebnissen. Man sieht auch das ich die zeiten mit einbezogen
habe. Hatte auch schon probiert die Wartezeiten zu verlängern jedoch
ohne Erfolg. :(((
Man sollte schon die Antworten im Forum durchlesen, denn Hannes Lux hat
dich schon auf die Delay-Werte in deinem Programm aufmerksam gemacht.
Also nimm nochmal den Taschenrechner hervor und überprüf die
Dekrementier-Anfangswerte deiner Delayschleifen, inbesondere die
100µ-Verzögerungsschleife.
Marcel Freiberg schrieb:> Wie ich schon schrieb habe ich 4 controller ausprobiert mit deren> initialisierungsanforderungen.
Einen DS89C450, einen MSP430F1121, einen PIC16F84 und einen Propeller?
> Wobei die hd44780 mit den SPLC780D> identisch sind sowie die KS0066 mit dem S6A... auch identisch.
Nein, nicht identisch. Aber weitestgehend gleich.
> Hatte auch schon probiert die Wartezeiten zu verlängern jedoch> ohne Erfolg. :(((
Dann ist Dein Aufbau fehlerhaft oder das Display defekt.
Oder die Software vermurkst.
Gruß
Jobst
abgesehen davon das man beim betrachten des quelltextes Augenkrebs
bekommt...
warum schaltest du das Display am Ende der init. “AUS“
versuch es mal mit ner “1“
// ..:: Display-OFF
LDI Temp, 0b00000000
OUT LCD_PORT, Temp
RCALL lcd_Enable // Anfrage abschicken
RCALL Delay_50us // Wartezeit von 50 µs.
// ..:: +--------------- D (Display) : 0 = Display OFF ; 1
= Display ON
// ..:: |+-------------- C (Cursor) : 0 = Cursor OFF ; 1 =
Cursor ON
// ..:: ||+------------- B (Blinken) :
sorry ich nehme meine Aussage betreffs des Ausschaltens zurück
ich bin da wohl auf deinen programmierstiel reingefallen
du schickst ja noch die 1 hinhinterher
Ja beim AVRSTUDIO sieht das alles schicker aus. Habs nur versucht für
mich idiotensicher zu kommentieren. Sorry, wenn ich zuhause bin werde
ich das mal ansehnlicher gestaltet noch zu schicken.
Danke schön schonmal für eure bemühungen.
P.S. mit den 4 controllern meinte ich die im LCD integrierten möglichen
typen (hd44780; splc780d; s6a0069; ks0066)
Hannes Lux schrieb:> Wo in Deinem Programm includierst Du die Definitionsdatei des> Controllers (z.B. "m8def.inc")?
Wird von AVRSTUDIO Automatisch includiert sobald man beim erstellen
eienes Projektes sein µC rausgesucht hat,
Hannes Lux schrieb:> Bist Du sicher, dass Dein Controller mit den 4 MHz taktet, die Du in der> LCD-Inc angegeben hast?
Ja bin ich mir, habe xtra einen bei Conrad gekauft und es ist auf dem
Oszillator 4.0000 MHz eingraviert sowie, sobald ich den OSC abklemme
geht garnix mehr, also habe ich die Fuses richtig gesetzt. (also ich
gehe mal stark davon aus :D )
Hannes Lux schrieb:> Die 25 ms Wartezeit vor der Initialisierung könnten für manche> LCD-Module zu knapp sein.
ja deshalb hatte ich die Initialisierung auch schon auf 250ms
hochgedreht und sämtliche andere Warteschleifen verlängert
.
Esoteriker schrieb:> abgesehen davon das man beim betrachten des quelltextes Augenkrebs> bekommt...
Ja hab im Anhang nochmal bereinigt, ich hoffe es ist ab jetzt lesbar :)
Esoteriker schrieb:> http://www.mikrocontroller.net/articles/AVR-Tutorial:_LCD>> versuche mal damit ;-)
Tue ich ja, komme deswegen ja nicht weiter ;)
isnah schrieb:> Man sollte schon die Antworten im Forum durchlesen, denn Hannes Lux hat> dich schon auf die Delay-Werte in deinem Programm aufmerksam gemacht.> Also nimm nochmal den Taschenrechner hervor und überprüf die> Dekrementier-Anfangswerte deiner Delayschleifen, inbesondere die> 100µ-Verzögerungsschleife.
Ja habe ich gesehen das in die falsch ist, jedoch wird die nicht einmal
verwendet die 100µs, also hab ich die komplett gelöscht. desweiteren
habe ich auch etwas entdeckt beim Displaylöschen ich dem Display nur 50
µs Zeit gebe anstatt 5ms. wede ich gleich mal prüfen :)
So hab jetzt die Wartezeit am anfang so dermaßen verlängert das man
zusehen kann was passiert. Wenn ich die Spannung inshalte sieht man erst
den 1, und den 3. Balken und nach ca. einer Sekunde erst alle Balken.
irgendwo ist da der Wurm drinne ich komme blos nicht drauf :(
na na na,
deine delays sind vom Ansatz schon falsch !
50ysec nur zwischen der Ausgabe von Zeichen
5msec zwischen Controll Bytes und allem anderen
1 sec vor beginn der ini
....
darum schau dir bitte nochmal den Code des Tutorials an oder auch mal
eine fertige Lösung von irgendwo anders
http://www.avr-asm-tutorial.net/avr_de/Lcd4Inc.html
Marcel Freiberg schrieb:> P.S. mit den 4 controllern meinte ich die im LCD integrierten möglichen> typen
Die waren aber nicht mit der Frage
Hannes Lux schrieb:> Welchen Controller verwendest Du?
gemeint ...
Gruß
Jobst
Jetzt hast du in deiner Delay_5ms-Routine einen weitern Fehler
eingebaut.
Der Stack funktioniert wie FiLO (First in Last out)
also müssen die POP-Befehle die umgekehrte Reihenfolge der PUSH-Befehle
haben.
nicht nur dort,sondern überall push/pop mit mehr als einem Wert
kontrollieren .
merke:
last in - first out
also das letzte push als erstes poppen ;-)
push temp
push temp2
*
*
pop temp2
pop temp
Hi hab das alles jetzt mal überarbeitet mit den Zeiten und das mit den
PUSH und POP Funktionen, aber es will immernoch nicht.
So oft wie ich hier im Forum schon gelesen habe wie einfach das
eigentlich geht und das Anfänger Kinderkram ist, so bekomme ich langsam
das Gefühl zu Dumm dafür zu sein. Dabei ist mir das sonst auch immer
total einfach gefallen.
So langsam vergeht mir alles dabei :(
Hi
>SBR Temp, LCD_RS // setzt eine "1" beim RS-Bit
Macht es nicht. Das muss SBR Temp, 1<<LCD_RS heißen.
Und lass bitte die Finger von der TAB-Taste. TABs haben in einem
Quelltext nichts zu suchen.
MfG Spess
So habs jetzt endlich hinbekommen, nur das anstatt "Test" andere zeichen
darstehen.
Günther schrieb im Beitrag #3277259:
> Lustig, wie hier selbst den Trolls geholfen wird, die zu dumm sind ein> Tutorial zu lesen ;)
JA scheinbar bin ich zu dumm. Bisher fiel es mir relativ einfach dem TUT
zu folgen bis hierher, aber naja keine Ahnung woran es jetzt lag.
Na dann werd ich mal weiter Trollen und mich deiner Aussage dennoch
nicht entmutigen zu lassen.
Dank allen anderen für die Hilfe.
Hi
>Diese Hyroglyphen da, verändern sich auch nach jedem Zuschalten der>Spannung jedesmal etwas.
Bist du sicher, das du die Zeichen im richtigen Register an lcd_SendData
übergibst?
MfG Spess
moin
nach dem einschalten des 4 bit mode, musst du aber alles was folgt auch
dem entsprechend als high/low nibble senden ,einmal ein nibble vergessen
und kazong alles durcheinander.
Und nun sieh dir mal nochmal deine Ini an ,ab der umschaltung auf 4bit
mode.
Die delays innerhalb der unterprg. ( du sendest 2 nibble) betragen
50ysec
usw usw.
naja In der Schule hatten wa bisher nur C-Programmieren und VBA.
Assembler hatten wa bisher nur kurz angeschniten mit nem HC68000, oder
so, Prozessor. Habe gerade Ferien und versuche mir das Assemblern
hiermit anzueignen um mich mit meiner Abschlussarbeit besser befassen zu
können. Da ich aber nebenbei noch 2 Kinder beschäftigen tue macht die
sache nicht einfach. also bitte nich böse sein wenn das für euch überaus
Dumm wirkt ;)
M.Freiberg schrieb:> naja In der Schule hatten wa bisher ...
Ignorier ihn.
Ausser blöden Dahergequatsche kommt von solchen Leuten meistens sowieso
nichts.
Du hast mit ein wenig Hilfe dein Problem selbst in den Griff gekriegt.
Nur das zählt.
Hallo Esoteriker,
am Ende hab ich es auch getan, ich wollte es hat UNBEDINGT selber
schaffen. letztlich hab ich gesehen das in der vom TUT geschriebenen
Datei in der Initialisierung gar kein Display Claer vor dem
"Entry-Mode"-Befehl vorkommt aber in sämtlichen Datenblättern das so
steht.
Ihnen auch noch mals dank für die Hilfe.
> Karl Heinz Buchegger
Mach ich, Danke :)