Klawiatura matrycowa z możliwością

Właśnie wlaczę z klawiaturą matrycową w której musi być umozliwione naciśnięcie jednego lub dwóch klawiszy. Narazie w celach testowych mam klawiaturę 4x4. Wszystko to jest podpięte bezpośrednio do portu A uC AVR Tiny26. Kolumny są liniami wyjściowymi, rzędy to linie wejściowe uC z włączonymi pull-upami. Algorytm wygląda tak: Ustawiamy pierwszą kolumnę w stan L, pozostałe w stan H. Rozpoczynamy skanowanie wierszy. Jeżeli natrafimy na stan L na wejściu to zapisujemy kod napotkanego klawisza do pamięci, wskaźnik komórki zwiększamy o 1 i szukamy dalej. Po skończeniu skanowania pierwszej kolumny ustawiamy ją w stan H, a drugą kolumnę w stan L. I rozpoczynamy całe skanowanie od początku. Algorytm działa dobrze, lecz ma jedną wadę. W przypadku gdy są naciśnięte dwa klawiasze w jednym rzędzie zaczyna głupieć. Najczęściej po prostu ich nie widzi :( Próbowałem znaleźć jakieś procedury obsługujące taką klawiaturę w zasobach sieci, ale niczego takiego nie stwierdziłem. Jedynie nota Atmela AVR243 coś tam wspomina o klawiaturze w której można wciskać kilka klawisz, lecz wszystko kończy się na informacji o tym że w pewnej sytuacji pojawia się "ghost key" i podowduje błędy. Żadnych konkretów :( Moze ktoś z grupowiczów stoczył kiedyś pomyślny pojedynek z obsługą takiej klawiatury i mógłby mnie poratować jakimś sprawdzonym algorytmem? Za wszelką pomoc z góry dziękuję...

Reply to
Mateusz Majchrzycki
Loading thread data ...

Zasadniczo wykrycie dowolnej kombinacji klawiszy umozliwia matryca, ktora ma do kazdego klawisza dolaczona szeregowo diode. Jednak normalnie problem pojawia sie dopiero przy trzech klawiszach. Podejrzewam ze klopoty moze powodowac sterowanie matrycy z wyjsc z aktywna jedynka. Przy open-collector nie powinno byc problemow. W opisanym ukladzie, jak nacisniesz dwa klawisze w jednym rzedzie robisz zwarcie stabow H i L.

Krzysiek Rudnik

Reply to
Krzysztof Rudnik

Ma tez druga wade: wcale nie dziala dobrze. :->

Po pierwsze: czy do linii i kolumn podlaczyles procesor bezposrednio, czy przez oporniki? Bo jesli to pierwsze, to moge sobie wyobrazic kombinacje klawiszy powodujaca eleganckie zwarcie... W przeciwnym razie moge podac kombinacje, ktora zadziala jak dzielnik wymuszajacy stan przeciwny do wykrywanego.

Poprawienie algorytmu:

"Ustawiamy pierwszą kolumnę w stan L, pozostałe w stan H"

zmien na

"Ustawiamy pierwszą kolumnę w stan L, pozostałe w stan wysokiej impedancji, tj. przelaczamy je na wejscia bez pull-upow."

reszta bez zmian. Teraz _musi_ dzialac.

Wybacz szczerosc, ale klasyfikuje to (tekst z noty Atmela, nie Twoja wypowiedz...) do kategorii "pitolenie". :-( Kiedys zrobilem sterownik takiej klawiatury wedlug wlasnego pomyslu -- do dzis dziala doskonale. Ale spadek jakosci not aplikacyjnych to chyba ogolne zjawisko -- kilka dni temu z pewnej noty udalo mi sie wyeliminowac jeden zupelnie niepotrzebny uklad dekodera adresow, wystarczylo tylko zmodyfikowac oprogramowanie...

Pozdrawiam Piotr Wyderski

Reply to
Piotr Wyderski

Pewnego dnia Piotr Wyderski snipped-for-privacy@ii.uni.wroc.pl>

nastukał(a):

No tego bym nie był tak na 100% pewien, bo wszystkie kombinacje klaiwszy mi działały (chyba że to był tylko czysty przypadek) z wyjątkiem tych paru problemowych :)

No właśnie były podłączone bezpośrednio :) Tak właśnie stwierdziłem że strasznie głupi byłem :) Człowiek robił zwarcia linii procesora nawet się nad tym nie zastanawiając, a później się dziwi że mu procesor do krainy wiecznego idle odchodzi :)

?? Można coś jaśniej, bo w tej chwili tak nie bardzo łapię z tym dzielnikiem :/

Myślałem o tym, ale doszedłem wtedy do wniosku że taka kombinacja może zostać odczytana jako stan L. Ale teraz po głębszym zastanowieniu... to moze nawet zadziałać :) Jak tylko będę miałm okazję to sprawdzę :)

Nie chyba lecz napewno. Sam Atmel ma całą stertę not, z których praktycznie nic nie wynika :(

Reply to
Mateusz Majchrzycki

Pewnego dnia Krzysztof Rudnik snipped-for-privacy@kki.net.pl> nastukał(a):

No ale przy matrycy 8x8 to już troszke tych diod jest :) A taka klawiatura (lub nieco mniejsza) w docelowym układzie będzie zastosowana.

Hmmm... to może być jakiś pomysł, który dodatkowo uprości mi część programową :) Dodam do listy eksperymentów :)

Reply to
Mateusz Majchrzycki

Chodzi mi o rezystorowy dzielnik napiecia. Gdybys mial rezystory szeregowo z liniami CPU (z czego niektore sa w stanie L, a inne H), to wciskajac odpowiednio klawisze moglbys ustawic stopien podzialu z bardzo szerokiego zakresu -- a CPU rozumie tylko dwa stany na wejsciach. Narysuj sobie taka matryce z pozwieranymi niektorymi klawiszami, slowami to trudno opisac, a na rysunku (+ odrobina zastanowienia) od razu zobaczysz.

A w jaki sposob, skoro na wejsciach masz pull-upy? :-)

To musi zadzialac, sprawdzone. Tylko sobie jeszcze programowy debouncing dorob, bo inaczej bedziesz mial niechciany autorepeat. :-)

Pozdrawiam Piotr Wyderski

Reply to
Piotr Wyderski

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.