Czy pamiętasz, drogi Czytelniku, panele sterujące pierwszych maszyn obliczeniowych? Dzisiaj można je zobaczyć wyłącznie na filmach, lecz nadal przyciągają wzrok. Długie rzędy żarówek, które migały na pozór chaotycznie - pasjonatowi elektroniki nie może oderwać wzroku od tego widoku. Ten zegar, zwłaszcza w zestawieniu z resztą podobnych mu układów, stworzy w pokoju namiastkę wrażenia z dawnych lat.
Schemat ideowy zegara binarnego pokazano na rysunku 1. Został on zrealizowany na mikrokontrolerze ATmega48. Nie ma tu zewnętrznego zegara czasu rzeczywistego (RTC), co obniża cenę urządzenia. Po zaniku zasilania, odliczanie jest podtrzymywane bateryjnie, a diody wyłączane.
Do wykrycia zasilania z zewnętrznego zasilacza służy obwód z tranzystorem T1. Jeżeli na zaciskach złącza J1 występuje napięcie, to otwiera się dioda D1, zatyka D2 i tranzystor wchodzi w stan nasycenia - wejście PC0 jest wyzerowane. Po zaniku zasilania, napięcie na kondensatorach filtrujących spada. Jednocześnie zatyka się D1 i otwiera D2.
Zastosowane diody Schottky mają prąd wsteczny na tyle duży, że jest on w stanie otworzyć wprowadzić T1 w stan nasycenia. Z tego powodu dodano rezystor R1, który odprowadza ten prąd do masy i nie pozwala na wystąpienie takiej sytuacji. Użycie diod Schottky było jednak konieczne ze względu na niski spadek napięcia w kierunku przewodzenia.
Wyświetlanie aktualnej liczby godzin, minut i sekund zostało zrealizowane na trzech linijkach diod świecących. Sterowane są multipleksowo, co ogranicza pobór prądu oraz zmniejsza liczbę używanych wyprowadzeń mikrokontrolera.
Wyświetlanie odbywa się wyłącznie w systemie 24-ro godzinnym. Do wyświetlenia godzin i minut potrzebne było 6 diod, a godzin 5 diod. W naturalnym kodzie binarnym, który został użyty do zakodowania wyświetlanych informacji, odpowiada to możliwym wskazaniom, odpowiednio, 0...63 i 0...31. Część sekwencji pozostanie niewykorzystana. Sposób odczytu zostanie opisany dalej.
Wykorzystany mikrokontroler może pracować przy napięciu zasilania nie niższym niż 1,8 V, co jest dużą przewagą w porównaniu do starszej wersji tego układu, czyli ATmega8. Nawet niskonapięciowa wersja ATmega8L nie gwarantuje poprawnej pracy przy napięciu niższym niż 2,7 V, co przy zasilaniu napięciem 3 V jest niedopuszczalne. Ponadto, ATmega48 pobiera mniejszy prąd. Częstotliwość sygnału zegara jest stabilizowana rezonatorem kwarcowym 4 MHz, który jednocześnie stanowi wzorzec do odmierzania czasu.
Ustawianie aktualnej godziny i minuty odbywa się przyciskami, odpowiednio, SW2 i SW1. Sekundnik zeruje się po wciśnięciu któregokolwiek z nich. Warto nadmienić, iż przyciski te są nieaktywne podczas pracy z baterii, aby zapobiec przypadkowemu przestawieniu godziny.
Zegar został zmontowany na jednostronnej płytce drukowanej o wymiarach 103 mm×67 mm, której schemat montażowy przedstawia rysunek 2. Szerokość jest dostosowana do pozostałych, wymienionych we wstępie, projektów "binarnych".
W pierwszej kolejności należy przylutować elementy montowane powierzchniowo, potem dwie zwory z drutu, a dalej elementy przewlekane, od najniższych poczynając. Na sam koniec należy przylutować diody, najlepiej na długich wyprowadzeniach - będą wtedy wystawały ponad pozostałe podzespoły. Nic nie stoi na przeszkodzie, aby zastosować inne kolory diod, lub całkiem je pomieszać, tworząc efekt całkowitego chaosu.
Przed zaprogramowaniem mikrokontrolera, należy zmienić bity zabezpieczające CKSEL na takie, które pozwolą na pracę z zewnętrznym rezonatorem kwarcowym 4 MHz oraz wyłączyć podział częstotliwości zegara przez 8 (bit ten nosi nazwę CKDIV8). Po poprawnym zaprogramowaniu, bezbłędnie zmontowany układ startuje od razu, rozpoczynając pracę od godziny 00:00:00.
Zasilanie układu odbywa się napięciem stałym, stabilizowanym o wartości +5 V. Pobór prądu jest zmienny i zależy od liczby włączonych aktualnie diod, ale nie przekracza 60 mA.
Bateria typu CR2032 jest opcjonalna i niewymagana do poprawnej pracy układu - podtrzymuje ona jedynie odliczanie czasu po zaniku zasilania sieciowego. Pobór prądu z niej to ok. 1,5 mA. Przy pojemności baterii rzędu 200 mAh, powinna wystarczyć na ponad 5 dni pracy mikrokontrolera, co jest wystarczające w typowych sytuacjach.
Jak wspomniano, wyświetlanie czasu odbywa się w NKB (Naturalnym Kodzie Binarnym). Bity najstarsze znajdują się po lewej stronie, a najmłodsze po prawej. Celowo na płytce nie umieszczono opisów, aby osobom niewtajemniczonym trudniej było odgadnąć zasadę działania.
Wbrew pozorom, po pewnym czasie, posługiwanie się NKB staje się tak samo intuicyjne, jak w przypadku systemu dziesiętnego, którym posługujemy się na co dzień. Przykładową sytuację prezentuje fotografia 3, zaś rysunek 4 ilustruje zasadę odczytu.
Górny wiersz to godzina, środkowy minuta, a dolny sekunda. Jeżeli dioda świeci się, należy wagę kolumny pomnożyć przez 1, a jeśli jest wygaszona, to przez 0. Na końcu poszczególne wartości kolumn w wierszu sumuje się.
Dla dociekliwych
Na listingu 1 znajduje się kod źródłowy programu, który został napisany w języku C. Odmierzanie czasu odbywa się w przerwaniach od Timera0, który przepełnia się 250 razy na sekundę.
Przy każdym wywołaniu przerwania załączany jest jednocześnie jeden wiersz. Częstotliwość odświeżania wynosi około 80 Hz, więc migotanie diod jest dla ludzkiego oka niewidoczne.