Krauser napisał(a):
A w konfiguracji timera 0 używasz bitu WGM21 z rejestrów timera 2. Kompilator nic nie powie, ale jak czasem taki bit będzie na innej pozycji w to nie wiadomo o co chodzi. Oczywiście trudniej się sprawdza. Komentarze niezgodne z prawdą to też utrudnianie sobie roboty.
W zamyśle miał być timer0. Nie wiem dlaczego wpisałem WGM21
![Zawstydzony :oops:](https://forum.atnel.pl/images/smilies/icon_redface.gif)
Co dziwne generowanie PWM działało poprawnie na programie który wklejiłem (fakt sprawdzony oscyloskopem)
krafin napisał(a):
Ja proponuje zobaczyć w pliku lss w przerwaniu, czy aby na pewno zmienna cnt jest alokowana w ram a nie np. w rejestrze, niby static powinien to załatwić, jednak wolałbym sprawdzić, albo jeszcze lepiej zadeklaruj ją jako globalną volatile.
PWM działa, co wydaje mi się, jest potwierdzeniem poprawności tej linijki kodu.
krafin napisał(a):
Druga rzecz to nie pilnujesz aby zmienna cnt się nie przepełniła, a wystarczy jeden if().
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
cnt jest deklarowany jako zmienna 8 bitowa, inkrementacja wartości cnt=255 powoduje przypisanie cnt=0 (chyba
![Szczęśliwy :)](https://forum.atnel.pl/images/smilies/icon_e_smile.gif)
) jeżeli się mylę poprawcie mnie
![Puszcza oko ;)](https://forum.atnel.pl/images/smilies/icon_e_wink.gif)
Krauser napisał(a):
1. Swój post możesz edytować. Wtedy inni (chętni do pomocy) nie będą zagubieni. Polecam również znaczniki syntax=c
Zrobione.
Krauser napisał(a):
2. Ten timer to ma mieć preskaler 1024 ?
Wg założeń teoretycznych miał być taki, jednak nie zgadzały się częstotliwości generowanego PWM-a, dlatego zacząłem kombinować (aktualnie jest ustawiony na 8). Naniosłem poprawki do wklejonego kodu.
Teraz to wogóle jestem zaskoczony, że generownie PWM działało.
Krauser napisał(a):
3. Masz zewnętrzne rezystory podciągające na magistrali I2C ?
Tak, 4,7k