Witam
Mam problem ze złym zliczaniem impulsów podawanych z impulsatora.
Zbudowałem impulsator z wykorzystaniem silnika krokowego wg tego projektu:
https://www.elektroda.pl/rtvforum/topic1888379.html
Ogólna praca tego układu polega na wystawianiu stanu niskiego po wykryciu "kroku" silnika na pewien czas na jednym z dwóch wyjść (obroty lewe lub prawe).
Następnie podłaczyłem go do mikrokontrolera Atmega8, poprzez wejścia INT0 i INT1. Impulsy lewo/prawo zliczam wykorzystając przerwania.
Sam impulsator działa bez zarzutu (przynajmniej tak mi się wydaje). Problem jest taki, że mikroprocesor zlicza zbyt szybko oraz nierównomiernie impulsy. Aby nie komplikować sprawy sposób dojścia do tego wytłumaczę w ten sposób:
Posiadam dwie diody LED podłaczone do wyprowadzeń uC. Jedna odpowiada za sygnalizowanie prostoliniowego narastania liczby impulsów. Po prostu zapala się gdy liczba impulsów jest parzysta, a gaśnie gdy nieparzysta. Druga dioda ma się zapalić po okreslonej liczbie impulsów. Wynik jest taki, że pierwsza dioda nie miga równomiernie (pomimo stałej predkości impulsatora), czasem sie zawiesza, a druga dioda zdecydowanie za szybko się zapala.
Zmierzyłem dwoma sposobami działanie impulsatora. Na wyjściu umieściłem diodę LED i zakręciłem równomiernie silnikiem krokowym. Dostałem równomierne miganie diody. Drugi sposób to zdjęcie przebiegu oscyloskopem. Jako, że oscyloskopu nie mam to posłużyłem się wersją testową programu Zelscope. Program umożliwia zdejmowanie przebiegów na wejściu karty dźwiękowej.
Układ podłączyłem w taki sposób:
Otrzymałem następujący przebieg:
Impulsator połączyłem bezpośrednio pod posrty INT0 oraz INT1. Próbowałem zastosować rezystory pull-down 10k, ale nie przyniosło to żadnych efektów.
Kod obsługi przerwań:
Użycie makr ISR nic nie zmienia.
Proszę o pomoc, bo już rozkładam powoli ręce przy tym.
Pozdrawiam,
Mariojas
Mam problem ze złym zliczaniem impulsów podawanych z impulsatora.
Zbudowałem impulsator z wykorzystaniem silnika krokowego wg tego projektu:
https://www.elektroda.pl/rtvforum/topic1888379.html
Ogólna praca tego układu polega na wystawianiu stanu niskiego po wykryciu "kroku" silnika na pewien czas na jednym z dwóch wyjść (obroty lewe lub prawe).
Następnie podłaczyłem go do mikrokontrolera Atmega8, poprzez wejścia INT0 i INT1. Impulsy lewo/prawo zliczam wykorzystając przerwania.
Sam impulsator działa bez zarzutu (przynajmniej tak mi się wydaje). Problem jest taki, że mikroprocesor zlicza zbyt szybko oraz nierównomiernie impulsy. Aby nie komplikować sprawy sposób dojścia do tego wytłumaczę w ten sposób:
Posiadam dwie diody LED podłaczone do wyprowadzeń uC. Jedna odpowiada za sygnalizowanie prostoliniowego narastania liczby impulsów. Po prostu zapala się gdy liczba impulsów jest parzysta, a gaśnie gdy nieparzysta. Druga dioda ma się zapalić po okreslonej liczbie impulsów. Wynik jest taki, że pierwsza dioda nie miga równomiernie (pomimo stałej predkości impulsatora), czasem sie zawiesza, a druga dioda zdecydowanie za szybko się zapala.
Zmierzyłem dwoma sposobami działanie impulsatora. Na wyjściu umieściłem diodę LED i zakręciłem równomiernie silnikiem krokowym. Dostałem równomierne miganie diody. Drugi sposób to zdjęcie przebiegu oscyloskopem. Jako, że oscyloskopu nie mam to posłużyłem się wersją testową programu Zelscope. Program umożliwia zdejmowanie przebiegów na wejściu karty dźwiękowej.
Układ podłączyłem w taki sposób:
Otrzymałem następujący przebieg:
Impulsator połączyłem bezpośrednio pod posrty INT0 oraz INT1. Próbowałem zastosować rezystory pull-down 10k, ale nie przyniosło to żadnych efektów.
Kod obsługi przerwań:
Kod: C / C++
Użycie makr ISR nic nie zmienia.
Proszę o pomoc, bo już rozkładam powoli ręce przy tym.
Pozdrawiam,
Mariojas
