Forum: Mikrocontroller und Digitale Elektronik LCD macht nicht was es soll trotz Tutorial.


von M.Freiberg (Gast)


Angehängte Dateien:

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

von Spess53 (Gast)


Lesenswert?

Hi

Schon mal am Kontrastregler gedreht?

MfG Spess

von M.Freiberg (Gast)


Lesenswert?

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.

von Ne Idee (Gast)


Lesenswert?

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.

von M.Freiberg (Gast)


Lesenswert?

Ja hatte es am PORTB ausprobiert aber das selbe Spiel :(

von Jobst M. (jobstens-de)


Lesenswert?

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

von M.Freiberg (Gast)


Lesenswert?

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.

von Hannes L. (hannes)


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.

...

von Marcel F. (Firma: STB Berlin) (freiberg84)


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

von isnah (Gast)


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.

von Jobst M. (jobstens-de)


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

von Esoteriker (Gast)


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

von Esoteriker (Gast)


Lesenswert?

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

von Esoteriker (Gast)


Lesenswert?


von Marcel F. (Firma: STB Berlin) (freiberg84)


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)

von M.Freiberg (Gast)


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

von M.Freiberg (Gast)


Angehängte Dateien:

Lesenswert?

Huch den Anhang vergessen, Schande :D

von M.Freiberg (Gast)


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

von Esoteriker (Gast)


Lesenswert?

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

von Jobst M. (jobstens-de)


Lesenswert?

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

von M.Freiberg (Gast)


Lesenswert?

Aso, ich verwende ein ATMEGA 8L8 DIP und ein ATMEGA 8-16 DIP

von isnah (Gast)


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.

von Esoteriker (Gast)


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

von M.Freiberg (Gast)


Angehängte Dateien:

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

von spess53 (Gast)


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

von spess53 (Gast)


Lesenswert?

Hi

>Das mit den Tabs kann man machen wie man will.

Klar, weil jeder die gleichen TAB-Einstellungen hat.

MfG Spess

von M.Freiberg (Gast)


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.

von spess53 (Gast)


Lesenswert?

Hi

>So habs jetzt endlich hinbekommen, nur das anstatt "Test" andere zeichen
>darstehen.

Welche?

MfG Spess

von spess53 (Gast)


Lesenswert?

Hi

>Textzeichen, Spess, Textzeichen.

Sind für mich Zeichen die ich auch im handschriftlichen Text benutze.

MfG Spess

von M.Freiberg (Gast)


Angehängte Dateien:

Lesenswert?

Diese Hyroglyphen da, verändern sich auch nach jedem Zuschalten der 
Spannung jedesmal etwas.

Scheint aber nur an mein Troll dasein zu liegen...

von spess53 (Gast)


Lesenswert?

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

von M.Freiberg (Gast)


Lesenswert?

ok ok jetzt gehts, hatte einen Tippfehler...

Vielen Vielen Dank Hr. Spess :)

von Esoteriker (Gast)


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.

von M.Freiberg (Gast)


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

von Esoteriker (Gast)


Lesenswert?

was mich etwas verwundert , warum benutzt du nicht des sourcecode aus 
dem tut ,sondern irgend was wild zusammengeklicktes..
würde vieles einfacher machen

http://www.mikrocontroller.net/articles/AVR-Tutorial:_LCD#Initialisierung_f.C3.BCr_4_Bit_Modus

mfg

von Karl H. (kbuchegg)


Lesenswert?

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.

von M.Freiberg (Gast)


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

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.