PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : LCD Ansteuerungs Problem



philiph
18.02.2008, 18:21
Also ich habe ein LCD mit 2x16 Zeichen und HD44780 Controller mit Bascom gehts einwandfrei nur würde ich das gerne in Assembler schreiben (kommen noch andere Sachen und Bascom macht zugroßen Code) jedenfalls habe ich mir so aus dem Internet und dem HD... ´Datenblatt Sachen zusammengesucht und wollte mir jetzt was zur ansteuerung schreiben doch wenn ich portinit und danach lcdinit ausführe bleibt das Display leer stimmen meine Befehle überhaupt so? oder ist in einer der Hilfsroutinen ein Fehler irgendwie glaube ich ich sehe das Byte vor lauter Bits nicht mehr...



.equ DPort=Portb
.equ D4=4
.equ D5=3
.equ D6=2
.equ D7=1
.equ lcdpin=pinb
.equ eport=porta
.equ rsport=portd
.equ rwport=portd
.equ ddrlcd=DDRB
.equ ddre=DDRa
.equ ddrrw=DDRa
.equ RW=1
.equ ddrRS=DDRD
.equ E=0
.equ RS=3
.org 0x170

portinit:
sbi ddrlcd,d4
sbi ddrlcd,d5
sbi ddrlcd,d6
sbi ddrlcd,d7
sbi ddrrs,rs
sbi ddre,e
sbi ddrrw,RW
ret
dataout:
rcall lcdbusy
cbi rwport,rw
nop
swap r16
sbrc r16,0
sbi dport,d4
sbrs r16,0
cbi dport,d4
sbrc r16,1
sbi dport,d5
sbrs r16,1
cbi dport,d5
sbrc r16,2
sbi dport,d6
sbrs r16,2
cbi dport,d6
sbrc r16,3
sbi dport,d7
sbrs r16,3
cbi dport,d7
rcall lcd_enable
ret
lcdinit:
cbi rsport,rs
ldi r16,0b00110000 ;init
rcall dataout
swap r16
rcall dataout
rcall lcdwait
ldi r16,0b00110000 ;init
rcall dataout
swap r16
rcall dataout
rcall lcdwait
ldi r16,0b00110000 ;init
rcall dataout
swap r16
rcall dataout
rcall lcdbusy
ldi r16,0b00101000 ;4bit;2 Zeilen;standart font
rcall dataout
swap r16
rcall dataout
rcall lcdbusy
ldi r16,0b00001111 ;LCD an;Cursor Blinken;Cursor ON
rcall dataout
swap r16
rcall dataout
rcall lcdbusy
ldi r16,0b00000110 ;set Entry Mode
rcall dataout
swap r16
rcall dataout
rcall lcdbusy
ldi r16,0b00000001 ;clear Display
rcall dataout
swap r16
rcall dataout
rcall lcdbusy
ldi r16,0b00000010 ; return Home
rcall dataout
swap r16
rcall dataout
rcall lcdbusy
sbi rsport,rs
ldi r16,'A' ; A anzeigen
rcall dataout
swap r16
rcall dataout
rcall lcdbusy
ret
lcd_enable:
sbi eport, e
nop
nop
nop
nop
nop
cbi eport, e
ret
lcdbusy:
cbi rsport,rs
sbi rwport,rw
cbi ddrlcd,d7
sbic lcdpin,d7
rjmp lcdbusy
sbi ddrlcd,d7
ret
lcdwait: ;wait routine wenn busy abfrage nicht möglich
ldi ZH,high(65535)
ldi ZL,low(65535)
rcall wait
ldi ZH,high(5535)
ldi ZL,low(5535)
rcall wait
ret
wait:
nop
nop
sbiw ZL,1
brne wait
ret

pacer_one
16.03.2008, 14:20
wollte mal fragen, ob dein Problem noch immer aktuell ist?
Wenn ja, wie ist dein Display angeschlossen?
Ausserdem solltest du mal deinen Code dokumentieren,dann findet man sich auch später noch schnell zurecht.