Problem mit LCD EA DIP204-4

Gast #2479779
Lesenswert?

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

@Hannes

Gesundes neues Jahr!
Ich hoffe das die paar zeilen weiter helfen




_LCD_SetRE                   EQU      2Ch   ;Setzt das Erweiterungs Bit 
RE für Sonderfunktionen  nur EADIP204-4
LCD_Schnitstellenbreite     EQU      28h   ;Function-Set 4 Bit 
Interface, 2 Zeilen
LCD_ExtfuncSet              EQU      09h   ;4- Zeilen Modus einschalten. 
Benötigt RE-Bit nur KS0073  EADIP204-4

LCD_INIT:

   CALL  LCD_Pause_15ms             ; Warte nach dem die Stromversorgung 
angeschlossen wurde
   MOV   A,#30h                     ; 8 Bit - Mode muss 3 mal gesendet 
werden
   CALL  LCD_Intialisieren
   CALL  LCD_Pause_4ms
   MOV   A,#30h
   CALL  LCD_Intialisieren
   CALL  LCD_Pause_4ms
   MOV   A,#30h
   CALL  LCD_Intialisieren
   CALL  LCD_Pause_4ms
   MOV   A,#20h                     ; jetzt umschalten auf den 4 bit 
mode
   CALL  LCD_Intialisieren
   CALL  LCD_Pause_4ms
   MOV   A,#_LCD_SetRE              ;nur bei EADIP204-4 verwenden
   CALL  LCD_Komando
   MOV   A,#_LCD_ExtfuncSet         ;nur bei EADIP204-4 verwenden
   CALL  LCD_Komando
   MOV   A,#_LCD_Schnitstellenbreite ; Funktion Set
   CALL  LCD_Komando
   MOV   A,#_LCD_AUS                 ; LCD-Display ausschalten
   CALL  LCD_Komando
   MOV   A,#_LCD_Loeschen           ; LCD  Löschen
   CALL  LCD_Komando
   CALL  LCD_Komando
   MOV   A,#_LCD_Betriebsart
   CALL  LCD_Komando
   MOV   A,#_LCD_EIN
   CALL  LCD_Komando
RET
Gast #2479906
Lesenswert?

@ 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?!
Gast #2479929
Lesenswert?

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

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

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

> 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
#2480179
Lesenswert?

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

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

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

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

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

@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.
Angehängte Dateien:
Gast #2480832
Lesenswert?

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

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

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

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

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

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?
#2491121
Lesenswert?

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

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