Witam.
Atmega324 (20MHz), do niej podpięte kilka rzeczy jak np. czujki, przyciski, ekspandery, diody oraz oled ssd1306 na I2C.
Problem:
jeśli nie za komentuję inicjalizacji Timera2 to OLED potrafi się "przyciąć" -> cały procek się wiesza bo kontrolna dioda migająca w pętli głównej przestaje świecić. Np. mkMenu działa sobie super ale niestety jak połączymy to z repeat i np. ustawiam zmienną w menu od 0 do 7, to robiąc to powoli działa wszystko ok, ale jak przytrzymam przycisk to wystarczy 3 obiegi w koło (około 4sekundy to trwa) i procek zawiśnie.
Również wcześniej miałem kłopoty z funkcją mk_ssd1306_refresh_pages gdyż czasem powodowała że układ stron (pages na oled) się zmieniał i po restarcie np. page0 zaczynało się od page6. Przykład z animacją pojawiającą się z prawej i znikającą z lewej przy użyciu mk_ssd1306_refresh_pages, też nie działał (animacja potrafiła stanąć w pewnym miejscu). Zaznaczę że po wyłączeniu Timera2 problem nie występował.
Timer0 używam do programowych zwalniaczy (dioda, przyciski itp), Timer2 do wysterowania PWM dla 0-16 taśm led poprzez ekspandera (obecnie podpięte zwykłe diody przez tranzystory). Udało mi się uzyskać 50Hz dla 128PWM'a, metodą "diodową" zmierzyłem że taki PWM zabiera mi około 35% czasu programu.
kilka fragmentów kodów
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.