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

Комментарии • 88

  • @piotrcisek494
    @piotrcisek494 Год назад +8

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

  • @Informatykwakcji
    @Informatykwakcji Год назад +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. Год назад +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 Год назад +4

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

  • @polskizwiazeknaczelnychhej1100
    @polskizwiazeknaczelnychhej1100 Год назад +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

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

  • @MultiKomentator
    @MultiKomentator Год назад +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

  • @juzf
    @juzf Год назад +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

  • @R.Rumian
    @R.Rumian Год назад +2

    Dzięki przyda mi się

  • @boleslawwroblewski6838
    @boleslawwroblewski6838 Год назад +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 Год назад

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

    • @marius1677
      @marius1677 Год назад

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

  • @simulatorMarcin
    @simulatorMarcin Год назад +1

    ciekawe przelączniki

  • @marcinkopa
    @marcinkopa Год назад +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ś.

    •  Год назад

      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

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

    •  Год назад +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

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

  • @Bender-Rodriguez
    @Bender-Rodriguez Год назад +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

      Dlatego powstają rozwiązania sprzętowe :)

    • @TomekNagisa
      @TomekNagisa Год назад +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.

  • @AmatorElektronik
    @AmatorElektronik Год назад +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

  • @pokrec
    @pokrec Год назад +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...

    •  Год назад +8

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

    • @MultiKomentator
      @MultiKomentator Год назад +3

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

    • @moje12a
      @moje12a Год назад

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

    • @damianszymczyk5019
      @damianszymczyk5019 Год назад

      @@MultiKomentator żeton na kielnie i beton

  • @piotrodzysk4444
    @piotrodzysk4444 Год назад +1

    Pozdrawiam.#

  • @zenonpompka
    @zenonpompka Год назад +1

    💪

  • @domozs4370
    @domozs4370 Год назад +2

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

  • @solarr2
    @solarr2 Год назад +2

    👍🇵🇱🇵🇱👍

  • @ryszardskoczny1739
    @ryszardskoczny1739 Год назад +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?

    •  Год назад +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 Год назад +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

  • @Trabantoslaw
    @Trabantoslaw Год назад +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.

  • @cyniu88
    @cyniu88 Год назад +2

    Jakim programem robione są pomiary i rysowany jest wykres ?

    •  Год назад +4

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

  • @andrzejlisek
    @andrzejlisek Год назад +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?

    •  Год назад

      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 Год назад +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 Год назад +1

      tez mnie to ukulo, podrzuce tez podobny material rs elektroniki ruclips.net/video/J4mZHf0pH8Y/видео.html

  • @Jedendwa0
    @Jedendwa0 Год назад +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.
    ruclips.net/video/Yk1Q6Kk96bs/видео.html

  • @incxxxx
    @incxxxx Год назад +1

    ok

  • @KH-lg3xc
    @KH-lg3xc Год назад +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 Год назад

      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.

  • @marcinzjajami9315
    @marcinzjajami9315 Год назад +1

    Mikrofon jako oscyloskop.... WOW ;)

    •  Год назад +1

      Nie mikrofon, tylko wejście mikrofonowe.

    • @marius1677
      @marius1677 Год назад

      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 Год назад

      Aha,no i gramofonowe nie jest liniowe.

    • @sunleostudio7969
      @sunleostudio7969 Год назад

      dobry dzwięk

    •  Год назад

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

  • @michastepien8326
    @michastepien8326 Год назад

    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.

    • @michastepien8326
      @michastepien8326 Год назад

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

  • @Vanilla-du4oh
    @Vanilla-du4oh Год назад +3

    Ostatni xd

  • @sunleostudio7969
    @sunleostudio7969 Год назад +1

    poraża mnie pana wiedza

  • @KH-lg3xc
    @KH-lg3xc Год назад +1

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

    •  Год назад +2

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

  • @jacekrokita6742
    @jacekrokita6742 Год назад +1

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

    • @moje12a
      @moje12a Год назад +1

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

  • @gregem6696
    @gregem6696 Год назад +1

    Drugi !

  • @gnbandi5663
    @gnbandi5663 Год назад +1

    Drugi

  • @palimytonsile4371
    @palimytonsile4371 Год назад +1

    Pierwszy

  • @TomekNagisa
    @TomekNagisa Год назад +1

    Pytanie, po co dodatkowy przerzutnik Schmitta, skoro na każdym pinie m328p taki przerzutnik jest (wbudowany, sekcja 13.2 w DS)?

    • @andrzejlisek
      @andrzejlisek Год назад +2

      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.

    •  Год назад +1

      Dokładnie, to jest płytka edukacyjna i postanowiono użyć tutaj takiego przykładowego rozwiązania.

    • @TomekNagisa
      @TomekNagisa Год назад

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

    • @TomekNagisa
      @TomekNagisa Год назад

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