30 lipca 2011

Zegarek naręczny z wyświetlaczem binarno-widmowym


Elektronika to hobby które daje dużo satysfakcji. Satysfakcja ta jest oczywiście większa jeśli możemy się komuś pochwalić zbudowaną przez siebie ciekawą i oryginalną konstrukcją. Urządzenie które pragnę zaprezentować, świetnie nadaje się do tego celu. Można je mieć zawsze przy sobie, aby w stosownym momencie mimochodem zaprezentować, wzbudzając przy tym nieuchronnie zainteresowanie. Bo jest to samodzielnie wykonany elektroniczny zegarek naręczny.

Wyświetlacz

Kiedyś każdy zegarek był drogim, eleganckim dziełem sztuki jubilerskiej, ale również prezentacją kunsztu mechaniki precyzyjnej. Zegarek był raczej niezawodny. W razie awarii oddawało się czasomierz do zakładu zegarmistrzowskiego, gdzie potrafiono z pomocą lupy i innych precyzyjnych narzędzi na nowo tchnąć weń życie. Dzisiaj większość sprzedawanych zegarków to tanie i niestety dość szybko psujące się urządzenia. Takich tanich zegarków nikt nie naprawia. Ale jeśli posiadasz zepsuty zegarek możesz pokusić się o jego reaktywację w nowej formie. I niczym zegarmistrz przy pomocy lupy i innych precyzyjnych narzędzi na nowo tchnąć weń życie.
Tradycyjne zegarki posiadały wskazówki, później pojawiły się wyświetlacze numeryczne - LED-owe i ciekłokrystaliczne. Ostatnio modne się stają konstrukcje z wyświetlaczami binarnymi oraz widmowe. A taki właśnie wyświetlacz - zarówno binarny, jak i widmowy - będzie posiadał nasz zegarek.
Jak powszechnie wiadomo, "jest tylko 10 rodzajów ludzi - ci którzy rozumieją system dwójkowy i Ci, którzy nie rozumieją" Zrozumienie systemu binarnego (dwójkowego) jest przydatne aby umieć odczytać czas z wyświetlacza naszego zegarka. Jako, że system dwójkowy jest podstawą działania wszystkich cyfrowych układów elektronicznych, a w szczególności tych opartych na mikrokontrolerach warto sobie tę wiedzę przypomnieć. Zatem dlaczego system dwójkowy? Bo są w nim tylko dwie cyfry: jeden i... zero oczywiście. Wszystkie liczby przedstawione są jako kombinacja tych dwu cyfr - więc po kolei licząc będzie to 0, 1, 10, 11, 100, 101 ... itd. (0, 1, 2, 3, 4, 5 dziesiętnie) jak pokazuje tabela 1. Taka pojedyncza cyfra (0 lub 1) w obwodach elektronicznych jest (w uproszczeniu) odwzorowywana jako brak napięcia - 0 lub obecność napięcia - 1. W informatyce nazywa się ją bit. Jako że jeden bit to trochę mało informacji bity te łączy się w grupy po 8 bitów - czyli bajty. Dla ułatwienia odczytu liczby dwójkowe zapisuje jako osiem cyfr (cały bajt) np. 00000001, 00000010, 00000100... Kolejne cyfry (bity) w systemie dziesiętnym to kolejne potęgi liczby dwa. (Bity liczymy od zera i od prawej do lewej). Właściwość tę prezentuje tabela 1.
Liczba dziesiętnaLiczba dwójkowaZapis potęgowy
10000000120
20000001021
40000010022
80000100023
160001000024
320010000025
itd.
tabela 1
Liczbę z systemu dwójkowego można łatwo przeliczać na dziesiętny sumując wartości dla ustawionych bitów np. liczba dwójkowa 00010101 to dziesiętnie 16 + 4 + 1 = 21.
I właśnie dwójkowy sposób odczytu wykorzystujemy w naszym zegarku. Na jego tarczy znajdują się dwa rzędy diod LED. Górny - mający cztery diody wyświetla godziny, dolny z sześcioma diodami - minuty. Dla ułatwienia odczytu diody te są na tarczy zegarka podpisane odpowiednimi wartościami - zobacz fotografię 1. Wyświetlana godzina to 11:53 (godzin: 8 + 2 + 1 = 11, minut: 32 + 16 + 4 + 1 = 53).
Fot.1 Zegarek z przodu

