AVR, zliczanie impulsow n-codera

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

Reply to
Trix
Loading thread data ...

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,

Reply to
Artur Lipowski

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.