Zegar/termometr z wyświetlaczem fluorescencyjnym |
Zamiast wstępu Rysunek 1 przedstawia schemat ideowy zegara, a poniżej krótkie omówienie poszczególnych modułów Zasilacz +5V Obwody zegarka zasilane są z lokalnego zasilacza +5V zrealizowanego na popularnym monolitycznym regulatorze napięcia typu LM7805 - na schemacie U1. Kondensatory C1, C2, C3 i C4 służą do blokowania zasilania. Pojemności C1 i C2 umieszczone są bezpośrednio przy stabilizatorze, pozostałe dwa - w okolicach procesora i przetwornicy DC/DC. Do sygnalizacji obecności napięcia zasilającego służy dioda świecąca D1 zasilana z napięcia 5V poprzez rezystor R1. Stabilizator wyposażony został w niewielki radiator. Podczas normalnej pracy średni prąd pobierany przez układ nie przekracza 250mA, ale w szczególnych przypadkach (rozruch przetwornicy) może wzrosnąć do około 400mA. Zakładając napięcie zasilające w granicach 8V - radiator musi rozproszyć moc nieco ponad 1W, a to decyduje o jego gabarytach. Przetwornica DC/DC 5-30V Do zasilania segmentów lampy VFD a także do polaryzacji jej siatek sterujących służy prosta przetwornica wykonana na bazie układu LM555 (U2) - jej schemat jest wzorowany na [5]. LM555 stanowi generator impulsów prostokątnych o częstotliwości kilkadziesiąt kHz (dla elementów jak na schemacie - 38kHz). Wyjście Q przerzutnika zawartego w układzie LM555 steruje bramką tranzystora MOSFET (T1) typu IRF840. Cewka L1 o indukcyjności około 100uH kluczowana w obwodzie drenu tranzystora T1 jest źródłem wyższego względem potencjału zasilania napięcia wyjściwego podawanego przez szybką diodę przełączającą D2 (typu UF4004) na pojemność C7, która odfiltrowuje tak wygenerowane napięcie. Napiêcie wyjściowe z przetwornicy podawane jest na dzielnik napięcia R1,P1 z którego sterowana jest baza tranzystora T2. Jest to swego rodzaju ujemne sprzężenie zwrotne służące do regulacji wartości napięcia wyjściwego. Dzielnik R1,P1 stanowi obwód polaryzacji bazy tranzystora T2. Gdy napiêcie wyjściowe z przetwornicy osiąga wartość odpowiednią do wysterowania tranzystora T2, jego załączenie spowoduje chwilowy zanik oscylacji i spadek napięcia wyjściowego do wartości, dla której tranzystor T2 ponownie siê wyłączy. Zegar czasu rzeczywistego Precyzyjne odmierzanie czasu zostało zrealizowane przy pomocy popularnego układu PCF8583 (U4) komunikującego się z procesorem przy pomocy magistrali I2C. Układ zegarka taktowany jest rezonatorem kwarcowym o częstotliwości 32.768kHz - jest to typowy 'kwarc zegarkowy'. Kondensator zmienny C9 (trymer) służy do dokładnego nastawiania szybkosci pracy RTC - poprawny pomiar czasu uzyskujemy przy takiej nastawie pojemności C9, dla której na wyjściu /INT układu U4 wystepują impulsy o częstotliwości dokładnie 1Hz. Diody D4, D5 zapewniają dwutorowe zasilanie układu zegara. W przypadku obecnosci napięcia +5V układ PCF8583 jest zasilany z głównego napięcia zasilającego poprzez diodę D5. Gdy zasilania zabraknie, praca zegarka jest podtrzymywana z baterii 3V poprzed diodę D4, co zapewnia ciagłość odliczania czasu i zabezpiecza przed skasowaniem nastaw alarmu. Procesor sterujący Całością urządzonka steruje mikrokontroler DS89C430 (U3) zgodny z 8051. Poniewa¿ kontroler wykorzystuje wewnetrzną pamięć programu (typu Flash), praktycznie całość jego I/O została przeznaczona na obsługę obwodów zegara. Kontroler taktowany jest kwarcem 11.059MHz stanowiącym wraz z elementami C7,C8 układ typowego oscylatora tego MCU. Port P0 został przeznaczony do sterowania ośmiu siatek wyświetlacza, segmenty (anody) sterowane są z portu P2. Drabinka rezystorowa RP2 zapewnia wystawianie poprawnego stanu H na wyjściach portu P0, drabinka RP3 polaryzująca wstępnie port P2 zapewnia odpowiednio silne sterowanie wejść konwerterów napięcia dla lampy, tak aby ich tranzystory pewnie wchodziły w głęboki stan nasycenia. Port P1, także podciągniety do potencjału VCC przy pomocy drabinki rezystorowej (RP1), to wejście czteroprzyciskowej klawiatury. Służy on także do realizacji magistrali I2C (bity P1.0 oraz P1.1) lub alternatywnie 1-Wire (bit P1.2). Sygnały potrzebne do programowania kontrolera w systemie (IAP/ISP) zostały wyprowadzone na złącze Z2. Konwertery napięć dla lampy VFD Dokładne omówienie zasady działania wywietlacza VFD znajdziemy w [1] a informacje o jego sterowaniu w [2] i [3], dlatego w tym miejscu tylko króciutkie omówienie praktycznej realizacji sterowania. Do sterowania siatek i segmentów lampy użyto układów ULN2804, zawierających w sobie po osiem tranzystorów NPN w układzie Darlingtona wraz z rezystorami ograniczającymi prądy baz. Dla nieaktywnych (w stanie odcięcia) tranzystorów sterujących, siatki lampy polaryzowane są napiêciem +30V poprzez rezystory 47K (RP4). Analogicznie, prąd zasilania segmentów (anod) wyświetlacza ograniczają rezystory 22K (RP5). Lampa wraz z rezystorami kluczowanym przy pomocy zestawu tranzystorów stanowiąc obciążenie wymienionej przetwornicy DC/DC. Tu na chwilę wrócę do wspomnianych wcześniej drabinek rezystorowych RP2 i RP3. O ile w przypadku portu P0 podciągnięcie wyprowadzeñ do VCC jest zwykłą koniecznością (P0 nie posiada wewnetrznych rezystorów pull-up) to konieczność zainstalowania drabinki RP3 przy porcie P2 wynikła podczas uruchamiania całego układu pod kontrolą prostego oprogramowania sterującego. Napięcie z przetwornicy DC/DC możemy regulować przy pomocy potencjometru P1 w zakresie około 20...35V. Dla niskich napięæ zasilających lampę układ pracował poprawnie, a wystawiane przez procesor wysokie stany logiczne z powodzeniem wprowadzały tranzystory kostki U6 w stan nasycenia, a to powodowało pewne gaśnięcie segmentów lampy. Jednak dla napięć w okolicach 30V (a taka jest docelowa robocza wartość napięcia dla lampy) zaobserwowałam dość niesympatyczny efekt - a mianowicie niekóre segmenty lampy zapalały się samoistnie. Przyczyną była zbyt mała wydajność prądowa portu P2 dla logicznego stanu H. Po prostu dla wiekszego napięcia zasilającego segment, a co za tym idzie większego prądu kolektora, dostarczany z portu prąd bazy nie wystarczał do wprowadzenia tranzystora w nasycenie. Tranzystor pracował jako zwykły wzmacniacz a nie jako klucz, co powodowało niepożądane zapalanie się segmentów. Dodanie zestawu ośmiu rezystorów (drabinka RP3 - w układzie modelowym dolutowana od spodu płytki drukowanej) zapewniło, że dla stanu H tranzystory ładnie i bez problemów wchodziły w nasycenie wyłączając anody lampy. Układ sygnalizacji dźwiękowej Tu chyba nie ma wiele do pisania - to zwykły tranzystor NPN (T3) pracujący jako klucz sterowany z portu P3.2 i sterujący pracą buzzerka. Wybierając buzzerek należy mieć na uwadze pobierany przez niego prąd, aby nie wystąpiły kłopoty podobne do wspomnianych wcześniej przy okazji lampy VFD. Użyty w modelowym układzie "piskacz" generuje dźwięk o odpowiednim natężeniu już przy prądzie zasilania 5mA i napięciu około 3.5V. Stąd w układzie dodatkowy rezystor R7 aby nieco ograniczyæ hałas - budzik budzikiem, ale bez przesady. Dla buzzerka o większym poborze prądu nale¿y rozważyć użycie tranzystora o większym wzmocnieniu niż ma BC237 lub podparcie portu P3.2 do VCC przy pomocy dodatkowego rezystora o wartości około 10K. Oczywiście zamiast buzzerka można z powodzeniem dołączyć diodę transoptora i po drobnej modyfikacji oprogramowania wykorzystywać układ sygnalizacji do załączania jakiegoś zewnętrznego urządzenia - to jak kto woli. Lampa VFD Nie ukrywam - tu miałam dylemat. Z czysto estetycznego punktu widzenia rosyjska lampa IW-18 prezentuje się bardzo oryginalnie, a cienkie i bardzo delikatne segmenty w okrągłej, podłużnej bañce wyglądają po prostu ładnie. Tyle tylko, że montaż oraz doprowadzenie przewodów do takiej lampy jest nieco kłopotliwy. No i póki co, nie udało mi siê wymyślić sensownego sposobu na zamontowanie niebieskiego filtru ze starej teczki na dokumenty. Ostatecznie wykorzystałam lampę Itron FG1010RB1, opisaną wraz z przykładowym układem sterowania w [3]. Żarnik lampy jest zasilany z napięcia +5V, dioda D3 zapewnia spadek napięcia na dodatniej koñcówce żarnika w granicach 4.3V co w zupełności wystarcza do pewnego działania lampy. Pomimo, iż żarzenie jest prądem stałym, spadek jasności segmentów w funkcji długości lampy (odległości od punktu przyłączenia masy) jest niezauważalny. Wyświetlacz posiada niebieski transparentny filtr, powoduje to delikatne rozmycie kształtu świecących segmentów i wedługg mnie wygląda bardzo ładnie zarówno w półmroku jak i przy świetle dziennym. Oczywiście zdobycie akurat takiej lampy mo¿e być nieco kłopotliwe, ale proszę zauważyć że opisywany tu układ może sterować praktycznie dowolną lampą VFD o siedmiosegmentowych polach odczytowych. Minimalna, wymagana ilość pól odczytowych to osiem. Ważne jest, aby zasilania żarnika nie wymagało napięć większych od 5V, a segmenty świeciły się w miarę sensownie przy napięcu w granicach 30V. Te w sumie mizerne wymagania spełnia wiele popularnych wyświetlaczy VFD. Klawiatura Klawiatura to cztery zwierne przyciski typu push-button. Naciśniêcie przycisku zwiera wstępnie spolaryzowane wyprowadzenie portu P1 (bity P1.4...P1.7) do masy generując niski stan logiczny. Klawiatura została zmontowana (pokrosowana) na małej, osobnej płytce laminatu przymocowanej na przodzie całego zegara i przyłączona do płytki zegarka przez złącze Z3. Układ pomiaru temperatury Wprawdzie na płytce drukowanej (złącze Z3) jest wyprowadzony sygnał mogący Służyć do komunikacji 1-Wire z termometrami typu DS1820, to tym razem przyjęłam inne rozwiązanie. Do pomiaru temperatury wykorzystany został układ AD7415 - U7 (opisany w [8]). Zasilanie układu jak i dostęp do systemowej magistrali I2C zapewnia złącze Z3. Kostka AD7415 została zamontowana na maleńkim laminatu, zasilanie układu blokuje kondensator C10. Taki moduł podłącza siê do zegara na wiązce czterech elastycznych przewodów. Montaż i uruchomienie Cały zegarek został wykonany na jednostronnej płytce drukowanej o wymiarach 120x95mm. Brakujące ścieżki / połączenia zostały zrealizowane w formie kilku krosów na stronie elementów. Uruchomienie całości nie jest zbyt skomplikowane, ale należy to wykonywać etapami. Najpierw lutujemy krosy, wszelkie złącza, elementy bierne i podstawki pod układy scalone. Proszę uważać na polazycację kondensatorów elektrolitycznych, a szczególnie C6 (w przetwornicy DC/DC) Nastêpnie dokładamy stabilizator U1 oraz diodę LED i na próbę załączamy zasilanie (+8VDC), kontrolując czy na wyprowadzeniu 40 układu U3 jest napiêcie +5V i czy dioda D2 świeci. Jeżeli tak jest - do podstawki wkładamy układ U2 (LM555). Próbnikiem stanów logicznych lub oscyloskopem kontrolujemy czy na wyprowadzeniu 3 układu U2 (wyjście Q) są impulsy o częstotliwości około 38 kHz. Jeżeli tak jest - generator kluczujący tranzystor MOSFET działa i możemy dalej uruchamiać przetwornicę. Lutujemy zatem tranzystor regulujący napięcie wyjściowe (T1) oraz tranzystor MOSFET (T2), suwak potencjometru P1 skręcamy w kierunku rezystora R5 (napis MIN na płytce). Pomiedzy zworę M a masę układu zapinamy rezystor o mocy 1/2 W i wartości 7.5K (będzie on stanowił testowe obciążenie) i włączamy zasilanie. Na wspomnianym rezystorze powinniśmy uzyskać napięcie w okolicach 20V, cały układ powinien pobierć prąd w granicach 100...150 mA. Kręcąc potencjometrem P1 sprawdzamy czy możiwa jest regulacja napięcia wyjściwego przetwornicy, ale pamiętajmy że nie wolno przekroczyć napięcia nominalnego kondensatora C6 (u mnie: 63V). Zarówno tranzystor MOSFET jak i cewka mogą być lekko ciepłe, ale tylko trochę. Jeżeli te elementy zbytnio się nagrzewają należy szukać błędu w montażu lub sprawdzić ścieżki pod kątem zwarć lub przerw. Je¿eli przetwornica działa, odpinamy testowe obciążenie i montujemy resztę elementów. Wstępne uruchomienie i przetestowanie przetwornicy jest o tyle wa¿ne, że jej wadliwe działanie może w skrajnym przypadku doprowadziæ do uszkodzenia driverów ULN2804 lub/i samego procesora. Mnie właśnie takie nieszczęście się przydarzyło - dlatego uprzedzam. Po zainstalowaniu bateryjki i podłączeniu lampy włączamy zasilanie i układ jest gotowy do zaprogramowania. Możemy jeszcze dla ciekawości sprawdzić czy pracuje zegarek RTC - na wyprowadzeniu 7 układu U4 powinny pojawiać się impulsy (niski stan logiczny co 1 s), impulsy powinny pojawić siê również na wyjściu ALE procesora (wyprowadzenie 20 U3) - jest to oznaką, że MCU pracuje w miarę poprawnie. Przy promocy programatora opisanego w [4] ładujemy kod maszynowy programu vfd-budzik.hex. Podczas programowania wyświetlacz będzie wygaszony i włączy się buzzerek, a wynika to z ustawienia wszystkich I/O procesora w stan H. W tym właśnie momencie prąd pobierany przez układ znacznie wzrośnie - wynika to z maksymalnego obciążenia przetwornicy DC/DC zwartymi do masy rezystorami RP4 i RP5. Po zakoñczeniu pracy loadera (np. przez zamknięcie aplikacji MTK2) zegarek wystartuje - prawdopodobnie pokazując przypadkowe wskazania czasu. Pomijając sens tych wskazañ - prawe pole odczytowe, czyli sekundy powinno się zmieniać a pomiêdzy godzinami, minutami i sekundami powinny pulsować poziome kreski. Garść lużnych uwag No tak, z cewkami zawsze kłopot... W modelowym zegarku wykorzystałam cewkę o indukcyjności 100uH pracowicie wydłubaną z urządzenia o bli¿ej nieokreślonym przeznaczeniu, a jej wartośæ została po prostu zmierzona nieco lepszym funkcjonalnie multimetrem. Podczas eksperymentów okazało się, że przetwornica pracuje w miarę poprawnie także dla mniejszych wartości indukcyjności (do około 30uH) więc nie powinno być problemu z jej dobraniem. Na płytce drukowanej są otworki pod wyprowadzenia L1 - rozstaw padów to 200mils. Aby jednak umożliwićæ zamontowanie innego gabarytowo elementu - wokół padów zrobiłam luźne zony lutownicze, proszê sobie ewentualnie otworki powiercić według własego uznania i potrzeb. To tak¿e element niejako 'z odzysku', pozyskany z toru w.cz. starej wieży stereo... A szczególny o tyle, że jedna z okładek kondensatora (nieruchoma) posiada dwa zwarte wyprowadzenia i na płytce drukowanej one służą też jako zworka/kros. Jeżeli chcemy wstawić trymer o innym układzie wyprowadzeñ należy mieć na uwadze konieczność zamontowania tej zworki. Płytka drukowana dostosowana jest do typowego holderka na pastylkową baterię litową o średnicy 20mm. Na płytce jest nieco miejsca, więc spokojnie można zastosować inną podstawkę lub jeżeli bateryjka ma koñcówki lutownicze - wlutować ją bezpośrednio w płytkê. Innym rozwiązaniem jest wlutowanie dwóch krótkich, elastycznych przewodów i doprowadzenie zasilania RTC z zewnętrznego zestawu dwóch baterii R6 lub AAA, to do wyboru. Oprogramowanie Program sterujący pracą zegara został napisany w znakomitej większości w jezyku C, niskopoziomowe funkcje do obsługi magistrali I2C napisałam w assemblerze (aby zupełnie nie wyjść z wprawy...). Funkcje programu Domyślnym trybem pracy zegara jest odmierzanie i pokazywanie na wyświetlaczu VFD upływającego czasu. Czas prezentowany jest w formacie HH-MM-SS, pomiędzy godzinami, minutami i sekundami zapalają się i gasną środkowe segmenty. Naciśnięcie klawisza ESC powoduje aktywację funkcji alarmu, zamiast kresek na wyświetlaczu będą pulsowały dwa kwadraciki. Gdy funkcja budzika jest aktywna, program porównuje zapisane w pamięci układu RTC nastawy budzika z bieżącym czasem systemowym i gdy nadejdzie właściwy moment generuje alarm sterując pracą buzzerka. Alarm trwa przez maksymalnie 5 minut od chwili wykrycia zrównania czasów - to jak wykazała praktyka zupełnie wystarczy aby się (jakoś) obudzić i ogarnąć. Naciśnięcie klawisza ESC podczas działania budzika po prostu go wyłącza. Gdy zegar jest w swoim podstawowym trybie pracy - co 20 sekund, przez chwilę pokazywana jest aktualna temperatura otoczenia. Temperatura wyświetlana jest przez 2 sekundy, następnie zegar wraca do prezentacji czasu. Ciągły odczyt temperatury wywołujemy przez naciśniêcie klawisza NEXT. Prezentowana jest tylko część całkowita odczytanej wartości temperatury, wartości ułamkowe (0.25, 0.5 i 0.75) będą prezentowane w formie semigrafiki - poziomych słupków po lewej i prawej stronie wyświetlacza. Odczyt temperatury przetwornika dokonywany jest co 1 sek. Nastêpne naciśniêcie przycisku NEXT spowoduje powrót do wyświetlania bieżącego czasu czyli przywrócenie funkcji zegara. Ustawianie czasu Naciskamy klawisz TIME - program przejdzie w tryb edycji nastaw czasu. W tym trybie klawisz ALARM pełni rolę przełącznika pomiędzy godzinami i minutami, aktualnie edytowana wartość jest oznaczona dwoma kropkami, jak na zdjęciu poniżej (dla godzin i minut). Klawiszem NEXT zmieniamy wartości godzin (00...23), potem naciskamy ALARM i zmieniamy nastwy minut. Z edycji czasu możemy wyjść bez modyfikacji ustawieñ naciskając klawisz ESC, lub zatwierdzić zmiany ponownie naciskając przycisk TIME. Należy pamietać, że do RTC wysyłane są tylko nastawy godzin i minut, sekundy są zawsze zerowane! Ustawianie budzika Analogicznie jak czasu, tyle że do edycji alarmu wchodzimy naciskając klawisz ALARM, pomiedzy hodzinami i minutami przełączamy się klawiszem TIME, wartości zmieniamy NEXT-em. Guzik ESC przerywa edycjê, ponowne naciśnięcie ALARM zapisuje ustawienia. Gadżet nieobowiązkowy Je¿eli do zegara zostanie podłączony moduł czujnika temperatury, fakt ten zostanie wykryty automatycznie i wtedy co dwadzieścia sekund na wyświetlaczu będzie pokazywana aktualnie zmierzona temperatura. (foty) Temperatura jest wyświetlana przez dwie sekundy, potem następuje powrót do prezentacji czasu. W dowolnym momencie można nakazać pomiar i prezentacjê temperatury naciskając przycisk NEXT. W przypadku braku modułu termometru - nacięniêcie NEXT-a nie spowoduje żadnych widocznych efektów. O, taka moja sztuczka. Na zakoñczenie - jak zwykle kilka pamiatkowych zdjęć z różnych faz pracy nad tą uroczą zabawką oraz filmik pokazujący zegar w działaniu. Pliki dodatkowe schemat ideowy w formacie pdf mozajka ścieżek w formacie pdf (termotransfer) mozajka ścieżek w formacie pdf (flamaster) archiwum zip z oprogramowaniem (kompilat oraz wersja źródłowa) |