Witam,
Próbuje napisać sobie obsługę do wyświetlacza lcd w asemblerze na atmega8.
I mam pewne problemy oraz pytania, otóż...
Napisałem takie(kod poniżej) procedury służące do zapisu bajtu ustawień do wyświetlacza i problem jest w tym że, to nie działa... choć nie mam pojęcia dlaczego...
Podaje takie ustawienia:
W programie głównym nie mam nic ale, po takich ustawieniach powinienem mieć migający kursor na wyświetlaczu a nic takiego się nie dzieje.
Zastanawiam się jak to jest z resetowaniem się takiego wyświetlacza, i jeśli podaje na początku ustawienia które mają sprawić że będzie tryb 4-bitowy to czy mogę ten bajt ustawień podać już w trybie 4-bitowym czy na początek muszę w 8 bitowym.
Dziękuje z góry za wszystkie rady;)
Pozdrawiam.
Poprawiłem tytuł.
[zumek]
Próbuje napisać sobie obsługę do wyświetlacza lcd w asemblerze na atmega8.
I mam pewne problemy oraz pytania, otóż...
Napisałem takie(kod poniżej) procedury służące do zapisu bajtu ustawień do wyświetlacza i problem jest w tym że, to nie działa... choć nie mam pojęcia dlaczego...
;**********************function_lcd*************************************
;lcd_write_byte - zapisuje bajt w pamieci wyswietlacza
; r16 - parametr wejsciowy
;lcd_write_setting - zapisuje ustawienia lcd
; r16 - parametr wejsciowy
lcd_write_byte:
nop
nop
sbi LCD_PORT, LCD_EN
nop
cbi LCD_PORT, lcd_d7
cbi LCD_PORT, lcd_d6
cbi LCD_PORT, lcd_d5
cbi LCD_PORT, lcd_d4
sbrc r16, 7
sbi LCD_PORT, lcd_d7
sbrc r16, 6
sbi LCD_PORT, lcd_d6
sbrc r16, 5
sbi LCD_PORT, lcd_d5
sbrc r16, 4
sbi LCD_PORT, lcd_d4
nop
cbi LCD_PORT, LCD_EN
ldi r16, 5
rcall wait_us
sbi LCD_PORT, LCD_EN
nop
cbi LCD_PORT, lcd_d7
cbi LCD_PORT, lcd_d6
cbi LCD_PORT, lcd_d5
cbi LCD_PORT, lcd_d4
sbrc r16, 3
sbi LCD_PORT, lcd_d7
sbrc r16, 2
sbi LCD_PORT, lcd_d6
sbrc r16, 1
sbi LCD_PORT, lcd_d5
sbrc r16, 0
sbi LCD_PORT, lcd_d4
nop
cbi LCD_PORT, LCD_EN
ldi r16, 50
rcall wait_us
ret
lcd_write_setting:
cbi LCD_PORT, LCD_RS
rcall lcd_write_byte
sbi LCD_PORT, LCD_RS
ret
Podaje takie ustawienia:
ldi r16, 15
rcall wait_ms
ldi r16, 0b00100000 ;tryb 4-bitowy
rcall lcd_write_setting
ldi r16, 1
rcall wait_ms
ldi r16, 2
rcall wait_ms
ldi r16, 0b00001111 ;wl wyswietlacz, wl kursor, wl miganie kursora
rcall lcd_write_setting
ldi r16, 1
rcall wait_ms
ldi r16, 0b00000010
rcall lcd_write_setting
ldi r16, 5
rcall wait_ms
ldi r16, 0b00000001
rcall lcd_write_setting
ldi r16, 5
rcall wait_ms
W programie głównym nie mam nic ale, po takich ustawieniach powinienem mieć migający kursor na wyświetlaczu a nic takiego się nie dzieje.
Zastanawiam się jak to jest z resetowaniem się takiego wyświetlacza, i jeśli podaje na początku ustawienia które mają sprawić że będzie tryb 4-bitowy to czy mogę ten bajt ustawień podać już w trybie 4-bitowym czy na początek muszę w 8 bitowym.
Dziękuje z góry za wszystkie rady;)
Pozdrawiam.
Poprawiłem tytuł.
[zumek]