Pytanie:
Sprzętowe odbijanie matrycy klawiszy przy minimalnej liczbie elementów pasywnych
DEKKER
2018-02-12 18:09:21 UTC
view on stackexchange narkive permalink

Niedawno kupiłem tę tanią matrycę klawiatury 4x4.Ma tylko przyciski i nic więcej, dlatego chcę do niego dodać odpowiednie wypustki.Chcę uniknąć debountingu w oprogramowaniu, ponieważ zabiera to trochę mocy obliczeniowej mojej aplikacji.

enter image description here

Wiem, że odbijanie można zrobić za pomocą rezystora i kondensatora (czy mam rację?) lub wyzwalacza schmit (który wymaga innego układu scalonego, jak sądzę i nie wchodzi w rachubę), więc pytanie brzmi, czy będę musiał dodać R/ C dla każdego klucza, czy mogę uciec tylko z jedną parą R / C na wiersz lub kolumnę?

Jakieś sugestie?

Rozumiem, że chcesz (w najgorszym przypadku) przylutować sam moduł, jeśli rozwiązanie multipleksowe nie jest możliwe?
@pipe tak, przylutuję rozwiązanie na dolnej stronie tej samej płytki za pomocą elementów SMD ... przynajmniej taki jest plan!
Odbijanie powinno działać nie tylko z nowymi klawiszami, ale także ze starymi klawiszami z kilkoma setkami lub tysiącami uderzeń.
Myślę, że powinieneś powrócić do kwestii usuwania oprogramowania.Istnieją techniki, które wykorzystują bardzo mało cykli.Dodanie rezystorów i / lub zaślepek do klawiatury skanującej może mieć nieprzewidywalne skutki.Jeśli nadal potrzebujesz pomocy, musisz podać nam więcej informacji, szybkość skanowania i wymagany minimalny czas naciśnięcia klawisza.
To jest problem XY.Wyjaśnij, dlaczego Twoim zdaniem odpytywanie przycisków jest zbyt intensywne.
Zgadzam się z DEKKEREM, że redukcja kodu poprzez dodanie komponentów sprzętowych jest zawsze dobrym pomysłem.IMO, nasadka 0,01 lub nawet 0,1 uF lub warystor przed rezystorem nie dadzą nieoczekiwanego wyniku.Ale trzeba to sprawdzić.
Skanowanie i usuwanie oprogramowania sprzętowego małej matrycy klawiszy powinno zająć mniej niż 1% szerokości pasma małej mikro pracującej z częstotliwością kilku MHz.Może to zwiększyć opóźnienie w najgorszym przypadku, jeśli procesor nie ma zagnieżdżonych przerwań priorytetowych.Dlatego praktycznie każde praktyczne zastosowanie takiej matrycy kluczy wykorzystuje usuwanie oprogramowania układowego.
Jeśli usuwanie macierzy 4x4 jest zbyt intensywne obliczeniowo, robisz coś nie tak.
Odbicie oprogramowania może być tak proste, jak odpytywanie klawiatury nie szybciej niż co X ms, gdzie X jest maksymalnym czasem odbicia.
dedykować osobny mikrokontroler dla interfejsu klawiatury.jeśli masz również wyświetlacz LCD, użyj do tego tego samego kontrolera
sprawdź układ HT16K33
Należy zauważyć, że usuwanie błędów oprogramowania wymaga przetworzenia sygnału elektrycznego przez obwód wejściowy sterownika.Szybkie stany przejściowe w zakresie ns mogą wystąpić podczas odbijania i mogą powodować problemy w obwodach wejściowych.Debouncing oprogramowania nie jest równoważnym zamiennikiem usuwania sprzętu.
Pięć odpowiedzi:
Andy aka
2018-02-12 18:38:52 UTC
view on stackexchange narkive permalink

