Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Mikrokontroler + klawiatura PS/2

24 Maj 2006 17:31 993 4
  • Poziom 20  
    Witam!
    Ostro walcze z podlaczeniem klawiatury PS/2 pod ADuC845 (rdzen 8052). Probuje wykorzystac wejscie zewnetrznego przerwania INT0 tak, by za kazdym opadajacym zboczem clock`a odczytywac stan na pinie `data` z klawiatury. Otrzymany znak mialby byc wyswietlany na 8 diodach. Zamiast znaku otrzymuje jednak totalne bzdury. Postanowilem wiec zrobic drobny test i za kazdym przerwaniem inkrementowac pewna zmienna, potem ta zmienna wyswietlic na diodach - czyli swego rodzaju licznik opadajacych zboczy przebiegu. I tak zliczajac zbocza na linii clock otrzymalem ich 33 (!) zamiast spodziewanych 11, a na linii data, wciskajac powiedzmy zero na klawiaturze (30h) dostalem 5, zamiast spodziewanych 2. W czym tkwi problem? Przejrzalem dokumentacje, by upewnic sie, ze przerwanie jest aktywowane zboczem opadajacym. Zaobserwowalem calkowita powtarzalnosc wynikow, wiec wykluczam jakies zaklocenia. Sprawdzilem na 2 klawiaturach.. Zamieszczam kawalek kodu podprogramu obslugi przerwania:
    Code:

    void intr(void) interrupt 0 using 1
       {
       static unsigned char licznik = 0;
       ++licznik;
       P2=~licznik;
       }


    Z gory dziekuje za jakakolwiek pomoc!
    Darmowe szkolenie: Ethernet w przemyśle dziś i jutro. Zarejestruj się za darmo.
  • Pomocny post
    Poziom 22  
    Hmm, 33 to 3x11. 2x11 zrozumiałbym bez problemu bo jeden raz to wciśnięci e klawisza a drugi to jego zwolnienie. Trzeci (a w zasadzie drugi) to być może autorepeat ale teraz to zgaduję.
    Na koniec transmisji z klawiatury trzeba dokonać potwierdzenia na linii zegara. Być może jak tego nie robisz to klawiatura wysyła jeszcze raz.

    upanie
  • Pomocny post
    Poziom 21  
    nie napisałeś jak wywołujesz ten test. Jeżeli to jest dla naciśnięcia klawisza i puszczenia (takie stuknięcie) to dla większości klawiszy dostaniesz
    a) Make code - jeden znak - kod klawisza
    b) Break marker - jeden znak 0xF0
    c) Break code - jeden bajt - kod klawisza(ten sam co Make)

    dla klawiszy z repetycją: po naciśnięcu klawisza (i trzymamy wciśnięty) idą {Make code} klawisza i jeżeli puścisz to idzie Break marker i Break code (dwa bajty). Temat jest rozbudowany bo są grupu klawiszy które generują więcej na jedno naciśnięcie, mają/lub nie mają repetycję itd. Klawiaturę można do tego przełączyć w inny tryb (np. nr 3 ) gdzie zawsze są wysyłane tylko "scancode" klawiszy (ale jest to inne przypisanie niż w trybie dla komputerów AT) itak dalej.... temat rzeka. Google w dłoń.
  • Poziom 20  
    Przede wszystkim nie bylem swiadomy tego, ze klawiatura wysyla 3 bajty. Pokombinowalem troche, poprawilem kod bo byl w nim blad, zwiekszylem czestotliwosc zegara, bo byla za niska i udalo sie;-) Nie bylem tez swiadom tego, ze klawiatura nie wysyla w kodzie ASCII. Tak czy inaczej dziekuje za pomoc!

    P.S. Dla zablakanych w sieci:
    http://www.computer-engineering.org/ps2keyboard/