RTC – (Real Time Clock) zegar czasu rzeczywistego. Czasem potrzebujemy wykonywać określone zadanie co jakiś czas, więc ustawiamy sobie Timer w Atmedze, obsługujemy go przerwaniami i gotowe. Ale co gdy chcemy ten czas odmierzać precyzyjnie? Z dokładnością co do milisekund. Pojawia się problem. Możemy ustawić preskalery oraz dzielniki w przerwaniach i dojść do zadowalającego pomiaru, lecz jest na to znacznie lepszy i prostszy sposób.
Do rozwiązania wykorzystujemy Timer2 w trybie asynchronicznym. Obsługujemy go w przerwaniu które jest wywoływane równo co jedną sekundę. Jako elementy montażowe: kwarc 32.768kHz na TOSC1 i TOSC2 oraz równolegle kondensator 22pF.
Podsumowanie:
- Gotowego moduły lutował nie będę, ponieważ są potrzebne tylko dwa elementy, więc lutowanie czegokolwiek było by bez sensu.
Plany na przyszłość:
- Dodanie baterii CR2032, albo super kondensatora, uniezależnić zegar od źródła zasilania, oraz usprawnić oprogramowanie aby układ się usypiał dla zaoszczędzenia prądu.
Pytania do wyjaśnienia:
- Czy musi być Timer2? Czy może być inny timer który obsługuj tryb asynchroniczny?
- Ile uC obsługuje to rozwiązanie (kod) ? [atmega16, ]
- Czy preskaler jest potrzebny, skoro niezależnie od ustawionej wartości Timer2 wywołuje się równo co 1 sekundę?
czy będzie może przykład dla innych uC, jak ESP?
Oczywiście, niedługo taki wpis się pojawi 🙂