Witam wszystkich.
Napisałem program w którym steruję jasnością LED za pomocą enkodera, a wartość maksymalna licznika od PWM jest wyświetlana na LCD. Wszystko działa super z jednym wyjątkiem.
Gdy pokręcę enkoderem by zmniejszyć wartość OCR2A z 1 do 0, dioda gaśnie całkowicie. Wyłącza się PWM, pin przełącza się w stan niski. Gdy jednak OCR2A ma wartość 255 i przekręcę enkoderem w prawo, tak by zmienna
uint8_t pwm przyjęła wartość 255+1 czyli 0, dioda nadal pozostaje zapalona
z pełną jasnością. W tym czasie LCD wyświetla wartość zmiennej
pwm i faktycznie wynosi ona 0. Nie rozumiem czemu w takim razie nie zadziałało wyłączenie PWM.
Do celów testowych dopisałem funkcję która przypisuje zmiennej
pwm wartość 0, wyłącza timer, ustawia pin PB3 na 0 i wysyła wartość zmiennej do LCD. W ten sposób zauważyłem, że jestem w stanie wyłączyć diodę tylko, gdy OCR2A ma wartość poniżej 210. Od 210 jest zero reakcji na przycisk.
Skąd się bierze takie zachowanie? To jakieś zabezpieczenie przed zbyt gwałtowną zmianą wartości? Timer działa w trybie fast-PWM.
ATMega328p 16Mhz
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.