18
Elektronika dla Wszystkich
Do czego to służy?
Prezentowane urządzenie jest mikroproceso-
rowym zegarem z budzikiem, mającym jed-
nak cechę wyróżniającą go spośród licznych
rozwiązań – możliwość dokonywania dwu-
punktowego pomiaru temperatury przy po-
mocy czujników firmy Dallas DS1624 i, jak
się zaraz okaże, możliwość prezentacji wyni-
ków w dowolnym zestawieniu.
Jak to działa?
Na początku opisu należy się Czytelnikom
krótkie wyjaśnienie dlaczego wybrałem aku-
rat czujniki DS1624, a nie np. DS1920. Jak
wiadomo, te ostatnie sterowane są przez jed-
noprzewodową magistralę 1-Wire, natomiast
te zastosowane w projekcie komunikują się
z procesorem za pomocą magistrali I
2
C. Wy-
bór padł na układy 1624 z dwóch powodów:
- chęć opisania budowy termometru opartego
na innych układach niż te, często stosowane
przez autorów AVT,
- pokazanie ciekawego sposobu przetwarza-
nia danych pobranych z tego typu
czujników.
Schemat elektryczny zegara poka-
zany jest na rysunku 1. Od razu ude-
rza wyjątkowa prostota układowa. Ro-
lę portu I
2
C spełniają dwa najmłodsze
bity portu P1. Są to wejścia wewnętrz-
nego komparatora, dlatego też ko-
niecznym było podciągnięcie ich do
plusa zasilania poprzez rezystory. Do
magistrali dołączone są kolejno dwa
czujniki DS1624. W odróżnieniu od
układów 1-Wire, które to posiadają
swój unikatowy numer seryjny, układy
dołączane do magistrali I
2
C wybierane
są przez podanie adresu ustalonego
(w pewnym zakresie) przez użytkow-
nika, poprzez odpowiednie spolaryzo-
wanie wejść A0-A2. Tego typu rozwią-
zanie ogranicza użycie na jednej magi-
strali więcej niż ośmiu takich elemen-
tów. W opisywanym układzie czujnik,
umownie nazwany wewnętrznym,
ma adres bazowy 144, czujnik zewnętrzny
146. Jeśliby ustawić w obu czujnikach ten sam
adres, na pewno wystąpiłby konflikt, a wyni-
ki byłyby błędne, bądź ich odczytanie stało-
by się niemożliwe. Obwód rezonansowy pro-
cesora wykonany jest w standardowy i spraw-
dzony sposób. Z doświadczenia także wiado-
mo, że do poprawnego restartu procesora po
włączeniu napięcia zasilania wystarczy jedy-
nie kondensator 1µF włączony między plus
zasilania, a końcówkę RST. Linie P1.7 do
P1.2 służą komunikacji procesora z wyświe-
tlaczem LCD o organizacji 1*16. Dodatkowe
połączenia z wyświetlaczem to zasilanie i re-
gulacja kontrastu potencjometrem PR1. Przy-
ciski typu uswitch dołączone do wejść P3.2
P3.3 i P3.4 służą dokonywaniu nastaw. Buzzer
B1 generujący sygnał budzika sterowany jest
z końcówki P3.5. Zasilacz dla całego układu
oparty jest na stabilizatorze 7805 z diodą za-
bezpieczającą przed błędnym podłączeniem
napięcia zasilania, które powinno mieścić się
w przedziale 9-15V.
Generalnie program zbudowany jest tak,
że w zależności od aktualnego sposobu wy-
świetlania zbiera dane z czujników, liczy
czas, wyświetla wyniki i analizuje stan przy-
cisków (źródło w postaci pliku *.bas dostęp-
ne jest na internetowej stronie EdW). Sposób
programowej generacji podstawy czasu dla
zegarka przedstawiony jest na listingu 1. Wy-
korzystany procesor to AT89C4051 posiada-
jący w swym wnętrzu 4kB pamięci FLASH.
Taka pojemność okazała się potrzebna ze
względu na wykorzystanie dość skompliko-
wanych procedur przeliczeniowych.
Timer 1 pracuje z cyklicznym przepełnia-
niem wywołującym podprogram obsługi
przerwania, który po każdym piętnastym
przepełnieniu T1 zwiększa aktualny czas, do
wyświetlenia, o sekundę. Magiczna, ładowa-
na wartość 4150, zapewniająca „wzorcowe”
odmierzanie części sekundy, została już
wcześniej opisana przez Zbigniewa Raabe
w kilku numerach EdW.
++
++
Z
Z
e
e
g
g
a
a
r
r
-
-
b
b
u
u
d
d
z
z
i
i
k
k
z
z
d
d
w
w
u
u
p
p
u
u
n
n
k
k
t
t
o
o
w
w
y
y
m
m
t
t
e
e
r
r
m
m
o
o
m
m
e
e
t
t
r
r
e
e
m
m
D
D
S
S
1
1
6
6
2
2
4
4
Rys. 1
list 1
Config Timer0 = Timer ,
Gate = Internal , Mode = 1
Enable Timer0
On Timer0 Timer_0
Enable Interrupts
Counter0 = 4150
Start Timer0
Timer_0:
Counter0 = 4150
Start Timer0
Incr Czesc_sekundy
If Czesc_sekundy > 14 Then
Czesc_sekundy = 0
Incr Sekundy
If Sekundy > 59 Then
Sekundy = 0
Incr Minuty
If Minuty > 59 Then
Minuty = 0
Incr Godziny
If Godziny > 23 Then
Godziny = 0
End If
End If
End If
End If
Return
19
Elektronika dla Wszystkich
W podobnie prosty sposób odbywa się
pobieranie danych z czujników temperatury,
a ciekawostką jest to, że ramka danych jest
niestandardowa, bo 13 bitowa. Ponadto
temperatura kodowana jest w systemie licz-
bowym uzupełnień do dwóch, tzw U2. Obli-
czeniu poddaje się więc rzeczywistą 13 bi-
tową liczbę spośród danej 16 bitowej, obli-
cza się właściwą temperaturę (korzystając
ze współczynnika przetwarzania) i zaokrą-
gla wynik po przecinku. Listing 2 prezentu-
je cały ten proces. Zmienna Temp_1 prze-
chowuje początkowo wartość pełnych stop-
ni Celsjusza, Temp_2 zaś wartość po prze-
cinku. Na podstawie wartości zwróconej
podczas odczytu czujnika do Temp_1 wnio-
skuje się o znaku
(+/-). Jeśli liczba
w Temp_1 wyka-
zuje, że badana
temperatura jest
ujemna następuje
przeliczenie całej
temperatury. Zao-
krąglanie wykony-
wane jest w osob-
nym podprogramie
ze względu na
swoją „pamięcio-
żerność” przy ob-
słudze dwóch
czujników jedno-
cześnie.
Wszelkich nastaw dokonuje się z poziomu
trzyprzyciskowej klawiatury. Możliwe jest:
sprawdzenie nastawy budzika i jego aktywa-
cję/dezaktywację, dokonanie nastaw budzika
i zegara z rozdzielczością minuty, zmiana czuj-
nika, którego pomiar jest prezentowany, wybór
między wyświetlaniem zegara i wybranej tem-
peratury i dwiema temperaturami bez zegarka.
Procedura odczytu danych z czujników
DS1624 jest „standardowa” jak na układy
I
2
C i przedstawiona jest na listingu 3.
Na początku, jeszcze przed pobieraniem
informacji o temperaturze, należy zainicjo-
wać działanie wewnętrznego przetwornika
pomiarowego. Robi się to wydając komendę
Start Convert T (EEh). Jak widać dotyczy
to obu czujników. Dopiero po takiej inicjali-
zacji można korzystać z podprogramu
Odczyt_tempera-
tury, który zwraca
odpowiednie da-
ne do zmiennych
T e m p _ 1
i Temp_2. To,
z którego termo-
metru aktualnie
odczytywana jest
wartość mierzo-
na, zależy od
wartości zmien-
nej Termometr
i
odpowiednio
Termometr_2.
S t e r o w a n i e
odbywa się za po-
mocą 3-przyci-
skowej klawiatury. Każdy z przycisków jest
wielofunkcyjny, w zależności od tego jaką
funkcję aktualnie ustawia się. I tak:
Podczas normalnej pracy:
S1 – krótkie przyciśnięcie powoduje wyświe-
tlenie nastawy budzika i jego stanu (aktyw-
ny/nieaktywny); dłuższe wciśnięcie powodu-
je zmianę stanu budzika na przeciwny,
S2 – wciśnięcie powoduje wejście do podme-
nu nastaw budzika i zegara,
S3 – wciśnięcie powoduje wejście do podme-
nu wyboru sposobu prezentacji pomiarów.
Po wejściu do podmenu nastaw
budzika i zegara:
S1 – wciśnięcie powoduje wejście w tryb
ustawiania budzika (S1 i S2 powodują inkre-
mentację o jeden odpowiednio: godzin i mi-
nut; S3 kończy operację nastawiania),
S3 – wciśnięcie powoduje wejście w tryb
ustawiania zegara (S1 i S2 powodują inkre-
mentację o jeden odpowiednio: godzin i mi-
nut; S3 kończy operację nastawiania).
Po wejściu do podmenu wyboru
sposobu prezentacji pomiarów:
S1 – wciśnięcie powoduje wejście do podme-
nu wyboru czujnika, którego pomiary pre-
zentowane będą wraz z zegarem (S1 – czuj-
nik wewnętrzny, S3 – czujnik zewnętrzny),
S2 – wciśnięcie powoduje przejście w tryb
wyświetlania obu temperatur jednocześnie,
bez wyświetlania zegarka (z lewej strony
temperatura wewnętrzna, z prawej zaś ze-
wnętrzna).
Przy trybie wyświetlania jednej tempera-
tury organizacja wyświetlacza jest następują-
ca: GG:MM:SS_+/-TT.T
0
C. W przypadku
trybu prezentacji obu temperatur wygląda to
następująco: +/-TT.T
0
C__+/-TT.T
0
C (przy
czym +/- stanowi jedno pole i w przypadku
temperatur dodatnich pozostaje puste). Od-
świeżanie pozycji zawierających informacje
o
temperaturze realizowane jest co
4s (w przypadku obu pomiarów – naprze-
miennie co 2s).
W przypadku gdy zadziała budzik na wy-
świetlaczu pojawia się szlaczek, a z buzzera
rozlega się przerywany dźwięk. Wciśnięcie
któregokolwiek przycisku wyłącza budzik
i układ przechodzi do normalnej pracy.
Układ można zmontować na płytce uni-
wersalnej. Od razu działa poprawnie,
a krzaczki pojawiające się na pozycjach 14,
15 i 16, przez pierwsze 4s po włączeniu zasi-
lania, są naturalnym objawem. Zakres po-
miarowy termometrów DS1624 mieści się
w przedziale: [-55 do +125]
0
C. Po włączeniu
urządzenie przechodzi do odczytu tempera-
tury z układu o adresie bazowym 144.
Projekt ten dedykuję pamięci Zbigniewa Raabe.
Grzegorz Kaczmarek
flepauty@poczta.onet.pl
Rys. 2 Wyprowadzenia AT89C4051
list 2
Sub Przeliczenie
If Temp_1 >= 0 And
Temp_1 < 126 Then
Minus = 0
Temp_2 = Temp_2 / 8
Call Przelicz_single
Exit Sub
Else
Minus = 1
Temp_1 = 255 - Temp_1
Temp_2 = 255 - Temp_2
Temp_2 = Temp_2 + 1
Temp_2 = Temp_2 / 8
Call Przelicz_single
Exit Sub
End If
End Sub
Sub Przelicz_single
Temp = Temp_2 * 0.3125
list 3
I2cstart
I2cwbyte 144
I2cwbyte &HEE
'rozpoczęcie konwersji
I2cstop
Waitms 10
I2cstart
I2cwbyte 146
I2cwbyte &HEE
I2cstop
Sub Odczyt_temperatury
I2cstart
I2cwbyte Termometr
I2cwbyte &HAA
I2cstart
I2cwbyte Termometr_2
I2crbyte Temp_1 , Ack
I2crbyte Temp_2 , Nack
I2cstop
End Sub
Wykaz elementów:
Rezystory
R1,R2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1,1kΩ
PR1 . . . . . . . . . . . . . . . . . . . . . . . .10kΩ miniaturowy
Kondensatory
C1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .100µF/25V
C2 . . . . . . . . . . . . . . . . . . . . . . . . .100nF ceramiczny
C3,C4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .33pF
C5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1µF MKT
Półprzewodniki
D1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1N4148
IC1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . .AT89C4051
IC2,IC4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . .DS1624
IC3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7805
Inne
B1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .piezo 5V
S1-S3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .µswitch
Q1 . . . . . . . . . . . . . . . . . . . . . . . . .kwarc 11,059MHz
Wyświetlacz