Witam Jestem zielony jak trawa na wiosnę wymyśliłem sobie zbudowanie (ewentualnie zakup) zegara LED z dcf77 (bo to czas wykorzystywany w firmie) i tu znalazłem piękny AVT 5022 i tu pojawia się problem. Prawdą jest że zegar sterowany przez dcf mamy podgląd impulsu jedna wstając rano po zmianie czasu nie mamy ani info o tym że po zmianie czasu się synchronizował z dcf ja w wszystkich chińskich, ani żadnych kontrolek typu czas letni ja np w zegarkach naręcznych casio "DST" w czasie letnim. Czy dało by się przerobić soft ta by jedną led wykorzystać jak sygnalizator czasu letniego a 2 zimowego ? http://obrazki.elektroda.pl/7706332100_1429562947_thumb.jpg http://obrazki.elektroda.pl/1051695100_1429563002_thumb.jpg Załącznik "AVT5022V4" to źródło programu może idzie to przerobić oczywiście nie za darmo albo może znacie kogoś kto się takimi rzeczami zajmuje.
Programowany zegar z DCF77
P R O J E K T Y
Programowany zegar
z DCF77, część 1
AVT−5022
Proponowany uk³ad jest
ìprzerÛbk¹î uk³adu opisanego
w†Elektronice Praktycznej
kilka lat temu. Wydaje siÍ
jednak, øe wskutek postÍpu
w†elektronice rok rozwoju
tej dziedziny techniki to ca³e
stulecie w†innych
dziedzinach.
Elektronika Praktyczna 6/2001
Projekt zegara synchronizowanego atomowym wzorcem czasu
DCF77 zaprezentowaliúmy w†numerze EP7/94 i, jak na tamte
czasy, by³ to uk³ad bardzo nowoczesny. Trudno jednak nazwaÊ go
takim w†roku 2001 i†dlatego postanowi³em przedstawiÊ Czytelnikom w³asne opracowanie takiego
zegara, w ktÛrym wykorzystano
nowoczesne, nie istniej¹ce w†po³owie lat 90. elementy. W³aúciwie
jedynym elementem zas³uguj¹cym
na uwagÍ jest naprawdÍ doskona³y procesor, oúmielam siÍ twierdziÊ, øe najlepszy w†swojej klasie:
AT90S8535.
Zanim jednak przedstawimy
szczegÛ³owy opis uk³adu, zapoznajmy siÍ z†podstawowymi parametrami nowego zegara DCF77.
Temat synchronizacji zegarÛw
za pomoc¹ sygna³u DCF by³ poruszany na ³amach Elektroniki
Praktycznej doúÊ dawno i†dlatego
chcia³bym w†najwiÍkszym skrÛcie
przypomnieÊ, czym w³aúciwie jest
transmisja DCF i†czego moøemy
oczekiwaÊ po synchronizowanym
ni¹ zegarze.
Zapewnienie synchronizacji
czasu na terenie ca³ego paÒstwa
czy nawet kontynentu by³o od
dawna bardzo istotnym problemem. Nawet najdok³adniejsze
chronometry stosowane w†nawigacji morskiej nie zapewnia³y dostatecznej precyzji, a†pomiary astronomiczne by³y czynnoúci¹ bardzo k³opotliw¹. Do rozwi¹zanie
pozostawa³y wiÍc dwa problemy:
stworzenie wzorca czasu niezaleønego od zjawisk astronomicznych
i†odpowiednio niezawodnego úrodka transmisji, zapewniaj¹cego b³yskawiczne przekazywanie informacji na teren przynajmniej jednego
paÒstwa. Takim wzorcem czasu,
praktycznie idealnie dok³adnym,
okaza³y siÍ przemiany zachodz¹ce
w†izotopach promieniotwÛrczych,
a†odpowiednim medium sta³y siÍ
fale radiowe. W††wielu krajach
(m. in. USA, Wielka Brytania)
31
Programowany zegar z DCF77
Rys. 1. Przybliżony zasięg
nadajnika DCF.
stworzono nadajniki czasu wzorcowego.
W†Niemczech poradzono sobie
z†tym problemem juø doúÊ dawno,
nadaj¹c sygna³ z†bardzo dok³adnego wzorca czasu. Jest nim atomowy (cezowy) zegar czasu znajduj¹cy siÍ na Uniwersytecie
w†Braunschweig, ktÛrego b³¹d szacowany jest na mniejszy
niø
1†sekunda na 5†milionÛw lat.
W†Mainflingen [50O 0,1' N, 09O 00'
E) ko³o Frankfurtu nad Menem
znajduje siÍ nadajnik radiowy
nadaj¹cy na czÍstotliwoúci
77,5kHz (z†moc¹ 50kW) dok³adn¹
informacjÍ czasowa, bÍd¹c¹ urzÍdowym wzorcem czasu w†Niemczech.
Informacja o†czasie jest kodowana w†59-bitowych s³owach
przesy³anych co sekundÍ i†zawiera dane o†czasie (godziny,
minuty) i†dacie (rok, miesi¹c,
dzieÒ, dzieÒ tygodnia). Dodatkowo zawarte s¹ teø zapowiedzi
zmiany czasu i†dodatkowej sekundy oraz informacja o†tym,
czy obowi¹zuje czas letni, czy
zimowy. Aby zapobiec przek³amaniom, dodano takøe bity parzystoúci pomagaj¹ce wykryÊ
b³Ídy w†transmisji.
Wed³ug oficjalnych danych,
moc nadajnika zapewnia poprawny odbiÛr w†zasiÍgu 2500km
(rys. 1), a wiÍc na terenie prawie
ca³ej kontynentalnej Europy (z
wy³¹czeniem Islandii i†czÍúci Finlandii). Praktyka jest jednak nieco
inna, poniewaø ostatnio zapozna³em siÍ z†informacjami o†poprawnym odbiorze transmisji DCF77
nawet na odleg³oúÊ do 5000 km.
32
Oczywiúcie, odbiÛr nie by³ sta³y,
ale przy dobrych warunkach propagacyjnych moøliwe by³o odebranie kilkudziesiÍciu poprawnych
transmisji dziennie.
Do odbioru informacji DCF
przeznaczone s¹ specjalne odbiorniki DCF Receiver dostÍpne
w†sklepach AVT. Odbiornik taki
jest niezbÍdny do wykorzystania
wszystkich moøliwoúci zegara.
Zrealizowanie uk³adu zegara
w†technice mikroprocesorowej,
zreszt¹ jedynej moøliwej do zastosowania w†tak skomplikowanym
systemie, radykalnie uproúci³o jego
budowÍ. Nie poleca³bym jej moøe
zupe³nie ìzielonymî elektronikom,
ale juø úrednio zaawansowani
elektronicy, maj¹cy za sob¹ wykonanie kilku prostych uk³adÛw,
mog¹ zdecydowaÊ siÍ na montaø
zegara DCF77.
Opis dzia³ania
Schemat elektryczny zegara
DCF77 pokazano na rys. 2.
ìSercemî uk³adu jest zaprogramowany procesor typu AT90S8535,
otoczony niewielk¹ liczb¹ elementÛw dyskretnych. Schemat
zegara moøemy podzieliÊ na
dwie czÍúci, odpowiadaj¹ce fizycznemu rozmieszczeniu elementÛw na dwÛch p³ytkach obwodÛw drukowanych. W gÛrnej
czÍúci schematu jest blok szeúciu
wyúwietlaczy siedmiosegmento-
wych DP1..DP6 i†klawiatura
zbudowana z†szeúciu przyciskÛw
S1..S6. Ta czÍúÊ uk³adu po³¹czona jest z†g³Ûwnym blokiem
zegara za pomoc¹ z³¹cza CON1
+ CON2.
Zastosowanie wyúwietlania
multipleksowanego spowodowa³o dodanie do uk³adu odpowiednich elementÛw steruj¹cych segmentami i†wspÛlnymi anodami
wyúwietlaczy. Segmenty oraz
punkty dziesiÍtne wyúwietlaczy
sterowane s¹ za pomoc¹ driverÛw
mocy zawartych w†uk³adzie IC1
- ULN2803, natomiast do wspÛlnych anod wyúwietlaczy pr¹d
jest doprowadzany za pomoc¹
tranzystorÛw T1..T6.
Sygna³ DCF doprowadzany
jest z†odbiornika do z³¹cza DB9
- CON6, a†nastÍpnie podlega inwersji i†dostosowaniu do poziomu TTL w†uk³adzie z†tranzystorem T7. NastÍpnie kierowany
jest na wejúcie przerwania INT0
procesora.
W†uk³adzie zastosowano dwa
rezonatory kwarcowe Q1 i†Q2
wspÛ³pracuj¹ce z†procesorem. Rezonator Q1, o†czÍstotliwoúci podstawowej 8MHz, jest ìzwyk³ymî
kwarcem wspÛ³pracuj¹cym z†oscylatorem systemowym procesora.
Natomiast ìzegarkowyî kwarc Q2
stabilizuje czÍstotliwoúÊ dodatkowego oscylatora RTC wbudowanego w†strukturÍ procesora.
Podstawowe dane techniczne zegara DCF77:
Wyświetlanie czasu w formacie: godzina, minuta, sekunda.
Wyświetlanie daty w formacie: dzień, miesiąc, rok. Opcjonalnie data może być wyświetlana z pominię−
ciem roku, na którego miejscu prezentowana może być informacja o aktualnym dniu tygodnia.
Budzik 1 pracujący w trybie codziennym, czyli włączający sygnał budzenia niezależnie od dnia tygo−
dnia.
Budzik 2 automatycznie ignorujący sobotę i niedzielę jako dni wolne od pracy i nauki w szkole. Nie−
zależnie od generacji sygnału akustycznego obydwa budziki sterują przekaźnikiem, do którego można
podłączyć urządzenia o znacznym poborze mocy.
Timer pracujący w zakresie od 1 sekundy do 59 sekund, 59 minut i 99 godzin. Timer steruje drugim
przekaźnikiem o znacznej obciążalności styków.
Stoper o zakresie liczenia identycznym jak timer.
Informacje prezentowane są na typowych wyświetlaczach siedmiosegmentowych LED o standardo−
wych wymiarach. Umożliwia to odczytywanie czasu z odległości kilku, a dla osób obdarzonych soko−
lim wzrokiem najwyżej z odległości kilkunastu metrów. Ostatnio zapoznałem się z listem od Czytel−
nika, który napotkał na ogromne problemy podczas prób dołączenia do zbudowanego układu wyświet−
laczy o większych wymiarach, niż przewidziane w projekcie. Problem ten nie będzie nawet w najmniej−
szym stopniu dotyczył naszego zegara DCF77, ponieważ bez jakichkolwiek przeróbek możemy go
wyposażyć w dodatkowe wyświetlacze o wysokości cyfr równej 57mm, co umożliwi odczyt z odleg−
łości nawet kilkudziesięciu metrów!
Dane wprowadzane są do zegara za pomocą sześcioprzyciskowej klawiatury. W każdej chwili możemy
dokonać ręcznej zmiany czasu, co nie było możliwe w poprzednim “wcieleniu” zegara DCF.
Pomimo, że nasz zegar przeznaczony jest do stałej współpracy z odbiornikiem sygnału DCF77, może
on także pracować jako zwykły zegar synchronizowany kwarcem “zegarkowym” 32768Hz. Jednak
dokładność wskazań znacznie wtedy spada i jest taka, jaka może być dokładność seryjnie produkowa−
nych i nie selekcjonowanych popularnych rezonatorów kwarcowych.
Zegar może być wyposażony w awaryjne źródło zasilania, które przy zaniku napięcia w sieci energe−
tycznej dostarcza prądu do zasilania samego tylko procesora.
Elektronika Praktyczna 6/2001
Programowany zegar z DCF77
Rys. 2. Schemat elektryczny zegara z DCF.
Elektronika Praktyczna 6/2001
33
Programowany zegar z DCF77
List. 1.
Sub Display_time
'Przed wejściem w pętlę programową, w której prowadzona będzie kontrola czasu bieżącego,
'a także jego ewentualna ręczna korekta, program określa rodzaj wyświetlania
'oraz zawiadamia o rozpoczęciu pracy za pomocą krótkiego sygnału akustycznego:
Display_type = 1
Short_beep
Do
'W programie zadeklarowane zostały trzy zmienne pomocnicze, których wartość bezpośrednio
'decyduje o tym, co aktualnie będzie ukazywało się na wyświetlaczach. Ponieważ w tym momencie
'mamy zamiar wyświetlać informacje o czasie, zmienne te przyjmują następujące wartości:
Disp1 = _sec
Disp2 = _min
Disp3 = _hour
'Z podprogramu wyświetlania i korekty daty możemy przejść do wyświetlania aktualnej daty,
'a dalej do innych funkcji. Ich zmiana dokonywana jest za pomocą naciśnięcia przycisku S1:
Reset Portb.0
If Pinb.0 = 1 Then Display_date
'Do funkcji ręcznej korekty aktualnego czasu możemy przejść po jednoczesnym naciśnięciu
'przycisków S3 i S6:
Reset Portb.2: Reset Portb.5
If Pinb.2 = 1 And Pinb.5 = 1 And Time_set_flag = 0 Then
'Wejście w tryb ręcznego ustawiania nowego czasu sygnalizowane jest trzema długimi
'(ok. 1 s) sygnałami akustycznymi. Następuje też zmiana wartości zmiennej pomocniczej
'TIME_SET_FLAG określającej tryb pracy:
For R = 1 To 3
Beep
Next R
Time_set_flag = 1
End If
wanie tak nietypowego rozwi¹zania? To ca³a historia. Podczas
uruchamiania kilku uk³adÛw
z†procesorem AT90S8535, wykorzystuj¹cych wbudowany w†jego
strukturÍ oscylator i†generator
przerwaÒ RTC, napotka³em na
nieoczekiwane i†dziwaczne trudnoúci. W†niektÛrych uk³adach oscylator nie dzia³a³ w†ogÛle, a†w†innych pracowa³ w†niekontrolowany
sposÛb, w³¹czaj¹c siÍ i†wy³¹czaj¹c
w†nieoczekiwanych momentach.
Ani sprawdzanie czÍúci hardware'owej uk³adu, ani kodu programu nie dawa³o rezultatu, podobnie jak wertowanie karty katalogowej procesora. Na rozwi¹zanie
problemu natkn¹³em siÍ dopiero
podczas lektury erraty do karty
'Naciśniecie przycisku dołączonego do pinu 2 portu B powoduje zwiększanie wartości minut.
'Każda taka operacja sygnalizowana jest krótkim sygnałem akustycznym. Oczywiście, taka
'akcja jest możliwa tylko po wejściu programu w tryb ustawiania czasu.
Tab. 1. Sposób kodowania
informacji DCF
Reset Portb.2
If Pinb.2 = 1 And Time_set_flag = 1 Then
Incr _min
If _min = 60 Then _min = 0
Short_beep
End If
Numer
impulsu
(numer
sekundy)
0
1−14
'Naciśniecie przycisku dołączonego do pinu 5 portu B powoduje zwiększanie wartości
'godzin. Każda taka operacja sygnalizowana jest krótkim sygnałem akustycznym.
Reset Portb.5
If Pinb.5 = 1 And Time_set_flag = 1 Then
Incr _hour
If _hour = 24 Then _hour = 0
Short_beep
End If
15
16
'Naciśniecie przycisku dołączonego do pinu 1 portu B spowoduje wyjście układu z trybu
'ustawiania czasu, co zostanie zasygnalizowane długim sygnałem akustycznym.
Reset Portb.1
If Pinb.1 = 1 And Time_set_flag = 1 Then
_sec = 0
Time_set_flag = 0
Beep
End If
17−18
19
'A teraz jedna z najważniejszych funkcji programu: wysyłanie danych na magistralę I^C,
'co umożliwia dołączenie do naszego zegara dodatkowych wyświetlaczy o dużych wymiarach.
'Dane konwertowane są najpierw na kod BCD, a następnie wysyłane na I^C pod kolejne adresy
'układów PCF8574:
X = Makebcd(_hour)
I 2Csend 112, X
X = Makebcd(_min)
I 2Csend 114, X
X = Makebcd(_sec)
I 2Csend 116, X
Loop
34
21−24
25−27
28
29−32
End Sub
Podstawowym elementem wykonawczym zegara jest przetwornik piezoelektryczny z†generatorem (Q3), sterowany bezpoúrednio
z†wyjúcia 4†portu D†procesora.
Dwa przekaüniki RL1 i†RL2, ktÛrych cewki zasilane s¹ za poúrednictwem tranzystorÛw T8 i†T9,
moøna zastosowaÊ do sterowania
urz¹dzeniami o†znacznym poborze
mocy, zasilanych z†sieci energetycznej. Waønym elementem uk³adu jest z³¹cze magistrali I2C CON10. Umoøliwia ono do³¹czenie do zegara dodatkowych wyúwietlaczy, np. modu³Ûw AVT859 o†wysokoúci 57mm.
20
Zegar powinien byÊ zasilany
napiÍciem sta³ym o†wartoúci ok.
12VDC, doprowadzonym do z³¹cza CON5. Stabilizator scalony
zrealizowany na uk³adzie
IC3
dostarcza napiÍcia +5VDC, niezbÍdnego do zasilania czÍúci cyfrowej uk³adu zegara.
Naleøy zwrÛciÊ uwagÍ na nietypowe zasilanie procesora, ktÛry
jest do³¹czony do szyny zasilaj¹cej VCC o†napiÍciu +5VDC za
poúrednictwem diody D3.
W†zwi¹zku z†tym napiÍcie zasilania procesora jest zmniejszone
o†ok. 0,6V i†wynosi tylko ok.
4,4VDC. Co spowodowa³o zastoso-
33−34
35
36−39
40−41
42−44
45−48
49
50−53
54−57
58
59
Znaczenie impulsu
Początek transmisji. Zawsze = 0.
Przerwa, bez znaczenia − wszystkie
zera.
0− antena normalna;
1− antena pomocnicza.
0−normalnie;
1− zapowiedz zmiany czasu
(przez godzinę przed zmianą).
(w kolejności bity 18,17)
10−czas zimowy; 01−czas letni.
0−normalnie; 1−zapowiedz
dodatkowej sekundy.
Start informacji czasowej.
Zawsze = 1.
(w kolejności bity 24,23,22,21)
jednostki minut w BCD.
(w kolejności bity 27,26,25)
dziesiątki minut w BCD.
bit parzystości dla bitów 21−27.
(w kolejności bity 32,31,30,29)
jednostki godzin w BCD.
(w kolejności bity 34,33)
dziesiątki godzin w BCD.
bit parzystości dla bitów 29−34.
(w kolejności bity 39,38,37,36)
jednostki dni miesiąca w BCD.
(w kolejności bity 41,40) dziesiątki
dni miesiąca w BCD.
(w kolejności bity 44,43,42)
dni tygodnia w BCD − 1=Pn; 7=Nd.
(w kolejności bity 48,47,46,45)
jednostki miesiąca w BCD.
dziesiątki miesiąca w BCD.
(w kolejności bity 53,52,51,50)
jednostki lat w BCD.
(w kolejności bity 57,56,55,54)
dziesiątki lat w BCD.
bit parzystości dla bitów 36−57.
brak impulsu.
Elektronika Praktyczna 6/2001
Programowany zegar z DCF77
List. 2.
Multiplexing:
'Po zgłoszeniu przerwania timera0 wykonane zostaną następujące czynności:
Porta = 0
'wstępne ustawienie portu A w stan niski
Portc = 255
'wstępne ustawienie portu C w stan wysoki
Incr Digit_number
'zwiększenie numeru kolejnego wyświetlacza (kolejnej pozycji dziesiętnej)
If Digit_number = 7 Then Digit_number = 1
'zamknięcie cyklu zliczania wyświetlaczy do modulo 6
Select Case Digit_number
'w zależności od numeru wyświetlacza
Case 1:
'dziesiątki sekund
Temp = Disp1 / 10
'obliczenie wartości cyfry, która ma zostać ukazana na pierwszym
'wyświetlaczu
Porta = Lookup(temp, 7segment)
'przekodowanie otrzymanej wartości na kod
'wyświetlacza siedmiosegmentowego
Reset Portc.1
'włączenie zasilania anod segmentów pierwszego wyświetlacza
Case 2:
'sekundy
Temp = Disp1 / 10
'obliczenie wartości cyfry, która ma zostać ukazana na pierwszym
'wyświetlaczu
Temp = Temp * 10
Temp = Disp1 - Temp
Porta = Lookup(temp, 7segment)
'przekodowanie otrzymanej wartości na kod
'wyświetlacza siedmiosegmentowego
Reset Portc.0
'włączenie zasilania anod segmentów pierwszego wyświetlacza
Case 3:
'dziesiątki minut
'konstrukcja programu analogiczna do dziesiątek sekund
Case 4:
'minuty
'konstrukcja programu analogiczna do sekund
Case 5:
'dziesiątki godzin
Temp = Disp3 / 10
Porta = Lookup(temp, 7segment)
If Dcf_receiving_flag = 1 Then Porta = Porta + 1
'jedno z wielu dodatkowych uwarunkowań umieszczonych w podprogramie obsługi
'wyświetlania multipleksowanego, omówione dla przykładu. Dodanie 1 do wartości
'wysyłanej do portu A powoduje migotanie kropki dziesiętnej, synchronicznie
'z odbieranymi impulsami kodu DCF.
Reset Portc.5
Case 6:
'godziny
'konstrukcja programu analogiczna do sekund
End Select
Return
'Przekodowywanie wartości na kod wyświetlacza siedmiosegmentowego odbywa się na podstawie
'danych zawartych w poniższej tabeli:
7segment:
Data 252, 96, 218, 242, 102, 182, 190, 224, 254, 246
katalogowej, gdzie firma ATMEL
umieúci³a rozbrajaj¹c¹ uwagÍ:
ì(..) When using an external
32 kHz crystal as asynchronous
clock source for Timer2, the timer
may count incorrectly at voltages
above 4.0V. Keep the supply
voltage below 4.0V when clocking
Timer2 from an external crystal.
(..)î, z ktÛrej wynika, øe przy
kwarcu 32kHz napiÍcie zasilania
powinno byÊ mniejsze niø 4V.
Nie wnikam w to, dlaczego
generator kwarcowy 32768Hz przy
zasilaniu procesora napiÍciem
wiÍkszym od 4V dzia³a nieprawid³owo. Waøne jest tylko to, øe
obniøenie napiÍcia o†0,6V spowodowa³o natychmiastowe usuniÍcie
problemÛw ze sprzÍtowym RTC.
Jeøeli juø procesor jest zasilany
poprzez diodÍ separuj¹c¹ go od
reszty uk³adu, to nic prostszego
jak zapewniÊ mu zasilanie awaryjne, ktÛre moøna do³¹czyÊ do
z³¹cza CON4.
Aby poznaÊ dzia³anie zegara,
naleøy przeúledziÊ steruj¹cy nim
program.
Elektronika Praktyczna 6/2001
Zacznijmy od najprostszej funkcji, jak¹ jest zwyk³e wskazywanie aktualnego czasu, na razie bez
omawiania sposobu synchronizowania go z†sygna³em DCF77. Aby
zbudowaÊ metodami programistycznymi zegar czasu rzeczywistego, zwykle musimy siÍ trochÍ
pomÍczyÊ. Musimy obliczyÊ wartoúÊ, ktÛr¹ bÍdzie prze³adowywany timer odpowiedzialny za odmierzanie czasu, przygotowaÊ procedurÍ obs³ugi przerwania, w†ktÛrej zliczane bÍd¹ sekundy i minuty okreúlaj¹ce up³ywaj¹cy czas.
Oprogramowanie zegara zosta³o
napisane w†jÍzyku MCS BASIC,
w†ktÛrym taki sposÛb tworzenia
programowego RTC by³by zbyt
nieudolny. A†zatem wystarczy tylko napisaÊ:
Config Clock = Soft,
Gosub = Sectic
aby poinstruowaÊ kompilator o†koniecznoúci utworzenia w†programie zegara RTC, ktÛrego dzia³anie
oparte jest na przerwaniach otrzy-
mywanych z†timera2. Od tego momentu mamy do dyspozycji, podobnie jak w†starym QBASIC,
dwie zmienne g³Ûwne: TIME$
i†DATE$ oraz zmienne pomocnicze: _sec, _min, _hour, _day,
_month i†_year. Wszystkie czynnoúci zwi¹zane z†odliczaniem czasu, wyznaczaniem liczby dni miesiÍcy czy teø pilnowaniem kolejnych lat przestÍpnych s¹ wykonywane odt¹d automatycznie,
a†podprogram RTC zajmuje w†pamiÍci procesora ok. 300B. Programowy RTC z BASCOM-a ma tylko
jedn¹ wadÍ, o†ktÛrej lojalnie informuje nas Autor programu: zawiera w†sobie pluskwÍ, ktÛra da
znaÊ o†sobie w†roku 2101, gdyø
zostanie on zidentyfikowany jako
rok 2001. No cÛø, chyba niewiele
nas to obchodzi.
WYKAZ ELEMENTÓW
Rezystory
RP1: R−PACK SIL10kΩ
R1..R8: 47Ω
R9..R14, R19..R26: 3,3kΩ
R15, R27, R28: 4,7kΩ
R16: 1kΩ
R17, R18: 10kΩ
Kondensatory
C1, C2: 27pF
C3, C5, C6: 100nF
C4: 100µF/10V
C7: 1000µF/16V
Półprzewodniki
D1: 1N4007
D2..D6: 1N4148
DP1..DP6: wyświetlacz siedmioseg−
mentowy LED wsp. anoda
IC1: ULN2803
IC2: AT90S8535
IC3: 7805
IC4: DS1813
T1..T6: BC557
T7..T9: BC548
Różne
Q1: rezonator kwarcowy 8MHz
Q2: rezonator kwarcowy 32768Hz
Q3: przetwornik piezoelektryczny
z generatorem
CON1, CON2: goldpin kątowy
22pin
CON3, CON4: ARK2 (3,5mm)
CON5: gniazdko zasilania
CON6: DB9/M lutowane w płytkę
CON7, CON8: ARK3
CON10: 4 x goldpin
RL1, RL2: RM96/12V
S1..S6: microswitch
35
Programowany zegar z DCF77
To, øe wykorzystujemy timer2
do obs³ugi programowego RTC
nie oznacza, øe nie moøemy
wykorzystywaÊ tak ìmi³ejî gratki,
jak przerwania generowane dok³adnie co jedn¹ sekundÍ, takøe
do innych celÛw. W†poleceniu
konfiguruj¹cym zegar czasu
rzeczywistego moøemy dodaÊ (i
dodaliúmy) dyrektywÍ, wskazuj¹c¹ do jakiego podprogramu ma
nastÍpowaÊ skok po up³ywie kaødej kolejnej sekundy. W†tym
przypadku jest to podprogram
SECTIC.
Na pocz¹tek zajmijmy siÍ
najprostszym fragmentem programu, ktÛry odpowiedzialny
jest za wyúwietlanie i†dokonywanie rÍcznych korekt bieø¹cego czasu. Wspomnijmy tylko
jeszcze, øe pozosta³e dwa
timery zawarte w†strukturze procesora: TIMER0 i†TIMER1 zosta³y takøe uruchomione i†skonfigurowane w†nastÍpuj¹cy sposÛb:
36
Config Timer1 = Timer
Prescale = 64
Config Timer0 = Timer
Prescale = 64
On Timer1 Dcf_start
On Timer0 Multiplexing
Przerwania generowane przez
timer0 wykorzystywane bÍd¹ do
sterowania multipleksowanym wyúwietlaniem danych, a†timer1 obs³ugiwaÊ bÍdzie procedury pomiaru czasu trwania impulsÛw kodu
DCF. Przyk³adow¹ procedurÍ
pokazano na list. 1.
Podprogramy realizuj¹ce wyúwietlanie i†korektÍ daty, wyúwietlania i†ustawianie budzikÛw
i†timerÛw s¹ skonstruowane bardzo podobnie do programu wyúwietlania czasu. Nie bÍdziemy
zatem ich analizowaÊ i†przejdziemy do zapoznania siÍ z†podprogramem obs³ugi wyúwietlaczy
siedmiosegmentowych (list. 2).
Skok do tego podprogramu nastÍpuje przy kaødym wyst¹pieniu
przerwania timer0, wÛwczas
zmiana wyúwietlanych cyfr odbywa siÍ z†czÍstotliwoúci¹ ok.
488Hz (pamiÍtamy o†w³¹czeniu
preskalera timera o†stopniu podzia³u 64). Podprogram obs³ugi
wyúwietlania multipleksowanego
prezentujÍ w†postaci bardzo
uproszczonej, ale wystarczaj¹cej
do zapoznania siÍ z†jego dzia³aniem. Omawianie wszystkich dodatkowych uwarunkowaÒ umieszczonych w†tym podprogramie,
a†s³uø¹cych zrÛønicowaniu wyúwietlania w†zaleønoúci od aktualnej funkcji zegara tylko gmatwa³oby opis programu, nie wnosz¹c wiele w†zrozumienie jego
dzia³ania.
Zbigniew Raabe, AVT
zbigniew.raabe@ep.com.pl
Wzory p³ytek drukowanych w formacie PDF s¹ dostÍpne w Internecie
pod adresem: http://www.ep.com.pl/
?pdf/czerwiec01.htm oraz na p³ycie
CD-EP06/2001B w katalogu PCB.
Elektronika Praktyczna 6/2001
Programowany zegar z DCF77
P R O J E K T Y
Programowany zegar
z DCF77, część 2
AVT−5022
W†drugiej czÍúci opisu
programowanego zegara
z DCF77 autor ods³ania jego
programowe tajniki. Jest to
doskona³a okazja do poznania
moøliwoúci Bascoma!
Chyba najciekawszym fragmentem programu steruj¹cego zegarem
jest podprogram analizuj¹cy odbierany sygna³ DCF77 i†koryguj¹cy aktualny czas oraz datÍ. Przedstawiono go na list. 3.
Uruchomiony zosta³ TIMER1,
skonfigurowany do pracy z†preskalerem o†stosunku podzia³u 64.
A†zatem czÍstotliwoúÊ podawana
na wejúcie rejestru tego timera
wynosi dok³adnie 125000Hz. Naleøy teø zauwaøyÊ, øe w†przypadku wyst¹pienia przepe³nienia timera1 nast¹pi skok do podprogramu DCF_START (dyrektywa ON
TIMER DCF_START).
Podczas konfigurowania programu udzielone zosta³o takøe
zezwolenie na obs³ugÍ przerwania
zewnÍtrznego INT0. To, czy przerwanie bÍdzie inicjowane opadaj¹cym, czy wstÍpuj¹cym zboczem
sygna³u moøemy okreúliÊ za pomoc¹ polecenia konfiguracyjnego
CONFIG INT0 = FALLING lub
CONFIG INT0 = RISING. Podczas
analizy podprogramu dekodowania transmisji musimy pamiÍtaÊ,
øe sygna³ DCF zosta³ odwrÛcony
w fazie (zanegowany) przez uk³ad
Elektronika Praktyczna 7/2001
z tranzystorem T7.
OmÛwiliúmy sposÛb dekodowania sygna³u DCF, ktÛry okaza³
siÍ niezbyt skomplikowany. Pozosta³a jednak otwarta jedna sprawa:
sk¹d program wie, øe jest to
sygna³ DCF i†naleøy rozpocz¹Ê
jego dekodowanie? Na szczÍúcie
jednoznaczne okreúlenie startu
transmisji sygna³u DCF nie jest
takøe spraw¹ trudn¹. Zauwaømy,
øe transmisja koÒczy siÍ na 58
impulsie, a†impuls 59 w†ogÛle nie
wystÍpuje. Czas trwania przerwy
pomiÍdzy pocz¹tkami wszystkich
impulsÛw jest sta³y i†wynosi dok³adnie jedn¹ sekundÍ. Jest tylko
jeden wyj¹tek: przerwa pomiÍdzy
ostatnim i†pierwszym impulsem
wynosi nie jedn¹, ale dwie sekundy! To w³aúnie zjawisko wykorzystamy do jednoznacznego
okreúlenia pocz¹tku transmisji sygna³u (kodu) DCF.
Podczas wystÍpowania impulsÛw DCF TIMER1 by³ wykorzystywany do pomiaru ich czasu
trwania. Podczas pomiaru czasu
prawid³owego impulsu timer1 nie
ulega³ nigdy przepe³nieniu,
a†maksymalna wartoúÊ jego rejes-
35
Programowany zegar z DCF77
List. 3.
'Podprogram analizujący odbierany kod DCF77
Dcf:
Pause_counter = 0
'wyzerowanie zmiennej określającej czas upływający pomiędzy impulsami,
'patrz: listing podprogramu DCF_START
Dcf_flag = Not Dcf_flag
'zmienna określająca poziom impulsu DCF zostaje zanegowana
If Dcf_flag = 0 Then 'jeżeli na wejściu INT0 jest stan niski, co oznacza początek impulsu, to:
Config Int0 = Rising
'przerwanie INT0 ma reagować na wstępujące zbocze sygnału
Dcf_receiving_flag = 1
'ustaw zmienną sygnalizującą fakt odbierania impulsu
Counter1 = 0
'wyzeruj rejestry timera0
Start Timer1
'w celu zmierzenia czasu trwania impulsu uruchom timer0
Else
'jeżeli na wejściu INT0 jest stan wysoki, co oznacza koniec odbierania impulsu, to:
Stop Timer1
'wstrzymaj pracę timera0
Config Int0 = Falling
'przerwanie INT0 ma reagować na opadające zbocze sygnału
Dcf_receiving_flag = 0
'wyzeruj zmienną sygnalizującą fakt odbierania impulsu
'W tym momencie program ma “trochę czasu” na dokonanie analizy czasu trwania odebranego
'uprzednio impulsu DCF i wyciagnięcie z niej odpowiednich wniosków. Dla impulsu o czasie trwania
'100 ms, czyli oznaczającego logiczne 0, stan timera0 powinien wynosić 12500. A zatem,
'uwzględniając konieczny margines błędu wynikający z cech transmisji AM:
If Timer1 & lt; 15000 And Timer1 & gt; 10000 Then Dcf_bit = 0
'jeżeli stan rejestru timera0 zawiera się pomiędzy 10000 a 15000, to odebrany bit ma wartość 0
If Timer1 & gt; 20000 And Timer1 & lt; 30000 Then Dcf_bit = 1
'jeżeli stan rejestru tmera0 zawiera się pomiędzy 20000 a 30000, to odebrany bit ma wartość 1
'Czas trwania impulsu DCF drastycznie wykraczający poza zadane wartości może świadczyć tylko o
błędzie w transmisji i musi powodować jej anulowanie. A zatem:
If Timer1 & lt; 10000 Then Start_dcf_flag = 0
'anuluj transmisję jeżeli zawartość rejestru timera0 jest mniejsza od 10000
If Timer1 & lt; 20000 And Timer1 & gt; 15000 Then Start_dcf_flag = 0
'anuluj transmisję jeżeli zawartość rejestr timera0 jest mniejsza od 20000 i większa od 15000
If Start_dcf_flag = 1 Then
'Jeżeli czas trwania odebranego impulsu mieścił się w zadanym przedziale i została określona jego
'wartość logiczna, to w zależności od numeru impulsu program musi wykonać następujące czynności.
Select Case Dcf_counter
Case 1: _sec =0
'jeżeli odebrany został impuls o numerze 0, to wyzeruj
'zmienną sekund
Case 21: Dcf_temp.0 = Dcf_bit 'bit 0 zmiennej pomocniczej DCF_TEMP
'przyjmuje wartość odebranego impulsu
Case 22: Dcf_temp.1 = Dcf_bit 'bit 1..
Case 23: Dcf_temp.2 = Dcf_bit 'bit 2..
Case 24: Dcf_temp.3 = Dcf_bit 'bit 3..
Dcf_min = Dcf_temp
'zakończyła się transmisja informacji
'o jednostkach aktualnej minuty i w związku z tym
'zmienna pomocnicza DCF_MIN przyjmuje obliczoną wartość
'zmiennej DCF_TEMP,
Dcf_temp = 0
'która następnie zostaje wyzerowana
Case 25: Dcf_temp.0 = Dcf_bit 'bit 0 zmiennej pomocniczej DCF_TEMP
'przyjmuje wartość odebranego impulsu
Case 26: Dcf_temp.1 = Dcf_bit 'bit 1..
Case 27: Dcf_temp.2 = Dcf_bit 'bit 2..
Dcf_temp = Dcf_temp * 10
'zakończyła się transmisja informacji
'o dziesiątkach aktualnej minuty i w związku z tym
'obliczona wartość zostaje pomnożona przez 10,
'a następnie:
Dcf_min = Dcf_temp + Dcf_min
'obliczona zostaje ostateczna wartość minut
Dcf_temp = 0
'zmienna pomocnicza DCF_TEMP zostaje wyzerowana
'Omawianie dekodowania godzin, dnia miesiąca, miesiąca, roku i dnia tygodnia nie ma chyba
'większego sensu. Odbywa się ono na takiej samej zasadzie, co dekodowanie aktualnej minuty i jego
'analiza nie wnosiłaby niczego nowego w zrozumienie zasady działania programu. Pozwólmy zatem
'programowi mozolnie dekodować następne informacje i przenieśmy się na sam koniec transmisji,
'sygnalizowany odebraniem 58 impulsu
Case 58:
End Select
Start_dcf_flag = 0
'koniec transmisji, zerujemy jej flagę
_min = Dcf_min
'przyporządkowanie zmiennej minut odebranej wartości
_hour = Dcf_hour
'przyporządkowanie zmiennej godzin odebranej wartości
_month = Dcf_month
'przyporządkowanie zmiennej miesiąca odebranej wartości
_day = Dcf_day
'przyporządkowanie zmiennej dnia miesiąca odebranej wartości
_year = Dcf_year
'przyporządkowanie zmiennej roku odebranej wartości
_week_day = Dcf_week_day
'przyporządkowanie zmiennej dnia tygodnia
'odebranej wartości
'koniec wyboru kolejnego impulsu
Incr Dcf_counter
Counter1 = 0
Start Timer1
End If
'zwiększ wartość licznika impulsów o 1
'wyzeruj rejestry timera1
'uruchom timer1
End If
Return
tru wynosi³a ok. 30000. Po dokonaniu pomiaru Timer1 zostaje
ponownie uruchomiony w†innym
celu: zmierzenia czasu trwania
przerwy pomiÍdzy impulsami. Ta
przerwa podczas trwania transmisji wynosi 800 lub 900ms, co
wi¹øe siÍ z†jednokrotnym przepe³nieniem Timera1, natomiast
po jej zakoÒczeniu prawie 2†sekundy, co spowoduje dwukrotne
wyst¹pienie przerwania i†dwukrotny skok do podprogramu
DCF_START.
36
Dcf_start:
Incr Pause_counter
'zwiększ o 1 wartość zmiennej
'określającej czas przerwy
'pomiędzy impulsami
If Pause_counter = 2 Then
Pause_counter = 0
Dcf_counter = 0
'licznik impulsów kodu DCF
' zostaje wyzerowany
Start_dcf_flag = 1
'wskaźnik rozpoczęcia i trwania
'transmisji DCF zostaje
'ustawiony na 1
'TU WŁAŚNIE NASTĘPUJE
'POCZĄTEK TRANSMISJI DCF77
End If
Return
Mam nadziejÍ, øe analiza
przedstawionych listingÛw fragmentÛw programu steruj¹cego naszym zegarem pozwoli Czytelnikom na pe³ne zrozumienie sposobu dekodowania sygna³u DCF
i†zasady pracy programowego zegara czasu rzeczywistego (RTC).
Nie wspomnieliúmy jeszcze o†dodatkowych funkcjach zegara:
o†sposobie realizacji timera i†budzikÛw, a†takøe o†stoperze.
ZarÛwno kontrola zgodnoúci
bieø¹cego czasu z†ustawionym czasem budzikÛw, jak i†odliczanie
czasu przez timer i†stoper odbywa
siÍ w†podprogramie SEC_TIC, do
ktÛrego wykonywany jest skok po
up³ywie kaødej sekundy (tak, jak
to zosta³o ustalone w†konfiguracji
programowego RTC). Dodatkowo,
w†podprogramie SEC_TIC jest instrukcja warunkowa pozwalaj¹ca
na detekcjÍ up³ywu kolejnych
minut:
Sectic
If Temp2 & lt; & gt; _min Then
'Czynności do wykonania po
'upływie kolejnej minuty, np.
'porównanie czasu budzika
End If
'Pozostałe czynności do
'wykonania
Temp2 = _sec
Return
Podprogram ìobs³ugiî timera
i†jednego z†budzikÛw zamieszczono na list. 4.
Program steruj¹cy prac¹ zegara
zosta³ z†koniecznoúci opisany bardzo fragmentarycznie, poniewaø
pe³ny jego listing zajmuje oko³o
5 stron formatu A4. Chcia³em
jedynie przedstawiÊ Czytelnikom
jego najwaøniejsze fragmenty,
a†w†szczegÛlnoúci sposÛb dekodowania sygna³u DCF77.
Montaø i†uruchomienie
Na rys. 3†przedstawiono rozmieszczenie elementÛw na dwÛch
p³ytkach obwodÛw drukowanych,
wykonanych na laminacie dwustronnym z†metalizacj¹. Montaø zegara rozpoczynamy od wlutowania
w†p³ytkÍ rezystorÛw i†podstawek
pod uk³ady scalone, a†koÒczymy
Elektronika Praktyczna 7/2001
Programowany zegar z DCF77
List. 4.
Sectic:
If Temp2 & lt; & gt; _min Then
'jeżeli upłynęła kolejna minuta, to:
Readeeprom Alarm_hours, 3'odczytaj z pamięci EEPROM dane o godzinie budzenia
Readeeprom Alarm_minutes, 4 'odczytaj z pamięci EEPROM dane o minucie budzenia
If Alarm_hours = _hour And Alarm_minutes = _min And Alarm_on_flag = 1 Then
'jeżeli odczytane dane są zgodne z aktualnym czasem oraz
'jeżeli budzik był aktywny, to:
Alarm_counter = 30
'licznik trwania alarmu zostaje ustawiony na 30
Alarm_counter_flag = 1
'flaga włączenie alarmu zostaje ustawiona na 1
Set Portd.6
'zostaje włączony przekaźnik
End If
' dalsze czynności do wykonania po upływie minuty
'...............................................
End If
If Timer_on_flag = 1 Then
'jeżeli timer jest włączony, to
Decr Timer_seconds
'zmniejsz wartość sekund timera
If Timer_seconds = 255 Then 'jeżeli wartość sekund wynosi 255, to:
Decr Timer_minutes
'zmniejsz wartość minut
Timer_seconds = 59
If Timer_minutes = 255 Then 'jeżeli wartość minut wynosi 255, to:
Decr Timer_hours
Timer_minutes = 59
'wartość minut staje się równa 59
If Timer_hours = 255 Then
'jeżeli wartość godzin wynosi 255, to:
Timer_on_flag = 0
'koniec pracy timera
Readeeprom Timer_minutes,6
'ponownie odczytaj z pamięci EEPROM zapisane
'tam wartość minut timera
Readeeprom Timer_seconds, 7
'ponownie odczytaj z pamięci EEPROM zapisane
'tam wartość sekund timera
Readeeprom Timer_hours, 5 'ponownie odczytaj z pamięci EEPROM zapisane
'tam wartość godzin timera
Reset Pord.6
'wyłącz przekaźnik timera
Beep
'wygeneruj sygnał akustyczny
End If
End If
End If
End If
'w podprogramie SECTIC odbywa się także odliczanie czasu trwania alarmu budzika:
'jeżeli alarm był uaktywniony, to zmniejsz wartość jego licznika
If Alarm_counter_flag = 1 Then Decr Alarm_counter
'jeżeli licznik czasu trwania alarmu osiągnął 0, to zresetuj sygnalizację włączenia alarmu
If Alarm_counter = 0 Then Alarm_counter_flag = 0
'jeżeli alarm jest aktywny, to naprzemiennie włączaj sygnalizację akustyczną
If Alarm_counter_flag = 1 And Flash_flag = 1 Then Portd.4 = Not Portd.4
Return
na zamontowaniu kondensatorÛw
elektrolitycznych i†pozosta³ych elementÛw o†duøych gabarytach.
Zmontowane p³ytki musimy po³¹czyÊ ze sob¹ za pomoc¹ k¹towych
goldpinÛw. Taki sposÛb montaøu
zapewni nie tylko solidne po³¹czenie mechaniczne, ale takøe ustawienie p³ytek idealnie pod k¹tem
prostym wzglÍdem siebie.
Odbiornik DCF77 do³¹czamy do
z³¹cza DB9 umieszczonego na tylnej krawÍdzi p³ytki bazowej zegara. Odbiornik nie wymaga oddzielnego ürÛd³a zasilania, a†o†jego dzia³aniu úwiadczy migotanie diody
umieszczonej w†jego obudowie
oraz punktu dziesiÍtnego na pierwszym wyúwietlaczu zegara.
Sygna³ DCF77 nadawany jest
na bardzo niskiej czÍstotliwoúci 77kHz. Dlatego fala radiowa rozchodzi siÍ przy ziemi i jest
podatna na zak³Ûcenia bardzo zaleøne od warunkÛw pogodowych
i†pory dnia. Zdarza siÍ, øe w†niektÛrych rejonach o silnych zak³Ûceniach odbiÛr tego sygna³u jest
czasami niemoøliwy. Dotyczy to
zw³aszcza duøych aglomeracji
miejskich. ZwiÍkszenie zak³ÛceÒ
nastÍpuje o wschodzie i†zachodzie
s³oÒca oraz w obecnoúci urz¹dzeÒ
Elektronika Praktyczna 7/2001
elektronicznych (monitory, komputery, telewizory, silniki itd.).
Dlatego bardzo waøne jest, aby
znaleüÊ dla odbiornika jak najlepsze miejsce. Istotne jest takøe jego
zorientowanie wzglÍdem nadajni-
ka oraz odleg³oúÊ odbiornika od
urz¹dzeÒ elektronicznych (zalecane jest minimum 2m). Dotyczy to
w†szczegÛlnoúci komputerÛw i†komutatorowych silnikÛw elektrycznych, zarÛwno AC, jak i†DC.
Natomiast, wbrew wczeúniejszym
obawom i†z³ym doúwiadczeniom
sprzed paru lat, nie stwierdzi³em
powaøniejszych zak³ÛceÒ pracy
odbiornika wywo³ywanych przez
procesor steruj¹cy zegarem. Odbiornik pracowa³ poprawnie nawet po umieszczeniu go w†odleg³oúci kilku centymetrÛw†od procesora.
Odbiornik powinien leøeÊ na
p³askiej powierzchni (dioda LED
do gÛry), nie moøe leøeÊ pod
katem, ani w†pobliøu metalowych
przedmiotÛw. Naleøy uzyskaÊ jak
najlepszy sygna³ poprzez obracanie odbiornika wokÛ³ jego osi.
Moøna to poznaÊ po regularnym
zapalaniu siÍ diody LED. Powinna
ona zapalaÊ siÍ co 1s na czas ok.
0,1 do 0,2 sekundy i†gasn¹Ê.
Uk³ad zegara zmontowany ze
sprawdzonych elementÛw nie wymaga uruchamiania i†dzia³a natychmiast po w³oøeniu w†podstawkÍ zaprogramowanego procesora. Jednak to, øe dzia³a, nie
oznacza wcale, øe juø umiemy go
obs³ugiwaÊ. Zajmijmy siÍ wiÍc
nieco rozbudowanymi procedurami obs³ugi.
Rys. 3. Rozmieszczenie elementów na płytkach drukowanych.
37
Programowany zegar z DCF77
Tab. 1. Zestawienie funkcji pełnionych przez klawiaturę zegara.
S1
Czas
S2
Przejście do
kolejnej
funkcji
+ S6 –
przejście do
ustawiania
czasu
Koniec
Zmiana
ustawiania minut
+ S3 −
przejście do
ustawiania
czasu
Zmiana
godzin
Koniec
ustawiania
Zmiana
dnia
miesiąca
Zmiana
miesiąca
Zmiana
minut
Zmiana
godzin
Zmiana
minut
Zmiana
godzin
Ustawianie czasu
Data
S3
S5
S6
Przejście do
kolejnej
funkcji
Ustawianie daty
Budzik 1
Przejście do
kolejnej
funkcji
Ustawianie
budzika 1
Budzik 2
Koniec
ustawiania
Przejście do Budzik
kolejnej
włączony/
funkcji
/wyłączony
Koniec
ustawiania
Przejście do Start
kolejnej
Timer
funkcji
Koniec
ustawiania
Przejście do Start
kolejnej
stoper
funkcji
Ustawianie
budzika 2
Timer
Ustawianie
timera
Stoper
Stop
Timer
Zmiana
minut
Po pierwszym w³¹czeniu zasilania uk³ad przechodzi automatycznie w†tryb wyúwietlania aktualnego czasu, z†tym øe na wyúwietlaczach ukazuje siÍ pocz¹tkowo godzina 00:00, a†zegar rozpoczyna zliczanie czasu od tej
wartoúci. Mamy teraz dwie moøliwoúci do wyboru: albo poczekaÊ
na odebranie transmisji DCF77
i†automatyczne skorygowanie
wskazywanego czasu i†dat, albo
wykonaÊ to rÍcznie. Poniewaø
jednak oczekiwanie na zdekodowanie transmisji moøe trwaÊ do
2†minut (nawet przy dobrych warunkach propagacyjnych), dokonajmy rÍcznej korekty czasu.
Podczas wyúwietlania czasu, podobnie jak przy korzystaniu z†innych funkcji zegara, moøemy
przejúÊ w†tryb ustawiania naciskaj¹c jednoczeúnie klawisze S3 i†S6.
Rys. 4. Znaczenie kropek
dziesiętnych przy cyfrach
wyświetlacza.
38
S4
Zmiana
sekund
Stop
stoper
Reset
timer
Zmiana
godzin
Reset
stoper
Zmiana trybu pracy sygnalizowana
jest trzykrotnym sygna³em akustycznym, ktÛrego zadaniem jest
ostrzeøenie operatora, øe dalsze
naciskanie klawiszy moøe wprowadziÊ istotne zmiany w†pracy zegara.
Do ustawiania czasu, daty oraz
innych wartoúci wykorzystujemy
takøe klawisze S3 i†S6. Naciskanie
klawisza S3 powoduje cykliczn¹
zmianÍ minut, a†klawisza S6 godzin. Ustawianie czasu koÒczymy
naciskaj¹c klawisz S2. Zestawienie
funkcji inicjowanych za pomoc¹
poszczegÛlnych klawiszy klawiatury
zegara zamieszczono w†tab. 1.
Na rys. 4 przedstawiono wykorzystanie kropek dziesiÍtnych na
wyúwietlaczach. Sygnalizuj¹ one
rÛøne tryby pracy zegara z†wyj¹tkiem budzikÛw. Wejúcie w†tryb
ustawiania lub kontroli budzikÛw†sygnalizowane jest bowiem
wyúwietleniem ìA1î lub ìA2î na
dwÛch pierwszych wyúwietlaczach.
Zbigniew Raabe, AVT
zbigniew.raabe@ep.com.pl
Wzory p³ytek drukowanych w formacie PDF s¹ dostÍpne w Internecie
pod adresem: http://www.ep.com.pl/
?pdf/lipiec01.htm oraz na p³ycie
CD-EP07/2001B w katalogu PCB.
Elektronika Praktyczna 7/2001