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
Oder zumindest nen Beispiel, das ich das selber noch mal versuchen kann, wäre echt nett =)
@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
Hier Beispiele in C. Umsetzung aus Assembler sollte kein Problem sein. Beitrag "LCD EA DIP204 KS0073 4-Bit, 8-Bit und serielle C-Routinen"
@ 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 Display hat aber keinen Standardcontroller. Sorry, das sehe ich jetzt auch. Da war ich wohl zu voreilig. ...
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.
Hast Du den Jumper auf dem Modul richtig gesetzt? Das Display kann auch SPI, also seriell angesteuert werden.
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?!
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...
@Hannes Anwelchem Port soll dein LCD angeschlossen sein? Ich werd versuchen für deinen µC ein hexfile zu generieren.
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 =)
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!
@Hannes P2.7 kann sein dass der High ist weil nicht benutz! Wie hast du genau dein LCD angschlossen?
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
>Oder kannst du mir mal die C File anfügen?
Ist leider alles in Assembler!
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.
Ist Allerdings alles mit Prog-Studio geschrieben! Wenn Du damit was Anfangen kannts gerne.
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...
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
@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.
>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
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.
Ich hab zwar nur einen 1,6k Widerstand, jedoch zeigt mir das Display nichts an =( also scheint es kaputt zu sein, schade...
Guten Abend, ich hab mir mal eins bestellt und getestet, bei dem neuen geht auch nichts.. =(
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 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?!
Ok, ich habs jetzt mal versucht, die Kontrastanzeige funktioniert jetzt endlich, das Datenblatt was bei dem LCD dabei ist, das ist falsch...
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?
Ok, hat sich erledigt, hab den Fehler gefunden, nochmals nen großen dank an alle die mir geholfen haben =)
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.