Zdecydowanie bardziej spektakularny jest widmowy tryb wyświetania. Aby w tym trybie odczytać czas, należy poruszyć zegarkiem. Napis przedstawiający aktualny czas w formacie HH:MM wyświetli się w powietrzu (fotografia 2).
Fot.2 Wyświetlanie widmowe

Zatem wiemy już, że czas może być wyświetlany na dwa sposoby.

Opis układu

Schemat zegarka jest zaprezentowany na rysunku 1. Diody LED sterowane są poprzez rezystory ograniczające prąd bezpośrednio z wyprowadzeń mikrokontrolera. Właśnie mikrokontroler ATmega8 w obudowie TQFP jest głównym elementem systemu. Dlatego zajmuje on centralne miejsce na okrągłej tarczy naszego zegarka. Oprócz mikrokontrolera i diod z rezystorami z przodu płytki znajduje się jeszcze kondensator odsprzęgający 100nF. Pozostałe 3 elementy znajdują się z drugiej strony płytki (fotografia 3). A są to: 3-woltowa bateria CR2032, mikroprzełącznik oraz element, który występuje w każdym zegarku elektronicznym - tzw. kwarc zegarkowy 32kHz w swojej charakterystycznej rurkowej obudowie. Impulsy od kwarcu zliczane są w trybie asynchronicznym, a procesor w swoich krótkich chwilach aktywności jest taktowany wewnętrznym generatorem 1MHz. Więcej o działaniu zegarka będzie w części Oprogramowanie.
Fot.3 Wnętrze pod tylną pokrywą

Rys.1 Schemat ideowy

Montaż i uruchomienie

Montaż należy rozpocząć od przygotowania obudowy - koperty starego zegarka. Nie każda koperta się nada. Średnica wewnętrzna musi wynosić co najmniej 28mm, ale nie więcej niż 35mm bo wtedy zegarek nie wygląda już atrakcyjnie. Ponadto koperta musi być odpowiednio gruba, aby zmieściła się w niej płytka z przylutowanymi częściami i uchwytem z bateryjką CR2032 na plecach. Do koperty musimy zamontować przycisk (gałeczkę - pokrętło). Można to zrobić na kilka sposobów. Na obciętą ośkę z gałką można od środka przylutować kropelkę cyny lub nakleić tulejkę (fotografia 4). Można też zamiast osi użyć małej śrubki, którą wkładamy od środka, a gałkę dokleić z zewnątrz klejem poxipol lub distal.
Fot.4 Sposób zamocowania gałeczki przycisku

Rys.2 Płytka drukowana

Płytkę drukowaną trzeba dopasować do koperty. Najpierw należy zgrubnie obrobić ją na szlifierce, a następnie ręcznie oszlifować papierem ściernym. Laminat powinien wchodzić do koperty na lekki wcisk. Dla ułatwienia szlifowania, płytka posiada oznakowane 3 współśrodkowe okręgi o średnicach 28mm, 30mm i 33mm. (Zobacz płytkę na rysunku 2). W razie potrzeby można wykonać lekkie nacięcie dla ułatwienia przełożenia przycisku. Po dopasowaniu do koperty i powierceniu otworów przystępujemy do montażu elektroniki. Najpierw należy starannie pocynować całą płytkę. Najprościej zrobić to rozcierając cienką cynę gorącym grotem lutownicy. Płytkę należy pokryć uprzednio preparatem RF800, a cyny używać naprawdę niewiele. Pocynowane ścieżki będą trwałe i estetyczne. Następnie wlutowujemy zworki - styk (-) baterii. Najlepiej wykonać je z odciętych nóżek rezystora (jak najcieńsze). Zworki te należy wlutować jak najbardziej płasko przy samym laminacie. Następnie lutujemy uchwyt baterii wykonany ze srebrzanki o średnicy 0,8-1 mm. Jeśli nie mamy srebrzanki możemy użyć odciętych wyprowadzeń diody prostowniczej 1A. Uchwyt baterii powinien być wygięty w kształt ostrej litery C tak aby nie zwiększać i tak już sporej grubości urządzenia (fotografia 5). Taką klamrę należy wlutować, podkładając pod spód zużytą baterię. Bateria powinna dać się wysuwać, ale jednocześnie wchodzić dość ciasno. Jej pewne zamocowanie to gwarancja stabilnej pracy zegarka. Wystające końce klamry przed lutowaniem należy zagiąć płasko tak, aby zabezpieczyć uchwyt przed wyrwaniem. Teraz wracamy na frontową stronę. Niestety płytka z wystającym od spodu pałąkiem nie jest zbyt wygodna do dalszych prac. Jest na to rada: w kawałku deseczki robimy brzeszczotem nacięcie, do którego wciskamy wystającą z płytki klamrę baterii. Taka deseczka stanowi stabilną i wygodną podstawkę do dalszych prac.
Fot.5 Zmontowana płytka od tyłu - mocowanie baterii

