Serwis Elektroniki - http://www.serwis-elektroniki.prv.pl
Serwis Elektroniki - vortal otwartych umysłów ->
Strona główna | Projekty | Artykuły | Pliki | Programy | Forum | Kontakt | Historia strony
AKTUALIZACJA
01.10.2015

DOBRA KSIĄŻKA


SONDA
Czy uzupełniać projekty o wzory płytek drukowanych?

tak
nie
bez zdania
NA FORUM:
>schematy apar
 atów telefoni
 cznych z w...
>Elektronika o
 gólna
>projekt
>ATMEGA32 + LC
 D problem
>assembler
>PILNE Termome
 tr DS1820
>LISTWA ŚWIETL
 NA LED ("
 ;z filmu N...
>Poszukuję try
 bów serwisowy
 ch
>Assembler 51.
  (ASEM-51) -
 implementa...
>pomysł może ,
  lub pomocy ?
 

KOMENTARZE

MAILING



LICZBA WEJŚĆ

KY3ORR
GG:  
  

Zegar "uniwersalny" DCF77 LCD

projekt zgłoszony do publikacji w miesięczniku Elektronika dla Wszystkich

Do czego to służy?

         Prezentowane urządzenie jest zwyczajnym w świecie zegarkiem. To jednak co wyróżnia go spośród innych opisywanych już na łamach EdW jest fakt iż potrafi sam się ustawić wykorzystując do tego radiowy sygnał czasu DCF77. Sygnał ten nadawany jest z terenu Niemiec, a zasięg nadajnika to obszar o promieniu 2500km. Dodatkowo możliwa jest prezentacja bieżącego czasu na jednym z dwóch typów wyświetlaczy: LED i LCD - wystarczy załadować odpowiedni program. Wskazywany czas jest "uniwersalny" na terenie całej UE, a imponujący zasięg nadajnika przemawia za skorzystaniem z dobrodziejstwa! Projekt wspomagany jest kompilatorem BASCOM 8051.

Zasięg nadajnika DCF77

[do góry]

Jak to działa?

Schemat elektryczny zegara przedstawiony jest na rysunku 1.

Zegar synchronizowany sygnałem DCF77

         Całe urządzenie oparte jest o tani mikroprocesor rodziny MCS-51 - AT89C4051, którego program sterujący pozwala na odbiór i dekodowanie sygnału DCF, obsługę wyświetlacza i komunikację z użytkownikiem za pomocą trzy przyciskowej klawiatury. Można wyróżnić kilka bloków: jednostka centralna (mikroprocesor z oprogramowaniem), zasilacz, obwód doprowadzający sygnał DCF z odbiornika do procesora i złącza dla wyświetlaczy, sekundnika, oraz klawiatury. Obwód rezonansowy składa się z rezonatora kwarcowego Q1 i trzech kondensatorów: C1-C3.
Rezonator stabilizuje częstotliwość pracy mikroprocesora na poziomie 12MHz. Element C3 zaznaczony na schemacie jako kondensator to trymer. Służy on do dokładnego dostrojenia obwodu generatora od którego zależy dokładność generowania podstawy czasu. Ma to znaczenie w przypadku, gdy nie jest odbierany sygnał DCF, nie jest wykonywana okresowa synchronizacja i zegarek przez dłuższy czas musi pracować według własnego wzorca. Jego stosowanie jest zalecanie tylko w przypadku, gdy zależy nam na dokładności zegarka, który na przykład nie posiada odbiornika DCF. Dokładnego dostrojenia można dokonać za pomocą miernika, lub ''na oko'' poprzez delikatne przekręcanie trymera C3 i obserwację zachowań zegara w przeciągu dłuższego czasu. Nic jednak nie stoi na przeszkodzie, by trymera C3 w ogóle nie montować i zastosować kondensatory C1, C2 o pojemności 27pF. Wówczas częstotliwość generatora będzie uzależniona od rozrzutu parametrów konkretnego egzemplarza kwarcu i w niewielkim stopniu od pojemności C1, C2. Przy częstej synchronizacji zegara ze wzorcem nie będzie to miało znaczącego wpływu na jego działanie.
Zasilacz wykonany jest w oparciu o standardową aplikację stabilizatora 7805 i dostarcza napięcia +5V do zasilania całości. Dioda D1 służy zabezpieczeniu stabilizatora w przypadku nieprawidłowej polaryzacji napięcia zasilającego, którego wartość powinna mieścić się w przedziale 9-12V. Kondensatory C5-C8 dodatkowo filtrują obwód zasilania.
Sygnał DCF77 dociera do procesora, z odbiornika, poprzez złącze DCF i układ dopasowujący złożony z elementów T1, R1. Obecność tego obwodu jest związana z dopasowaniem polaryzacji sygnału z wyjścia odbiornika, bowiem niektóre ich typy podają sygnał w przeciwfazie. W projekcie przyjmuje się za "1" logiczną (sygnału DCF) napięcie o wartości blisko +5V, natomiast logiczne "0" to napięcie bliskie 0V. Gdy impulsy o długości 100-200ms mają wartość logicznej "1" to montaż elementów T1, R1 jest zbędny i należy połączyć zworą pin 2. złącza DCF z pinem 6. mikrokontrolera. W przeciwnym wypadku elementy te należy zamontować. Złącze DCF ma także wyprowadzone sygnały zasilania dla przyłączanego odbiornika. W przypadku gdy odbiornik jest zasilany z innego źródła należy obwód jego masy dołączyć do końcówki 5. złącza DCF, zaś końcówkę 7. pozostawić nie podłączoną. Dodatkowo należy zadbać by sygnał wyjściowy odbiornika nie przekraczał wartości +5V.
Kondensator C4 włączony w obwód zerowania mikrokontrolera wymusza jego poprawny start po włączeniu zasilania.
Złącze LED/1 służy do podłączania sześciocyfrowego modułu LED, zaś złącze LCD przewidziane jest dla wyświetlacza ciekłokrystalicznego o organizacji 2*16 znaków. Potencjometr P1 umożliwia regulację kontrastu LCD. Złącze SEK jest przewidziane do sterowania sekundnikiem ''teleexpressowym'' własnej konstrukcji, złożonym z 60 diod świecących, pracującym na zasadzie licznika (opis w dalszej części artykułu).

         O ile sterowanie wyświetlaczem LCD odbywa się w pełni na poziomie programowym, o tyle sterownie modułem LED jest warte opisania. Do sterowania popularnych świecących ósemek wykorzystany jest doskonały układ MAX7219, który potrafi obsłużyć do ośmiu takich wyświetlaczy ze wspólną katodą w trybie multipleksowania. Zaletą takiego sterowania jest ogromne zmniejszenie zużycia energii, gdyż w jednej chwili świecą się segmenty tylko jednego wyświetlacza - nie jak w rozwiązaniu klasycznym, gdzie wszystkie wyświetlacze świecą jednocześnie.

Schemat elektryczny modułu LED przedstawiony jest na rysunku 2.

Zegar synchronizowany sygnałem DCF77 - moduł LED

Rezystor R2 ogranicza prąd świecących wyświetlaczy. Wykorzystanie układu specjalizowanego jest tu uzasadnione, gdyż nie trzeba pisać zawiłego programu obsługi wyświetlania, a liczba linii sterujących jest ograniczona do trzech. Warto wspomnieć, że układ MAX7219 ''przemiata'' wyświetlacz z częstotliwością ponad 1kHz, przy czym jasność jest wysoka i może być regulowana tak programowo jak i sprzętowo (rezystor R2 i rejestr Intensity). Sterowanie układem MAX7219 przypomina pracę z pamięcią, której to wysyła się pod odpowiedni adres odpowiednią daną. Procedura konfiguracji układu MAX7219 przedstawiona jest na listingu 1, zaś jego obsługi na listingu 2.

Listing 1.

Adres = &H09       'rejestr dekodera
Dana = &H3F        'pozycje dekodowane -> 0-5 -> 3F
Call Wyslij_dane
Adres = &H0A       'rejestr intensity register
Dana = &H04        'jasnosc (0-F)
Call Wyslij_dane
Adres = &H0B       'rejestr scan-limit
Dana = &H05        'pozycje wyswietlane 0-5
Call Wyslij_dane
Adres = &H0F       'rejestr display-test
Dana = &H00        'tryb normalny
Call Wyslij_dane
Adres = &H0C       'rejestr shutdown
Dana = &H01        'wyswietlacz wlaczony
Call Wyslij_dane

Listing 2.

Sub Wyslij_dane
Clk = 0
Load_cs = 0               'start transmisji
For Licznik = 7 Downto 0  'adres od MSB do LSB
Din = Adres.licznik
Clk = 1
Clk = 0
Next Licznik
For Licznik = 7 Downto 0  'dana od MSB do LSB
Din = Dana.licznik
Clk = 1
Clk = 0
Next Licznik
Load_cs = 1               'koniec transmisji
End Sub

Gdzie zmienna Adres przechowuje adres rejestru pod który ma zostać wysłana wartość znajdująca się w zmiennej Dana.

         Do złącza LCD przypina się wprost moduł LCD, zaś do złącza KLAWIATURA - 3 przyciski zwierne chwilowe - uswitche. Ich zadaniem jest zwieranie do masy końcówek P3.3-P3.5.

Klawiatura do zegara DCF77

         Program sterujący odbiera dane z odbiornika. Dane przesyłane są szeregowo i ułożone w następujący sposób: znak synchronizacyjny (brak sygnału), bit startu (o wartości "0") i 58 bitów danych. Pojedynczy bit przesyłany jest w ciągu 1s, przy czym brak sygnału oznacza, że przez sekundę występuje stan logiczny niski, reprezentacją bitu danych o wartości zero jest impuls o długości 100ms plus 900ms niskiego stanu logicznego, zaś bitu danych o wartości jeden impuls o czasie trwania 200ms plus 800ms stanu logicznego ''0''. Ilustruje to rysunek 3.

Sygnał DCF77

Oprogramowanie jest odporne na zakłócenia reagując ignorowaniem odbieranej ramki danych. Pełna transmisja trwa dokładnie jedną minutę. Po zakończeniu odbierania danych następuje sprawdzanie sum kontrolnych, zabezpieczających transmisję, i gdy wszystko jest w porządku nastawa zegara zostaje skorygowana. Moment korekcji to dodatnie zbocze impulsu bitu 0. następnej, po odebranej, ramki danych. Przy dobrym dostrojeniu obwodu rezonansowego moment korekcji nie powinien być zauważalny (przeskoki sekund, ew. minut). Możliwe jest, że jeszcze podczas odbioru danych procesor zrezygnuje z dalszego ich odbierania. Przyczyną może być stwierdzenie uzyskiwania nieprawidłowych danych, podczas gdy ich wartości są znane, bowiem w sygnale DCF występują pewne charakterystyczne i niezmienne bity. I tak: bity 0-14 mają zawsze wartość 0, zaś bit 20. ma wartość 1. Oprogramowanie dopuszcza, w pewnych granicach, niezgodność czasów trwania poszczególnych części odbieranego sygnału. Po ich przekroczeniu traktowane jest to jako zbyt duże zniekształcenie, co oczywiście oznacza błąd. Wykrycie błędu powoduje wstrzymanie odbioru do najbliższego znaku synchronizacyjnego oraz wygaszenie znaku informującego o odbieraniu danych.

         W zależności od tego, jaki typ wyświetlacza został wybrany przez użytkownika do pamięci mikroprocesora musi zostać załadowany odpowiedni program. Jako, że zegarek z wyświetlaczem LCD jak i LED prezentują się odmiennie oba rozwiązania posiadają nieco inną funkcjonalność. Bierze się to stąd, że wyświetlanie oparte o wyświetlacz LED nadaje się bardziej do prezentowania głównie godziny (np. w miejscach publicznych lub tam gdzie zależy nam na dużej jasności), a po dodaniu ''teleexpressowego'' sekundnika zastosowanie wydaje się jeszcze bardziej użyteczne tam gdzie obserwujemy upływający lub dobiegający czas. Może studio nagraniowe? Wyświetlacz LCD ze swej natury jest przystosowany do ukazywania większej ilości. W artykule opisuję jednoczesne zachowanie obu typów. Organizacja wyświetlacza ciekłokrystalicznego jest następująca: w pierwszej linii bieżąca godzina GG:MM:SS plus graficzny znak odbioru sygnału (antenka), w drugiej linii znaczek opcji (kluczyk) i data DD-MM-RR. Organizacja wyświetlacza LED jest następująca: GG:MM:SS z tym, że dwukropek pomiędzy minutami, a sekundami to znak odbioru sygnału z odbiornika.

Zegar DCF z wyświetlaczem LCD (brak ikony nastawy i odbioru)

         Układ klawiatury dla wersji LCD powinien być taki żeby przyciski P1-P3 znajdowały się kolejno: z lewej, w środku i z prawej strony pod wyświetlaczem. Umożliwi to bardzo intuicyjne poruszanie się po menu. Wciśnięcie przycisku P1 powoduje wejście w tryb ręcznej nastawy zegara. Opcja ta umożliwia pracę zegara nawet wtedy, gdy nie posiadamy odbiornika DCF77, lub z różnych względów odbiór nie jest możliwy. W wersji LCD przyciski P1 i P3 służą do przechodzenia pomiędzy sekcjami godziny i daty, a przycisk P2 powoduje inkrementację nastawy wybranej sekcji. Sekcje owe na wyświetlaczu są oznaczone pojawiającymi się strzałkami. Zakończenie nastawy następuje po wciśnięciu P2, podczas gdy na wyświetlaczu widnieje napis ''KONIEC NASTAWY''. W wersji z wyświetlaczem LED po wejściu w tryb nastawy zegara przyciski P1 i P2 zwiększają wartość kolejno: godzin i minut. Wciśnięcie P3 kończy proces nastawy. Zegar w wersji LED podaje jedynie bieżący czas, więc nie ma możliwości nastawy daty. Podczas normalnej pracy wciśnięcie P2 powoduje podanie czasu i daty ostatniej synchronizacji naszego zegara ze wzorcem (oba typy). Podczas normalnej pracy przy próbie wejścia w tryb nastawy czasu, lub wyświetlenia informacji o ostatniej korekcie czas reakcji na wciśnięty przycisk może wynieść, w najgorszym przypadku, 1s. Bierze się to stąd, iż stan klawiatury badany jest przy okazji każdorazowego odświeżania zawartości wyświetlacza, co ze zrozumiałych względów odbywa się cyklicznie, co 1s.

         Po włączeniu zasilania zegar zostaje ustawiony na godzinę 12:00:00 i datę 1. stycznia 2000 roku (LCD). Gdy rozpocznie się odbiór sygnału DCF (po znaku synchronizacji) zapali się dioda informująca, w przypadku LED, lub pojawi się antenka, w przypadku LCD. Po poprawnym odebraniu i zdekodowaniu danych następuje korekta. Znak odbioru DCF zostaje wygaszony, a cykl odbioru rozpoczyna się od nowa.

         Propozycje wykonania dwóch typów zegarów z wyświetlaczami LED przedstawiają zdjęcia.

Zegar DCF z wyświetlaczem LED i sekundnikiem cyfrowym

Zegar DCF z wyświetlaczem LED i sekundnikiem pseudo-analogowym

[do góry]

Program sterujący

         Omawiane programy dla obu wersji zegara są dostępne w postaci źródłowej na: XXX. Są one dość wyraźnie skomentowane, więc w artykule tylko z grubsza opiszę ich strukturę. Na początku garść informacji dla kompilatora, konfiguracji sprzętowej mikrokontrolera i wyświetlaczy, deklaracji zmiennych i podprogramów. Następnie ustalane są warunki początkowe i następuje główna pętla programu. Timer T0 pracuje w trybie 2. co oznacza, że przy każdym przepełnieniu się jego 8-bitowego licznika następuje wywołanie przerwania i automatyczne załadowanie wartości początkowej (która znajduje się w drugiej 8-bitowej połówce 16-bitowego rejestru T0 pracującej tu jako pamięć). Wczytywanie wartości 56 przy kwarcu 12MHz powoduje cykliczne wywoływanie przerwania od T0 co 200us. Zliczanie tych zdarzeń pozwala na obliczanie części sekund, sekund i dalej upływającego czasu. Dzieje się to w programie obsługi omawianego przerwania: co_200_us. W momencie zliczenia kolejnej sekundy ustawiana jest flaga zmiana_sekundy która jest wykorzystywana do określania momentu odświeżania wskazań wyświetlacza. Taka realizacja odciąża procesor, który w międzyczasie wykonuje inne zadania i tylko raz na sekundę musi zająć się aktualizacją zawartości wyświetlacza. Gdyby nie takie podejście do sprawy mogłoby się okazać, że przy odbiorze sygnały DCF występowałyby błędy. Konstrukcja programu wymusza jego przejście do podprogramu synchronizacja, który wyszukuje początek transmisji nowej ramki danych DCF. Działa to na zasadzie badania czasu trwania niskiego stanu logicznego na końcówce P3.2. Gdy stan ten utrzymywał się w przedziale 1.7-2s to program uznaje, że jest to znak początku transmisji i przechodzi do podprogramu odbierającego dane. W przypadku nie mieszczenia się w zadanych granicach czasowych program uznaje to za błąd i ostatecznie ponownie próbuje znaleźć poszukiwany sygnał synchronizacyjny. Po udanej próbie synchronizacji na podobnej zasadzie następuje odbiór poszczególnych bitów danych. Różnica jednak polega na tym, że tu mierzone są długości obu stanów logicznych. Wartości czasów akceptowane przez program to: dla bitu danych ''0'' impuls -> 80-120ms, dla bitu danych ''1'' impuls -> 180-220ms, oraz stan niski (dla uproszczenia programu w obu przypadkach) < 950ms. Gdy wszystkie odbierane dane mieszczą się w sensownych przedziałach są następnie za pomocą podprogramu przelicz_dane przeliczane i umieszczane w odpowiednich zmiennych. Konstrukcja tej części uwalnia procesor od potrzeby każdorazowego zerowania zmiennych przed rozpoczęciem odbioru. Odbiór pierwszego, najmniej znaczącego, bitu każdej zmiennej powoduje usunięcie poprzedniej danej. Po zakończeniu odbierania 58. bitu następuje porównanie wartości bitów parzystości zabezpieczających transmisję z wartościami obliczonymi na podstawie odebranych danych. Polega to na sprawdzeniu czy w bloku danych zabezpieczanym przez, jeden z trzech, bitów parzystości występuje parzysta, czy też nie, ilość jedynek (w systemie dwójkowym). Gdy dane są spójne jest to równoznaczne z poprawnym odebraniem danych. Teraz zegar oczekuje (co najmniej 1.8s) na narastające zbocze sygnału z odbiornika (bit 0.) i następuje korekta zegara. Te 1.8s związane jest ze stanem logicznym niskim bitu 59. i synchronizacją. Cały cykl rozpoczyna się od nowa. Pomimo, że impuls znajduje się na początku transmitowanego znaku, program odbierający dane, ze względu na swoją pierwotną postać, najpierw oblicza czas logicznego ''0'' z poprzedniego bitu, po czym czas trwania logicznej ''1'' bieżącego bitu. Na podstawie długości logicznej ''1'' określa, jaki aktualnie transmitowany jest znak, zaś pomiar długości logicznego ''0'' z poprzedniego bitu wykazuje czy sygnał nie jest zniekształcony. Nie ma to jednak większego znaczenia, jeśli chodzi o sam odbiór danych.

[do góry]

''Teleekspressowy'' sekundnik

         Sekundnik, który można dołączyć do zegara w wersji LED jest prosty w budowie, ale żadne konkretne rozwiązanie nie zostanie tu przytoczone. Zasada działania polega na tym, że co sekundę na złączu SEK (P3.0) pojawia się dodatni impuls który powinien być podany na wejście układu zliczającego i zasilającego 60 diod świecących symulujących poszczególne sekundy. W momencie gdy mija pełna minuta na pinie P3.1 pojawia sie dodatni impuls kasujący, który to powinien wygasiś wszystkie diody. Mimo takiego sterowania, aby uprościć program sterujący 60. sekunda także jest sygnalizowana poprzez impuls zliczający (P3.1), dzieje się to jednak przed impulsem kasującym więc ewentualny błąd w pracy sekundnika, wynikły z nadmiarowego impulsu, nie będzie zauważalny. Nie przytaczam żadnego konkretnego schematu ponieważ to w jaki sposób wykonacie sekundnik zależy tylko od Was. Podpowiem, że bardzo łatwo można zrealizować to poprzez kaskadowe łączenie liczników dziesiętnych. Wadą takiego wykonania jest, niestety, duża prądożerność. Niestety coś za coś: efekt za miliampery :)

[do góry]

KY3ORR

Spis elementów

Oznaczenie Wartość

REZYSTORY
R1, R2 10K
P1 50K
KONDENSATORY
C1, C2 27pF - opis
C3 27pF trymer - opis
C4 1uF
C5, C6 100nF
C7, C8 100uF
PÓŁPRZEWODNIKI
D1 1N4148
T1 BC547
U1 AT89C4051
U2 7805
U3 MAX7219
INNE
Q1 12MHz
P1-P3 uswitch
W1 - W6 wyświetlacze 7-segmentowe LED WC
LCD złącze goldpin 1*16
SEK, KLAWIATURA, KLAWIATURA/2 złącze goldpin 1*4
LED/1, LED/2 złącze goldpin 1*5
RS złącze DB9M

[do góry]

Plik wynikowy *.hex w postaci spakowanego archiwum *.rar można pobrać >stąd<
Hasło: www.serwis-elektroniki.prv.pl

© Serwis Elektroniki 2002-2006