AVR , LCD 44780 bit zajętości problem (długie)

Witam Mam problem z odczytem bitu zajętności w wyswietlaczu na sterowniku HD44780. Gdy nie kożystam z tej funkcji (odpowiednie czasy opiznien) to wsyztsko dziala... ale chyba za wolno. Podczas pisania na ekranie widac ze literki pojawiaja sie z lewej do prawej, a nie ze pojawiaja sie jednoczesnie na ekranie. Stosuje opoznienie 1 ms przed zapisem kolejnej litery do pamieci ram wyswietlacza. Wiem ze to duzo, ale reszte programu mam dopasowana wlasnie do tego czasu, wiec chyba sprawdzanie bitu zajetosci bylo by dobrym rozwiazaniem.

A obie to tak (dla avar)

(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 dziala. Na lini DB7 po wykonaniu "chyba" instrukcji (7) mam caly 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

Reply to
raF
Loading thread data ...

Użytkownik "raF" snipped-for-privacy@poczta.onet.pl> napisał w wiadomości news: snipped-for-privacy@newsgate.onet.pl...

Co ma robić cbic? Do zerowania bitu jest cbi, do ustawiania sbi, do przeskoku warunkowego sbic. Dlatego nie rozumiem instrukcji (1)-(4) i właśnie (7) oraz (8).

Reply to
Bogdan Gutknecht

Poprawiony kod (pisałem go z pamięci i sie wkradły błędy)

(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)

Reply to
jurij

Ok, juz teoretycznie znalazlem błąd (a właściwie ktoś mi w tym pomógł). Nie zatrzaskuje tej komendy (RS=0, RW=1) sygnałem E.

Reply to
jurij

Użytkownik snipped-for-privacy@poczta.onet.pl napisał:

Daj znac czy po poprawce dziala. Kiedys chcialem tego lcd sterowac "czysto" i szybko, nie wyszlo, za pierwszym sprawdzeniem flagi gotowosci mialem gotowosc i kasze na wyswietlaczu, odpuscilem i zrobilem stale czasy, ale nie takie koszmarne jak u Ciebie :) tylko tyle ile HD wymagal :)

Reply to
AlexY

Witam Niestety porażka. Nie potrafie sprawdzić tego bitu zajętości. Wprowadzilem pustą pętlę trwającą ok 100 cykli zegarowych przy kwarcu 11059200Hz i działa. Chyba sobie ten bit zajętości podaruje. Przy 80 cyklach gubiły mi sie niektóre znaki na wyświetlaczu, przy 90 było już OK, wiec dla zapasu dałem 100.

Reply to
jurijWYTNIJTO

Witam Niestety porażka. Nie potrafie sprawdzić tego bitu zajętości. Wprowadzilem pustą pętlę trwającą ok 100 cykli zegarowych przy kwarcu 11059200Hz i działa. Chyba sobie ten bit zajętości podaruje. Przy 80 cyklach gubiły mi sie niektóre znaki na wyświetlaczu, przy 90 było już OK, wiec dla zapasu dałem 100.

Reply to
jurij

Użytkownik snipped-for-privacy@poczta.onet.pl napisał:

zainteresuj sie

formatting link
jest tam tabela nr.6 w ktorej podane sa czasy wykonywania poszczegolnych operacji, pomoze Ci to zoptymalizowac szybkosc

Reply to
AlexY

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.