PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Mein erstes Lcd gibt nix aus :-( Anfänger bittet um HILFE



Philipp83
20.02.2006, 18:12
Hallo an die hilfsbereite Community!!!

Also ich habe vor einiger Zeit mit der uC Programmierung in Assembler angefangen, was auch bis zum heutigen Tag recht erfolgreich verlief. Jetzt habe ich mir ein 1 Zeiliges Lcd von Pollin besorgt (HD44780 kompatibel), worauf ich es leider nicht schaffe etwas auszugeben :-(.

Es ist alles richtig angeschlossen und an dem Datenport und an (Enable,RS,RW) liegen auch die Signale an die ich ausgebe.

Nachdem an dem Datenport etwas anliegt, schalte ich E an,warte ca.50ms und schalte E wiede aus. Aber irgendwie interessiert es das Display nicht was ich
mache.

Ist es richtig, das nach dem Initalisieren von :
8 Bit
Clear home
Coursorrichtung
Display + Coursor ON + Blinkend

zumindest schonmal ein Coursor zu sehen sein sollte?
Ich sitze jetzt bestimmt schon 7 Std an diesem Teil, aber leider erfolglos

Was muss ich alles Initialisieren damit ich etwas sehe?
Oder reicht nur initialisieren für zumindest einen Cursor nicht aus?

vielen vielen Dank schonmal im voraus!!!!

Philipp

AlexAtRobo
20.02.2006, 19:35
Arbeitest du mit dem 8Bit interface oder 4bit?
Ich hatte bei Displays ein ähnliches Problem, schlicht mein Timing war zu schnell.

Prinzipell meine Initalisierungssequenz
lcdinit:
push r18
push r16
ldi r18,50
powerupwait:
rcall delay5ms
dec r18
brne powerupwait
ldi r16, 0b00110000 ;muss 3mal hintereinander gesendet
rcall setbyte ; Setzt das Byte auf den Port (gekapselt, weil ich ein schieberegister dazwischen habe zum pins sparen)
rcall lcd_enable ;1
rcall delay5ms
rcall lcd_enable ;2
rcall delay5ms
rcall lcd_enable ;und 3!
rcall delay5ms
ldi r16, 0b00111000 ;8bit-Modus einstellen
rcall lcd_command
rcall delay5ms
ldi r16, 0b00001100 ;11 Display an, 0 cursor aus,0 blinkt aus
rcall lcd_command
ldi r16, 0b00000110 ;entry mode set adresse increment
rcall lcd_command
pop r16
pop r18
ret
LCD_Command:
rcall SetByte
cbi DataPort, DataPin ;set RS low
rcall lcd_Enable
ret

lcd_Enable:
nop ; Nops damit das timing gemütlicher wird
nop
sbi EnablePort, EnablePin
nop
nop
nop
cbi EnablePort, EnablePin
ret

lg

Alex

Philipp83
20.02.2006, 22:06
Soweit vielen dank für die Antwort!

Jetzt bin ich ratlos. Zu schnell spreche ich das Display nicht an,da ich das ganze zum Test mal an Led´s geklemmt habe und dabei verzögerungen von Befehl zu Befehl problemlos erkennen konnte.

Soweit ich das erkennen konnte, habe ich auch die gleichen Initialisierungsschritte gemacht wie du. *grübel

Ist es denn richtig, das ich nach den Initialisierungs schritten zumindest schonmal einen Cursor sehen müssste? Oder muss ich schon etwas hineinschreiben?
mfg, Philipp

pumann
20.02.2006, 23:09
... im Datenblatt des HD44780 ist eine korrekte Initialisierung beschrieben. Für den Kompatiblen müsstest Du mal im Datenblatt nachschauen, gerade beim Timing gibts da öfters Unterschiede. Arbeite einfach diese Schritte ab:
1. 8 Bit Modus und warten (beim HD44780 ca. 20ms, brauchst den Mist nicht 3x senden, funktioniert) 2. Funktion Set (Zeilenanzahl, Font) 3. Display an4. Display löschen 5. Entry Set Mode (Cursorverhalten)
Und baue ab dem Schritt 'Funktion Set' eine generelle Abfrage des Busy-Flags mit ein, daß erspart Dir beim Wechsel der AVR-Taktfrequenz (durch einen Typenwechsel z.B.) einige Unannehmlichkeiten mit dem Timing.

AlexAtRobo
21.02.2006, 08:15
@pumann
Ich habe die Abfrage des Busy Flags in meinen Routinen nicht implementiert, weil ich mir den Pin für die RW Leitung normalerweise spare und ich so nur 3 Pins zum ansteuern des Displays brauche (HCT164 ist dazw.)


@Philipp83
Das Display sollte leer sein. Der Cursor ist bei meiner Routine aber ausgeschalten.
Weiters: Siehst du überhaupt was am Display? Oder stimmt vielleicht die Kontrastspannung nicht (Pin3)

lg

Alex

lg

Alex

Philipp83
21.02.2006, 15:03
Hallo,

Nein, leider sehe ich garnix und habe auch nie etwas darauf gesehen :-(
Ich glaube das die positive Kontrastspannung richtig ist, habe aber auch leider kein Datenblatt zu dem Display gefunden .

LC-Display HYUNDAI HB16102

1-zeiliges Display mit integriertem Controller (HD44780-kompatibel), Lötkontakten zum Anlöten der Anschlussleitungen für Betriebsspannung, Kontrast und Datenübertragung.

Technische Daten:
- 1 Zeile x 16 Zeichen
- Ansteuerung über 4-Bit- oder 8-Bit-Datenbus möglich
- Kontrast über externes Poti regelbar
- Anzeigefläche 64x13,5 mm
- Zeichengröße 3x6 mm
- Betriebsspannung 5 V-
Maße (BxHxT): 80x36x9 mm.

BestNR. 120 333 bei Pollin

Vielleicht kennt ja jemand dieses Display und hat nähere Informationen für mich.

Sollte denn ein Blinkender Cursor auf dem sonst leeren Display nach dem Initialisieren und eventueller Kontrastveränderung zu sehen sein oder nicht?






.include "m16def2.inc"

ldi r16, LOW(RAMEND) ;
out SPL, r16 ; Stackpointer
ldi r16, HIGH(RAMEND) ;
out SPH, r16 ;

ldi r16, 0xFF
out DDRA, r16 ;Port A = Ausgabeport
out DDRB, r16 ;Port B = Ausgabeport
ldi r16, 0xFF
ldi r17, 0x00
ldi r18, 0b00000100 ; Enable Pin
ldi r21, 0b00000110 ; Enable und RS Pin
ldi r20, 0xFF

Lcd_Init: ldi r19, 0x30
out Porta, r19
rcall Enable
ldi r19, 0x30
out Porta, r19
rcall Enable
ldi r19, 0x30
out Porta, r19
rcall Enable
ldi r19, 0b00000010 ; Cursor Home
out Porta, r19
rcall Enable
ldi r19, 0b00000110 ; Cursor Bewegungsrichtung
out Porta, r19
rcall Enable
ldi r19, 0b00001111 ; Display ON
out Porta, r19
rcall Enable
ldi r19, 0b10000010 ; Ram Adresse
out Porta, r19
rcall Enable
ldi r19, 0b00000010 ;
out Porta, r19 ;
ldi r19, 0b00000010 ; Etwas reinschreiben
out Portb, r19 ;
rcall Setzen ;




Tot: nop
rjmp Tot


Enable: out PortB, r18 ; ENABLE AN
ldi r19, 0xFF ;

Wait: dec r19 ;
CP r19, r17 ;
BREQ Wait1 ;
rjmp Wait ;
Wait1: dec r20 ; WARTEN
CP r20, r17 ;
BREQ Aus ;
ldi r19, 0xFF ;
rjmp Wait ;

Aus: out PortB, r17 ; ENABLE WIEDER AUS
ret



Setzen: out PortB, r21 ; ENABLE und RS AN
ldi r19, 0xFF ;

Wait2: dec r19 ;
CP r19, r17 ;
BREQ Wait3 ;
rjmp Wait2 ;
Wait3: dec r20 ; WARTEN
CP r20, r17 ;
BREQ Aus1 ;
ldi r19, 0xFF ;
rjmp Wait2 ;

Aus1: ldi r19, 0b00000010
out PortB, r19 ; ENABLE WIEDER AUS (Rs bleibt)
ret





Hmm, sieht bei mir ordentlicher aus (warum erkennt der hier keine Leerstellen)

mfg, Philipp

AlexAtRobo
21.02.2006, 15:29
Also du sollest auf jeden Fall was am Display sehen. Geh mal mit der Kontrastspin (3) auf Masse. Wenn ich mich recht entsinne, hast du dann max. Kontrast, da solltest du auf jeden fall die Pixel des Displays sehen.
Auch wenn nix draufsteht, kein Cursor da ist etc. Ich mach dir am abend ein Photo.

lg
Alex

Philipp83
21.02.2006, 18:51
Nochmals vielen Dank für eure rasche Hilfe !

Woran es jetzt genau gelegen hat kann ich nicht mit genauigkeit sagen,
aber nach einem neuaufbau und einer neuprogrammierung geht jetzt alles
und die ersten Worte stehen auf dem Lcd :D

Aber wenn ich mir das jetzt hier so ansehe, finde ich keine wirkliche
änderung des janzen. Auch das Programm welches ich neu geschrieben habe,
sieht nicht gravierend anders aus. Naja soll mir ja jetzt auch egal sein :-)

Na dann noch einen schönen Abend euch allen!!!!!!!

mfg, Philipp

AlexAtRobo
21.02.2006, 20:07
na wer sagts den. Gratuliere dass es jetzt klappt. Ist mir auch schon mal passiert, dass ein komplett neuer Anlauf was gebracht hat. Auch wenn alles "gleich" ist ;-).
Viel Spaß noch - nun spricht er zu dir

lg

Ale

Bernd-x
02.03.2006, 23:22
Falls es noch von Interesse sein sollte:

Das Datenblatt zum LC-Display HYUNDAI HB16102 (BestNR. 120 333 bei Pollin) gibt es hier:

http://www.pollin.de/shop/downloads/D120333D.PDF