Przyciski ogłaszające

32

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ć.

Vincent Van Den Berghe
źródło

Odpowiedzi:

17

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.

Kellenjb
źródło
Oszukałem obraz odbicia przełącznika i opublikowałem go na Wikipedii: en.wikipedia.org/wiki/File:Switch_bounce.JPG
Thomas O
@Thomas O to całkiem fajny obraz odbicia. Chcę tylko upewnić się, że @Vincent Van Den Berghe rozumie, że nie każde odbicie będzie tak wyglądać. To odbicie jest ograniczone do 0-5 V, nie zawsze tak będzie.
Kellenjb,
2
@Thomas O, na marginesie, stworzyliśmy praktykę polegającą na niepowodzeniu uczniów, którzy robią takie zdjęcia Oscope. Błysk na ekranie jest okropny. Posuwamy się także o krok dalej i zachęcamy uczniów do zbierania rzeczywistych punktów danych, używając czegoś takiego jak CSV lub widok laboratoryjny, aby można je było łatwo wykorzystać w raportach i analizie danych.
Kellenjb,
@Kellenjb, wkrótce dostanę drukarkę do mojego zakresu, która obsługuje HP-IB. Odkryłem również, że tryb „Sport” w moim aparacie może robić dobre zdjęcia z lunety bez lampy błyskowej i bez rozmycia.
Thomas O
1
@Lundin W środowisku czasu rzeczywistego wiele zależy od przerwań. Jeśli masz przerwanie naciśnięcia przycisku, tak naprawdę nie chcesz, aby Twój system czasu rzeczywistego został kilkakrotnie przerwany przez naciśnięcie jednego przycisku. Nie musisz też poświęcać zasobów, aby czekać 10 ms.
Kellenjb,
15

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 .

Alps tact switch

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:

debounce circuit

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.

stevenvh
źródło
12

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/

Toby Jaffey
źródło
Chciałem dostać link do Ganssle, kiedy zobaczyłem pytanie.
Kortuk
Artykuł w Ganssle był powodem, dla którego zadałem to pytanie, jest on połączony z moim pytaniem :) Dzięki za link do fragmentów kodu debounce.
Vincent Van Den Berghe
Czy zechciałby Pan podsumować kilka przypadków użycia, aby zilustrować, kiedy należy użyć oprogramowania / sprzętu? (jest to prawdopodobnie subiektywne, ale i tak chciałbym kilka przykładów)
Vincent Van Den Berghe
1
@Vincent, Kellenjb podsumował to na swojej odpowiedzi, jak zdecydować. Nie kliknąłem twojego linku, ponieważ miał zabawną nazwę, teraz kiedy go kliknąłem, widzę ganssle!
Kortuk
Jeśli taka jest konsensus / ogólna zasada, to w rzeczywistości nie ma potrzeby podawania kolejnych przykładów.
Vincent Van Den Berghe,
6

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.

Leon Heller
źródło
Dlaczego ludzie to głosują?
Toby Jaffey,
Dobra uwaga na temat zapowiedzi wydania klucza!
Vincent Van Den Berghe
1
Nie głosowałem za tym, ale samo powiedzenie robienia tego w oprogramowaniu to okropny pomysł. Dobrze jest scharakteryzować.
Kortuk
Powiedziałem „ogólnie”, co jest prawdą, i podałem powód. Minimalizuje również koszty BOM i zwiększa niezawodność.
Leon Heller,
zwiększa niezawodność tylko wtedy, gdy sygnał pozostaje w bezpiecznych granicach kontrolera. Ta czynność zwiększy niezawodność, jeśli zmniejszysz liczbę komponentów bez zwiększenia zużycia komponentów. Nie mówiłem, że nie zgadzam się z koncepcją twoich postów, ale ciągle pracuję z inżynierami, którzy dopiero wchodzą na pole i taką odpowiedzią, a oni będą ogłaszać wszystko w oprogramowaniu. Zawsze musisz charakteryzować. Ja również nie głosowałem za tobą, ale też nie głosowałem, myślę, że szeroka odpowiedź, taka jak oprogramowanie, ryzykuje, że nowi programiści ryzykują sprzętem.
Kortuk
1

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.

JustJeff
źródło
Posiadanie przełącznika powodującego przerwanie jest dobrym pomysłem. Ale kiedy go dostaniesz, nie pozwól na dalsze przerwy - wyłącz je i uruchom zamiast tego licznik czasu dla określonego czasu odbicia.
Lundin,
@Lundin - jeśli timery są dostępne, możesz po prostu użyć timera, aby wdrożyć podejście odpytywane, i nie zawracaj sobie głowy generowaniem przerwań przez przełącznik.
JustJeff,
0

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:

forever loop
   wait (at least) 50 ms
   check buttons
   do procesing
end loop
Wouter van Ooijen
źródło
I do tego użyj timerów na chipie na MCU.
Lundin,
Jest to oczywiście możliwe, ale możesz napisać wiele programów bez.
Wouter van Ooijen
3
Profesjonalne oprogramowanie wysokiej jakości produktów zawsze będzie wykorzystywać timery na chipie. Hobbyści mogą uciec od jakiegoś „NOP” dla odpytywania w pętli lub martwego oczekiwania. Ale nie ma powodu, aby robić to w prawdziwych produktach, niezależnie od wymagań w czasie rzeczywistym. „Nie wiem, jak działa timer, a ta martwa pętla zajmuje mojemu leniwemu ja 10 sekund na napisanie” nie jest poprawnym argumentem dla inżyniera.
Lundin,
Woły Specjaliści muszą być skuteczni, co (w zależności od danego projektu) może oznaczać (między innymi) „efektywne wykorzystanie sprzętu” lub „wykorzystanie czasu profesjonalisty tak efektywnie, jak to możliwe”. Więc twoje przybycie na pewno ma zastosowanie w niektórych przypadkach (prawdopodobnie we wszystkich przypadkach, z którymi miałeś do czynienia), z pewnością nie ma zastosowania we wszystkich przypadkach.
Wouter van Ooijen
Wdrożenie timera na chipie zajmuje najwyżej godzinę. To nie jest nic skomplikowanego, to codzienna inżynieria chleba i masła. Nie możesz nawet zainwestować godziny w swój projekt, aby uzyskać znacznie lepsze rozwiązanie i ogólnie lepszą jakość? Tak, cóż ... jeśli nie wiesz dużo o programowaniu, może to zająć tydzień. Ale wtedy być może nie powinieneś pracować z oprogramowaniem ... a może powinieneś więcej z nim pracować , więc nauczysz się wdrażać tę prostą rzecz w mgnieniu oka.
Lundin,
0

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.

supercat
źródło