Do operacji lutowania SMD należy przygotować się solidnie: cienki grot (0,4mm), cienka cyna, lupa na wysięgniku, specjalna pęseta i plecionka do odciągania nadmiaru cyny. Na pady pod układ scalony należy nałożyć kropelki cyny, a układ scalony lutujemy, kolejno dociskając wszystkie wyprowadzenia i nakładając na nie po kropelce cyny. Oczywiście zanim przylutujemy wszystkie wyprowadzenia, dokładnie pozycjonujemy chip - późniejsza korekcja jego położenia jest praktycznie niemożliwa. Następnie lutujemy rezystorki (trzeba uważać aby nie odfrunęły :-)), a na koniec kondensator i diody LED. Diody należy uważnie pozycjonować - od ich równego ustawienia będzie zależeć późniejszy efekt przy wyświetlaniu. Nie należy używać zbyt dużo lutowia, aby nie porobić zwarć - dlatego niezbędna jest cienka cyna, którą łatwiej dozować. Po sprawdzeniu połączeń musimy przylutować jeszcze kwarc zegarkowy 32kHz oraz mikroprzełącznik. Te elementy montujemy tradycyjny sposobem przewlekanym. Sam mikroprzełącznik musimy przygotować, wyginając jego wyprowadzenia. Jeśli nie mamy wersji przewlekanej, nada się też ten do SMD, ale wcześniej trzeba dolutować mu wyprowadzenia (wykonane z nóżek rezystora). Przełącznik najlepiej wlutować pasując go do przycisku obudowy. Całość powinna pracować lekko i pewnie. Płytka po zakończonym lutowaniu jest widoczna na fotografii 6.
Fot.6 Zmontowana płytka od przodu

Nastepnie należy zaprogramować procesor i ewentualnie usunąć błędy montażu które się pojawią.
Po uruchomieniu zegarka pozostaje jego wykończenie. Musimy wykonać cyferblat. Element ten spełnia istotną rolę - ułatwia odczyt czasu, dodaje profesjonalnego wyglądu, a posiadając dość duże okienko, gustownie eksponuje elementy elektroniczne. Pełni również rolę izolatora, oddzielając obwody od metalowej obudowy. Cyferblat możemy wykonać sami, umieszczając na nim np. dedykację. Można też posłużyć się jednym z gotowych wzorów dostępnych w materiałach dodatkowych (cyferblat.pdf). Wybrany wzór drukujemy na drukarce (najlepiej laserowej ale niekoniecznie). Następnie żyletką, skalpelem lub ostrymi nożyczkami starannie wycinamy okienko. Krawędź papieru po wycięciu możemy zamaskować czarnym flamastrem. Tak spreparowany cyferblat przyklejamy do płytki zegarka. Ja użyłem kleju magik ale może to być też wikol. Po przyklejeniu musimy poczekać kilka godzin, aż klej zaschnie. Na czas klejenia wyciągamy baterię, gdyż mokry klej przewodzi prąd. Po zaschnięciu kleju obcinamy z zewnątrz nadmiar papieru, montujemy baterię i wkładamy całość do koperty. Zamykamy wieczko i podziwiamy efekt :-). Kolejne fazy montażu możemy obejrzeć na fotografii 7.
Fot.7 Kolejne fazy montażu

Oprogramowanie

