Mamy już niezbędne definicje – pora na pierwszą funkcję, której zadaniem jest inicjalizacja procesu multipleksowania składająca się z konfiguracji portów sterujących oraz konfiguracji i uruchomienia układu czasowo-licznikowego Timer0, w tym jego przerwania od porównania wartości licznika z wartością rejestru OCR0A. Wspomnianą funkcję inicjalizacyjną zamieszczono na listingu 3. Pora na ostatni element „układanki”, tj. funkcję obsługi przerwania układu Timer0 odpowiedzialną za realizację mechanizmu multipleksowania wyświetlaczy LED, którą pokazano na listingu 4.
Zgodnie z tym, co obiecałem we wstępie, dzięki wprowadzeniu zmiennych DIGITS[17] i COMS[4] (w szczególności) wspomniana funkcja stała się bardzo krótka i czytelna, co powinno być główną zasadą w wypadku implementacji jakichkolwiek funkcji obsługi przerwań systemowych. Co więcej, wprowadzono dodatkową funkcjonalność w postaci obsługi migania cyfr wyświetlacza LED wykorzystywaną w programie obsługi urządzenia do sygnalizacji faktu edycji wybranej pozycji. Funkcjonalność tę uruchamiamy niezależnie dla każdej z cyfr wyświetlacza poprzez ustawienie najbardziej znaczącego bitu odpowiadającej jej zmiennej Digit[4].
To tyle, jeśli chodzi o szczegóły implementacyjne mechanizmu multipleksowania cyfr wyświetlacza LED. Z jednej strony jest to zagadnienie dość nieskomplikowane, z drugiej, nie zawsze rozumiane przez początkujących elektroników.
Na rysunku 2 pokazano schemat montażowy płytki zamka elektronicznego. Montaż należy rozpocząć od wlutowania 4 zworek, których położenie zaznaczono graficznie na obwodzie drukowanym. Następnie lutujemy rezystory i kondensatory, kolejno elementy półprzewodnikowe, a na samym końcu elementy mechaniczne, jak złącza PWR i LOCK, przekaźnik REL oraz enkoder CODE. Podczas montażu wyświetlacza LED należy odsunąć go od powierzchni płytki urządzenia o około 2 mm, aby górna powierzchnia jego obudowy znajdowała się na tym samym poziomie, co górna powierzchna obudowy przekaźnika REL.
Poprawnie zmontowane z użyciem zaprogramowanego mikrokontrolera urządzenie nie wymaga żadnej regulacji i powinno działać od razu po włączeniu zasilania. W zależności od zastosowanego koloru wyświetlacza LED niezbędnym może okazać się dobór wartości rezystorów ograniczających prąd poszczególnych jego segmentów (R3…R10). Domyślny kod użytkownika wynosi „0000”. Kod ten możemy awaryjnie przywrócić przez zwarcie wyprowadzenia nr 5 mikrokontrolera (oznaczonego na płytce jako DEF) do masy zasilania podczas włączania urządzenia (wyłącznie).
Obsługa
Tworząc oprogramowanie, starałem się maksymalnie uprościć obsługę zamka, jednocześnie zachowując wymaganą funkcjonalność. Ma to o tyle znaczenie, że jedynym elementem regulacyjnym jest enkoder z wbudowanym przyciskiem, więc dla uzyskania dużej ergonomii obsługi stosowne założenia musiały być dobrze przemyślane. Po pierwsze, wprowadzony tryb konfiguracyjny, którego uruchomienie jest możliwe wyłącznie podczas włączania urządzenia dzięki wciśnięciu przycisku wbudowanego w ośkę enkodera. Ten tryb pozwala na ustawienie czasu załączenia (0…5 sekund) przekaźnika towarzyszącego odblokowaniu/zablokowaniu zamka szyfrowego. W wypadku ustawienia czasu 0 s przekaźnik pozostaje cały czas załączony po zablokowaniu zamka szyfrowego, zaś wyłączony po odblokowaniu. W wypadku ustawienia wartości z zakresu 1…5 s przekaźnik jest załączany chwilowo na czas odpowiadający ustawieniu (1…5 s) przy każdym zablokowaniu/odblokowaniu naszego zamka szyfrowego.
Wyjście z trybu konfiguracyjnego jest możliwe dzięki ponownemu wciśnięciu przycisku wbudowanego w ośkę enkodera. W tym momencie przechodzimy do trybu bezczynności urządzenia (wyświetlacz wygaszony). Co ważne, domyślnie, po włączeniu zasilania (lub wyjściu z trybu konfiguracyjnego) zamek pozostaje odblokowany.
Fakt zablokowania zamka jest sygnalizowany przez świecenie kropki dziesiętnej na pozycji 0 wyświetlacza nawet w czasie bezczynności urządzenia. Warto również podkreślić, że dla wygody użytkownika wprowadzono dodatkowy mechanizm, dzięki któremu możemy pominąć wprowadzanie kodu użytkownika służącego do zablokowania zamka, przyjmując domyślnie wcześniej używany i zapamiętany kod blokady. W tym celu po wejściu w tryb wprowadzania kodu użytkownika (ze stanu bezczynności) należy przycisnąć i przytrzymać na dłużej ośkę enkodera, po czym nastąpi zablokowanie zamka szyfrowego (i stosowna reakcja przekaźnika) oraz przejście w tryb bezczynności. W tym momencie (po zablokowaniu zamka) wciśnięcie ośki enkodera powoduje wejście w tryb wprowadzania kodu użytkownika (jak poprzednio), lecz tym razem w celu odblokowania zamka.
Wprowadzenie poprawnego kodu powoduje odblokowanie zamka (i stosowną reakcję przekaźnika), zaś błędnego, przejście do trybu bezczynności urządzenia w oczekiwaniu na wprowadzanie nowego kodu odblokowującego. Pozostawanie w trybie wprowadzania kodu użytkownika (migająca pierwsza cyfra od prawej) i nieukończenie tego procesu w czasie 5 s powoduje wyjście do trybu bezczynności urządzenia. Czas ten liczony jest każdorazowo od nowa po dokonaniu jakiejkolwiek edycji. Ponadto, w celu sygnalizacji stanu pracy, urządzenie wyświetla kilka informacji tekstowych, których zestawienie, łącznie z ich znaczeniem, umieszczono w tabeli 1.
Robert Wołgajew, EP