Witam,
Przedstawiam a tym artykule jak można na jednym przerwaniu obsłużyć pokazany poniżej impulsator.
Może komuś się przyda.
Wyjście B enkodera może by na innym dowolnym pinie, wymaga jedynie zmian w algorytmie.
/* wyjście impulsatora A do INT0 PORTD pin PD2
wyjście impulsatora B do PORTD pin PD1
Kompilowane i testowane na Atmega328P.
Avr Studio 4.18
Programator AVR Prog MKII */
Algorytm specjalnie tak napisałem bym mógł łatwo i obrazowo wytłumaczyć jak
to działa. W necie można znaleść sporo przykładów na obsługę impulsatora,
wszystkie przykłady które znalazłem korzystają z dwóch przerwań
INT0 i INT1. Postanowiłem zaoszczędzić jedno przerwanie i tak powstał ten algorytm.
Po wejściu w przerwanie sprawdzamy piny PD2=1 ( wejście INT0 ) i PD1=0 oraz
czy przerwanie EICRA=1 jest ustawione na 1 (reaguj na zbocze narastające)
jeżeli tak to, zmień reakcję przerwania na zbocze opadające oraz zwiększamy
zmienną licznik o jeden.
Po wejściu w przerwanie sprawdzamy piny PD2=0 ( wejście INT0 ) i PD1=1 oraz
czy przerwanie EICRA=0 jest ustawione na 0 ( reaguj na zbocze opadające )
jeżeli tak to, zmień reakcję przerwania na zbocze narastające oraz zwiększamy
zmienną licznik o jeden.
Po wejściu w przerwanie sprawdzamy piny PD2=1 ( wejście INT0 ) i PD1=1 oraz
czy przerwanie EICRA=1 jest ustawione na 1 ( reaguj na zbocze narastające )
jeżeli tak to, zmień reakcję przerwania na zbocze opadające oraz zmniejszamy
zmienną licznik o jeden.
Po wejściu w przerwanie sprawdzamy piny PD2=0 ( wejście INT0 ) i PD1=0 oraz
czy przerwanie EICRA=0 jest ustawione na 0 ( reaguj na zbocze opadające )
jeżeli tak to, zmień reakcję przerwania na zbocze narastające oraz zmniejszamy
zmienną licznik o jeden.
Proszę zwrócić uwagę na stałą zmianę sposobu reagowania przerwania INT0,
z reakcji na zbocze narastające i opadające.
Powyższy algorytm działa popranie i nie gubi impulsów oraz poprawnie je zlicza. Ewentualnie błędy mogły powstać jedynie w trakcie pisania artykułu, które nie są zamierzone.
Przedstawiam a tym artykule jak można na jednym przerwaniu obsłużyć pokazany poniżej impulsator.
Może komuś się przyda.
Wyjście B enkodera może by na innym dowolnym pinie, wymaga jedynie zmian w algorytmie.
/* wyjście impulsatora A do INT0 PORTD pin PD2
wyjście impulsatora B do PORTD pin PD1
Kompilowane i testowane na Atmega328P.
Avr Studio 4.18
Programator AVR Prog MKII */
Kod: text
Algorytm specjalnie tak napisałem bym mógł łatwo i obrazowo wytłumaczyć jak
to działa. W necie można znaleść sporo przykładów na obsługę impulsatora,
wszystkie przykłady które znalazłem korzystają z dwóch przerwań
INT0 i INT1. Postanowiłem zaoszczędzić jedno przerwanie i tak powstał ten algorytm.

Kod: text
Po wejściu w przerwanie sprawdzamy piny PD2=1 ( wejście INT0 ) i PD1=0 oraz
czy przerwanie EICRA=1 jest ustawione na 1 (reaguj na zbocze narastające)
jeżeli tak to, zmień reakcję przerwania na zbocze opadające oraz zwiększamy
zmienną licznik o jeden.

Kod: text
Po wejściu w przerwanie sprawdzamy piny PD2=0 ( wejście INT0 ) i PD1=1 oraz
czy przerwanie EICRA=0 jest ustawione na 0 ( reaguj na zbocze opadające )
jeżeli tak to, zmień reakcję przerwania na zbocze narastające oraz zwiększamy
zmienną licznik o jeden.

Kod: text
Po wejściu w przerwanie sprawdzamy piny PD2=1 ( wejście INT0 ) i PD1=1 oraz
czy przerwanie EICRA=1 jest ustawione na 1 ( reaguj na zbocze narastające )
jeżeli tak to, zmień reakcję przerwania na zbocze opadające oraz zmniejszamy
zmienną licznik o jeden.

Kod: text
Po wejściu w przerwanie sprawdzamy piny PD2=0 ( wejście INT0 ) i PD1=0 oraz
czy przerwanie EICRA=0 jest ustawione na 0 ( reaguj na zbocze opadające )
jeżeli tak to, zmień reakcję przerwania na zbocze narastające oraz zmniejszamy
zmienną licznik o jeden.
Proszę zwrócić uwagę na stałą zmianę sposobu reagowania przerwania INT0,
z reakcji na zbocze narastające i opadające.
Końcowa wersja czterech najważniejszych lini.
Kod: text
Przy tej formie zapisu program jest mniejszy o 156 bajtów.
Tak wykazuje w moim przypadku AvrStudio.
Tak wykazuje w moim przypadku AvrStudio.
Powyższy algorytm działa popranie i nie gubi impulsów oraz poprawnie je zlicza. Ewentualnie błędy mogły powstać jedynie w trakcie pisania artykułu, które nie są zamierzone.
Fajne? Ranking DIY