Po zakończonym montażu wypadałoby zaprogramować procesor. Oczywiście na tak małej płytce nie ma miejsca na tradycyjne złącze programatora. Można było na czas programowania dolutować się do odpowiednich wyprowadzeń procesora, jak na fotografii 8. Ja chciałem mieć możliwość łatwego poprawiania programu w trakcie użytkowania zegarka. Zastosowałem patent podpatrzony w Internecie - małą taśmę elastyczną. Wykorzystałem tasiemkę wymontowaną wraz z oryginalnym gniazdkiem ze starej komputerowej stacji dyskietek 3,5 cala. Tasiemka służyła tam do połączenia głowicy odczytującej. Tasiemka taka jest dość długa. Dlatego uciąłem stosowny odcinek z częścią wtykową. Drugi koniec musiałem "zarobić" tak aby można go było przylutować. Najpierw usunąłem lakier drobnym papierem ściernym, następnie pocynowałem odkryte miedziane ścieżki - topnik RT800 znów się przydał. Na koniec odpowiednio porozcinałem tasiemkę żyletką tak, aby pojedyncze ścieżki można było przylutować do odpowiednich padów. Aby taką tasiemkę połączyć z programatorem, przygotowałem specjalną płytkę-przejściówkę zaopatrzoną w dwa gniazda: tasiemki oraz tradycyjne 10-pinowe gniazdo programowania ISP. Płytka prototypu zegarka wraz z przejściówką do programowania jest widoczna na fotografii 9. Schemat i płytka adaptera jest przedstawiony na rysunkach 3 i 4.
Rys.3 Schemat adaptera

Rys.4 Płytka adaptera
Program dla mikrokontrolera został napisany w języku C (środowisko AVR-GCC). Jego uproszczona, ale działająca wersja (uclock_short.c) została przedstawiona na listingu 1 i 2 .
Procesor jest taktowany wewnętrznym generatorem 1MHz. W funkcji main() następuje inicjalizacja rejestrów mikrokontrolera, w tym rejestrów timera 2 umożliwiającego jego pracę jako asynchronicznego licznika. Będzie on zliczał impulsy z kwarcu 32768Hz, a dzięki zastosowaniu preskalera o wartości 256, co 2 sekundy będzie wywoływane przerwanie.
Druga część funkcji main() to nieskończona pętla for(;;), w której następuje sprawdzenie, czy przycisk jest naciśnięty. Jeśli nie jest, to wyświetlacz jest wygaszany, a procesor przechodzi w oszczędzający energię tryb uśpienia set_sleep_mode(SLEEP_MODE_PWR_SAVE). Z uśpienia procesor jest wybudzany jedynie przez przerwania:

  • SIG_OVERFLOW2 od wspomnianego asynchronicznego timera 2 - w funkcji jego obsługi następuje zliczanie czasu.
  • SIG_INTERRUPT0 wywoływane naciśnięciem przycisku - funkcja obsługi wyświetla bieżący czas w formie binarnej (wywołując funkcję ShowDisplay()).
Oczywiście właściwy program jest dużo bardziej złożony. Dochodzi w nim algorytm nastawiania czasu, korekcji czasu, wyświetlanie widmowe czy tryb wzbudzania uwagi. Kompletny kod źródłowy jest dostępny w materiałach dodatkowych (uclock.c). Za wyświetlanie widmowe odpowiada funkcja ShowDisplayPov(), a wzory cyfr są zapisane w pamięci programu prog_uint8_t g_Digit[41]. Do generowania opóźnień potrzebnych w trybie wyświetlania widmowego oraz obsłudze przycisku wykorzystany został timer 0.
Dla osób niechcących zaprzątać sobie głowy programem w języku C, dostępny jest gotowy wsad (uclock.hex). Przy programowaniu nie należy zapomnieć o właściwym ustawieniu fuse-bitów - zwłaszcza CKOPT - odpowiedzialnego za dołączenie wewnętrznych kondensatorów na wyjściach kwarcu (XTAL). Właściwe ustawienie fuse-bitów prezentuje rysunek 5.
Fot.8 Wlutowane przewody programowania

Fot.9 Tasiemka do programatora wraz z przejściówką

Obsługa

