Malte schrieb:
> Die 2. logische Zeile ist defekt. Dreht man nach dem
> Einschalten den Kontrast nach oben, so sind auch nur die ersten 8
> schwarzen Kästchen zu sehen.
Also das ist auf jedenfall normal weil der LCD triber ja nicht weiß das
du die zweite zeile auch noch verwenden willst. meine LCD's machen das
auch immer so.
Hm..
mainloop:
rcall wait
ldi r16,'t'
rcall lcdData
ldi r16,'e'
rcall lcdData
ldi r16,'s'
rcall lcdData
ldi r16,'t'
rcall lcdData
rcall lcdLine2
ldi r16,'h'
rcall lcdData
ldi r16,'u'
rcall lcdData
ldi r16,'h'
rcall lcdData
ldi r16,'o'
rcall lcdData
ldi r16,'t'
rcall lcdData
ldi r16,'z'
rcall lcdData
rcall lcdHome
rjmp mainloop
;-----------------------------------------------------------------------
----
wait: push r24
ldi r24,0x13
w1: subi r24,0x01
rcall wait20ms
brcc w1
pop r24
ret
;-----------------------------------------------------------------------
----
wait5ms: ldi r16,255
ldi r17,26
w5ms: dec r16
brne w5ms
dec r17
brne w5ms
ret
;-----------------------------------------------------------------------
----
wait20ms: ldi r16,255
ldi r17,104
w20ms: dec r16
brne w20ms
dec r17
brne w20ms
ret
;-----------------------------------------------------------------------
----
lcdInit: sbi ioDDRD,2 ; LCD RS = OUT
sbi ioDDRD,3 ; LCD E = OUT
sbi ioDDRD,4 ; LCD D4 = OUT
sbi ioDDRD,5 ; LCD D5 = OUT
sbi ioDDRD,6 ; LCD D6 = OUT
sbi ioDDRD,7 ; LCD D7 = OUT
cbi ioPORTD,2 ; LDC RS = Low
ldi r18,20
powerUp: rcall wait5ms
dec r18
brne powerUp
ldi r16,0b00110000
out ioPORTD,r16
rcall lcdEnable
rcall wait5ms
ldi r16,0b00110000
out ioPORTD,r16
rcall lcdEnable
rcall wait5ms
ldi r18,100
resetLCD:
nop
nop
nop
dec r18
brne resetLCD
ldi r16,0b00110000
out ioPORTD,r16
rcall lcdEnable
rcall wait5ms
ldi r16,0b00100000
out ioPORTD,r16
rcall lcdEnable
rcall wait5ms
ldi r16,0b00101000
rcall lcdCmd
rcall lcdOff
rcall lcdClear
ldi r16,0x06
rcall lcdCmd
rcall lcdOn
ret
;-----------------------------------------------------------------------
----
lcdData: ldi r18,0b0000100
rjmp lcdOut
;-----------------------------------------------------------------------
----
lcdCmd: ldi r18,0b0000000
lcdOut: mov r17,r16
swap r17
andi r16,0b11110000
or r16,r18
andi r17,0b11110000
or r17,r18
out ioPORTD,r16
rcall lcdEnable
out ioPORTD,r17
rcall lcdEnable
rcall wait5ms
ret
;-----------------------------------------------------------------------
----
lcdEnable: sbi ioPORTD,3
nop
nop
nop
cbi ioPORTD,3
ret
;-----------------------------------------------------------------------
----
lcdClear: ldi r16,0b00000001
rcall lcdCmd
rcall wait5ms
ret
;-----------------------------------------------------------------------
----
lcdOff: ldi r16,0b00001000
rcall lcdCmd
rcall wait5ms
ret
;-----------------------------------------------------------------------
----
lcdOn: ldi r16,0x0E
rcall lcdCmd
rcall wait5ms
ret
;-----------------------------------------------------------------------
----
lcdHome: ldi r16,0b00000010
rcall lcdCmd
rcall wait5ms
ret
;-----------------------------------------------------------------------
----
lcdLine1: ldi r16,0b10000000
rcall lcdCmd
rcall wait5ms
ret
;-----------------------------------------------------------------------
----
lcdLine2: ldi r16,0b11000000
rcall lcdCmd
rcall wait5ms
ret
;-----------------------------------------------------------------------
----
lcdGoto: ori r16,0b10000000
rcall lcdCmd
rcall wait5ms
ret
;-----------------------------------------------------------------------
----
also dieser ASMc funzt auf jeden fall mit Line2