Jak można połączyć 16 przycisków za pomocą tylko 8 przewodów?


9

Oto produkt. Rozumiem pomysł: te 16 przycisków używa matrycy 4x4. 4 linie dla wierszy, 4 linie dla kolumn, a mamy 8 kabli.

wprowadź opis zdjęcia tutaj

Ale:

  1. Jak to działa bez jakiegokolwiek multipleksera?

  2. Czy to może dokładnie wykryć naciśnięcia wielu przycisków? Nawet jeśli przyciski używają tego samego wiersza lub tej samej kolumny? Przykład: przyciski w pozycji (2,2) (2,3), (3,2) i (3,3) naciśnięte jednocześnie.

  3. Jak to działa?


7
Jest to powszechna wiedza, którą można znaleźć przy wyszukiwaniu w Google „multipleksowania klawiatury” lub podobnego. Czy nie próbowałeś tego wcześniej, zanim to opublikowałeś?
TonyM,

3
@TonyM Oczywiście, że tak, wiele wyszukiwań, a nawet zamówiłem kilka układów multipleksera 74HC164, które dotarły do ​​domu kilka dni temu. Miałem zamiar podłączyć wszystko tym układem multipleksera, kiedy to znalazłem. Potem zastanawiałem się „jak to może działać bez jakiegokolwiek multipleksera”?
Basj

1
Urządzenie po lewej musi mieć wewnątrz kod multipleksowania
Marcelo Espinoza Vargas

3
@TonyM Dzięki za wskazanie mi tego. Czy możesz połączyć plik PDF zamiast robić tajemnicę;)? Może szukałem innych słów kluczowych niż klawiatura itp. I prawdopodobnie nie znalazłem tego samego.
Basj

1
@Basj: posiadanie wielu pras nie stanowi problemu. Skanujesz wszystkie cztery linie jedna po drugiej. Jeśli przycisk zostanie znaleziony wciśnięty w linii 1, zanotuj go. Jeśli chodzi o linię 3, znajduje się tam wciśnięty inny przycisk, też go zauważasz. W końcu dostajesz oba przyciski. Tak długo, jak możesz skanować znacznie szybciej niż ludzie mogą naciskać przyciski, nie przegapisz tego.
Gábor

Odpowiedzi:


24
Jak to działa bez jakiegokolwiek multipleksera?

Tak nie jest. Wygląda na to, że tablica klawiszy ma tylko przełączniki, a być może niektóre diody nie są widoczne. Jednak lewa płyta wygląda tak, jakby miała na sobie procesor. Niemal na pewno multipleksowanie odbywa się w oprogramowaniu układowym.

Algorytm multipleksowania działa mniej więcej tak:

  1. Jedź jeden rząd wysoko, a pozostałe nisko.

  2. Włącz pasywne menu rozwijane w wierszach kolumn.

  3. Zobacz, które linie kolumn są wysokie. Naciśnięto przyciski na przecięciach tych linii kolumny z jedną potwierdzoną linią wiersza. Inne przyciski w tym wierszu są zwolnione.

  4. Powtórz z powrotem do kroku pierwszego, zapewniając kolejny rząd w kolejności.

Powyższy proces powtarza się na tyle szybko, że wszystkie przyciski są sprawdzane w czasie, który nadal wydaje się natychmiastowy dla ludzkiego obserwatora. Ludzki limit „chwilowej” w tym kontekście wynosi około 50 ms. Nawet mikrokontroler z niższej półki może zeskanować klawiaturę 4x4 w znacznie krótszym czasie.

Czy to może dokładnie wykryć naciśnięcia wielu przycisków?

Prawdopodobnie tak. Jednym ze sposobów jest połączenie szeregowe diody z każdym przyciskiem. Mogą znajdować się na dolnej stronie planszy, którą pokazujesz. W przypadku diod powyższy algorytm po prostu działa.

Innym sposobem jest szeregowanie rezystorów z liniami i mierzenie ich napięcia analogowego. Nawet jeśli wiele przycisków powoduje zwarcie wielu wierszy / kolumn razem, możesz ostatecznie dowiedzieć się, które przyciski są naciskane. Wymaga to wejść A / D w mikro, a nie tylko wejść cyfrowych, jak w przypadku używania diod.


1
Dzięki. A co z wieloma prasami jednocześnie? Uwaga: lewa tablica to RaspberryPi.
Basj,

1
@Hayman dlaczego tak jest? Czy możesz podać przykład? Dlaczego naciśnięcie (1,2), (2,2) i (3,3) jest jednocześnie problemem, gdy nie ma diody? Może miałbyś małe schematy? Ponieważ ten punkt jest naprawdę kluczowy, może warto poświęcić dedykowaną odpowiedź @Hayman?
Basj

8
+1 za „lewa tablica wygląda na procesor”. Bardzo mi się podobało.
Enric Blanco,

3
@Basj to oczywiste, że się z tym bawisz. Za każdym razem, gdy naciskasz przycisk, łączysz wiersz z kolumną. Ilekroć rząd i kolumna są połączone, klawisz na skrzyżowaniu rejestruje się jako naciśnięty. Ale jeśli naciśnięte zostaną co najmniej 3 klawisze, wiersz i kolumna mogą być połączone pośrednio .
hobbs

