Eric79
08.06.2005, 21:06
Hi @all,
Ich habe ein porblem mit einer LCD initialisierung.
Ich benutze ein 4*20 LCD Display (EADIP204-4 mit von Reichelt) mit KS0073 Controller, ATmega16 bei 1 MHz und das AVR Stundio.
und zwar habe ich mir die LCD routine von mikrocontoller.de geholt
und die funktionier soweit auch wunderbar.
nur hat es den schönheitsfehler, daß bei mir nur die erste und dritte zeile funktioniert. das der display controller von disem tutorial ein aderer ist wie meiner ist mit auch klar.
jetzt habe ich einfach versucht die initialisierungs routine umzumodeln.
So sieht sie orginal aus mit der die erste und dritte zeile funktionieren:
;Initialisierung: muss ganz am Anfang des Programms aufgerufen werden
lcd_init:
ldi temp3,50
powerupwait:
rcall delay5ms
dec temp3
brne powerupwait
ldi temp1, 0b00000011 ;muss 3mal hintereinander gesendet
out PORTD, temp1 ;werden zur Initialisierung
rcall lcd_enable ;1
rcall delay5ms
rcall lcd_enable ;2
rcall delay5ms
rcall lcd_enable ;und 3!
rcall delay5ms
ldi temp1, 0b00000010 ;4bit-Modus einstellen
out PORTD, temp1
rcall lcd_enable
rcall delay5ms
ldi temp1, 0b00101000 ;noch was einstellen...
rcall lcd_command
ldi temp1, 0b00001100 ;...nochwas...
rcall lcd_command
ldi temp1, 0b00000100 ;endlich fertig
rcall lcd_command
ret
laut datenblatt sollte die initialsierung für mein display so aussehen:
lcd_init:
ldi temp3,0x50
powerupwait:
rcall delay5ms
dec temp3
brne powerupwait
ldi temp1, 0b00100000 ; 4 bit Modus
out PORTD, temp1
rcall delay5ms
ldi temp1, 0b00100000 ; für was auch immer
rcall lcd_command
rcall delay5ms
ldi temp1, 0b10000000 ; für zweiline modus
rcall lcd_command ;( vier line modus seht im datenblatt
rcall delay5ms ; an dieser stelle nicht zur verfügung)
ldi temp1, 0b00000000 ;
rcall lcd_command ; für was auch immer
rcall delay5ms
ldi temp1, 0b11110000 ; Display on, curser on,
rcall lcd_command ; blink on
rcall delay5ms
ldi temp1, 0b00000000 ;>
rcall lcd_command ;>
rcall delay5ms ;>
ldi temp1, 0b00010000 ;> clear display
rcall lcd_command ;>
rcall delay5ms ;>
ldi temp1, 0b00000000 ; für was auch immer
rcall lcd_command ;
rcall delay5ms
ldi temp1, 0b01110000 ; increment mode &
rcall lcd_command ; entire shift on
rcall delay5ms
ldi temp1, 0b00000000 ; bis hier funktioniert auch
rcall lcd_command ; meine initialisierung
rcall delay5ms ;
ldi temp1, 0b00001001 ; laut datenblatt stell ich so
rcall lcd_command ; den 4 line modus ein.
rcall delay5ms ; ab hier bleibt dann das display ; dunkel! ](*,)
ret
Hat jemand eine idee woran das liegen könnte?
ich habe an dem display noch einen offenen reset pin mit dem ich nicht so
recht weiss was ich mit dem anfangen soll.
könnte es vielleich auch damit zusammen hängen.
danke schonmal im vorraus
Ich habe ein porblem mit einer LCD initialisierung.
Ich benutze ein 4*20 LCD Display (EADIP204-4 mit von Reichelt) mit KS0073 Controller, ATmega16 bei 1 MHz und das AVR Stundio.
und zwar habe ich mir die LCD routine von mikrocontoller.de geholt
und die funktionier soweit auch wunderbar.
nur hat es den schönheitsfehler, daß bei mir nur die erste und dritte zeile funktioniert. das der display controller von disem tutorial ein aderer ist wie meiner ist mit auch klar.
jetzt habe ich einfach versucht die initialisierungs routine umzumodeln.
So sieht sie orginal aus mit der die erste und dritte zeile funktionieren:
;Initialisierung: muss ganz am Anfang des Programms aufgerufen werden
lcd_init:
ldi temp3,50
powerupwait:
rcall delay5ms
dec temp3
brne powerupwait
ldi temp1, 0b00000011 ;muss 3mal hintereinander gesendet
out PORTD, temp1 ;werden zur Initialisierung
rcall lcd_enable ;1
rcall delay5ms
rcall lcd_enable ;2
rcall delay5ms
rcall lcd_enable ;und 3!
rcall delay5ms
ldi temp1, 0b00000010 ;4bit-Modus einstellen
out PORTD, temp1
rcall lcd_enable
rcall delay5ms
ldi temp1, 0b00101000 ;noch was einstellen...
rcall lcd_command
ldi temp1, 0b00001100 ;...nochwas...
rcall lcd_command
ldi temp1, 0b00000100 ;endlich fertig
rcall lcd_command
ret
laut datenblatt sollte die initialsierung für mein display so aussehen:
lcd_init:
ldi temp3,0x50
powerupwait:
rcall delay5ms
dec temp3
brne powerupwait
ldi temp1, 0b00100000 ; 4 bit Modus
out PORTD, temp1
rcall delay5ms
ldi temp1, 0b00100000 ; für was auch immer
rcall lcd_command
rcall delay5ms
ldi temp1, 0b10000000 ; für zweiline modus
rcall lcd_command ;( vier line modus seht im datenblatt
rcall delay5ms ; an dieser stelle nicht zur verfügung)
ldi temp1, 0b00000000 ;
rcall lcd_command ; für was auch immer
rcall delay5ms
ldi temp1, 0b11110000 ; Display on, curser on,
rcall lcd_command ; blink on
rcall delay5ms
ldi temp1, 0b00000000 ;>
rcall lcd_command ;>
rcall delay5ms ;>
ldi temp1, 0b00010000 ;> clear display
rcall lcd_command ;>
rcall delay5ms ;>
ldi temp1, 0b00000000 ; für was auch immer
rcall lcd_command ;
rcall delay5ms
ldi temp1, 0b01110000 ; increment mode &
rcall lcd_command ; entire shift on
rcall delay5ms
ldi temp1, 0b00000000 ; bis hier funktioniert auch
rcall lcd_command ; meine initialisierung
rcall delay5ms ;
ldi temp1, 0b00001001 ; laut datenblatt stell ich so
rcall lcd_command ; den 4 line modus ein.
rcall delay5ms ; ab hier bleibt dann das display ; dunkel! ](*,)
ret
Hat jemand eine idee woran das liegen könnte?
ich habe an dem display noch einen offenen reset pin mit dem ich nicht so
recht weiss was ich mit dem anfangen soll.
könnte es vielleich auch damit zusammen hängen.
danke schonmal im vorraus