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

[ATtiny2313][C] Obsługa klawiszy w przerwaniu PCINT

Electix 29 Lis 2010 14:51 2829 5
REKLAMA
  • #1 8804313
    Electix
    Poziom 21  
    Witam serdecznie. Mam do pinów PB[7...5] oraz pinów PA[2...1] podpięte przyciski. Piny te oczywiście konfiguruję jako wejścia z wewnętrznym podciąganiem i chciałbym zrealizować na tym sprzęcie klawiaturę obsługiwaną w przerwaniach. Ale nie chciałbym przy realizacji tego zadania wykorzystywać przerwań INT[0...1] tylko przerwania PCINT występujące na sprzęgniętych z klawiszami pinach. Z dokumentacji kontrolera wyczytałem że przerwania te aktywują się przy każdorazowej zmianie stanu na pinie na którym są uaktywnione i to jest w zasadzie jedyna możliwość jaką oferuje PCINT(no chyba ze źle zrozumiałem, jeżeli tak to proszę o wytłumaczenie idei przerwań PCINT). W moim przypadku kiedy nacisnę przycisk, to nastąpi przerwanie na zmianę stanu z 1 na 0 i przy okazji pewnie drgania zestyków wywołają jeszcze kilka takich przerwań. Kiedy puszczę klawisz, wygeneruje się kolejne przerwanie na zmianę stanu z 0 na 1 plus te nieszczęsne śmieci z zestyków. W związku z tym mam pytanie.
    Jak rozwiązać programowo obsługę tych klawiszy w przerwaniach PCINT:
    1. Aby kontroler obsługiwał klawiaturę tylko wtedy gdy się jej użyje, a nie cyklicznie?
    2. Aby poprawnie wykryć moment naciśnięcia klawisza, odfiltrować drgania zestyków?
    Za wszystkie sugestie i przykłay serdecznie dziękuję :)
  • REKLAMA
  • #2 8804457
    mirekk36
    Poziom 42  
    Przede wszystkim to rozważ dobrze czy koniecznie musisz to robić w ogóle na przerwaniach????

    Przecież spokojnie można tych kilka klawiszy skanować w pętli głównej programu i to z eliminacją drgań styków a jak zaprzęgniesz do tego jakieś jeszcze przerwanie timerka to masz w ogóle obsługę nieblokującą.
  • REKLAMA
  • #3 8804976
    Electix
    Poziom 21  
    No właśnie chciałem uniknąć cyklicznego skanowania klawiszy, a w szczególności w pętli głównej programu. Przerwania INT[1...0] (które mogą być aktywowane zboczem, co jest świetną sprawą przy klawiszach) to dodatkowe wejście do obsługi klawiatury, czego chcę uniknąć. Oba timery z kontrolerka, wykorzystuję w trybie PWM, co koliduje z wykorzystaniem ich do generacji przerwania dla klawiatury. Dlatego zacząłem głowić się nad tymi przerwaniami PCINT. Nie chcę dodawać też za dużo elementów do układu, jeżeli pewne sprawy można rozwiązać programowo. Kłopot w tym że puki co, jeszcze nie potrafię wymyślić jak ten problem rozwiązać programowo, dlatego zgłosiłem się tu z prośbą o podpowiedź. :)
  • REKLAMA
  • #4 8805340
    landy13
    Poziom 31  
    Electix napisał:
    Oba timery z kontrolerka, wykorzystuję w trybie PWM, co koliduje z wykorzystaniem ich do generacji przerwania dla klawiatury.
    Otóż niekoniecznie. Timer skonfigurowany do PWMa może także generować przerwanie od przepełnienia.
  • REKLAMA
  • #5 8805781
    Lukaszek_69
    Poziom 13  
    Witam!
    Kiedyś zmagałem się z podobnym problemem w jednym z urządzeń ale chyba ostatecznie było to zrobione w pętli głównej. Może źle zrozumiałem pierwszy post, ale przyciski podłączone do PA nie wygenerują przerwania PCINT(patrz nota katalogowa).
  • #6 8805888
    Electix
    Poziom 21  
    Cytat:
    Może źle zrozumiałem pierwszy post, ale przyciski podłączone do PA nie wygenerują przerwania PCINT(patrz nota katalogowa).

    A no tak, masz rację. :) W przypadku ATtiny2313 na PA nie będzie PCINT, ale w przypadku ATtiny2313A już tak, bo w tej wersji procesora dodali obsługę PCINT na każdym pinie każdego portu. Ja posługuję się DS'em od ATtiny2313A i czasami o tym zapominam.
    Mam pewną ideę w głowie. Spróbuję ją przetestować i najwyżej dam znać jak to wyszło. :)
REKLAMA