Skocz do zawartości

Przyciski i diody w przerwaniu na STM32


ghost1313

Pomocna odpowiedź

Cześć,

dzisiaj na zajęciach uczelnianych dostałem od wykładowcy zadanie wywołania przerwania po naciśnięciu przycisku. Pierwsze naciśnięcie miało zapalić diodę, poczekać chwilę, zapalić drugą diodę, poczekać chwilę i zapalić trzecią. Drugie naciśnięcie miało w taki sam sposób pogasić diody, zaczynając od ostatnio zapalonej. Oczywiście zadanie skrajnie durne i od początku uczące błędnego podejścia do programowania mikrokontrolerów. Niemniej zacząłem się zastanawiać, jak można wykonać je poprawnie. Teoretycznie naciśnięcie przycisku może uruchomić timer, który zapali i pogasi te diody z pewnym opóźnieniem. To jeszcze powinno być proste, choć jestem pewien, że wykładowcy chodziło po prostu o zastosowanie zwykłego przerwania i funkcji delay w nim. Niemniej jest drugi problem - drgania styków. Jak to rozwiązać? Moim pomysłem było próbkowanie wejścia z użyciem timera, np. co 10ms, choć nie do końca wiem, czy akurat taki czas będzie odpowiedni.

Edytowano przez ghost1313
Link do komentarza
Share on other sites

Oczywiście, przeglądanie "klawiatury" - nawet w postaci jednego przycisku w obsłudze przerwania okresowego to typowe rozwiązanie. Wręcz nikt normalny nie podłącza przycisków do przerwań sprzętowych. A czy zrobisz sobie period 1ms, 5ms czy 20ms to nie ma to większego znaczenia. I tak przecież procedura programowa wyznaczająca stan stabilny powinna bazować na swoich licznikach i co najwyżej ustawisz ją na 50, 10 czy 2 takie same odczyty. Dopiero tak odfiltrowany stan - już bez żadnych odbić - przekazujesz dalej, do detektora wciśnięć, puszczeń a nawet bardziej wyrafinowanych kombinacji (dwuklik, dłuższe/krótsze naciśnięcia itp). Na tym samym przerwaniu okresowym możesz też puścić proces/automat zapalania i gaszenia LEDów - może mieć swoje własne liczniki czasu i graf przejść wyzwalany zdarzeniem (zapaleniem flagi?) otrzymanym z procesu klawiatury. Wszystko robisz na jednym timerze i żadne więcej zasoby sprzętowe do tego nie są potrzebne.

Link do komentarza
Share on other sites

Moim zdaniem nie potrzeba żadnych delay w obsłudze przerwania od switcha a nawet funkcji do filtrowania zakłóceń. Po pierwszym kliku blokujesz obsługę przycisku do czasu aż diody nie zaświecą się do końca. Gdy to nastąpi znów odblokowujesz przycisk, naciskasz -> blokujesz -> diody wygaszają się i tak w kółko. Nie widzę aby było trzeba przerywać proces w trakcie więc to powinno spełnić warunki zadania  

Link do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.