Witam,
napotkałem problem dotyczący generowania od dwóch do czterech sygnałów PWM na dwóch timerach - 8 i 16 bitowym. Posiadam Atmegę 328p z kwarcem 16 Mhz. Timer 8 bitowy ma generować przerwanie z czestotliwością 800 Hz (po 200 Hz na kanał, przy obsłudze czterech kanałów.). Timer 16 bitowy ma generować przerwanie by w efekcie PWM miał szerokość od 900 do 2100 us. Próbowałem dwóch wariantów z preskalerem 1 oraz 8, ze względu na to, że chce uzyskać sporą rozdzielczość PWM'a. Problem polega na tym, że sygnał działa bardzo dobrze przy wartościach w pobliżu 900 us, ale bardzo szybko dla szerszych wartości PWM zamiast sygnału prostokątnego uzyskuje po prostu stan wysoki na danym pinie. Czy ma ktoś pomysł gdzie leży problem? Poniżej zamieszczam fragment kodu dla zobrazowania sytuacji.
Podsumowując już na przykładzie - np. gdy time_loop wynosi wartość z pozycji LEWO - sygnał ładnie jest generowany, gdy przypiszę mu wartość PRAWO, albo nawet SRODEK - sygnał prostokątny przestaje istnieć i pojawia się stan wysoki. Będę wdzięczny za pomoc. Dziękuje i pozdrawiam.
napotkałem problem dotyczący generowania od dwóch do czterech sygnałów PWM na dwóch timerach - 8 i 16 bitowym. Posiadam Atmegę 328p z kwarcem 16 Mhz. Timer 8 bitowy ma generować przerwanie z czestotliwością 800 Hz (po 200 Hz na kanał, przy obsłudze czterech kanałów.). Timer 16 bitowy ma generować przerwanie by w efekcie PWM miał szerokość od 900 do 2100 us. Próbowałem dwóch wariantów z preskalerem 1 oraz 8, ze względu na to, że chce uzyskać sporą rozdzielczość PWM'a. Problem polega na tym, że sygnał działa bardzo dobrze przy wartościach w pobliżu 900 us, ale bardzo szybko dla szerszych wartości PWM zamiast sygnału prostokątnego uzyskuje po prostu stan wysoki na danym pinie. Czy ma ktoś pomysł gdzie leży problem? Poniżej zamieszczam fragment kodu dla zobrazowania sytuacji.
Kod: C / C++
Podsumowując już na przykładzie - np. gdy time_loop wynosi wartość z pozycji LEWO - sygnał ładnie jest generowany, gdy przypiszę mu wartość PRAWO, albo nawet SRODEK - sygnał prostokątny przestaje istnieć i pojawia się stan wysoki. Będę wdzięczny za pomoc. Dziękuje i pozdrawiam.