Niedawno przeczytałem artykuł o zapowiedziach przycisków i zastanawiałem się, czy powinienem o tym pamiętać, pracując na przykład z Arduino (ATMega mC)? Zakładam, że jest to problem, szczególnie podczas pracy z przerwaniami.
Więc czy lepiej jest wykryć odbicie w kodzie, czy należy to załatwić sprzętem? Proszę opracować.
Odpowiedzi:
Gorąco polecam podłączenie lunety (mam nadzieję, że ją masz lub możesz ją zdobyć) do przełącznika. Widziałem projekt studenta, który odbił się na przełączniku, który spadł z 5v do -5v do 4v do -3v, a następnie do 2v, a następnie z powrotem do 0v. Gdy spojrzeliśmy na aktualne losowanie lunety, zauważyliśmy bardzo duży skok.
W tym konkretnym przypadku bardzo potrzebował, aby ogłosił swój przełącznik sprzętowy.
Jednak z drugiej strony widziałem przełączniki, które mają znacznie mniejszy efekt, który można łatwo usunąć w oprogramowaniu.
Musisz jednak rozważyć swoje opcje. Jeśli masz bardzo złożoną ilość oprogramowania układowego, dodanie narzutu na ciebie jako programistę i użycie procesora może nie być tego warte i lepiej byłoby po prostu dodać trochę sprzętu. Z drugiej strony, jeśli próbujesz obniżyć koszty i rozmiar, będziesz chciał usunąć jak najwięcej sprzętu i zrobić to wszystko w oprogramowaniu układowym, jeśli możesz.
źródło
Jeśli jesteś profesjonalnym projektantem elektroniki, masz szanse, że Twój szef nawet nie pozwoli ci tego zrobić sprzętowo. Powód jest prosty: jeśli partia produkcyjna jest wystarczająco duża, oprogramowanie jest praktycznie bezpłatne , a za każdą wyprodukowaną jednostkę trzeba zapłacić. I chociaż rezystory i kondensatory są tanie jak brud, montaż ich na płytce drukowanej może kosztować nawet 20 razy więcej niż ich cena zakupu.
Niezależnie od tego, czy debiutujesz w oprogramowaniu, czy w sprzęcie, nadal musisz wybierać przyciski jakości. Niesławny przycisk 157 ms z artykułu po prostu nie nadaje się do żadnej aplikacji.
Zazwyczaj próbuję przycisk w odstępach 32 ms , co wystarcza, aby zminimalizować czas usuwania dowolnego dobrego przycisku. Jestem fanem przełączników Taktycznych SKQG firmy Alps .
Na kilku testowanych urządzeniach początkowy czas odskoku wynosił mniej niż 10ns. Mimo że jego żywotność wynosi 100 000 cykli, przetestowaliśmy go na 200 000 cykli, a nawet wtedy 32 ms opóźnienie było wystarczające. (Wydaje mi się, że powinienem był zmierzyć rzeczywisty poziom zadłużenia, ale naszym głównym zainteresowaniem w tym czasie było zachowanie produktu końcowego. W każdym razie używaliśmy go poza specyfikacją).
Jeśli naprawdę chcesz rozwiązania sprzętowego, popieram wspomniane w artykule rozwiązanie SR typu flip-flop jako najlepsze technicznie rozwiązanie:
Flip-flop można zbudować z podwójną bramką NAND , która jest dostępna na przykład w małym pakiecie VSSOP8. Główną wadą tego rozwiązania jest to, że potrzebujesz przycisku SPDT, w którym SPST jest znacznie częściej dostępny.
źródło
Istnieje wiele różnych metod usuwania przycisków. To, czy zrobisz to w oprogramowaniu czy sprzęcie, będzie zależeć od wymagań twojego projektu i rodzaju przełącznika.
Oto kilka linków do różnych metod:
http://www.ganssle.com/debouncing.htm
http://hackaday.com/2010/11/09/debounce-code-one-post-to-rule-them-all/
źródło
Ten artykuł jest „biblią” dotyczącą ogłaszania. Odrzucanie kontaktów może stanowić problem w przypadku dowolnej aplikacji.
Zasadniczo najlepiej jest ogłaszać przełączniki w oprogramowaniu, ponieważ łatwiej jest dostosować opóźnienia dla poszczególnych przełączników, ponieważ różnią się one ilością odbić kontaktów. Często konieczne jest także ogłoszenie klucza do wydania. Producenci przełączników często określają wielkość odrzuceń dla swoich produktów, zwykle jest to około 10–20 ms.
źródło
Odbijanie przełącznika może trwać przez dziesiątki milisekund. Jeśli odpytujesz zmianę z procedury przerwania działającej na zegarze, odbicie nie będzie problemem, ponieważ nawet jeśli zdarzy się, że sondujesz przełącznik w środku burzy odbitej, albo natychmiast uzyskasz nowy stan lub w najgorszym przypadku uzyskaj stary stan i nie zobacz nowego stanu do następnej ankiety opartej na liczniku czasu. Odpytywanie z czasowego ISR, takiego jak ten, stanowi formę debugowania oprogramowania.
Jeśli jednak używasz tego przełącznika do spowodowania przerwania i oczekujesz, że procedura obsługi przerwań będzie działać szybko, w mniej niż powiedzmy 10 milisekund, będziesz potrzebować sprzętowego ogłaszania, w przeciwnym razie jedno zdarzenie przełączenia może spowodować nieco losową liczbę przeszkadza, a na pewno często więcej niż oczekiwany. Z drugiej strony, jeśli procedura przerwania działa wystarczająco długo, odbicie przełącznika ustabilizuje się przed zakończeniem ISR i wszystko będzie w porządku, ale większość dobrze skonstruowanych ISR nie trwa tak długo.
źródło
Najlepszym sposobem na zrobienie czegokolwiek jest sposób, który najbardziej Ci odpowiada. Ale kiedy już masz mikrokontroler, możesz zadebiutować w oprogramowaniu jedynie kosztem pewnego wysiłku w zakresie kodu.
Najłatwiejszym sposobem na debounce w oprogramowaniu jest sprawdzenie przycisków w momentach, które są dalej od siebie niż najdłuższy czas odbicia. Wydaje się, że 50 ms stanowi górną granicę czasu odrzuceń „normalnych” przełączników, więc kiedy możesz tak ustawić oprogramowanie, to jasne:
źródło
Jednym z podejść do ogłaszania, o którym jeszcze nie wspomniano, jest użycie przełącznika podwójnego rzutu z jednym rzutem powiązanym z VDD, a drugim z ziemią. Wprowadź to do pinu, który (przez oprogramowanie lub sprzęt) zostanie słabo wyciągnięty do obecnego stanu. Takie podejście zapewni zalety przełącznika podwójnego rzutu, ale będzie wymagało tylko jednego styku we / wy, a nie dwóch.
źródło