27_29.PDF

(202 KB) Pobierz
Emulator odbiornika DCF - AVT-5050
Emulator odbiornika DCF
Emulator odbiornika DCF
AVT−5050
Emulator moøe byÊ
przydatny przygotowuj¹cym
oprogramowanie obs³uguj¹ce
odbiorniki sygna³u DCF. Gdy
program nie dzia³a poprawnie
nie wiemy jaka jest
przyczyna: czy odbiornik
odbiera zak³Ûcony sygna³, czy
wystÍpuje b³¹d w†programie?
DziÍki emulatorowi mamy
pewnoúÊ, øe nadawany przez
niego sygna³ jest prawid³owy.
Na sygna³ synchroniza-
cji z†odbiornika DCF trzeba cze-
kaÊ nawet minutÍ, dziÍki emula-
torowi czas ten wynosi tylko kilka
sekund. Emulator odbiornika DCF
opisano juø na ³amach EP (AVT-
423). Jego budowa by³a oparta na
EPROM-ie, co powodowa³o ko-
niecznoúÊ zastosowania wielu do-
datkowych uk³adÛw. Opisany
w†tym artykule emulator jest
o†wiele prostszy. Zawiera tylko
jeden uk³ad scalony (nie licz¹c
stabilizatora). Ponadto o†wiele ³at-
wiej wpisaÊ dane przesy³ane DCF.
wanymi zwarciem wyjúcia do masy
czy szyny zasilania. Emulator wy-
twarza zarÛwno napiÍcia bipolarne
jak i†unipolarne, co jest zaleøne od
budowy stopnia wejúciowego zega-
ra DCF. Z†napiÍciami bipolarnymi
bÍdziemy mieli do czynienia, gdy
emulator pod³¹czymy do portu
RS232C (np. komputer), a†napiÍcia
unipolarne s¹ stosowane przy
innych rozwi¹zaniach w†innych
konstrukcjach (np. AVT-322, AVT-
5022). Dioda D3 úwieci siÍ w†mo-
mentach, gdy na wyjúciu RS po-
jawia siÍ impuls. Na wyjúciu
OUT_TTL pojawiaj¹ siÍ impulsy
w†standardzie TTL. Wyjúcie to mo-
øe byÊ uøyteczne, gdy bÍdziemy
programowaÊ zegar, a†nie zbudowa-
liúmy jeszcze czÍúci sprzÍtowej.
WÛwczas wyjúcie OUT_TTL ³¹czy-
my w†wybranym wyprowadzeniem
procesora, w†ktÛrym zapisano de-
koduj¹cym sygna³ DCF. Emulator
jest zasilany z†portu RS232C. Jeúli
jednak wykorzystamy wyjúcie
OUT_TTL emulator trzeba zasiliÊ
inaczej. Moøemy podaÊ napiÍcie
+8...15V na wejúcie 12V lub napiÍ-
cie +5V na wejúcie 5V.
W†pamiÍci procesora zapisano
program generuj¹cy sygna³ DCF.
Program obs³uguj¹cy zegar jest
doúÊ krÛtki, dlatego zdecydowa-
³em siÍ na umieszczenie jego
treúci w†artykule ( list. 1 ).
Waønym fragmentem programu
s¹ deklaracje pojawiaj¹ce siÍ za
etykiet¹ ìdane:î. Kaøda deklaracja
Budowa i†dzia³anie
Jak widaÊ na schemacie elekt-
rycznym ( rys. 1 ), urz¹dzenie jest
banalnie proste. NapiÍcie zasilania
z†gniazda DB9 (w†takie samo gniaz-
do s¹ wyposaøone odbiorniki DCF)
jest obniøane do 5V za pomoc¹
scalonego stabilizatora US1. Kon-
densatory C1...C4 filtruj¹ napiÍcie
zasilaj¹ce. NapiÍcie 5V s³uøy do
zasilania procesora. Elementy C5
i†R1 formuj¹ sygna³ zeruj¹cy po
w³¹czeniu zasilania. Mikrokontroler
moøna wyzerowaÊ takøe rÍcznie,
naciskaj¹c prze³¹cznik RESET. Ele-
menty C6, C7 i†Q1 ustalaj¹ czÍs-
totliwoúÊ sygna³u generatora zega-
rowego taktuj¹cego mikrokontroler.
Tranzystory T1 i†T2, wraz z†ele-
mentami towarzysz¹cymi, tworz¹
obwÛd konwertuj¹cy sygna³ o†po-
ziomach TTL na sygna³ o†pozio-
mach zgodnych ze standardem
RS232C. Zastosowana konfiguracja
tego konwertera zabezpiecza emu-
lator przed uszkodzeniami powodo-
Elektronika Praktyczna 2/2002
27
P R O J E K T Y
32251665.013.png
Emulator odbiornika DCF
List. 2.
;Listing 1
;--------------------------------------
include 'INCL:8051/8051.def'
include 'INCL:8051/piny_89c2051.def'
speed_h equ 256-107 ; 100ms = 100000[ s]*(3.2768[MHz]/12) =
speed_l equ 256-170 ; 27306 cykli = 106*256+170
LED equ Pin14
OUT_TTL equ Pin16
OUT_RS equ Pin15
;--------------------------------------
start:
mov SP,#$30
jeden:
clr LED
;LED - świeci
setb OUT_TTL
;OUT = +5V
setb OUT_RS
;RS = -12V
ret
; Odczekanie czasu 100ms*ACC
wait100ms:
jnb TF0,wait100ms
mov TH0,#speed_h
;załadowanie timerów 100ms
mov TL0,#speed_l
clr TF0
;zerowanie flagi
djnz ACC,wait100ms
ret
;------------------------------------
; Dane zawierają:
; 23:21 27.05.01 Niedziela
dane:
byte 's' ; 60 Synchronizacja (brak impulsu)
byte 0
;Ustawienie stosu
mov TMOD,#%0001
;timer 0 liczy czasy
mov TH0,#speed_h
;załadowanie timerów 100ms
mov TL0,#speed_l
setb TR0
;start timera
acall impulszero
;generuje trzy impulsy zero
acall impulszero
acall impulszero
datainit:
mov dptr,#dane
; 1 Start (0)
byte 0
; 2 14 zer
;adres początku danych
byte 0
; 3
mov R0,#60
;liczba danych
byte 0
; 5
repeat:
mov a,#0
byte 0
; 6
;pobranie danej
byte 0
; 7
movc a,@a+dptr
cjne a,#0,rep1
byte 0
; 8
;czy “0” ?
byte 0
; 9
acall jeden
;generowanie zera
byte 0
; 10
mov a,#1
acall wait100ms
acall zero
mov a,#9
acall wait100ms
sjmp rep4
rep1:
cjne a,#1,rep2
byte 0
; 11
byte 0
; 12
byte 0
; 13
byte 0
; 14
byte 0
; 15
byte 0
; 16 Typ anteny
byte 0
; 17 Zapowiedź zmiany czasu
byte 1
; 18 LSB Czas letni/zimowy %01
;czy “1” ?
byte 0
; 19 MSB Czas letni/zimowy
acall jeden
;generowanie jedynki
byte 0
; 20 Korekta czasu %0
mov a,#2
acall wait100ms
acall zero
mov a,#8
acall wait100ms
sjmp rep4
rep2:
cjne a,#'s',error
byte 1
; 21 Początek informacji %1
byte 1
; 22 LSB jedności minut %0001, #1
byte 0
; 24 jednostki minut
byte 0
; 25 MSB jednostki minut
byte 0
; 26 LSB dziesiątki minut %010, #2
byte 1
; 27 dziesiątki minut
;czy synchro ?
byte 0
; 28 MSB dziesiątki minut
acall zero
;generowanie synchronizacji
byte 0
; 29 Bit parzystości minut
mov a,#18
acall wait100ms
sjmp rep4
error:
mov a,#1
byte 1
; 30 LSB jednostki godzin %0011, #3
byte 1
; 31 jednostki godzin
byte 0
; 33 MSB jednostki godzin
;błąd
byte 0
; 34 LSB dziesiątki godzin %10, #2
acall wait100ms
acall zero
mov a,#1
acall wait100ms
acall jeden
sjmp error
rep4:
inc dptr
byte 1
; 35 MSB dziesiątki godzin
byte 1
; 36 Bit parzystości godzin
byte 1
; 37 LSB jednostki dnia miesiąca %0111, #7
byte 1
; 38 jednostki dnia miesiąca
byte 1
; 39 jednostki dnia miesiąca
byte 0
; 41 LSB dziesiątki dnia miesiąca %10, #2
;zwiększ wskaźnik danych
byte 1
; 42 MSB dziesiątki dnia miesiąca
djnz R0,repeat
;czy koniec
byte 1
; 43 LSB dnia tygodnia %111, #7
sjmp datainit
;-----------------------------------
impulszero:
acall jeden
byte 1
; 44 dnia tygodnia
byte 1
; 45 MSB dnia tygodnia
byte 1
; 46 LSB jednostki miesiąca %0101, #5
byte 0
; 47 jednostki miesiąca
;generowanie zera
byte 1
; 48 jednostki miesiąca
mov a,#1
acall wait100ms
acall zero
mov a,#9
acall wait100ms
ret
zero:
setb LED
byte 0
; 49 MSB jednostki miesiąca
byte 0
; 50 dziesiątki miesiąca %0, #0
byte 1
; 51 LSB jednostki roku %0001, #1
byte 0
; 52 jednostki roku
byte 0
; 53 jednostki roku
byte 0
; 54 LSB jednostki roku
byte 0
; 55 LSB dziesiątki roku %0000, #0
byte 0
; 56 dziesiątki roku
;LED - zgaszona
byte 0
; 57 dziesiątki roku
clr OUT_TTL
;OUT = 0V
byte 0
; 58 LSB dziesiątki roku
clr OUT_RS
;RS = +12V
byte 0
; 59 Bit parzystości bitów 37...58
ret
ìbyteî to informacja dla programu
czy wygenerowaÊ ìzeroî, ìjedenî
czy sygna³ synchronizacji. Przyj-
rzyjmy siÍ bliøej formatowi prze-
sy³ania informacji w†kodzie DCF.
Jedynka jest reprezentowana przez
impuls trwaj¹cy 200ms, z†przerw¹
800ms. Sygna³ reprezentuj¹cy ze-
ro jest impulsem trwaj¹cym 100ms
z†przerw¹ 900ms. Jak z†tego wy-
nika nadawanie jednego bitu trwa
dok³adnie 1†sekundÍ. Bit synchro-
nizacji jest reprezentowany przez
brak impulsu, czyli przerwÍ trwa-
j¹c¹ 1800ms (1,8 sekundy). Po
impulsie synchronizacji (w pier-
wszej sekundzie) wystÍpuje bit
startu 0, po nim 14 zer. 16.
sekunda (16. bit) okreúla typ
anteny (0-normalna, 1-zapasowa).
Bit 17. zawiera informacjÍ o†za-
powiedzi zmiany czasu. Na godzi-
nÍ przed zmian¹ czasu bit ten
rÛwny jest jeden. Bity 18. i†19.
zawieraj¹ informacjÍ o†czasie {let-
ni czy zimowy). Bity o†warto-
úciach %10- w†kolejnoúci starszy
bit 19. m³odszy 18. - oznaczaj¹
czas zimowy, a†%01 oznacza czas
letni. Bit 20. rÛwny ì1î oznacza
zapowiedü dodatkowej sekundy.
Bit 21. zawsze jest ustawiony na
jeden (bit startu informacji). Bity
22...25. (w kolejnoúci 22. bit-LSB,
25. bit-MSB) zawieraj¹ jednoúci
minut w†formacje BCD. Bity
26...28. dziesi¹tki minut, bit 28.
jest bitem parzystoúci bitÛw
22...28. Bit parzystoúci oblicza siÍ
bardzo ³atwo. Jeøeli liczba ìjedy-
nekî w†sprawdzanym rekordzie
bÍdzie parzysta, bit sumy kontrol-
nej przyjmuje wartoúÊ 0. Jeøeli
liczba jedynek bÍdzie nieparzysta,
bit sumy kontrolnej przyjmuje
wartoúÊ 1. Bity 30...33. zawieraj¹
jednoúci godzin, bity 34...35. dzie-
si¹tki godzin, bit 36. parzystoúÊ
28
Elektronika Praktyczna 2/2002
byte 0
; 4
byte 0
; 23 jednostki minut
byte 0
; 32 jednostki godzin
byte 0
; 40 MSB jednostki dnia miesiąca
32251665.014.png
Emulator odbiornika DCF
WYKAZ ELEMENTÓW
Rezystory
R1, R2: 10k
R5, R7: 470
Kondensatory
C1: 47
F/25V
C2, C3: 100nF
C4, C5: 10
F/16V
C6, C7: 33pF
Półprzewodniki
US1: 78L05
US2: AT89C2051
T1: BC547
T2: BC557
D1, D2, D4: 1N4148
D3: LED
Różne
Złącze DB9F do druku
Q1: 3,2768MHz
RESET: mikroprzełącznik
Rys. 1. Schemat elektryczny emulatora.
dla bitÛw 30...35. Bity 37...40. -
jednoúci dni miesi¹ca, bity 41...42.
dziesi¹tki dni miesi¹ca. Bity
43...45. nr dnia tygodnia (1-ponie-
dzia³ek, 2-wtorek, 3-úroda, itd.).
Bity 46...49. - jednoúci miesi¹ca,
bit 50. - dziesi¹tki miesi¹ca. Bity
51...54. - jednostki lat, bity 55...58.
dziesi¹tki lat. W†informacji DCF
nadawane s¹ ostatnie dwie cyfry
roku. Bit 59. jest bitem parzys-
toúci bitÛw 37...58. Na tym koÒ-
czy siÍ nadawanie informacji DCF.
Po 59. bicie nastÍpuje impuls
synchronizacji i†ponowne nada-
wanie informacji. Znaj¹c ten for-
mat moøemy wpisaÊ w†programie
dowoln¹ datÍ i†godzinÍ. W†pro-
gramie przyk³adowym wpisano da-
ne zawieraj¹ce datÍ 27 maja 2001
roku, niedziela, godzina 23:21.
Jeúli zechcemy wpisaÊ inn¹ datÍ
czy godzinÍ, naleøy pamiÍtaÊ o†od-
powiednim ustawieniu bitÛw parzys-
toúci. PrzypomnÍ tylko, øe deklaracja
ìbyte 0î spowoduje wygenerowanie
0, ìbyte 1î jedynki, natomiast ìbyte
ìsî spowoduje wygenerowanie im-
pulsu synchronizacji.
DCF naciskamy przycisk RESET
na emulatorze. Emulator generuje
trzy impulsy ìzeroî, nastÍpnie
impuls synchronizacji i†informacjÍ
o†czasie. Po odebraniu sygna³u
synchronizacji zegar DCF powi-
nien zacz¹Ê dekodowaÊ informa-
cjÍ. Po odebraniu ca³ej informacji
(pojawieniu siÍ kolejnego impulsu
synchronizacji), zegar powinien
wyúwietliÊ datÍ i†czas. Jeúli czas
nie pojawi³ siÍ, to oznacza, øe
pope³niliúmy b³¹d w†programie.
Naleøy go odszukaÊ, a†po usuniÍ-
ciu program ponownie skompilo-
waÊ i†zapisaÊ w†pamiÍci procesora
lub w†pamiÍci uruchamianego sys-
temu (EPROM, emulator EPROM,
czy emulator CPU). Po wystarto-
waniu programu naleøy nacisn¹Ê
RESET na emulatorze DCF. DziÍki
temu nie bÍdziemy d³ugo czekaÊ
na pojawienie siÍ impulsu syn-
chronizacji. DziÍki emulatorowi
moøna znacznie skrÛciÊ czas pi-
sania programu. Jeúli program
poprawnie dzia³a z†emulatorem,
naleøy sprawdziÊ go z†odbiorni-
kiem DCF. Zaleønie od terytorium
na ktÛrym mieszkamy, odbieranie
poprawnej informacji DCF moøe
zaj¹Ê trochÍ czasu. Ten czas zaleøy
od zak³ÛceÒ, poziomu sygna³u, itp.
Jeszcze uwaga dla pisz¹cych
program obs³ugi DCF. Emulator
generuje czysty sygna³, w†ktÛrym
impuls ìjedynkiî trwa dok³adnie
200ms, ìzeraî 100ms. Rzeczywis-
ty sygna³ jest zazwyczaj znie-
kszta³cony, czas trwania impulsu
ìzeraî moøe wahaÊ siÍ w†grani-
cach 80...120ms, dlatego najlepiej
napisaÊ program tak aby:
- za jedynkÍ uznawaÊ impuls
trwaj¹cy od 50 do 150ms,
- za zero uznawaÊ impuls trwa-
j¹cy od 150 do 250ms,
- za synchronizacjÍ uznawaÊ brak
impulsu przez ponad 1500ms.
T¹ procedurÍ moøna uproúciÊ:
- za jedynkÍ uznawaÊ impuls
trwaj¹cy mniej niø 150ms,
- za zero uznawaÊ impuls trwa-
j¹cy ponad 150ms,
- za sygna³ synchronizacji uzna-
waÊ brak impulsu przez ponad
1500ms.
S³awomir Skrzyñski, AVT
slawomir.skrzynski@ep.com.pl
Wzory p³ytek drukowanych w for-
macie PDF s¹ dostÍpne w Internecie
pod adresem: http://www.ep.com.pl/
?pdf/luty02.htm oraz na p³ycie
CD-EP02/2002B w katalogu PCB .
Montaø i†uruchomienie
Schemat montaøowy p³ytki
drukowanej pokazano na rys. 2 .
Montaø zaczynamy od elementÛw
najmniejszych, koÒczymy na naj-
wiÍkszych. Po w³¹czeniu zasilania
dioda D3 powinna sygnalizowaÊ
migotaniem krÛtkie impulsy.
Emulator pod³¹czamy w†miejs-
ce przeznaczone na odbiornik syg-
na³u DCF. Po uruchomieniu zegara
Rys. 2. Rozmieszczenie elementów
na płytce drukowanej.
Elektronika Praktyczna 2/2002
29
R3, R6: 4,7k
R4: 100k
R8: 22
32251665.015.png 32251665.016.png 32251665.001.png 32251665.002.png 32251665.003.png 32251665.004.png 32251665.005.png 32251665.006.png 32251665.007.png 32251665.008.png 32251665.009.png 32251665.010.png 32251665.011.png 32251665.012.png
Zgłoś jeśli naruszono regulamin