Witam,
na potrzeby większego projektu testuje zliczanie impulsów z czujnika szczelinowego jak poniżej:
Chcę zliczać impulsy z dwóch czujników.
Wykorzystuje do tego przerwania zewnętrzne INT0 i INT1, podłączając wyjścia sygnału z czujników odpowiednio do pinów PD2 i PD3.
Przerwania ustawione są na zbocze opadające.
W przerwaniu inkrementuję tylko zmienną przechowującą ilość impulsów, nic więcej.
Z tego względu, że mam na razie jeden czujnik, podłączyłem wyjście czujnika do obydwóch pinów jednocześnie.
W pętli głównej wysyłam tylko wartości dwóch zmiennych na LCD.
W dużej większości przypadków wartości są równe (sygnał dochodzi w tym samym czasie do PD2 i PD3).
Jednak zdarzają się sytuacje, kiedy wartości są różne, zawsze zmienna inkrementowana w INT1 jest mniejsza.
Najczęściej ma to miejsce przy szybkich zmianach stanu na czujniku, ale przy wolnych tez się to zdarza.
Podejrzewam, że ma to związek z priorytetami przerwań i z tym, że impulsy do obydwóch przerwań dochodzą w tym samym czasie.
Po prostu czasami jedno z nich INT1 nie ma kiedy się wykonać.
Pewnie jakby były podłączone dwa czujniki, sytuacja albo by się nie powtarzała, albo występowała by rzadziej .
Jednak może zdarzyć się teoretyczna sytuacja kiedy sygnały z dwóch czujników dotrą w tym samym czasie.
Szacuję, że w docelowym projekcie sygnały będą występowały z częstotliwością maksymalnie kilku - kilkunastu Hz.
Proszę was o pomoc w rozwiązaniu problemu.
Mam dwa pomysły:
1) Wyprowadzę sygnały do innych pinów i przez diody do jednego pinu przerwania zewnętrznego.
W przerwaniu będę sprawdzał i zliczał zmiany stanów na tych pinach, co w (mojej) teorii powinno dać dobre wyniki.
2) Wyprowadzę sygnały do innych portów i w przerwaniu od timera będę sprawdzał i zliczał zmiany stanów.
Bardziej skłaniałbym się do rozwiązania 1. Zliczanie impulsów z tych dwóch czujników jest jedna z ważniejszych rzeczy w projekcie, a przerwania INT0 i INT1 mają najwyższy priorytet wśród przerwań. Dzięki temu mam pewność, że nie zgubię żadnego sygnału.
Proszę o sugestię, jak mogę rozwiązać ten problem.
Z góry dzięki.
na potrzeby większego projektu testuje zliczanie impulsów z czujnika szczelinowego jak poniżej:
Chcę zliczać impulsy z dwóch czujników.
Wykorzystuje do tego przerwania zewnętrzne INT0 i INT1, podłączając wyjścia sygnału z czujników odpowiednio do pinów PD2 i PD3.
Przerwania ustawione są na zbocze opadające.
W przerwaniu inkrementuję tylko zmienną przechowującą ilość impulsów, nic więcej.
Z tego względu, że mam na razie jeden czujnik, podłączyłem wyjście czujnika do obydwóch pinów jednocześnie.
W pętli głównej wysyłam tylko wartości dwóch zmiennych na LCD.
W dużej większości przypadków wartości są równe (sygnał dochodzi w tym samym czasie do PD2 i PD3).
Jednak zdarzają się sytuacje, kiedy wartości są różne, zawsze zmienna inkrementowana w INT1 jest mniejsza.
Najczęściej ma to miejsce przy szybkich zmianach stanu na czujniku, ale przy wolnych tez się to zdarza.
Podejrzewam, że ma to związek z priorytetami przerwań i z tym, że impulsy do obydwóch przerwań dochodzą w tym samym czasie.
Po prostu czasami jedno z nich INT1 nie ma kiedy się wykonać.
Pewnie jakby były podłączone dwa czujniki, sytuacja albo by się nie powtarzała, albo występowała by rzadziej .
Jednak może zdarzyć się teoretyczna sytuacja kiedy sygnały z dwóch czujników dotrą w tym samym czasie.
Szacuję, że w docelowym projekcie sygnały będą występowały z częstotliwością maksymalnie kilku - kilkunastu Hz.
Proszę was o pomoc w rozwiązaniu problemu.
Mam dwa pomysły:
1) Wyprowadzę sygnały do innych pinów i przez diody do jednego pinu przerwania zewnętrznego.
W przerwaniu będę sprawdzał i zliczał zmiany stanów na tych pinach, co w (mojej) teorii powinno dać dobre wyniki.
2) Wyprowadzę sygnały do innych portów i w przerwaniu od timera będę sprawdzał i zliczał zmiany stanów.
Bardziej skłaniałbym się do rozwiązania 1. Zliczanie impulsów z tych dwóch czujników jest jedna z ważniejszych rzeczy w projekcie, a przerwania INT0 i INT1 mają najwyższy priorytet wśród przerwań. Dzięki temu mam pewność, że nie zgubię żadnego sygnału.
Proszę o sugestię, jak mogę rozwiązać ten problem.
Z góry dzięki.
