Forum: Mikrocontroller und Digitale Elektronik Problem mit LCD EA DIP204-4


von Hannes (Gast)


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

von Hannes (Gast)


Lesenswert?

Oder zumindest nen Beispiel, das ich das selber noch mal versuchen kann, 
wäre echt nett =)

von Klaus (Gast)


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

von Matthias K. (matthiask)


Lesenswert?

Hier Beispiele in C. Umsetzung aus Assembler sollte kein Problem sein.
Beitrag "LCD EA DIP204 KS0073 4-Bit, 8-Bit und serielle C-Routinen"

von Hannes (Gast)


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?!

von Hannes (Gast)


Lesenswert?

und was versteckt sich hinter "CALL  LCD_Intialisieren"

von Krapao (Gast)


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

von Krapao (Gast)


Lesenswert?

> Routine von Hannes
              ^^^^^^
Sorry,        Klaus!

von Hannes (Gast)


Lesenswert?

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

von Krapao (Gast)


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.

von Hannes (Gast)


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

von Hannes L. (hannes)


Angehängte Dateien:

Lesenswert?

Hannes schrieb:
> zu 4 bit gibts nichts....

Dann schau mal hier...

Xundes Neues...

...

von Krapao (Gast)


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

von spess53 (Gast)


Lesenswert?

Hi

>Dann schau mal hier...

Das Display hat aber keinen Standardcontroller.

Das Datenblatt vom KS0073 fordert kein dreimaliges Senden von 0b0011.

MfG Spess

von Hannes L. (hannes)


Lesenswert?

spess53 schrieb:
> Das Display hat aber keinen Standardcontroller.

Sorry, das sehe ich jetzt auch. Da war ich wohl zu voreilig.

...

von Peter D. (peda)


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

von Hannes (Gast)


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.

von Hannes (Gast)


Lesenswert?

Keiner eine Idee, bzw. ne Antwort? =(

von Matthias K. (matthiask)


Lesenswert?

Hast Du den Jumper auf dem Modul richtig gesetzt? Das Display kann auch 
SPI, also seriell angesteuert werden.

von Hannes (Gast)


Lesenswert?

Der LötJumper ist richtig hab ich schon überprüft.

Jemand ne Idee zum 3 Posts weiter oben gestellte frage mit dem falsch 
anschließen?!

von Peter D. (peda)


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

von Hannes (Gast)


Lesenswert?

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?

von Klaus (Gast)


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

von Hannes (Gast)


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

von Klaus (Gast)


Lesenswert?

@Hannes
Anwelchem Port soll dein LCD angeschlossen sein?
Ich werd versuchen für deinen µC ein hexfile zu generieren.

von Hannes (Gast)


Lesenswert?

An Port 2 ist das LCD

P2.0 -> D4 (D0)
P2.1 -> D5 (D1)
P2.2 -> D6 (D2)
P2.3 -> D7 (D3)

P2.4 -> RS
P2.5 -> R/W
P2.6 -> E


Hey, das ist echt Nett =)

von Klaus (Gast)


Angehängte Dateien:

Lesenswert?

@Hannes!

Ich hoffe das klappt mit dem hexfile!

von Klaus (Gast)


Lesenswert?

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!

von Hannes (Gast)


Lesenswert?

mhm, alles ist Low bis auf P2.7 und es tut sich auch nichts =(

von Hannes (Gast)


Lesenswert?

Oder kannst du mir mal die C File anfügen?

von Klaus (Gast)


Lesenswert?

@Hannes
P2.7 kann sein dass der High ist weil nicht benutz!

Wie hast du genau dein LCD angschlossen?

von Hannes (Gast)


Lesenswert?

P2.0 -> D4 (D0)
P2.1 -> D5 (D1)
P2.2 -> D6 (D2)
P2.3 -> D7 (D3)

P2.4 -> RS
P2.5 -> R/W
P2.6 -> E

von Klaus (Gast)


Lesenswert?

>Oder kannst du mir mal die C File anfügen?

Ist leider alles in Assembler!

von Hannes (Gast)


Lesenswert?

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

von Klaus (Gast)


Lesenswert?

@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.

von Klaus (Gast)


Lesenswert?

Ist Allerdings alles mit Prog-Studio geschrieben! Wenn Du damit was 
Anfangen kannts gerne.

von Klaus (Gast)


Angehängte Dateien:

Lesenswert?

Hier mal die Listings!

von Hannes (Gast)


Lesenswert?

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

von Klaus (Gast)


Lesenswert?

mach mal ein Poti ran mit 10k an Vcc siehe datenblatt

von Hannes (Gast)


Lesenswert?

Hab ich schon versucht...

mal ne Frage, was mir grad aufgefallen ist, bei Funktion Set, welches RE 
ist gemeint?

Function Set
0 0 0 0 0 1 DL N RE DH RE

von Klaus (Gast)


Angehängte Dateien:

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.

von Klaus (Gast)


Lesenswert?

>mal ne Frage, was mir grad aufgefallen ist, bei Funktion Set, welches RE
>ist gemeint?
Damit ist RE Bit 2 gemeint. RE auf Bit 0 heisst eigentlic REV

von Hannes (Gast)


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

von Klaus (Gast)


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.

von Hannes (Gast)


Lesenswert?

Ich hab zwar nur einen 1,6k Widerstand, jedoch zeigt mir das Display 
nichts an =( also scheint es kaputt zu sein, schade...

von Hannes (Gast)


Lesenswert?

Guten Abend,

ich hab mir mal eins bestellt und getestet, bei dem neuen geht auch 
nichts.. =(

von Hannes (Gast)


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??

von LCD-FAN (Gast)


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.

von Hannes (Gast)


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

von Hannes (Gast)


Lesenswert?

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?!

von Hannes (Gast)


Lesenswert?

Ok, ich habs jetzt mal versucht, die Kontrastanzeige funktioniert jetzt 
endlich, das Datenblatt was bei dem LCD dabei ist, das ist falsch...

von Hannes (Gast)


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?

von Hannes (Gast)


Lesenswert?

Ok, hat sich erledigt, hab den Fehler gefunden, nochmals nen großen dank 
an alle die mir geholfen haben =)

von Jobst M. (jobstens-de)


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

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.