Projekty AVT
Projekty AVT
Rys. 3
niż tworzenie obwodów wykonawczych za pomocą tranzystora.
Program sterujący został napisany w darmowym kompilatorze C. jakim jest AVR-GCC. Aby łatwo zrozumieć jego działanie, konieczne jest poznanie zasady pracy całego układu.
Na początku opiszę normalne działanie programu. Następnie omówię zasadę jego konfiguracji.
Po uruchomieniu wyświetlacz będzie wygaszony. Dioda Dl powinna migać naprzemiennie raz zielonym, raz czerwonym kolorem. Układ oczekuje w tym stanie na chwilę gdy zechcemy rozpocząć pracę. Informujemy go o tym przez naciśnięcie przycisku.
W tym momencie rozpoczyna się tryb pracy. Dioda świeci kolorem zielonym. Na wyświetlaczu pokazuje się, w minutach, czas, jaki przepracowaliśmy. Z tego trybu można przejść bezpośrednio do trybu pauzy lub trybu odpoczynku.
Krótkie naciśnięcie spowoduje zatrzymanie licznika. Wyświetlacz miga. Kolejne krótkie naciśnięcie powoduje wznowienie liczenia.
Przytrzymanie przycisku aż do chwili pojawienia się na górze wyświetlaczy dwóch poziomych kresek spowoduje przejście do trybu odpoczynku. Dioda podświetlona zostaje wtedy kolorem czerwonym. Liczenie odbywa się wstecz. Zliczanie w tym trybie jest odpowiednio przyśpieszone. Domyślnie 4 razy.
Po upływie ustawionego czasu (domyślnie 60 minut) układ przechodzi w tryb alarmu. Jeśli nie nakazaliśmy milczenia, zaczyna wydawać z siebie coraz bardziej irytujące dźwięki. Wyświetlacz oraz dioda migają. Po upływie minuty dźwięk zostaje wyłączony. Pozostaje miganie wyświetlacza oraz diody.
Tryb alarmu kończymy przez naciśnięcie przycisku. Układ automatycznie przechodzi wtedy do stanu przeciwnego niż ten, w którym się znajdował. Oznacza to, że jeśli alarm wywołany został przekroczeniem czasu pracy -rozpoczyna się liczenie czasu odpoczynku. W innym przypadku - powinniśmy rozpocząć ponownie pracę.
Tak wygląda teoria normalnego użytkowania układu. Elastyczność rozwiązania zwiększa jednak wprowadzona możliwość programowania czasu pracy i mnożnika czasu odpoczynku.
Zaraz po włączeniu sprawdzany jest stan przycisku sterującego. Jeśli jest on naciśnięty, ustawiona zostaje odpowiednia flaga powodująca wyłączenie dźwięku. W celu poinformowania użytkownika o fakcie „przyjęcia komendy" pojawiają się dwie kreski na środku wyświetlacza. Jeśli przycisk zostanie przytrzymany przez około 2 s - program przejdzie do pętli ustawień. Linia widoczna na wyświetlaczu przenosi się w górę. flaga wyłączająca dźwięk jest zerowana. Gdy przycisk zostanie puszczony, zaświecana jest zielona sekcja diody Dl, na wyświetlaczu pojawia się aktualnie wybrany czas pracy. Możliwe do ustawienia wartości mieszczą się w zakresie 15-90 minut z 5-minutowym rastrem. Wartością domyślną jest 60 minut. Czas zmieniamy teraz krótkimi naciśnięciami SW1. Długie naciśnięcie powoduje zapis ustawionej wartości do pamięci EEPROM i przejście do programowania czasu odpoczynku. W celu oszczędności pamięci zapis odbywa się tylko wtedy, gdy wybrana wartość różni się od zapamiętanej.
Podczas ustawiania czasu odpoczynku ustawiamy w rzeczywistości raczej coś, co zostało w programie nazwane mnożnikiem czasu odpoczynku. Wyświetlane liczby odpowiadają liczbie sekund przeznaczonych na odpoczynek, przypadających na minutę pracy. Możliwe wartości to (kolejno): 10, 12, 15, 20, 24, 30. 40, 60. Odpowiada to przyspieszeniu zliczania 1; 1,5; 2; 2,5; 3; 4; 5; 6; razy.
Długie naciśnięcie kończy teraz tryb nastaw. Tak jak poprzednio układ dba o oszczędzanie pamięci EEPROM. Dioda świeci przez 2 s pomarańczowym światłem. Na wyświetlaczach pojawiają się trzy poziome kreski. Po tym czasie urządzenie rozpoczyna normalną pracę.
Tak prezentuje się działanie urządzenia z zewnątrz. Niektóre części programu zostały napisane niejako „na wyrost”. Dotyczy to umieszczonej w przerwaniu Timera 0 obsługi wyświetlacza i diody. Nie wszystkie możliwości, jakie zostały stworzone, program wykorzystuje. Jednak ponieważ nie było problemu ze zmieszczeniem kodu w wybranym mikrokontrolerze, nie starałem się usuwać zbędnych linii. Pozostały one w celu ewentualnego przyszłego wykorzystania.
Dla wygody pisania programu obsługa przycisku została umieszczona w tym samym przerwaniu co i procedury wyświetlacza. Informuje on resztę kodu o fakcie naciśnięcia i przytrzymania przycisku za pomocą dwóch zmiennych. Flaga gJSWFlag jest ustawiana tylko, jeśli przycisk zostanie naciśnięty. Powinna być wyzerowana przez program w chwili odczytu. Przytrzymanie przycisku nie wpływa na jej stan. Jest ona ustawiana tylko raz w chwili wykrycia naciśnięcia przycisku i po odkłóceniu ewentualnych drgań zestyków. Zmienna g_SWCounter natomiast jest zwiększana co 1 /122 sekundy, jeśli przycisk jest trzymany. W chwili jego puszczenia jest zerowana. Program wykorzystuje ją w celu wykrycia długiego przytrzymania przycisku. Zwykle jest ona także używana do wykrycia faktu jego puszczenia.
Zainteresowanych odsyłam do kodów źródłowych. Jak zwykle analizę powinny ułatwić bogate komentarze. Tutaj przedstawiłem tylko ogólne działanie programu.
Układ można umieścić w jednej z dwóch obudów. Z-67 zastosujemy, jeśli zamierzamy umożliwić zasilanie układu tylko z zewnętrznego zasilacza. Gdy zdecydujemy się na baterie, znakomita będzie troszkę większa Z-62. Obie obudowy są bardzo do siebie podobne, różnią się w zasadzie tylko niewielkim wydłużeniem tej drugiej i dodaniem, przykrytego klapką, specjalnie wyznaczonego miejsca na baterie.
Niezależnie od wybranej obudowy zalecam jej przygotowanie jeszcze przed rozpoczęciem obsadzana płytki elementami. Wcześniej dobrze jest wykorzystać płytkę jako wzorzec do wycięcia i nawiercenia otworów. Proponuję przykręcić płytkę przez specjalnie przeznaczone do tego otwory do znajdujących się w obudowie „wypustek". Następnie wiertłem o średnicy 0,8mm przewiercamy na wylot obudowę przez środkowy punkt lutowniczy Dl, specjalnie do tego przeznaczony otwór na środku SW1 oraz przez skrajne punkty wyświetlacza. Umożliwi to w miarę dokładne przygotowanie obudowy. Otwór pod wyświetlacz proponuję wykonać z grubsza gorącą lutownicą, a następnie poprawić za pomocą pilników.
Ciąg dalszy na stronie 30.
Elektronika dla Wszystkich Grudzień 2004 23