Zegarek przez większość czasu pozostaje uśpiony. Pojedyncze naciśnięcie i zwolnienie przycisku w trybie uśpionym powoduje, że zegarek przez około 4 sekundy wyświetla czas w trybie widmowym. Aby coś zobaczyć, należy w trakcie wyświetlania przesuwać zegarek. W praktyce wystarczy machnąć ręką (nie za szybko aby kogoś nie uderzyć). Mrugający napis przedstawiający aktualny czas w formacie HH:MM dosłownie pojawi się w powietrzu, podążając się za ruchem nadgarstka. Korzystanie z tego typu wyświetlania wymaga nieco wprawy, ale jest szalenie efektowne. Naciśnięcie i przytrzymanie przycisku w trybie uśpienia wyświetla czas w trybie binarnym opisanym wcześniej. Aby wejść w tryb ustawień, należy przycisk nacisnąć 3 razy. Zacznie wtedy migać górna część wyświetlacza, odpowiedzialna za wskazania godzin. Teraz naciskając krótko przycisk, można zmieniać w pętli wyświetlaną godzinę (1,2,3..12). Naciskając i przytrzymując przycisk dłużej, przechodzi się w tryb ustawiania dziesiątek minut. W tym trybie na górnej części wyświetlacza migają dwie diody z lewej strony oraz dolna część wyświetlacza z bieżącym ustawieniem dziesiątek minut. Naciskając krótko można zmieniać ustawienie (0,10,20..50). Przyciskając dłużej, przechodzi się w tryb ustawiania jednostek minut - migają dwie prawe diody z górnej części, a na dolnej ustawiana wartość minut (0,1,2..9). Zapamiętanie nowego czasu następuje po dłuższym przytrzymaniu przycisku. Zegarek potwierdza nowy czas wyświetlając go przez 4 sekundy. Jeśli w trybie ustawiania czasu nic nie zostanie naciśniete przez 5 sekund, zegarek porzuca zmiany i przechodzi w tryb uśpienia. W materiałach dodatkowych dostępna jest szczegółowa instrukcja obsługi (instrukcja.pdf). Została ona przygotowana w taki sposób, aby po obustronny wydruku i złożeniu na pół, powstała otwierana broszurka. Instrukcja będzie niezbędna jeśli zechcemy komuś nasz zegarek podarować.

Jasność świecenia diod została tak dobrana, aby możliwy był odczyt czasu nawet w słoneczny dzień na zewnątrz. Ale także odczyt w kompletnej ciemności nie stanowi nie sprawia problemu. Światło diod odbija się od wewnętrznej powierzchni szybki i gustownie oświetla napisy na cyferblacie oraz elementy elektroniczne wnętrza.
W zegarku zastosowano baterię CR2032. Jest to standardowa, łatwo dostępna bateryjka o znamionowej pojemności 200mAh. Zegarek w trybie uśpionym pobiera ok. 7uA, co wystarczyłoby na ponad 3 lata pracy zegarka. Niestety każde wyświetlanie czasu skraca znacznie żywotność baterii - 1 sekunda odczytu czasu to około 35 minut pracy w trybie czuwania. Przy standardowym użyciu bateria powinna wystarczyć na około pół roku.

Propozycje zmian

Zegarek jest dość wdzięcznym tematem do wszelkich udoskonaleń. Najłatwiej zrobić zmiany w samym oprogramowaniu, dodając np. funkcję stroboskopu dyskotekowego lub wyświetlania różnych napisów w trybie widmowym. Ja z założenia zrobiłem jak najprostszą konstrukcję, ale zmieniając lub projektując od nowa płytkę można zegarek znacznie rozbudować np. dodając membranę piezzo (budzik) czy fotoelement sterujący jasnością diod LED w zależności od jasności otoczenia.


Powyższy artykuł ukazał się w czasopiśmie "Elektronika dla Wszystkich" w numerze 7/2011

Materiały dodatkowe:
Do pobrania z elportalu:


Uzupełnienie
Zegarek ten (egzemplarz prototypowy z czerwonym wyświetlaczem) używam nosząc codziennie od poczatku 2011 roku. Bateria starcza na ok 2 lata (kilkanaście odczytów czasu dziennie).
Jakiś czas po ukazaniu się artykułu w EdW został opublikowany krytyczny list na temat tego urządzenia.

Brak komentarzy:

Prześlij komentarz