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

[mega16]Klawiatura matrycowa 8x8 na jednym porcie (oszczednie)

misiu_mietowy 06 Lut 2012 21:29 2921 18
  • #1 10506240
    misiu_mietowy
    Poziom 16  
    Prosze o sprawdzenie schematu.

    Chce wykrywac nacisniecia klawiszy klawiatury od C64. Klawiatura jest 8x8, zatem potrebuje 16 pinow na schemacie oznaczonych jako KB_CON1 do KB_CON4. Na KB_CON1 i KB_CON3 bede wystawial jedynki i potem odczytywal piny z KB_CON2 i KB_CON4. CON4 i CON1 sa podpiete do tych samych pinow i wybor aktywnego zlacza klawiatury odbywa sie za pomoca pinow PC0 i PC1. Analogicznie jest z CON2 i CON3 - wybor jest za pomoca PC2 i PC3. Czy moge robic zapis do matrycy klawiatury i odczyt z niej w taki sposob, co np. 10 ms?
  • #2 10506334
    SylwekK
    Poziom 32  
    Myślę, że spokojnie zrobisz odczyt nawet dużo szybciej.
    Sie uczepie - dwa dodatkowe piny to już więcej niż jeden port :) ... ale pomysł i tak bardzo ciekawy. Ciekawe jak się to w praktyce sprawdzi?
  • #3 10506658
    misiu_mietowy
    Poziom 16  
    SylwekK napisał:
    Myślę, że spokojnie zrobisz odczyt nawet dużo szybciej.
    Sie uczepie - dwa dodatkowe piny to już więcej niż jeden port :) ... ale pomysł i tak bardzo ciekawy. Ciekawe jak się to w praktyce sprawdzi?

    Nawet 4 dodatkowe. 10 ms potrzebne jest do debouncingu. Zalezy mi, zeby ktos ostatecznie przyklepal moj pomysl, bo chce od razu trawic plytke, bez uzywania jakis uniwersalnych czy stykowych :)
  • #4 10507538
    SylwekK
    Poziom 32  
    Debounce możesz zrobić na przeskoku wtedy pętla główna nawet nie odczuje żadnego opóźnienia. Po prostu w momencie wykrycia jakiegoś wcisku ustawiasz licznik na żądany czas debounce (najlepiej taki programowy w przerwaniu), po czym robisz kolejne badanie po wyzerowaniu się tego licznika i sprawdzasz czy nadal jest ta sama wartość. Jakakolwiek zmiana stanu guzika podczas odliczania powinna powodować permanentne ustawianie tego licznika na ponowne odliczanie (debounce) od początku. Stosuje takie rozwiązanie w niektórych aplikacjach gdzie wymagane jest naprawdę skuteczne "odszumienie" guzików z zachowaniem pełnej prędkości pętli.
  • #6 10507786
    gaskoin
    Poziom 38  
    Przy dużej liczbie przycisków mogą się pojawiać błędy, ale pomysł maciasa jest lepszy bo mniej elementów :)

    Można też użyć ekspanderów na i2c - wtedy na 2 pinach możesz mieć przycisków miliony.
  • #7 10507797
    misiu_mietowy
    Poziom 16  
    @sylw_ek
    Moze i Twoje rozwiazanie jest lepsze, ale mam juz sprawdzone odczytywanie klawiszy na przerwaniu timera ISR(TIMER2_OVF_vect) :). Najpierw musze sie uporac z ta klawiatura,a potem moze bede kombinowal z innymi formami debouncingu.
    Podstawowa kwestia to czy schemat jest poprawny. Czy klucze tranzystorowe sa zrobione dobrze?

    @reszta :)
    hmm... to rozwiazanie z matryca i przetwornikiem A/D podoba mi sie.
  • #8 10507825
    gaskoin
    Poziom 38  
    Rozwiązanie na ADC nie wyklucza użycia przerwania.
  • #9 10507860
    misiu_mietowy
    Poziom 16  
    gaskoin napisał:
    Rozwiązanie na ADC nie wyklucza użycia przerwania.
    Tak, tak. Moja odpowiedz byla dla Sylwka, zanim ja wyslalem wy dodaliscie swoje, wiec wyniklo male nieporozumienie. Poprawilem swoj post:)

    Dodano po 16 [minuty]:

    gaskoin napisał:
    Przy dużej liczbie przycisków mogą się pojawiać błędy, ale pomysł maciasa jest lepszy bo mniej elementów :)

    Można też użyć ekspanderów na i2c - wtedy na 2 pinach możesz mieć przycisków miliony.

    OK, ale schemat od Maciasa dla 64 klawiszy powinien wystarczyc. Chcialbym jeszcze do tej atmegi podlaczyc termometr, wiec bede musial tranzystorami "zdublowac" port przetwornika.
  • #10 10508884
    Konto nie istnieje
    Konto nie istnieje  
  • #11 10509160
    gaskoin
    Poziom 38  
    misiu miętowy - pisałem ogólnie, zgodzę się, że dla 64 będzie ok. Dla 5000 już by nie było :)

    A nic nie musisz dublować, ponieważ przetwornik ma kilka kanałów, Atmega16 ma chyba 6, ale mogę się mylić, co jednak nie ma znaczenia skoro potrzebujesz tylko 2.
    Od biedy mógłbyś zastosować jakiś mux ale nie widzę potrzeby.
  • #12 10514926
    misiu_mietowy
    Poziom 16  
    Uwzgledniajac uwagi "Smoka" i "Pingwina" :) zmodyfikowalem schemat. Prosze o rzut okiem.
    Dziwic moga wartosci rezystorow do odczytu klawiatury. W schemacie sa tylko te, ktore aktualnie mam. Kierowalem sie tez zasada: Lepsze 2 SMDeki niz 1 THTek, wiec niekiedy wystepuja 2 polaczone szeregowo.
    Mniej wiecej w srodku schematu jest LM35, ktory wyglada jak LM317 :D , ale to tylko taka zmyla, bo moj Eagle nie ma LM35
  • #13 10515564
    Konto nie istnieje
    Konto nie istnieje  
  • #14 10515839
    misiu_mietowy
    Poziom 16  
    Cytat:
    Poza tym nie bardzo rozumiem co zrobiłeś na schemacie bo w tym linku co podałem jest trochę inaczej ;)

    No jak to inaczej? :)
    [mega16]Klawiatura matrycowa 8x8 na jednym porcie (oszczednie)
  • #15 10516750
    Konto nie istnieje
    Konto nie istnieje  
  • #16 10517596
    misiu_mietowy
    Poziom 16  
    Cytat:
    Przypadkowe wartości rezystancji mogą spowodować lekkie rozjechanie się wyników pomiarów, ale nie chce mi się dzisiaj dokładnie w to wnikać.

    Chyba nie trzeba - zrobilem obliczenia napiec jakie daja nacisniecia klawiszy. Wyniki w zalaczniku
  • #17 10518189
    Konto nie istnieje
    Konto nie istnieje  
  • #18 10521995
    Urgon
    Poziom 38  
    AVE...

    Ja mam takie pytanie: dlaczego nie użyć albo rejestrów przesuwnych, albo czemu nie wziąć jakiegoś taniego mikroklocka z dużą ilością pinów, albo mniejszego i rejestrów by zrobić uniwersalny sterownik klawiatury matrycowej? Oddzielny układ mógłby sam załatwiać skanowanie klawiszy i debouncing, i mógłby generować przerwania dla układu głównego...
  • #19 10534103
    misiu_mietowy
    Poziom 16  
    Urgon napisał:
    AVE...

    Ja mam takie pytanie: dlaczego nie użyć albo rejestrów przesuwnych, albo czemu nie wziąć jakiegoś taniego mikroklocka z dużą ilością pinów, albo mniejszego i rejestrów by zrobić uniwersalny sterownik klawiatury matrycowej?
    Koszt + przede wszystkim, miejsce. Juz wolałbym się bawić potencjometrami. Chyba zrobię tak: podzielę matrycę w pionie na 4 części po (2wiersze * 8 kolumn) każda i wykorzystam 4 piny do konwersji A/D (akurat tyle moge wykorzystac w PORCIEA). Do wierszy podlacze oporki 11,1k 1% i 3,21k 5%, bo takie mam:), a do kolumn 6 oprnikow 20% oraz 2 wspomniane 11,1k i 3,21k - oblicze sobie wartosci w arkuszu kalkul. W ten sposob uzyskam wieksze "marginesy" na roznice miedzy odczytami.
REKLAMA