Arduino 19: MIKROSTYKI
HTML-код
- Опубликовано: 19 авг 2024
- Wszystko o przełącznikach i ich współpracy z mikrokontrolerami. Dlaczego ten prosty problem wcale nie jest prosty? O metodach pozbywania się stanów nieustalonych. O tym, dlaczego czasem warto dołożyć kilka elementów zamiast rozwiązywać problemy programowo.
Kod, na którym bazuje odcinek można pobrać stąd:
adamsmialek.co...
Zapraszam do wsparcia mojego kanału:
patronite.pl/s...
PayPal.Me/smialekadam
oraz do subskrybowania:
www.youtube.co...
#Arduino #microswitch #debouncing
Ma Pan niesamowitą wiedzę i pasję. Pozdrawiam.
💪😎👌 Super sprawa z tą serią o Arduino! I podziwiam tempo wypuszczania odcinków! Dodajmy tak dobrych odcinków! Chyba dla mnie doba musiałaby mieć 256 godzin, bym tak często produkował kolejne filmy! 😜
W pewnych sytuacjach pojemności włączone wprost równolegle do styków mają pewne zalety. W wielu typach przełączników, gdy przez styki płyną tylko prądy bardzo niewielkie, styki te ulegają powolnemu utlenianiu, po pewnym czasie przestając działać prawidłowo. Energia pochodząca ze zwarcia kondensatora potrafi te zanieczyszczenia zniszczyć, przez co, paradoksalnie, element w takich warunkach może pracować niezawodnie zdecydowanie dłużej.
A mnie to zupełnie nie interesuje ale lubie pana Adama :)
Ja używam kondensatora do przycisku, takiego mniej więcej 200nano oraz odczyt stanu za pomocą przerwania Rising. Opcjonalnie czytam stan z digitalread, ale zależy to od struktury programu. Dla mnie każde 30milisekund to wieczność, tym bardziej, gdzie arduino obsługuje Uarta, kilka urządzeń na I2C a program działa asynchronicznie.
Pochwała "łapką" i oglądam.
Kiedyś się na stoperze robiło rekordy start/stop i trzeba było lekko przycisnąć przycisk, żeby zaszumiało na nim i mogło być 0,11s
rozwinieciem tego materiału z dedykacją dla graczy jest artukuł "Dlaczego myszka dwuklika?" - można spoojnie znaleźć. Nagle sie okazuje, że nasza myszka może działać perfekcyjnie latami, jeśli tylko nie boimy się lutownicy
Dzięki przyda mi się
Panie Adamie kiedyś nad ranem przełącznik zapaliłem światło i w sypialni zobaczyłem cztery nogi wystające z pod kołdry!!!! Pozdrawiam serdecznie zza wielkiej wody
Dzięki Bogu że nie 3 bo było by dziwnie xD
Bo za jednym przełączeniem wysłałeś dwa impulsy i w świetle stroboskopowym uległeś złudzeniu optycznemu "zdublowania nóg" ;)
ciekawe przelączniki
Super materiał, pozdrawiam! Ps. ten delay(20) powinien być wewnątrz pętli while, wtedy nie marnujemy zasobów procesora, o których wspomniałeś.
Stany nieustalone mają miejsce zarówno po wciśnięciu jak i puszczeniu przycisku. Oczywiście jeden delay (dodatkowy) może znajdować się zaraz za tą pętlą i już będzie okej, ale tu chodzi bardziej o ideę, a już realizacja powinna przebiegać zgodnie z konkretnymi potrzebami programowymi.
@ Przedewszystkim ten delay jest w złym miejscu i nie rozwiązuje skutecznie problemu. Załóżmy, że naciśnięcie przycisku generuje krótką szpilkę poprzedzającą stabilny stan. Spilka ta powoduje wejście w if, przełączenie stanu diody i w pętli czekamy na jej koniec. Następnie siedzimy w delay, i kolejny obrót głównej pętli odczyta ponownie, że nasz przycisk jest wciśnięty, w tym momencie znajduje się w stanie stabilnym.
Spróbuj naciskać ten przycisk długo, zamiast krótkimi impulsami i trafisz na taką sytuacje :)
W sumie to prawda, aczkolwiek w praktyce sytuacja taka nie powstała mi ani razu, a to się bierze z faktu, że te trzy linie także zabierają nieco czasu, wystarczającego na ustabilizowanie się docisku. Dodatkowy delay byłby jednak wskazany choćby dla zasady (a najlepiej coś pożytecznego, a nie delay).
@ Adam do Ciebie tylko jedna uwaga: nie przestawaj nagrywać filmów!!! Masz talent, a filmy mają klimat nie do podrobienia! :))) A do obsługi przycisków w Arduino polecam libkę Button2, obsługuje pojedyncze, podwójne, potrójne oraz długie przyciśnięcie. Jest lekka, działa na każdym procesorze, nie potrzebuje przerwań i nie jest blokująca (nie używa delay).
@@marcinkopa Popieram z tym klimatem, mam podobny wiek i te zdjęcia i zabytki łzy ze śmiechu i wzruszenia wyciskają. To jest stara szkoła i niech tak zostanie , no i te podchwytliwe sugestie . Oby tak dalej.
Rozwiążania programowe nie są tak zupełnie za darmo :)
Zaśmiecają kod, zajmują czas pracy ludzkiej, poza tym ktoś może je zepsuć (np. myśląc że właśnie coś poprawił). A wtedy cena darmowości może być zaskakująco duża.
Dlatego powstają rozwiązania sprzętowe :)
Chciałbym tylko zauważyć, że jeśli nie potrzeba z jakiegoś powodu używać przerwań do obsługi klawiatury, to najprostsze rozwiązanie z timerem rozwiązuje "za darmo" problem drgania styków i nie ma absolutnie żadnego dodatkowego kosztu czy to w czasie programisty czy większym kodzie.
Ja zawsze robilem tak ze czekalem 20ms czy tam ile trzeba bylo i potem wykonywalem program gdy przycisk na pewno mial stan ustalony a nie bylo to jakies zakłócenie. W starych atmegach pullup mial 50k
Niewierny Tomasz (Apostoł) i św. Tomasz z Akwinu to dwaj rózni ludzie, żyjący jakieś 1200 lat i z tysiąc kilometrów od siebie...
Wiem, specjalnie zastawiłem pułapkę na spostrzegawczość :)
Czyli należy się nagroda: talon na balon i nie tylko
@@MultiKomentator obawiam się że druga część tego zdania.
@@MultiKomentator żeton na kielnie i beton
Pozdrawiam.#
💪
Płytka stykowa... bee... tylko uniwersalna i kynar.
👍🇵🇱🇵🇱👍
Witam. Jako użytkownik klawiatury Muzykant na scalaku Atmel C51, jak sobie poradzić z debouncingiem budując taką samą w oparciu o Arduino + kontraktony zamiast microswitch-y?
Musiałbym sobie przypomnieć jak ja to wtedy zorganizowałem :) Ale można kod "przepisać", jeśli działa (a chyba działa, bo poszedł w świat w setki). Z tego co pamiętam, tam po prostu przemiata się klawiaturę na wykrycie zwarcia, a samo wysyłanie trzech bajtów przez midi jest wystarczającym opóźnieniem zapobiegającym problemom. Podobnie z puszczeniem klawisza, ten kod jest symetryczny. Kontaktrony generalnie robią mniej problemów.
@ Witam.. No właśnie na stronie był kod w Assemblerze skompilowany z możliwością tylko zmiany numerów kanałów midi oraz kodu wyzwalanego klawisza. Cała reszta już skompilowana ;-) Musiałem na starym PC z Dos-em odpalać i ręcznie przepisywać kody przycisków. To było 7lat temu a schemat zduplikowałem na dwa Atmele bo matryca 127# oryginalna była za mała na 3 klawiatury x61 przycisków. ;-)
@ Dołączam się do pytania, mam przełączniki sprzętowe rejestrów podłączone pod muzykanta i strasznie szumią, planuję już zmianę na kontaktrony, zastanawiałem się też nad tym kondensatorem równolegle do przycisku, ale po filmie jestem w kropce. Czy zwarcie linii stanowiących klawiaturę matrycową powoduje zamknięcie pętli prądowej czy zwarcie do masy? wtedy można by użyć opóźniacza typu max6818. Poza tym, dziękuję za Muzykanta, używam go w różnych formach już chyba ze 20 lat! niesamowita sprawa, pełen szacunek za tę pracę!
Zwarcie w klawiaturze matrycowej umożliwia przepływ niewielkiego prądu z, powiedzmy, źródła prądowego, którym jest rezystor zasilany z napięcia stabilizowanego. Ja bym się tutaj nie bał kondensatorów, porty mikrokontrolera są pozabezpieczane na takie możliwości. A jak się poprawi, to się nie ma co przejmować, że to trochę niezgodne z zasadami :)
@ Piękne dzięki 🙂 Pozdrawiam
Kupiłem sobie mechaniczną klawiaturę K60 w nadziei, że będzie bardziej trwała od zwykłych. Po roku kiedy wciskam "d" wyskakuje mi na ekranie "dd". Żenada.
Jakim programem robione są pomiary i rysowany jest wykres ?
Audition. To program do klasycznych operacji audio, ale można go użyć poglądowo do takich zadań.
Ciekawe, że przez cały film ani razu nie padło sformułowanie "drgania styków", a właśnie często tak jest nazywany cały opisywany problem z przełącznikami. Po angielsu nazywa się to "switch bounce", chociaz po polsku nie spotkałem się z formułowaniem "odbijanie styków" lub "odbijanie przełącznika", chociaż taka nazwa również sama za siebie opisuje problem. To w takim razie, jak jest klawiatura matrycowa 4x4 (taka membranowa, jak w chwili 1:05), to czy da się w niej sprzętowo wyeliminować drgania styków?
Generalnie na klawiaturach matrycowych nie stosuje się pojemności, ale można obniżyć impedancję, ładując dodatkowe rezystory podciągające o niższych niż zwykle wartościach (kiloomy zamiast kilkadziesiąt). Odkłócanie sprzętowe ma większe znaczenie przy wszelkiego rodzaju krańcówkach itp., gdy w przypadku klawiatur często wystarczą sposoby czysto programowe, bo tam czasy nie są tak krytyczne, a linie zwykle krótsze (krańcówki często są umiejscowione metry od mikrokontrolera i w razie potrzeby stosuje się wręcz izolowane transoptorem pętle prądowe, najbardziej chyba niezawodne).
Co do nazewnictwa, dla mnie ważniejsza jest idea, a już znane mi określenia wstawiam tylko w tagi.
@ Kiedyś zmajstrowałem jeden układ z wykorzystaniem klawiatury matrycowej (bez dodatkowych elementów na liniach od klawiszy do ATMega328), a odczyt stanu klawiatury zrealizowałem w przerwaniu wyzwalanym co 10ms z timera, a odczyt zapisywałem w zmiennej globalnej "volatile". Czasami zawodziło (drgania styków), ale wymyśliłem, że zmienną globalną stanu będę aktualizować tylko w przypadku, gdy stan klawisza przez 3 ostatie odczyty jest ten sam i problem zupełnie zniknął kosztem opóźnienia, którego w praktyce i tak się nie wyczuwało. Dzięki temu, zużycie mocy procesora na samą obsługę klawiszy ograniczyłem do minimum (brak pustego czekania). Nawet prosty programik z zaświecaniem diody można tak zrealizować z tą różnicą, że w głównej pętli będzie badany stan zmiennej globalnej, a odczyt klawiszy będzie w przerwaniu.
tez mnie to ukulo, podrzuce tez podobny material rs elektroniki ruclips.net/video/J4mZHf0pH8Y/видео.html
To już wiem z jakiego powodu w cedetwo mieli problem przy cofaniu się w czasie w maszynie do cofania czasu i zamiast o 3 lata cofnęli się o 33 lata.
ruclips.net/video/Yk1Q6Kk96bs/видео.html
ok
Proszę to rozwinąć o (porządną) obsługę mechanicznych enkoderów kwadraturowych. Z tym, to mają problem profesjonaliści i rzadko kiedy działa to dobrze.
W konsoletach muzycznych cyfrowych gdzie jest "zylion" koderów obrotowych, to sygnały z nich są wstępnie obrabiane filtrem RC i inwerterem z przerzutnikiem Schmitta typu 74HC15 lub 74HCT14. Potem po 4 (czyli 8 sygnałów) są odczytywane przez rejestry równoległo-szeregowe (dla zmniejszenia zapotrzebowania na ilość wejść procesora). Nie wiem tylko jak często jest odczyt (32x, 64x na sekundę?) reszta (kierunek, ilość impulsów) jest robiona programowo. Dekodowanie najlepiej jest zrobić tablicowo, gdzie tablica ma rozmiar 16, a na wejście dostaje aktualny stan kodera (A, B) i jego stan z poprzedniego próbkowania (A1, B1), tak, że masz możliwych stanów. W poszczególnych pozycjach tablicy masz wpisane: -1 (zmniejszanie), 0 (brak zmiany) lub +1 (zwiększanie). Tę metodę stosowano już w pierwszych myszkach komputerowych.
No i podstawa - dobrej jakości kodery obrotowe.
Mikrofon jako oscyloskop.... WOW ;)
Nie mikrofon, tylko wejście mikrofonowe.
Właściwie wszystkie mikrooscylacje łapią się na to gniazdo,po prostu jest ono wystarczająco czułe. Ale gramofonowe byłoby już chyba przesterowane :)
Aha,no i gramofonowe nie jest liniowe.
dobry dzwięk
Nie jest, mówiłem o tym w odcinku z gramofonem Bernard.
jakie opóźnienie wprowadza rozwiązanie z ic7414? pytam, bo rozwiązanie programowe -- "zareaguj na pierwszą zmianę i ignoruj kolejne przez np. 50ms" nie ma opóźnienia.
Pomijalne, katalogowo 22 nS maksymalnie.
@ Tak, ale to jest już chyba przełączanie w samym układzie 7414, a mi chodzi o całość, razem z tym kondensatorem i ewentualnie diodą (electrosome.com/wp-content/uploads/2012/12/RC-Switch-Debouncer-with-Diode.png). Czy rozwiązanie z kondensatorem nie wprowadza opóźnienia?
Wprowadza, wszystko można obliczyć zgrubnie i dobrać zarówno wartości elementów jak i wpisane w sofcie do zadań. Dla typowych klawiatur latencja niewyczuwalna to 30-50 ms, dla muzycznych raczej nie wyższa od 10 ms, dla przełączników automatyki to już bardzo różnie, ale mogą być wymagania nawet poniżej milisekundy.
Ostatni xd
poraża mnie pana wiedza
Podstawowy problem, mielony bez końca na wszelkich forach poświęconych Arduino.
I jak widać, wciąż warto go mielić.
O babciu elektryczna. Tyle części i tylko dla pstryczka. ;)
Na razie słyszałem tylko o matce boskiej elektrycznej.
Drugi !
Drugi
Pierwszy
Pytanie, po co dodatkowy przerzutnik Schmitta, skoro na każdym pinie m328p taki przerzutnik jest (wbudowany, sekcja 13.2 w DS)?
Chodziło o zademonstrowanie działania takiego sposobu eliminacji drgań styków. Nie szkodzi, że w M328P przerzutnik nie jest potrzebny, a do demonstracji nie ma znaczenia, jaki to mikrokontroler. W innym mikrokontrolerze lub innym procesorze, jak ma przerzutnika to jest potrzebny zewnętrzny.
Dokładnie, to jest płytka edukacyjna i postanowiono użyć tutaj takiego przykładowego rozwiązania.
@@andrzejlisek Wszystko spoko, ale w materiale nie ma informacji o tym, ze praktycznie każdy współczesny procesor takie przerzutniki na wejściach ma. Więc jako demonstracja działania przerzutnika to ok, ale ktoś może wpaść na pomysł używania takiego rozwiązania z MCU, a ono z nimi jest kompletnie bez sensu.
Nie tak bez sensu, bo często w przemyśle na końcu długich linii stosuje się różnego rodzaju elementy pośredniczące, transformujące mało odporne na zakłócenia sygnały z przełączników, a wtedy Schmitty mogą się przydać. To jest płytka edukacyjna, a ta z punktu widzenia użyteczności poza edukacją sensu nie ma żadnego.
@ Bym się nie zgodził, płytka poza walorami edukacyjnymi (co już jest sensowne) może i do prostych prototypów posłużyć + edukacja i dobre nawyki to trochę ważna rzecz. A zakłócenia na długich kablach, no nie wiem, jeśli dodatkowy przerzutnik jest na końcu tam gdzie przycisk to jego użyteczność jest taka sobie - bo pomiędzy nim a MCU jest długi kabel zbierający zakłócenia. A jak jest przy MCU, to tez trochę bez sensu bo przerzutnik jest w MCU. Także jak dla mnie - do czegoś analogowego - spoko, może być, ale tak to przydatność akurat tego elementu jest dyskusyjna.