TIMER i tryb CTC

TIMER i tryb CTC
Oceń opis

Co to u licha jest ten TIMER i tryb CTC?

Krótko mówiąc  “Clear on Timer Compare”, w skrócie CTC – czyli jeden z trybów w jakim może pracować timer µC. Timer to krótko mówiąc jednostka „zliczająca” stosowana do odmierzania przedziału czasu. Jak to działa? Po prostu µC sprzętowo porównuje wartość zliczającego timera z pożądaną wartością umieszczoną w stosownym rejestrze. Gdy wartość ta zostanie osiągnięta, timer zostaje automatycznie wyzerowany i ustawiona zostaje flaga w rejestrze statusu (status register). Tymczasem kolejny cykl zliczania dalej trwa. Więc musimy tylko sprawdzać czy odpowiednia flaga w rejestrze statusu jest ustawiona i w stosownym dla nas momencie zerować ją.

Zastosowanie jakie potrzebowałem: generator przebiegu prostokątnego o wypełnieniu 50% ze zmienną częstotliwością, w określonym przedziale 😉 Wydaje się trochę skomplikowane niemniej dzięki możliwości konfiguracji timerów, µC odwali za nas całą robotę sprzętowo i nie trzeba pisać zawikłanego programu – huurraaa.

Częstotliwość na wyjściu zależna będzie od częstotliwości rezonatora (zegara głównego) oraz podzielnika Prescale. Dodatkowo mamy możliwość jej modyfikowania w programie dzięki wpisywaniu stosownej wartości np do rejestru Compare1b. Pin OC1B będzie zmieniał stan na przeciwny (Compare B = Toggle) po każdym przerwaniu, pin OC1A będzie odłączony od timera (Compare A = Disconect), timer będzie automatycznie zerowany (Clear Timer = 1) co bardzo upraszcza i przyspiesza obsługę. (dla przykładu konfiguracji powyżej)

Fachowo mówiąc w trybie CTC wartość timera jest zerowana, gdy TCNTx jest równe OCRxA. Tak więc należy zwrócić szczególną uwagę przy zmianie wartości do porównania by uniknąć sytuacji kiedy aktualna wartość timera (TCNTx), osiągnie większą wartość, niż spodziewana (OCRxA) – wpisana przed momentem do porównania. W takim wypadku nie zostanie spełniony warunek zerowania timera w określonym czasie, a dopiero po osiągnięciu maksymalnego zakresu i przepełnieniu. W takim wypadku po każdej modyfikacji wartości do porównania, można testować wartość timera czy nie jest od niej większa i w razie potrzeby zerować timer samodzielnie.

Bardzo przystępny opis na jaki natknąłem się w sieci – jak konfigurację zrobić samodzielnie, bezpośrednio na rejestrach.

Share Button
Tagi , .Dodaj do zakładek Link.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

fifteen − 9 =

This site uses Akismet to reduce spam. Learn how your comment data is processed.