background image

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

background image

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