Witam ponownie...
Przy pracach nad klasą do UARTA okazało się, że będę potrzebował pewną klasę pomocniczą. Prezentuję wszystkim chętnym klasę CSoftTimer służącą do stworzenia sobie (mam nadzieję) wygodnego obiektu organizującego ośmio-kanałowy TIMER programowy. Klasa "podpina" się pod sprzętowy TIMER0.
W załączniku umieszczam przykładowy programik oraz folder z klasą timera.
Programik miga sobie diodami podpiętymi do pinów B0 i B1. Oczywiście częstotliwości migania są całkowicie różne i niezależne.
A tutaj krótki opis metod tej klasy:
CSoftTimer (uint16_t Prescaller, uint8_t Tick) Konstruktor, który inicjuje tabelę timerków oraz TIMER0 w ATMEGA 328P, pierwszy parametr to preskaler, drugi to wartość rejestru porównawczego. Czyli co ile tyknięć zegara systemowego (podzielonego przez preskaler) ma następować tyknięcie timera programowego.
Preskaler może przyjmować wartości: 1, 8, 64, 256 i 1024.
Assign (uint8_t HandlerNumber, uint64_t Interval, void(*Funkcja)()) Metoda ustawia jeden z ośmiu kanałów timera programowego, do wywoływania funkcji użytkownika co pewien czas. Jako parametry podajemy:
* HandlerNumber - Numer kanału timera programowego w zakresie od 0 do 7
* Interval - Częstotliwość wywoływania funkcji użytkownika wyrażoną w ilości tyknięć timerka ustawioną przy konstruowaniu obiektu.
* Funkcja - Wskaźnik do funkcji użytkownika, która ma być wywoływana
UnAssign (uint8_t HandlerNumber) Zwolnienie kanału w timerku. Jako parametr podajemy numer kanału (od 0 do 7)
Enable (uint8_t HandlerNumber) Pozwolenie na odmierzanie wskazanego kanału. Jako parametr podajemy numer kanału.
Disable (uint8_t HandlerNumber) Zablokowanie odmierzania czasu przez kanał, którego numer podajemy jako parametr.
Po ponownym odblokowaniu, kanał zadziała po upływie całego interwału ustawionego w funkcji Assign.
Hold (uint8_t HandlerNumber) Wstrzymanie odmierzania czasu przez kanał.
UnHold (uint8_t HandlerNumber) Wznowienie odmierzania czasu przez kanał.
Enabled (uint8_t HandlerNumber) Funkcja zwraca TRUE, gdy dany kanał jest aktywny. Oczywiście numerek kanału podajemy jako parametr.
Mam nadzieję, że komuś się przyda. W razie pytań wątpliwości czy uwag, postaram się odpowiedzieć...