Budowa i działanie
Schemat urządzenia pokazano na rysunku 1. Zaprojektowano dość prosty system mikroprocesorowy zbudowany z wykorzystaniem popularnego mikrokontrolera firmy Atmel typu ATmega48 taktowanego wewnętrznym, wysokostabilnym oscylatorem o częstotliwości 1 MHz, którego zadaniem jest realizacja wszystkich założonych funkcjonalności. Mikrokontroler ten realizuje tutaj dwa podstawowe zadania: obsługę programowego zegara czasu rzeczywistego RTC oraz obsługę wyświetlacza LED.
W celu realizacji zegara czasu rzeczywistego, w jego najprostszej formie, wykorzystano układ czasowo-licznikowy Timer2, wbudowany w mikrokontroler, pracujący w trybie asynchronicznym i taktowany przy udziale zewnętrznego rezonatora kwarcowego o częstotliwości 32768 Hz. Odpowiednio skonfigurowany Timer2 generuje co 1 sekundę przerwanie od przepełnienia licznika, co wykorzystano do programowej realizacji prostego zegara czasu rzeczywistego. Sposób konfiguracji układu czasowo-licznikowego Timer2 w celu realizacji zegara czasu rzeczywistego pokazano na listingu 1.
Listing 1. Konfiguracja układu czasowo-licznikowego Timer2 w celu realizacji zegara czasu
rzeczywistego
void megaRTCinit(void){
//Timer2 taktowany za pomocą kwarcu 32768Hz podłączonego do wypr. TOSC1/TOSC2
ASSR |= (1<<AS2);
//Preskaler = 128, przerwanie przepełnienia co 1s (32768/128/256)
TCCR2B = (1<<CS22)|(1<<CS20);
while(ASSR & ((1<<TCN2UB)|(1<<OCR2AUB)|(1<<OCR2BUB)|(1<<TCR2AUB)| (1<<TCR2BUB))); //Oczekiwanie na aktualizację rejestrów
//Skasowanie ewentualnych flag przerwań (przez wpisanie jedynek do bitów flag)
TIFR2 = ((1<<OCF2B)|(1<<OCF2A)|(1<<TOV2));
//Uruchomienie przerwania od przepełnienia licznika TCNT2
TIMSK2 = (1<<TOIE2);
}