Brak produktów
Długo zastanawiałem się, w jaki sposób i jakie tematy poruszyć w artykułach o timerach. W ATmega timery były bardzo rozbudowane i dosyć mocno zagmatwane. W XMEGA bałagan w rejestrach, znany z klasycznych AVR-ów, został uporządkowany, lecz dołożono szereg różnych możliwości, które mogą przytłoczyć niedoświadczonego programistę. W dodatku, liczniki mogą współpracować z systemem zdarzeń, który sam w sobie udostępnia wiele ciekawych możliwości.
W mikrokontrolerach XMEGA timery są ściśle powiązane z portami. Spójrzmy na schemat procesora ATxmega128A3U, przedstawiony poniżej. Timery oznaczone są skrótem TC odTimer/Counter. W portach C, D, E dostępne są dwa timery o numerach 0 i 1, a w porcie F mamy tylko jeden timer o numerze 0. Numer oznacza typ timera. Aby skonfigurować te timery, musimy odwoływać się do nich używając ich nazw, które są następujące: TCC0, TCC1, TCD0, TCD1, TCE0, TCE1, TCF0. Przyporządkowanie portom oznacza, że wejścia i wyjścia timera, takie jak PWM czy przechwytywanie, dostępne są na określonych pinach portu, który posiada dany timer.
Wszystkie timery typu 0 i 1 w mikrokontrolerach XMEGA są 16-bitowe, a więc mogą liczyć od 0 do 65535. Korzystając z systemu zdarzeń (który będzie opisany w późniejszych odcinkach) możemy timery łączyć ze sobą, co pozwala uzyskać timer od długości nawet 112 bitów. W nowszych modelach XMEGA z rodziny AU możemy timery 16-bitowe podzielić na dwa niezależne timery 8-bitowe, które nazywamy timerami typu 2. W ten sposób z 7 timerów możemy uzyskać aż 14 timerów w jednym procesorze (a cały czas omawiamy ATxmega128A3U, modele A1U mają jeszcze więcej peryferiów).
Warto wiedzieć, że każdy timer może liczyć w górę lub w dół, w zależności od naszych potrzeb, a zmianę kierunku liczenia wywołuje się ustawiając odpowiedni bit w rejestrze konfiguracyjnym.
Timery mają szereg rejestrów i zanim zaczniemy pisać programy, poznajmy najważniejsze z nich:
Timery w mikrokontrolerach XMEGA mogą być taktowane sygnałem z systemu dystrybucji sygnałów zegarowych lub mogą pochodzić w systemu zdarzeń. System zdarzeń daje bardzo duże możliwości i jest to temat na osobny artykuł. Sygnał zegarowy możemy podzielić preskalerem, podobnie jak w ATmega.
Przepełnienie licznika oraz wystąpienie zdarzeń CCx może generować przerwanie lub zdarzenie dla systemu zdarzeń oraz DMA.
Z bardziej wyrafinowanych możliwości timerów w mikrokontrolerach ATxmega należy wyszczególnić:
Prostsze możliwości timerów XMEGA poznamy w kilku kolejnych odcinkach kursu, a czytelników zainteresowanych wykorzystaniem bardziej zaawansowanych funkcji odsyłam do książki Tomasza Francuza AVR. Praktyczne projekty, w której zostały szczegółowo opisane.