Wyjaśnijmy to sobie. Jeśli masz matrycę klawiaturową, używasz już mocy obliczeniowej, aby zastosować sekwencyjne napięcia logiczne do wierszy lub kolumn, a następnie odczytać kolumny lub wiersze z powrotem w celu określenia naciśniętego przycisku.

Tak więc za każdym razem, gdy otrzymasz „wynik”, tj. wykryjesz, że przycisk został naciśnięty, oznaczasz to zdarzenie jako „oczekujące”, a po pewnym czasie (10 do 20 ms) ponownie sprawdzasz, czy przycisk został naciśnięty oznaczone jako „oczekujące” można uznać za „rzeczywiste”.

Moim zdaniem, o ile więcej czasu przetwarzania to potrzebuje, jest bardzo mało w większym schemacie, a jeśli jesteś tak blisko limitu, przy którym może działać twój procesor, uzyskaj większy / szybszy procesor lub zwiększ prędkość zegara.

Używanie R i C może działać, ale we wszystkich przypadkach da "powolne" wyjście, które będzie musiało zostać wyzwolone przez Schmitta, aby oczyścić wolną krawędź do szybkiej krawędzi, która jest odpowiednia dla następującej logiki. Oczywiście możesz ujść na sucho, ale wtedy masz stałe rozwiązanie bez elastyczności.

Mając powyższe na uwadze, możesz również potrzebować kondensatorów z każdej linii matrycy do masy, aby uniknąć problemów z ESD / EMC.

Zależy, co rozumie się przez powolne.Wyzwalacz shmitt wygląda na prosty na schemacie, ale na PCB dodaje wiele połączeń i śladów.Najpierw przetestowałbym, czy jest to naprawdę potrzebne.Jeśli tak, szukałbym układu scalonego wyzwalacza quad shmitt (lub ósemkowego, jeśli istnieje), aby zaoszczędzić miejsce na płycie i liczbę komponentów.
Masz rację ... I tak skanuję w poszukiwaniu przycisków w oprogramowaniu, więc trochę więcej zmarnowanych cykli nie zaszkodzi tak bardzo!ta kwestia EMC to fajny punkt, o którym nawet nie myślałem.Dzięki
Czy możesz podać wskazówkę, jak duży powinien być kondensator dla EMC i dlaczego ta konkretna wartość?a co z rezystorami?
100 pF powinno wystarczyć.Żadnych obliczeń ani teorii, tylko dobra praktyka.
Nie zapomnij także o podciągnięciu lub podciągnięciu na wejściu.
MCG
2018-02-12 18:21:12 UTC
view on stackexchange narkive permalink

Aby uzyskać najlepszą skuteczność odbicia, najlepiej byłoby mieć jedno R / C dla każdego przycisku.Jednak nadal powinieneś uzyskać przyzwoite wyniki z jednym na wiersz / kolumnę.Tylko zależy, jak bardzo jest to ważne.Jeśli chcesz to zrobić przy minimalnej ilości składników, dlaczego nie spróbujesz najpierw zrobić jednego na wiersz / kolumnę, a następnie wykonać kilka pomiarów i sprawdzić, czy wynik jest wystarczająco dobry dla Twojej aplikacji?

Jeśli wyniki nie są zgodne z oczekiwaniami, dodaj trochę na każdym przycisku, a następnie spróbuj ponownie.

Graham
2018-02-13 00:35:27 UTC
view on stackexchange narkive permalink

Jako długoletni inżynier oprogramowania wbudowanego muszę powiedzieć, że twoje założenie, że usuwanie błędów odbierze trochę mocy obliczeniowej mojej aplikacji , jest po prostu błędne. To nigdy nie będzie prawdą dla żadnego kompetentnie napisanego oprogramowania.

