Witam,
Od jakiegoś czasu bawię się uC at90usb646. Do pinów portu B mam podłączony wyświetlacz LED. Zabrałem się za zrobienie programowego PWM. Wykorzystałem do tego dwa przerwania w trybie Fast PWM: przerwanie od przepełnienia licznika timer0 oraz przerwana od porównania wartości rejestru OCR z wartością rejestru TCNT0.
Rozumiem że przerwania występują w momentach tak jak na wykresie poniżej(z DS).
Problem polega na tym, że przy włączonym przerwaniu od przepełnienia, a wyłączonym od Compare wyświetlacz 'miga' jak obliczyłem z f=61[Hz]. Widać minimalnie to miganie. Natomiast, gdy włączam obsługę obu przerwań, wyświetlacz owszem przygasa przy zmianie wypełnienia, lecz przestaje 'migać'. Tak jakby zmianie uległa częstotliwość PWM. Zamieszczam schemat, wykres, kod. Proszę o wytłumaczenie, czy jest tak jak myślę.
![[at90][c]Problem z częstotliwością w trybie Fast PWM [at90][c]Problem z częstotliwością w trybie Fast PWM](https://obrazki.elektroda.pl/8181036300_1321091218_thumb.jpg)
Od jakiegoś czasu bawię się uC at90usb646. Do pinów portu B mam podłączony wyświetlacz LED. Zabrałem się za zrobienie programowego PWM. Wykorzystałem do tego dwa przerwania w trybie Fast PWM: przerwanie od przepełnienia licznika timer0 oraz przerwana od porównania wartości rejestru OCR z wartością rejestru TCNT0.
Rozumiem że przerwania występują w momentach tak jak na wykresie poniżej(z DS).
Problem polega na tym, że przy włączonym przerwaniu od przepełnienia, a wyłączonym od Compare wyświetlacz 'miga' jak obliczyłem z f=61[Hz]. Widać minimalnie to miganie. Natomiast, gdy włączam obsługę obu przerwań, wyświetlacz owszem przygasa przy zmianie wypełnienia, lecz przestaje 'migać'. Tak jakby zmianie uległa częstotliwość PWM. Zamieszczam schemat, wykres, kod. Proszę o wytłumaczenie, czy jest tak jak myślę.
Kod: C / C++