Pozwolę sobie jeszcze raz nadużyć Waszej uprzejmości i znowu zwracam się z prośbą o pomoc
Sprawa dotyczy sterownika do serwonapędu (na razie jednego, później rozbuduje do 8).
Taktowanie 8MHz.
Oto kod programu:
Serwo podłączone do dowolnego pinu PORTB. TIMER2 odmierza 20ms i generuje przerwanie. W przerwaniu zerowany jest TIMER1, ustawiany jest PORTB i włączane jest zezwolenie na przerwanie od TIMER1. Mija czas zależny od wartości OCR1A ( ustawiłem na razie na 1,5ms). Po tym czasie TIMER1 generuje przerwanie. W tym przerwaniu PORTB jest zerowany i wyłączane jest zezwolenie na przerwanie od TIMER1.
Program się kompiluje. Przerwania się uruchamiają. Jednak serwo ucieka w skrajne położenie i próbuje iść dalej, tak jakby OCR1A była z poza zakresu pracy serwa.
Czy ktoś ma jakiś pomysł co może być źle w tym programie?
Pozdrawiam
Sprawa dotyczy sterownika do serwonapędu (na razie jednego, później rozbuduje do 8).
Taktowanie 8MHz.
Oto kod programu:
Kod: C / C++
Serwo podłączone do dowolnego pinu PORTB. TIMER2 odmierza 20ms i generuje przerwanie. W przerwaniu zerowany jest TIMER1, ustawiany jest PORTB i włączane jest zezwolenie na przerwanie od TIMER1. Mija czas zależny od wartości OCR1A ( ustawiłem na razie na 1,5ms). Po tym czasie TIMER1 generuje przerwanie. W tym przerwaniu PORTB jest zerowany i wyłączane jest zezwolenie na przerwanie od TIMER1.
Program się kompiluje. Przerwania się uruchamiają. Jednak serwo ucieka w skrajne położenie i próbuje iść dalej, tak jakby OCR1A była z poza zakresu pracy serwa.
Czy ktoś ma jakiś pomysł co może być źle w tym programie?
Pozdrawiam