logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[C]Obsługa microswitcha - poprawnie?

owocn 21 Sie 2011 00:21 8368 2
REKLAMA
  • #1 9845949
    owocn
    Poziom 10  
    Witam,

    Ucząc się programowania mikrokontrolerów, napisałem sobie procedurę obsługi microswitcha, podłączonego bezpośrednio do linii wejścia. Właściwy odczyt realizuję w przerwaniu przepełnienia timera, co około 16 ms, w ten sposób (implementacja na ATmega8):

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    W moim zamyśle działa to tak:

    Sprawdź, jeśli wciśnięty wykonaj debouncing i wpisz wartość do bufora, następnie czekaj do wykrycia zbocza narastającego (zwolnienie przycisku) i ponownie wykonaj debouncing

    Samą obsługę zdarzenia wykonuję w nieskończonej pętli w main(). Wszystko działa, ale jako, że jestem początkujący, chciałbym się upewnić, czy taki sposób jest poprawny. Szczególnie zastanawia mnie takie bezsensowne sprawdzanie bufora przy każdej iteracji pętli.

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Pozdrawiam!
  • REKLAMA
  • Pomocny post
    #2 9846076
    dondu
    Moderator na urlopie...
    Debouncing można wykonywać na wiele sposobów. Twój sposób jest jak najbardziej poprawny. Ta bezsensowność jest tylko z pozoru bezsensowna :) - jakoś trzeba poinformować main(). Taka technika jest powszechnie stosowana nie tylko do debouncingu.

    Pamiętaj także, że zawsze możesz na końcu while() w main() uśpić mikrokontroler do następnego przerwania - o ile main() nie ma innych zadań nie opartych o przerwania. Wtedy nie będzie w kółko sprawdzał KeyBuffer.

    I drobna uwaga. Stosuj zdefiniowane nazwy pinów a nie cyfry, czyli tak:

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • #3 9846086
    owocn
    Poziom 10  
    Wielkie dzięki, cieszę się, że moje rozwiązanie okazało się trafne. :)
REKLAMA