Witam.A czy ktoś ma przykład samej obsługi enkodera w C? Chodzi mi o to czy jest zrealizowana tylko na przerwaniach, czy w trybie licznika (np CTC), czy też licznika który liczy góra/dół (tego akurat nie wiem jak zrealizować - jeszcze)
Ja obsługując impulsator (działa tak samo jak enkoder) użyłem takiego sposobu:
- jedno z wyjść np. A podpinam pod przerwanie zewnętrzne przykładowo INT0, które reaguje zarówno na zbocze narastające jak i opadające,
- w przerwaniu badam if'em wartość ex-or obu kanałów i na tej podstawie rozpoznaje kierunek obrotu
- w przerwaniu inkrementuje bądź dekrementuje zmienną "pozycja", która prezentuje aktualną pozycją wału.
Przykładowy kod w C wygląda tak:
Kod: Zaznacz cały
#define ENKODER_A bit_is_clear (PIND, 2)
#define ENKODER_B bit_is_clear (PIND, 3)
ISR (INT0_vect)
{
if ( ENKODER_A ^ ENKODER_B ) pozycja++;
else pozycja--;
}
