Arduino 19: MIKROSTYKI

แชร์
ฝัง
  • เผยแพร่เมื่อ 25 พ.ย. 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

ความคิดเห็น • 88

  • @piotrcisek494
    @piotrcisek494 2 ปีที่แล้ว +8

    Ma Pan niesamowitą wiedzę i pasję. Pozdrawiam.

  • @Informatykwakcji
    @Informatykwakcji 2 ปีที่แล้ว +8

    💪😎👌 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! 😜

  • @k4be.
    @k4be. 2 ปีที่แล้ว +4

    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.

  • @robertmajewski4486
    @robertmajewski4486 2 ปีที่แล้ว +4

    A mnie to zupełnie nie interesuje ale lubie pana Adama :)

  • @polskizwiazeknaczelnychhej1100
    @polskizwiazeknaczelnychhej1100 2 ปีที่แล้ว +1

    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.

  • @zbigniewgurak8261
    @zbigniewgurak8261 2 ปีที่แล้ว +2

    Pochwała "łapką" i oglądam.

  • @R.Rumian
    @R.Rumian 2 ปีที่แล้ว +2

    Dzięki przyda mi się

  • @MultiKomentator
    @MultiKomentator 2 ปีที่แล้ว +2

    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

  • @boleslawwroblewski6838
    @boleslawwroblewski6838 2 ปีที่แล้ว +1

    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

    • @moje12a
      @moje12a 2 ปีที่แล้ว

      Dzięki Bogu że nie 3 bo było by dziwnie xD

    • @marius1677
      @marius1677 2 ปีที่แล้ว

      Bo za jednym przełączeniem wysłałeś dwa impulsy i w świetle stroboskopowym uległeś złudzeniu optycznemu "zdublowania nóg" ;)

  • @simulatorMarcin
    @simulatorMarcin 2 ปีที่แล้ว +1

    ciekawe przelączniki

  • @juzf
    @juzf 2 ปีที่แล้ว +1

    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

  • @marcinkopa
    @marcinkopa 2 ปีที่แล้ว +1

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

    •  2 ปีที่แล้ว

      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.

    • @dariuszstalonczyk8288
      @dariuszstalonczyk8288 2 ปีที่แล้ว +2

      @ 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 :)

    •  2 ปีที่แล้ว +1

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

    • @marcinkopa
      @marcinkopa 2 ปีที่แล้ว +2

      @ 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).

    • @dse-elektronik
      @dse-elektronik ปีที่แล้ว +1

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

  • @AmatorElektronik
    @AmatorElektronik 2 ปีที่แล้ว +1

    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

  • @cyniu88
    @cyniu88 2 ปีที่แล้ว +2

    Jakim programem robione są pomiary i rysowany jest wykres ?

    •  2 ปีที่แล้ว +5

      Audition. To program do klasycznych operacji audio, ale można go użyć poglądowo do takich zadań.

  • @zenonpompka
    @zenonpompka 2 ปีที่แล้ว +1

    💪

  • @ryszardskoczny1739
    @ryszardskoczny1739 2 ปีที่แล้ว +2

    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?

    •  2 ปีที่แล้ว +1

      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.

    • @ryszardskoczny1739
      @ryszardskoczny1739 2 ปีที่แล้ว +1

      @ 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. ;-)

    • @bartk07
      @bartk07 ปีที่แล้ว

      ​@ 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ę!

    •  ปีที่แล้ว +1

      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 :)

    • @bartk07
      @bartk07 ปีที่แล้ว

      @ Piękne dzięki 🙂 Pozdrawiam

  • @piotrodzysk4444
    @piotrodzysk4444 2 ปีที่แล้ว +1

    Pozdrawiam.#

  • @Bender-Rodriguez
    @Bender-Rodriguez 2 ปีที่แล้ว +1

    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.

    •  2 ปีที่แล้ว +2

      Dlatego powstają rozwiązania sprzętowe :)

    • @TomekNagisa
      @TomekNagisa 2 ปีที่แล้ว +1

      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.

  • @solarr2
    @solarr2 2 ปีที่แล้ว +2

    👍🇵🇱🇵🇱👍

  • @andrzejlisek
    @andrzejlisek 2 ปีที่แล้ว +1

    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?

    •  2 ปีที่แล้ว

      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.

    • @andrzejlisek
      @andrzejlisek 2 ปีที่แล้ว +1

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

    • @nukedclx
      @nukedclx 2 ปีที่แล้ว +1

      tez mnie to ukulo, podrzuce tez podobny material rs elektroniki th-cam.com/video/J4mZHf0pH8Y/w-d-xo.html

  • @incxxxx
    @incxxxx 2 ปีที่แล้ว +1

    ok

  • @michastepien8326
    @michastepien8326 2 ปีที่แล้ว

    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.

    •  2 ปีที่แล้ว

      Pomijalne, katalogowo 22 nS maksymalnie.

    • @michastepien8326
      @michastepien8326 2 ปีที่แล้ว

      @ 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?

    •  2 ปีที่แล้ว

      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.

  • @marcinzjajami9315
    @marcinzjajami9315 2 ปีที่แล้ว +1

    Mikrofon jako oscyloskop.... WOW ;)

    •  2 ปีที่แล้ว +2

      Nie mikrofon, tylko wejście mikrofonowe.

    • @marius1677
      @marius1677 2 ปีที่แล้ว

      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 :)

    • @marius1677
      @marius1677 2 ปีที่แล้ว

      Aha,no i gramofonowe nie jest liniowe.

    • @sunleostudio7969
      @sunleostudio7969 2 ปีที่แล้ว

      dobry dzwięk

    •  2 ปีที่แล้ว

      Nie jest, mówiłem o tym w odcinku z gramofonem Bernard.

  • @domozs4370
    @domozs4370 2 ปีที่แล้ว +2

    Płytka stykowa... bee... tylko uniwersalna i kynar.

  • @Jedendwa0
    @Jedendwa0 2 ปีที่แล้ว +1

    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.
    th-cam.com/video/Yk1Q6Kk96bs/w-d-xo.html

  • @Trabantoslaw
    @Trabantoslaw 2 ปีที่แล้ว +1

    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.

  • @Vanilla-du4oh
    @Vanilla-du4oh 2 ปีที่แล้ว +3

    Ostatni xd

  • @sunleostudio7969
    @sunleostudio7969 2 ปีที่แล้ว +1

    poraża mnie pana wiedza

  • @pokrec
    @pokrec 2 ปีที่แล้ว +9

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

    •  2 ปีที่แล้ว +8

      Wiem, specjalnie zastawiłem pułapkę na spostrzegawczość :)

    • @MultiKomentator
      @MultiKomentator 2 ปีที่แล้ว +3

      Czyli należy się nagroda: talon na balon i nie tylko

    • @moje12a
      @moje12a 2 ปีที่แล้ว

      @@MultiKomentator obawiam się że druga część tego zdania.

    • @damianszymczyk5019
      @damianszymczyk5019 2 ปีที่แล้ว

      @@MultiKomentator żeton na kielnie i beton

  • @jacekrokita6742
    @jacekrokita6742 2 ปีที่แล้ว +1

    O babciu elektryczna. Tyle części i tylko dla pstryczka. ;)

    • @moje12a
      @moje12a 2 ปีที่แล้ว +1

      Na razie słyszałem tylko o matce boskiej elektrycznej.

  • @KH-lg3xc
    @KH-lg3xc 2 ปีที่แล้ว +2

    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.

    • @Paes64
      @Paes64 2 ปีที่แล้ว

      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.

  • @gregem6696
    @gregem6696 2 ปีที่แล้ว +1

    Drugi !

  • @KH-lg3xc
    @KH-lg3xc 2 ปีที่แล้ว +1

    Podstawowy problem, mielony bez końca na wszelkich forach poświęconych Arduino.

    •  2 ปีที่แล้ว +3

      I jak widać, wciąż warto go mielić.

  • @palimytonsile4371
    @palimytonsile4371 2 ปีที่แล้ว +1

    Pierwszy

  • @gnbandi5663
    @gnbandi5663 2 ปีที่แล้ว +1

    Drugi