Mikrokontrolery - Jak zacząć?

... czyli zbiór praktycznej wiedzy dot. mikrokontrolerów.

czwartek, 3 marca 2011

EPP: Drgania styków - zmora początkujących


Autor: Dondu

Większość projektów opartych o mikrokontrolery zawiera, co najmniej jeden przycisk. Przyciski są urządzeniami mechanicznymi, ze wszystkimi z tego wynikającymi wadami, z których najważniejszą są drgania styków w czasie jego przyciskania i puszczania.

Problem ten jest w szczególności istotny w przypadku impulsatorów (enkoderów) stykowych.

Skutki drgań styków eliminować sprzętowo lub za pomocą programu (ang. deboucing).

Najprostszym programowym sposobem jest sprawdzanie stanu przycisku, a w przypadku wykrycia jego naciśnięcia odczekanie kilku- lub kilkunastu milisekund i ponowne sprawdzenie, czy jest nadal naciśnięty.


Przykładowy pseudo kod:
if(czy_przycisk_przycisniety){

   //tak przyciśnięty
   czekaj_10_milisekund;

   if(czy_przycisk_przycisniety){
      //tak nadal przyciśnięty

       ..... wykryto przyciśnięcie ....

   }
}

Takie rozwiązanie jest poprawne, ale nieefektywne z powodu blokowania mikrokontrolera (CPU) w pętli opóźnienia (w przykładzie, aż na 10 milisekund). Ale gdy chcemy to opóźnienie zmniejszyć do np. 1ms, algorytm ten nie zapewnia 100% poprawności wykrycia faktu przyciśnięcia, ponieważ po 1 ms przycisk może nadal drgać.


Jak więc powinien wyglądać kod pozwalający eliminować skutki drgań styków?

I to jest właśnie następne zadanie z cyklu Efektywne Planowanie Projektu.

Cel:
Opracować dowolny algorytm eliminacji skutków drgań styków.


Warunki:
  1. tylko program, bez wykorzystania dodatkowych elementów elektronicznych,
  2. możesz wykorzystać dowolny "bebech" znajdujący się w mikrokontrolerze,
  3. obsługa 4 przycisków (na pinach PB0-PB3) zwierających do GND,
  4. zmienna globalna stan_przyciskow ma zawierać na czterech najmłodszych bitach aktualny stan każdego z przycisków (stan pewny, czyli po eliminacji skutków drgań),
  5. pozostałe określone dla całego cyklu EPP:  Efektywne Planowanie Projektu

Termin:
Termin nadsyłania rozwiązań do: 26 lutego 2012r.
Termin już upłynął, ale możesz przesłać swoje rozwiązanie, jeżeli jest ono inne niż opublikowane. 


Chcę przesłać swoje rozwiązanie!
Wszelkie zasady znajdziesz tutaj: EPP: Zasady uczestnictwa i publikacji

Pytania
Jeżeli masz pytania dot. tego zadania, zadawaj je w tym temacie w formie komentarza, w ten sposób wszyscy będą mogli przeczytać pytanie i moją odpowiedź.

Dotychczasowi autorzy rozwiązań z cyklu EPP:
Listę autorów, którzy nadesłali swoje rozwiązania do któregoś z artykułów z cyklu EPP, możesz znaleźć tutaj: Autorzy rozwiązań

Oceń artykuł.
Wasze opinie są dla nas ważne, gdyż pozwalają dopracować poszczególne artykuły.
Pozdrawiamy, Autorzy
Ten artykuł oceniam na:

5 komentarzy:

  1. Uważam ten sposób na przeczekiwanie drgań styków za mało elegancji. Nie zabezpiecza on przed przytrzymaniem klawisza, lepszym rozwiązaniem jest:

    if(czy_przycisk_przycisniety)
    {
    /* opóżnienie aż drgania na stykach ustaną */
    _delay_ms(80);
    /* oczekiwanie na zwolnienie przycisku */
    while(czy_przycisk_przycisniety) {}
    /* opóżnienie aż drgania na stykach ustaną */
    _delay_ms(80);
    }

    OdpowiedzUsuń
  2. Problem drgań styków można rozwiązać na wiele sposobów. Twój sposób jest poprawny, ale powoduje zatrzymanie programu w pętli while() aż do momentu zwolnienia przycisku. Zależnie od projektu, można sobie na to pozwolić lub nie.

    Dlatego warto popatrzeć na rozwiązania zaproponowane przez osoby które je nadesłały, a które umieszczone są na początku tego tematu.

    OdpowiedzUsuń
  3. a co myślisz o prostym zastosowaniu kondensatora?

    OdpowiedzUsuń
  4. Metoda sprzętowej eliminacji za pomocą filtru RC (rezystor pull-up i kondensator) jest bardzo skuteczną metodą. Jednakże trzeba być świadomym zjawisk jakie są generowane w trakcie zwierania kondensatora przyciskiem. Jeśli są one istotne dla projektu, należy im przeciwdziałać. Pisałem o tym w tym artykule.

    OdpowiedzUsuń
  5. Cześć, Mam pytanie. Jak w podanych rozwiązaniach sprawdzić stan konkretnego przycisku?

    OdpowiedzUsuń

Działy
Działy dodatkowe
Inne
O blogu




Dzisiaj
--> za darmo!!! <--
1. USBasp
2. microBOARD M8


Napisz artykuł
--> i wygraj nagrodę. <--


Co nowego na blogu?
Śledź naszego Facebook-a



Co nowego na blogu?
Śledź nas na Google+

/* 20140911 Wyłączona prawa kolumna */
  • 00

    dni

  • 00

    godzin

  • :
  • 00

    minut

  • :
  • 00

    sekund

Nie czekaj do ostatniego dnia!
Jakość opisu projektu także jest istotna (pkt 9.2 regulaminu).

Sponsorzy:

Zapamiętaj ten artykuł w moim prywatnym spisie treści.