LCD macht nicht was es soll trotz Tutorial.

Gast #3274772
Lesenswert?

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 :((((
Angehängte Dateien:
#3275059
Lesenswert?

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.

...
(Firma: STB Berlin) #3275176
Lesenswert?

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. :(((
Gast #3275183
Lesenswert?

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.
#3275186
Lesenswert?

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
Gast #3275188
Lesenswert?

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) :
(Firma: STB Berlin) #3275213
Lesenswert?

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)
Gast #3275304
Lesenswert?

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 :)
Gast #3275331
Lesenswert?

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  :(
Gast #3275451
Lesenswert?

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.
Gast #3275852
Lesenswert?

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
Gast #3277207
Lesenswert?

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 :(
Angehängte Dateien:
Gast #3277252
Lesenswert?

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
Gast #3277283
Lesenswert?

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.
Gast #3277365
Lesenswert?

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.
Gast #3277385
Lesenswert?

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 ;)
Gast #3277417
Lesenswert?

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 :)

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