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

Dec 02, 2005 7 Replies

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


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

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)

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.

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

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.

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.

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

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required