Oczywiście usunięcie wymaga pewnego przetworzenia. Jednak przetwarzanie jest trywialne, a dla danych wejściowych użytkownika będzie się odbywać z tak małą szybkością aktualizacji, że będzie całkowicie pomijalna. Gdybyś potrzebował odbić wejścia z częstotliwością aktualizacji w dziesiątkach kHz, być może przetwarzanie odbicia byłoby znaczące, ale ludzkie naciśnięcie przycisków nie potrzebuje takiej rozdzielczości. W twoim przypadku próbkowanie 100 Hz byłoby z łatwością wystarczająco szybkie i prawie na pewno można by je obniżyć do poziomu 10 Hz bez poważnego wpływu na interakcję użytkownika.

Jeśli próbujesz przetwarzać dane wejściowe w głównej pętli sterującej działającej z częstotliwością dziesiątek kHz, oczywiście będzie to wysysać moc obliczeniową. Prawidłowym rozwiązaniem jest napisanie oprogramowania układowego, które jednak nie robi tego w ten sposób, a nie używanie rozwiązania sprzętowego do naprawiania anty-wzorca programowego. Odpowiednie użycie timerów i priorytetów przerwań zapewni Ci to, czego potrzebujesz.

Możesz zoptymalizować przetwarzanie, upewniając się, że odczyt z powrotem odbywa się w jednym porcie we / wy. Zakładając, że ustawiasz poziomy w kolumnach i odczytujesz wiersze, następnie bit-AND, bit-shift i bit-OR, aby zbudować 16-bitową wartość dla 16 pinów. XOR to z poprzednią 16-bitową wartością, a jeśli jest różna od zera, coś się zmieniło. Prostym algorytmem odbicia jest po prostu ustawienie licznika na wartość, jeśli piny zmienią stan, wybranie stanu, jeśli piny zachowały swój stan, a licznik jest równy zero, i zmniejszenie, jeśli nie jest to zero.

Oczywiście musisz sprawdzić, czy naciśnięto tylko jeden przycisk. Jeśli masz procesor ARM, ARM ma instrukcję raportowania liczby ustawionych bitów, co jest idealne do tego. Wspominam o dalszej optymalizacji.

Michel Keijzers
2018-02-12 18:50:09 UTC
view on stackexchange narkive permalink

Aha, istnieją układy scalone, które mogą odbijać się „automatycznie”, np.MC14490, nazywany Debouncer Switch.

Zapobiegnie to zużyciu mocy procesora, ale będzie kosztować dodatkowe okablowanie / miejsce na PCB.

Będą też kosztować dużą sumę pieniędzy.Te debouncery są strasznie drogie.
@Fredled: Large jak w „prawdopodobnie poniżej 10 USD”.Zgadzam się, że to dużo pieniędzy za to, co robi, ale w przypadku jednego uruchomionego projektu może to być warte zaoszczędzenia czasu ... w przypadku projektu z serią tysięcy to byłaby inna sprawa :-)
W AliExpress 2 euro, więc prawdopodobnie podwoi się w „lepszych” miejscach.
Wygląda na to, że MC14490 nie nadaje się do użycia z klawiaturami matrycowymi
Przykro mi to słyszeć ... sam tego nie próbowałem (nawet na normalnym przełączniku).Zastanawiam się, na czym polega problem, ponieważ każdy sygnał powinien być przez niego odrzucony.
Anthony X
2018-02-13 08:30:30 UTC
view on stackexchange narkive permalink

Prawdziwe odbijanie wymaga dodania histerezy.Nie możesz tego zrobić z komponentami pasywnymi, np.rezystory i kondensatory.W tym miejscu pojawia się oprogramowanie lub rozwiązanie z aktywnymi komponentami (zatrzask).

Zgadzam się, jeśli celujesz w doskonały sygnał.Jeśli jednak szukasz taniego i małego rozwiązania, elementy pasywne mogą dać akceptowalny rezultat.


To pytanie i odpowiedź zostało automatycznie przetłumaczone z języka angielskiego.Oryginalna treść jest dostępna na stackexchange, za co dziękujemy za licencję cc by-sa 3.0, w ramach której jest rozpowszechniana.
Loading...