Witam
Mam problem z odczytem bitu zajętości w wyświetlaczu na sterowniku HD44780. Gdy nie korzystam z tej funkcji (odpowiednie czasy opóźnień) to wszystko działa... ale chyba za wolno. Podczas pisania na ekranie widać że literki pojawiają sie z lewej do prawej, a nie ze pojawiają się jednocześnie na ekranie. Stosuje opóźnienie 1 ms przed zapisem kolejnej litery do pamięci ram wyświetlacza. Wiem że to dużo, ale resztę programu mam dopasowaną własnie do tego czasu, wiec chyba sprawdzanie bitu zajętości było by dobrym rozwiązaniem. A robię to tak (dla avr'a)
(poprzednio port D w stan wyjsciowy ddrd=0b11111111)
cbic portd,4 ; zeruje linie DB4 wyswietlacza (1)
cbic portd,5 ; zeruje linie DB6 wyswietlacza (2)
cbic portd,6 ; zeruje linie DB6 wyswietlacza (3)
cbic portd,7 ; zeruje linie DB7 wyswietlacza (4)
nop
nop
nop
cbi ddrd,7 ; pin 7 podtu D jako wejscie (5)
sbi portd,7 ; wlaczenie rezystora podciagającego (6)
nop
nop
nop
cbic portd,rs ; pin RS wyswietlacza w stan niski (7)
sbic portd,rw ; pin RW w stan wysoki (8)
nop
nop
nop
wait1: sbic pind,7 ; (9)
rjmp wait1 ; (10)
nop
nop
wait2: sbic pind,7 ; (11)
jrmp wait2 ; (12)
Niestety to mi nie działa. Na linii DB7 po wykonaniu "chyba" instrukcji (7) mam cały czas stan wysoki. Jakim cudem???? P.S. To "chyba" dlatego ze wczoraj o 2 w nocy już mi sie literki przed oczami mieniły
Prosze o jakies sugestie
Dodano po 26 [minuty]:
Poprawa programu, bo sie w poprzednim błędy wkradły
(poprzednio port D w stan wyjsciowy ddrd=0b11111111)
cbi portd,4 ; zeruje linie DB4 wyswietlacza (1)
cbi portd,5 ; zeruje linie DB6 wyswietlacza (2)
cbi portd,6 ; zeruje linie DB6 wyswietlacza (3)
cbi portd,7 ; zeruje linie DB7 wyswietlacza (4)
nop
nop
nop
cbi ddrd,7 ; pin 7 podtu D jako wejscie (5)
sbi portd,7 ; wlaczenie rezystora podciagającego (6)
nop
nop
nop
cbi portd,rs ; pin RS wyswietlacza w stan niski (7)
sbi portd,rw ; pin RW w stan wysoki (8)
nop
nop
nop
wait1: sbic pind,7 ; (9)
rjmp wait1 ; (10)
nop
nop
wait2: sbic pind,7 ; (11)
jrmp wait2 ; (12)
Mam problem z odczytem bitu zajętości w wyświetlaczu na sterowniku HD44780. Gdy nie korzystam z tej funkcji (odpowiednie czasy opóźnień) to wszystko działa... ale chyba za wolno. Podczas pisania na ekranie widać że literki pojawiają sie z lewej do prawej, a nie ze pojawiają się jednocześnie na ekranie. Stosuje opóźnienie 1 ms przed zapisem kolejnej litery do pamięci ram wyświetlacza. Wiem że to dużo, ale resztę programu mam dopasowaną własnie do tego czasu, wiec chyba sprawdzanie bitu zajętości było by dobrym rozwiązaniem. A robię to tak (dla avr'a)
(poprzednio port D w stan wyjsciowy ddrd=0b11111111)
cbic portd,4 ; zeruje linie DB4 wyswietlacza (1)
cbic portd,5 ; zeruje linie DB6 wyswietlacza (2)
cbic portd,6 ; zeruje linie DB6 wyswietlacza (3)
cbic portd,7 ; zeruje linie DB7 wyswietlacza (4)
nop
nop
nop
cbi ddrd,7 ; pin 7 podtu D jako wejscie (5)
sbi portd,7 ; wlaczenie rezystora podciagającego (6)
nop
nop
nop
cbic portd,rs ; pin RS wyswietlacza w stan niski (7)
sbic portd,rw ; pin RW w stan wysoki (8)
nop
nop
nop
wait1: sbic pind,7 ; (9)
rjmp wait1 ; (10)
nop
nop
wait2: sbic pind,7 ; (11)
jrmp wait2 ; (12)
Niestety to mi nie działa. Na linii DB7 po wykonaniu "chyba" instrukcji (7) mam cały czas stan wysoki. Jakim cudem???? P.S. To "chyba" dlatego ze wczoraj o 2 w nocy już mi sie literki przed oczami mieniły
Prosze o jakies sugestie
Dodano po 26 [minuty]:
Poprawa programu, bo sie w poprzednim błędy wkradły
(poprzednio port D w stan wyjsciowy ddrd=0b11111111)
cbi portd,4 ; zeruje linie DB4 wyswietlacza (1)
cbi portd,5 ; zeruje linie DB6 wyswietlacza (2)
cbi portd,6 ; zeruje linie DB6 wyswietlacza (3)
cbi portd,7 ; zeruje linie DB7 wyswietlacza (4)
nop
nop
nop
cbi ddrd,7 ; pin 7 podtu D jako wejscie (5)
sbi portd,7 ; wlaczenie rezystora podciagającego (6)
nop
nop
nop
cbi portd,rs ; pin RS wyswietlacza w stan niski (7)
sbi portd,rw ; pin RW w stan wysoki (8)
nop
nop
nop
wait1: sbic pind,7 ; (9)
rjmp wait1 ; (10)
nop
nop
wait2: sbic pind,7 ; (11)
jrmp wait2 ; (12)