Guten Abend und ein gutes neues euch allen =D
zu meinem Problem, ich sitze jetzt schon seit 3 Tagen an dem LCD EA
DIP204-4 und verzweifle, habe das Forum hier auch durschsucht und es
versucht unf gemacht, die Initialisierung funktioniert einfach nicht...
Ich Programmiere in Assembler und will die Daten per 4 bit übertragen...
Hat mir jemand eventuell ein Testprogramm das ich aufspielen kann zum
schauen ob das Display überhaupt funktioniert?!
Ich verwende einen AT89S8253 mit 12Mhz
Ich bedanke mich mal für eure Antworten =)
Hannes
@ Matthias K.
Danke, das hatte ich auch schon angeschaut, jedoch fast nur Bahnhof
verstanden xD
@ Klaus
Ok da verstehe ich schon mehr, aber eine frage habe ich jetz dann noch
zum Verständnis, mir reichen als Antworten auch nur normale Worte =D
Wenn ich 4 bit Daten übertragen will, dann muss ich ja erst lowniBBel
und dann highnibbel oder?
Und muss zwischen den beiden nibbels ne Zeit sein?
Ich muss ja immer den "E" auf "low" legen um 4 bit zu übertragen oder?!
> Wenn ich 4 bit Daten übertragen will, dann muss ich ja erst lowniBBel> und dann highnibbel oder?
Ich habe es bisher immer nur anders rum gesehen (z.B. auch
WRITE_2_NIBBLES bei http://www.8052.com/tutlcd2).
Müsste aber in dem Datenblatt deines LCDs im Abschnitt über den 4-Bit
Modus drin stehen.
> "CALL LCD_Intialisieren"
Beim AVR entspräche die Funktion dem Ausgeben des Wertes aus A auf die
Datenleitungen des LCDs und das kurzzeitige Einschalten der
Enable-Leitung
Vgl. bei
http://www.mikrocontroller.net/articles/AVR-Tutorial:_LCD#Routinen_zur_LCD-Ansteuerung_im_4-Bit-Modus
1
ldi temp1, 0b00000011
2
out PORTD, temp1 ; Teil 1 von LCD_Intialisieren
3
rcall lcd_enable ; Teil 2 von LCD_Intialisieren
Wenn die Datenleitungen des AVR PD0..PD3 an die Datenleitungen des LCD
D4..D7 angeschlossen sind.
Die Routine von Hannes bekommt in A:
> MOV A,#30h ; 8 Bit - Mode muss 3 mal gesendet
d.h. LCD_Intialisieren muss bei am AVR Anschlussschema erst die Nibbles
tauschen, um letztlich ein 0b00000011 (#03h) auszugeben.
Oder es wird ein anderes Anschlussschema benutzt (Datenleitungen des µc
xx4..xx7 an die Datenleitungen des LCD D4..D7) und der Nibbletausch ist
nicht nötig. Diesen Fall halte ich für wahrscheinlich wegen der
Definition
> LCD_Schnitstellenbreite EQU 28h
Danke für die Antwort, aber im Datenblatt des LCDs gibts nur für den 8
bit modus was, zu 4 bit gibts nichts....
http://www.lcd-module.de/pdf/doma/dip204-4.pdf
Ansonsten verbessert mich =D
Die Initialisierungssequenz für den 4-Bit Modus ist in der Tat dort
nicht beschrieben. Das Display kann aber den 4-Bit Modus.
Suche ein besseres Datenblatt oder arbeite direkt mit dem Datenblatt des
Kontrollers KS0073.
Oft haben die LCD Hersteller auch Beispielroutinen auf ihrer Homepage.
Ok, habs jetz bis zu dem Punkt "MOV A,#_LCD_Schnitstellenbreite ;
Funktion Set"
Nur bin ich mir nicht ganz sicher, was jetz #_LCD_Schnitstellenbreite
für einen wert haben soll?!
Jemand ne idee?
Oder ist das nochmal sagen das nur 4 bit verwendet werden??
und warum hier 2 mal CALL LCD_Komando??
MOV A,#_LCD_Loeschen ; LCD Löschen
CALL LCD_Komando
CALL LCD_Komando
MOV A,#_LCD_Betriebsart
> und warum hier 2 mal CALL LCD_Komando??
Vielleicht weil es beim ersten Mal nicht funktioniert?
Und warum es nicht funktioniert, könnte an dem Missachten der längeren
Ausführungszeit (1.52 ms) des CLEAR DISPLAY Befehls im Vergleich zu den
meisten übrigen Befehlen (39 µs) liegen.
> Nur bin ich mir nicht ganz sicher, was jetz #_LCD_Schnitstellenbreite> für einen wert haben soll?!
Hängt davon ab, wie du das Display betreiben willst. Klaus will es im
4-bit Modus und mit 2 Zeilen betreiben ohne invertierte Darstellung und
mit Dot Scrolling. Dafür nimmt er den Wert #28h
Hi
>Dann schau mal hier...
Das Display hat aber keinen Standardcontroller.
Das Datenblatt vom KS0073 fordert kein dreimaliges Senden von 0b0011.
MfG Spess
spess53 schrieb:> Das Datenblatt vom KS0073 fordert kein dreimaliges Senden von 0b0011.
Nein, aber die Zuverlässigkeit.
Es kann sein, daß die VCC einbricht oder zu langsam ansteigt, um ein
Hardwarereset des LCD zu garantieren.
Es kann weiterhin sein, daß die CPU mitten im LCD-Zugriff resettet wird
(Manuell, Watchdog, Brownout).
In all diesen Fällen ist der Zustand des LCD unbestimmt und man muß
erstmal einen bekannten Zustand erreichen und das geht nur über den
8Bit-Mode.
Die paar Bytes an Code tun auch nicht weh.
Am einfachsten schreibt sich die Ansteuerung des LCD in C.
Und vorzugsweise mit wahlfreier Pinzuordnung:
http://www.avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic&t=102296
Peter
Ok, ich versuche es später nochmal, ich hab dann aber noch ne frage, da
ich das Display gebraucht geschenkt bekommen habe und ich eben mit dem
Telefoniert habe und der meinte, das er es falsch angeschlossen hatte,
jetzt mal eine frage an euch, ob das falsch anschließen des Displays nen
Defekt zu folge haben könnte, er hat es versetzt in die stiftleiste
gesteckt (ich frage mich wie das nur gehen soll, weil man es ja sieht,
aber nun gut)
10 bis 18 waren richtig, hintergrundbeleuchtung ist nicht angeschlossen
reset ist offen, also an nichts angeschlossen
Pin
LCD
1 -> nix
2 -> GND
3 -> VDD
4 -> VEE
Man darf ja an VEE keine 5V anschließen, da das LCD ja kaputt gehen
kann, was hier aber Passiert ist, jedoch war GND nicht an Pin 1 dran.
Was meint ihr?
Hat es das LCD überlebt??
Dann noch eine frage, muss der Reset auf Low oder auf High sein bzw.
intern ist ja ein Pull Up.
Hannes schrieb:> Jemand ne Idee zum 3 Posts weiter oben gestellte frage mit dem falsch> anschließen?!
Hängt vom Netzteil ab.
Ganz schlecht zum Basteln sind PC-Netzteile. Die haben soviel Bums, die
zerstören alles beim geringsten Fehler.
Ideal sind Netzteile mit einstellbarer Strombegrenzung, da geht fast
nichts kaputt.
Die Billiglösung ist ein Steckernetzteil mit 78L05 dahinter, der
begrenzt auf etwa 100mA. Reicht für die meisten MC-Basteleien völlig
aus.
Peter
Des is an nem Board, auf dem nen 7805er drauf is un die Stromquelle ist
ein 9V 800mA Netzteil.
Das LCD darf eig. ja nich kaputt sein, de ja am Massepunkt (Pin1) nichts
angelegt war oder?
>Wenn ich 4 bit Daten übertragen will, dann muss ich ja erst lowniBBel>und dann highnibbel oder?
Erst highnibble dann lownibble.
Vllt. hilft dir das weiter:
LCD_Intialisieren:
CLR LCD_RS
CLR LCD_RW
SWAP A
ANL A,#0Fh
MOV C,A.0
MOV LCD_D4,C
MOV C,A.1
MOV LCD_D5,C
MOV C,A.2
MOV LCD_D6,C
MOV C,A.3
MOV LCD_D7,C
SETB LCD_EN
NOP
CLR LCD_EN
RET
LCD_Komando:
PUSH PSW
PUSH A
PUSH B
LCALL LCD_Busy
MOV B,A
SWAP A
ANL A,#0Fh
MOV C,A.0
MOV LCD_D4,C
MOV C,A.1
MOV LCD_D5,C
MOV C,A.2
MOV LCD_D6,C
MOV C,A.3
MOV LCD_D7,C
CLR LCD_RS
CLR LCD_RW
NOP
SETB LCD_EN
NOP
CLR LCD_EN
LCALL LCD_Busy
MOV A,B
ANL A,#0Fh
MOV C,A.0
MOV LCD_D4,C
MOV C,A.1
MOV LCD_D5,C
MOV C,A.2
MOV LCD_D6,C
MOV C,A.3
MOV LCD_D7,C
CLR LCD_RS
CLR LCD_RW
NOP
SETB LCD_EN
NOP
CLR LCD_EN
POP B
POP A
POP PSW
RET
LCD_Busy brauchst du nicht unbedingt! Einfach durch ein delay erstzen.
Wenn Du das hier Umsetzt sollte die Initialsierung klappen.
Ansonsten werde ich ein hex-file mal reinstellen
Ok, vielen Dank =D
Aber mein Problem das ich schon genannt hatte, mit dem falsch in die
Stiftleiste stecken meines Vorgängers des Displays, nicht das ich hier
ewig versuche und versuche und dann is das Display kaputt und darum geht
nichts...
Ach ja noch was wegen den Zeilenoffset die sind auch ein bischen anders
als beim Standard.
Zeilen_Offset0 EQU 0h
Zeilen_Offset1 EQU 20h
Zeilen_Offset2 EQU 40h
Zeilen_Offset3 EQU 60h
Nur als Info!
Dann is ja noch besser, das kann ich wenigstens richtig =D
Wäre nicht schlecht, wenn du mir die mal anhängen könntest, dann kann
ichs zum testen mal anpassen =)
@Hannes ich meinte Physikalisch!
Bist dir auch sicher das du deine Datenleitungen, +, -, Vee richtig
angeschlossen sind?
Evtl. mal das Display Reseten Pin 16 auf low. Manchmal hängt sich es
auf.
Also, hab mal alles Überprüft.
An VEE liegen ohne angeschlossenem LCD 1,4V an, mit ist es gegen 0V
Plus und Masse sind richtig angeschlossen, genau wie Datenbus und die 3
Steuerleitungen.
mhm...
@Hannes
Der KS0073 ist nicht ganz HD44780 kompatible. Um in den 4bit Modus
umzuschalten bzw. 4 Zeilen Modus musst du Erweiterungs Bit RE setzen.
Bsp: 2Ch für den 4 bit Modus siehe Anhang.
wichtig für den 4 Zeilen-Modus ist 09h im extended Function Set.
Ok, ich hab das falsche RE verwendet, jedoch geht es mit dem richtigen
auch nicht lach ^^
Ich versuchs morgen mal im 8 bit mode, das sollte einfacher sein, dann
kann ich mir wenigstens sicher sein, das es noch geht =)
Bis hier her mal einen lieben Dank an alle =)
@Hannes
Ich habe mein LCD nach deinen Spezifikationen an Port 2 angeschlossen
und funktioniert einwandfrei.
Das heisst, dass das Hexfile in Ordnung ist.
Um zu testen ob dein LCD in Ordnung ist kannst du folgendes probieren:
LCD nur mit +,- verbinden und an VEE 1k gegen VCC schalten.
Jetzt sollten alle Zeilen mit dunkle Balken angezeigt werden, weil der
Kontrast jetzt auf maximum ist.
Ansonsten musst du doch von einem defektem LCD-Display ausgehen.
Falls du noch ein anderes LCD hast der HD44780 kompatible ist sollte das
Hexfile auch gehen.
Kann, jemand, der das LCD hat mal die VEE Spannung messen, einmal ohne
und einmal mit Display, wäre nett, dann kann ich schauen obs daran
liegt...
Jemand erfahrung mit der Seriellen übertragung? also wenn man den
Lötjumper hinten umlötet??
VEE-Einstellung:
Bei dem EA-Datenblatt steht beim diesem "fast kompatiblen" Kontroller:
Die Kontrasteinstellung erfolgt mittels Poti dessen Schleifer an VEE
hängt,
Ein Ende der Schleiferbahn kommt an VDD!!!, das andere Ende!! bleibt
frei.
Für das EADIP204-4NLED wird ein 10k-Poti für die
EADIP204B(J)-4NLW und
EADIP204-4HNLED jeweils ein 2k5 Poti verwendet.
(Die Kontrasteinstellung funktioniert dann, wenigstens bei mir)
Für die 4-Bit Ansteuerung, die im Originaldatenblatt des Kontrollers
besser beschrieben ist, gelten die gleichen Regeln wie im 8 Bit-Modus.
D.H. sobald der 4-Bit-Modus eingestellt ist, muss jedes Steuerbyte und
jedes Datenbyte halt als 2 Nibbels gesendet werden.
Wenn das Busy-Bit nicht verwendet wird, muß halt nach jedem Befehl
ausreichend lange gewartet werden. Wenn das Busy-Bit gelesen wird
sind natürlich auch 2 4-Bit Zugriffe nötig, nicht vergessen.
Ich verwende das Busy-Bit/Flag, funktioniert einwandfrei,
hätte aber darauf verzichtet, wenn nicht hin- und wieder ein
Zugriff auf das Ram des Displays erforderlich wäre.
Also, in dem Datenblatt, was dabei ist, in dem steht das man 27k von +5V
dann nen 10k poti die beiden äuseren anschlüsse, einer an den 27k und
einer an masse, der mittlere, also der schleifer muss auf VEE vom LCD.
oder is das Falsch? Es steht dabei, das man den VEE nicht an +5V
anschließen darf, da es sonst ein defekt geben kann...
Ok, jetzt brauche ich dringend nochmal Hilfe, Das LCD funktioniert jetzt
endlich, nur hab ich das Problem, wie gebe ich Zeichen aus?!
Ich muss den RS ja auf "high" setzen und dann einfach z.B. 0x41 für A
übertragen, seh ich das richtig?
Wenn ich das mache, dann springt der Curser an die Stelle 0x41, was
mache ich falsch?
Hannes schrieb:> Ok, jetzt bin ich voll verwirrt, das habe ich hier im Forum gefunden>> http://www.mikrocontroller.net/attachment/33000/EADIP204-4.pdf>> Wer kann die verwirrung entknoten?!
Die Aussage ist Blödsinn. R3 ist gar nicht an der Hintergrundbeleuchtung
angeschlossen, sondern der 100Ω-Widerstand rechts.
Welches waren denn nun die Probleme? Was steht denn falsches in dem
Datenblatt?
Gruß
Jobst