AVR, zliczanie impulsow n-codera

Aug 21, 2003 1 Replies

Witam.



Chcialem za pomoca procesora Atmel AVR zliczac impulsy n-codera (kanaly A i B). Chodzi o to, aby przy obrotach n-codera w prawo zmienna zwiekszala swoja wartosc, a przy obrotach w lewo zmniejszala. Wydaje mi sie, ze zaimplementowane w AVR liczniki potrafia tylko zliczac w jedna strone. W chwili obecnej zastosowalem taki oto kod:



long int licz = 0;



SIGNAL (SIG_INTERRUPT0) { if (!(inb(PIND) & 8)) licz++; }



SIGNAL (SIG_INTERRUPT1) { if (!(inb(PIND) & 4)) licz--; }



int main(void) { outp(0, DDRD);



outp((1


In article <bi3hiq$q8i$ snipped-for-privacy@nemesis.news.tpi.pl>, Trix wrote: ...

Jeżeli masz na mysli timery to tak (nie licząc trybu PWM w nowszych AVR).

...

Nie powinno się używać inb i outb, wkrótce znikną z avr-libc. Lepiej po prostu napisać: ....if (!(PIND & 8)).... ....GIMSK = _BV(INT0)|_BV(INT1);....

...

... Proponuję proste wyszukiwanie tematu "encoder" na AVR Freaks, naprawdę dużo już napisano na ten temat.

Pozdrawiam,

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required