Witam,
Mam problem z programem na Atmege8a, mianowicie:
Piszę program sterujący pracą silnika (za pomocą L293D) który dodatkowo będzie zliczał w czasie impuls od przerwań zewnętrznych i tu pojawia się problem: kiedy napisałem program obsługujący tylko pracę silnika, wszystko działa sprawnie, kiedy napisałem program zliczający impulsy w czasie, również nie było problemów. Problem się pojawił, kiedy połączyłem oba programy w całość – podczas zliczania impulsów, jeśli zaczynam pracę przyciskami sterującymi silnikiem atmega gubi wartości liczników/resetuje się - pwm wraca do ustawień początkowych, timer zaczyna pracę od nowa, licznik impulsów również (przy czym timery i przerwania zew. działają sprawnie, dopóki nie zacznie się praca przycisków).
Początkowo program miał jedną pętlę główną, w której sprawdzał kierunek obrotu, sprawdzał stan przycisków – opisany problem się pojawiał, dlatego wyniosłem obsługę przycisków do podprogramów, oraz zrobiłem dwie dodatkowe pętle do obsługi każdego z kierunków – to jednak nie pomogło
Czy przyczyną mogą być przerwy czasowe potrzebne do prawidłowej pracy przycisków? Jeśli tak, to w jaki sposób to zmienić, aby działało poprawnie?
Jestem początkujący w tej dziedzinie, dlatego prosiłbym o wyrozumiałość. Za wszelkie wskazówki będę ogromnie wdzięczny.
(Co do programu to pwm musi być ustawiane w zakresie 0 -170, a przerwania maja reagować na zmianę sygnału)
Mam problem z programem na Atmege8a, mianowicie:
Piszę program sterujący pracą silnika (za pomocą L293D) który dodatkowo będzie zliczał w czasie impuls od przerwań zewnętrznych i tu pojawia się problem: kiedy napisałem program obsługujący tylko pracę silnika, wszystko działa sprawnie, kiedy napisałem program zliczający impulsy w czasie, również nie było problemów. Problem się pojawił, kiedy połączyłem oba programy w całość – podczas zliczania impulsów, jeśli zaczynam pracę przyciskami sterującymi silnikiem atmega gubi wartości liczników/resetuje się - pwm wraca do ustawień początkowych, timer zaczyna pracę od nowa, licznik impulsów również (przy czym timery i przerwania zew. działają sprawnie, dopóki nie zacznie się praca przycisków).
Początkowo program miał jedną pętlę główną, w której sprawdzał kierunek obrotu, sprawdzał stan przycisków – opisany problem się pojawiał, dlatego wyniosłem obsługę przycisków do podprogramów, oraz zrobiłem dwie dodatkowe pętle do obsługi każdego z kierunków – to jednak nie pomogło
Czy przyczyną mogą być przerwy czasowe potrzebne do prawidłowej pracy przycisków? Jeśli tak, to w jaki sposób to zmienić, aby działało poprawnie?
Jestem początkujący w tej dziedzinie, dlatego prosiłbym o wyrozumiałość. Za wszelkie wskazówki będę ogromnie wdzięczny.
(Co do programu to pwm musi być ustawiane w zakresie 0 -170, a przerwania maja reagować na zmianę sygnału)
Kod: text