logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

AVR LCD 44780 - Jak odczytać bit zajętości na sterowniku HD44780?

shootky 02 Gru 2005 08:46 1517 2
REKLAMA
  • #1 2046009
    shootky
    Poziom 15  
    Posty: 131
    Pomógł: 11
    Ocena: 20
    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)
  • REKLAMA
  • #2 2046050
    Dexter77
    Poziom 28  
    Posty: 889
    Pomógł: 134
    Ocena: 19
    Mienily Ci sie i to ostro. Nie ma takiej instrukcji jak cbic, w linii 8 jezeli juz to powinno byc sbi a nie sbic,
    no i brak strobowania na linii E. Co z tego ze ustawiasz komendy jak jej nie wpisujesz impulsem na linii E.
    Pozdro
    Dexter
  • #3 2046069
    shootky
    Poziom 15  
    Posty: 131
    Pomógł: 11
    Ocena: 20
    Czy to oznacza ze instrukcje:
    cbi portd,rs ; pin RS wyswietlacza w stan niski (7)
      sbi portd,rw ; pin RW w stan wysoki (8)

    powinienem jeszcze "zatrzasnąć" kompletnym sygnałem E i wtedy dopiero oczekiwać aż DB7 będziew stanie niskim co by oznaczało że sterownik nie jest juz zajęty?

    Zajrzałem do pdf'a i już widze błąd :( W dokumentacji HD44780 http://www.eio.com/hd44780.pdf w kilku miejscach pisze o tym o czym wspomniałeś

    Dziekuje!
REKLAMA