Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Enkoder obrotowy XMega - przerwania

m72 12 Mar 2017 23:07 918 9
  • #1 12 Mar 2017 23:07
    m72
    Poziom 12  

    Pozwolę sobie jeszcze raz po czasie poruszyć temat enkodera obrotowego.
    Jak zmodyfikować taki program żeby każda zmiana stanu enkodera generowała przerwanie. Chodzi o to żeby nie czytać stanu rejestru TCC0.CNT cyklicznie i sprawdzać czy przypadkiem coś się w nim nie zmieniło tylko odczytywać go dopiero po wystąpieniu przerwania.

    0 9
  • #3 12 Mar 2017 23:55
    m72
    Poziom 12  

    Zależy mi na wykorzystaniu sprzętowej obsługi enkodera która jest dostępna w XMegach. Działa to świetnie ale bez generowania przerwania podczas zmiany stany jest bez sensu.

    0
  • #5 13 Mar 2017 00:15
    m72
    Poziom 12  

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Tutaj jest cały czas na bieżąco sprawdzany stan TCC0.CNT
    A ja chcę żeby dopiero ruch enkoderem spowodował przerwanie i dopiero wtedy ma nastąpić odczyt.

    0
  • #7 13 Mar 2017 12:44
    m72
    Poziom 12  

    Chyba się nie rozumiemy, napiszę jeszcze raz - inaczej.
    Nie wiem czy miałeś do czynienia z Xmegami.
    One mają wbudowaną sprzętowa obsługę enkodera. Nie trzeba sprawdzać "ifami" korelacji między stanami pinów enkodera bo one są cały czas aktualizowane w rejestrze TCC0.CNT i jedynym zadaniem jest odczytanie gotowego wyniku z rejestru. Działa to świetnie, wiele lepiej niż dla kodu "klepanego z palca" ale mi chodzi o to żeby nie odczytywać w pętli cały czas stanu enkodera bo przeważnie 99,9% czasu taki "potencjometr enkoderowy" nie jest uzywany podczas pracy tylko o to że dopiero jak nim ruszę to wygeneruje się przerwanie i tam sobie odczytam stan.
    Kolego to co napisałeś wiem że działa, też mam programową obsługę enkodera ale chodzi o sprzętową.

    0
  • #8 13 Mar 2017 13:18
    373522
    Użytkownik usunął konto  
  • #9 13 Mar 2017 15:20
    m72
    Poziom 12  

    Cytat:
    Można pewnie ustawić jakiś Event, ale najprościej jest ustawić na pinach enkodera PinChangeInterrupt.

    No właśnie o to pytam jak to zrobić w C (co dodać do kodu z linku)bo próbowałem ale coś mi nie wychodzi.

    0
  • #10 13 Mar 2017 15:48
    373522
    Użytkownik usunął konto