Witam wszystkich.
Postanowiłem pobawić się serwem SG-5010 i jak to zwykle bywa coś nie działa
![Puszcza oko ;)](https://forum.atnel.pl/images/smilies/icon_e_wink.gif)
.
Napisałem prosty program w którym steruje serwem przy pomocy 3 przycisków w następujący sposób
Gdy trzymam 1 przycisk to serwo powinno kręcić się w lewo, 2 serwo kręci się w prawo a 3 po prostu stoi w miejscu.
Używam ATmega32 taktowanie 8Mhz wewnętrzny oscylator
Mam problem z ustawieniem timera, po nieudanej próbie użycia timera sprzętowego postanowiłem spróbować z timerem programowym tak jak było pokazane w BB, oczywiście bez skutku.
Timer jest ustawiony w ten sposób :
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Pętla główna:
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Przerwanie:
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Chciałem osiągnąć częstotliwość 50 Hz tak aby najwygodniej sterować serwem. wartości zmiennej pwm(volatile). Wartości tejże zmiennej wyszły mi z obliczeń :
Dla f=50Hz => T=20ms
2ms/20ms = 1/10
2ms(skręt podajże w prawo)
1/10 * 255 (wielkość zmiennej licznik) = 25,5 więc w przybliżeniu pwm = 26.
Zasadnicze pytanie brzmi czy źle liczę, źle ustawiłem timer czy oba ?
![Puszcza oko ;)](https://forum.atnel.pl/images/smilies/icon_e_wink.gif)
Będę wdzięczny za każdą pomoc
PS. W internecie wyczytałem że najlepszym sposobem jest ustawienie trybu fast pwm (tryb 14) z użyciem jakiegoś rejestru ICR1, ale nigdzie nie mogłem znaleźć informacji (również w nocie ) o tym jak tego rejestru użyć.