2
@Basj Spójrz na to zdjęcie . Czerwone linie wskazują wysoki poziom logiki. Jeśli przytrzymasz 3 przyciski oznaczone „x”, możesz je prześledzić i zobaczyć ścieżkę, w której popłynie sygnał. Najpierw wybiera się rząd 1 i ustawia go wysoko, naciskając przycisk 1,1, powoduje to, że pierwsza kolumna jest wysoka. Naciskając przycisk 1,2, ustawiliśmy teraz wysoki wiersz 2. Teraz, jeśli naciśniemy jakikolwiek inny przycisk w rzędzie 2, zrobimy kolejną kolumnę wysoko. Problem polega na tym, że μC jest głupi, wie, że ustawił wysoki wiersz 1 i widzi wysoki w kolumnie 3, dlatego uważa, że ​​przycisk 1,3 jest wysoki
Doodle

9

Bez diod ... dostaniesz fantomowe prostokąty.

Na przykład w twoim przykładzie (2,2) (2,3), (3,2) i (3,3); wybrałeś ironiczny przykład, wybierając prostokąt. Jeśli faktycznie naciśniesz wszystkie cztery, zadziała. Ale jeśli naciśniesz dowolne trzy rogi prostokąta, czwarty róg również będzie wyglądał na wciśnięty, nawet jeśli tak nie jest.

Ta klawiatura jest wyraźnie przeznaczona do wprowadzania danych z klawiatury, gdzie konwencja użytkownika to jedno naciśnięcie klawisza na raz. Zauważ, że na klawiaturze karty kredytowej stacji benzynowej nie ma żadnych klawiszy „Shift”.

Jeśli jednak ustawisz S1 na klawisz Shift, a S3 na Alt-Shift, tak że użytkownicy mogą rozsądnie przytrzymać oba, jednocześnie naciskając S13, wtedy S15 również wydaje się być wciśnięty.


1
Rzeczywiście, większość klawiatur do wprowadzania danych nie ma mieć wciśniętych więcej niż 2 klawiszy jednocześnie, więc nie ma problemu. Klawiatury muzyczne to inna historia, ponieważ wiele klawiszy może być naciskanych jednocześnie. Większość z nich ma diody lub niezależne okablowanie do każdego klucza. Ale znalazłem jedną klawiaturę muzyczną w sklepie z odzieżą używaną (w cenie 9 euro), która nie miała odpowiedniej adaptacji do naciskania wielu klawiszy jednocześnie, z nieprzewidywalnymi i irytującymi rezultatami!
Level River St

Stacyjki mogą być typu z wbudowaną diodą lub ukryte pod nimi diody.
rackandboneman

1

Oto jak to zrobić bez ciągłego skanowania:

  • Ustaw wszystkie sterowniki na wysokie
  • Włącz pasywne menu rozwijane na liniach odbiorczych
  • Ustaw przerwanie zmiany pinów, aby wykryć jedną z linii przechodzących wysoko (lub zmieniających poziom)
  • Gdy tak się stanie, włącz skanowanie klawiatury, powiedz co 10 ms
  • Skanuj normalnie i przetwarzaj naciśnięcia klawiszy
  • Po przekroczeniu limitu czasu bez zdarzeń zatrzymaj skanowanie i uruchom ponownie od pierwszego punktu

0

Zrobiłem to z asemblerem na gołych mikrokontrolerach AVR Atmel.
Dla uproszczenia: Wiersze klawiatury: użyj pinów Arduino 4,5,6 i 7 (piny AVR PD4, PD5, PD6 i PD7) Kolumny klawiatury: użyj pinów Arduino 8, 9, 10 i 11 (piny AVR PB0, PB1, PB2 i PB3 ) Ustaw wejścia pinów Row z włączonymi podciągnięciami. Zrób szpilki kolumny Wyjściowe i wyjściowe zera do nich. Włącz przerwania zmiany pinów na wszystkich pinach wierszy i kolumn. http://playground.arduino.cc/Main/PinChangeInterrupt Naciśnięcie przycisku na klawiaturze spowoduje pociągnięcie szpilki Row w dół. Procedura przerwania musi odczytać styki rzędu i ustalić, który styk jest niski. Górne 4 bity powinny wynosić trzy i jeden zero. Jeśli używasz 8-bitowej zmiennej uint8_t, możesz podzielić ją przez 16 lub (var >> 4), aby umieścić 4 bity w dolnych bitach liczby. Możesz użyć bitowego LUB | operacja z 240, aby ustawić górne 4 bity na 1s, a bitowa NIE ~ operacja, aby odwrócić wszystkie bity, więc masz tylko jeden zestaw bitów reprezentujący wiersz, w którym naciśnięto przycisk. Zapisz ten numer jako 0, 1, 2 lub 3.
Przełącz konfigurację pinów:
Ustaw wejścia szpilek kolumny z włączonymi podciągnięciami. Twórz piny wierszy Wyjściowe i wyjściowe z nich. Przeczytaj styki kolumn i znajdź, który styk jest niski. Wykonaj podobną manipulację przy użyciu tej wartości, ale nie musisz przesuwać liczby w prawo. Po var ^ 240 i ^ var masz jeden bit reprezentujący kolumnę, w której naciśnięto klawisz. Pamiętaj o wyłączeniu przerwań przed ponowną konfiguracją portów, ponieważ prawdopodobnie spowoduje to niepożądane przerwania. Być może będziesz musiał wyczyścić flagi przerwania przy opuszczaniu procedury przerwania, aby zapobiec zduplikowanej obsłudze przerwań.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.