Witam.
Wiem, że temat wygląda podobnie do wielu innych tematów, ale rady podane w tychże nie pomogły.
Mam płytkę, gdzie dane przesyłane są przez port A (D0...D7 - PA0...PA7) natomiast linie sterujące są podłączone do portu C (E-PC7,RW-PC6,RS-PC5).
Płytka jest sprawdzona omomierzem i wszędzie są przejścia.
Napisałem kod w AVRStudio4:
ldi r16,0xFF;ustawienie linii PA0-PA7 jako wyjście
out DDRA,r16
rcall ini_LCD
ldi r16,30
rcall zapisz_LCD
ety:
rjmp ety
ini_LCD:
push r16
push r17
cbi PORTC,6
cbi PORTC,5
cbi PORTC,7
rcall WAIT_15MS
rcall WAIT_15MS
rcall WAIT_15MS
ldi r16,0x30
rcall instrukcja_LCD
rcall WAIT_1MS
rcall WAIT_1MS
rcall WAIT_1MS
rcall WAIT_1MS
rcall WAIT_1MS
ldi r17,2
ini_LCD_1:
rcall instrukcja_LCD
rcall WAIT_100US
rcall WAIT_100US
dec r17
brne ini_LCD_1
ldi r16,0x01
rcall instrukcja_LCD
ldi r16,0x02
rcall instrukcja_LCD
ldi r16,0x06
rcall instrukcja_LCD
ldi r16,0x08
rcall instrukcja_LCD
ldi r16,0x38
rcall instrukcja_LCD
pop r17
pop r16
ret
instrukcja_LCD:
cbi PORTC,5
rcall zapisz_LCD
sbi PORTC,5
ret
zapisz_LCD:
sbi PORTC,7 ;linia EN na stanie wysokim
out PORTA,r16
cbi PORTC,7 ;linia EN w niskim - potwierdzenie
rcall WAIT_100US ;opóźnienie 100us
ret
Wydaje mi się, że o niczym nie zapomniałem a wyświetlacz zachowuje się jakby był przed inicjalizacją (czarny pierwszy wiersz).
Nawet wyłączyłem JTAGa bo jest wspólny dla portu C.
Takie same objawy dla dwóch ATmeg i dwóch wyświetlaczy.
Co jest nie tak?
Wiem, że temat wygląda podobnie do wielu innych tematów, ale rady podane w tychże nie pomogły.
Mam płytkę, gdzie dane przesyłane są przez port A (D0...D7 - PA0...PA7) natomiast linie sterujące są podłączone do portu C (E-PC7,RW-PC6,RS-PC5).
Płytka jest sprawdzona omomierzem i wszędzie są przejścia.
Napisałem kod w AVRStudio4:
ldi r16,0xFF;ustawienie linii PA0-PA7 jako wyjście
out DDRA,r16
rcall ini_LCD
ldi r16,30
rcall zapisz_LCD
ety:
rjmp ety
ini_LCD:
push r16
push r17
cbi PORTC,6
cbi PORTC,5
cbi PORTC,7
rcall WAIT_15MS
rcall WAIT_15MS
rcall WAIT_15MS
ldi r16,0x30
rcall instrukcja_LCD
rcall WAIT_1MS
rcall WAIT_1MS
rcall WAIT_1MS
rcall WAIT_1MS
rcall WAIT_1MS
ldi r17,2
ini_LCD_1:
rcall instrukcja_LCD
rcall WAIT_100US
rcall WAIT_100US
dec r17
brne ini_LCD_1
ldi r16,0x01
rcall instrukcja_LCD
ldi r16,0x02
rcall instrukcja_LCD
ldi r16,0x06
rcall instrukcja_LCD
ldi r16,0x08
rcall instrukcja_LCD
ldi r16,0x38
rcall instrukcja_LCD
pop r17
pop r16
ret
instrukcja_LCD:
cbi PORTC,5
rcall zapisz_LCD
sbi PORTC,5
ret
zapisz_LCD:
sbi PORTC,7 ;linia EN na stanie wysokim
out PORTA,r16
cbi PORTC,7 ;linia EN w niskim - potwierdzenie
rcall WAIT_100US ;opóźnienie 100us
ret
Wydaje mi się, że o niczym nie zapomniałem a wyświetlacz zachowuje się jakby był przed inicjalizacją (czarny pierwszy wiersz).
Nawet wyłączyłem JTAGa bo jest wspólny dla portu C.
Takie same objawy dla dwóch ATmeg i dwóch wyświetlaczy.
Co jest nie tak?