Witam,
W miarę wolnego wieczoru, zasiadłem do przetestowania programowego timer'a, który został zaprezentowany przez Mirka w rozdziale o 'systemie czasu rzeczywistego' - przy okazji - za każdym razem jak wracam do tej książki to odkrywam ją na nowo
Wykorzystałem T/C0 w mojej ATMega8 (16MHz) i zadziałał bez zarzutu, tak więc poszedłem dalej i pomyślałem, że zastąpię tym funkcję
_delay_ms(). Tak więc na szybko skorzystałem z części kodu do PWM programowego i w miejscach gdzie jest
_delay_ms(N) wstawiłem:
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Moja konfiguracja przerwania jest następująca:
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Tak wiec w pętli
while(1) wstawiam te opóźnienia:
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Jednak raczej to nie działa, bo dioda się cały czas pali.
Kod w przerwaniach dla:
-
TimerN:
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
-
PWM:
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Od razu chcę nadmienić, że PWM działa jeśli
_delay_ms() są od komentowane, a elementy z
Timer2 usunięte. Także, jak pisałem wcześniej, "timer programowy" też działa - po usunięciu kodu z PWM i wstawieniu LED_TOGGLE z wywołanie Timer2 = 1, dioda miga bardzo szybko.
Tutaj głównie proszę o podpowiedź, jak zastąpić
_delay_ms() "timerem programowym"... jakieś sugestie?
Bardzo Dziękuję,
Jan