Projekty AVT
Mój
pierwszy
zegar
2488
mikroprocesorowy
Do czego to służy prezentowany układ? możliwym do wykonania podczas wolnego się za chwilę, podczas analizy programu steru-
Powyższe pytanie jest chyba nieco reto- popołudnia. Chciałby jeszcze tylko awansem jącego zegarem. Bierzmy się zatem do pisania
ryczne, przecież każdy wie, do czego służy odpowiedzieć na pewne głosy krytyki, programu dla naszego zegarka.
zegarek: do wskazywania aktualnego czasu. z którymi być może spotka się opracowany Co właściwie mamy wykonać? Czy coś
Jednak możliwości urządzenia, które za przeze mnie zegarek. zupełnie nowego, co pojawiło się na świecie
chwilę opiszemy wykraczają ponad możli- Wyświetlacze alfanumeryczne LCD mają z nastaniem ery elektroniki? Bynajmniej,
wości przeciętnego zegarka, a w każdym ra- same zalety i tylko dwie wady: mały wymiar nasz zegar będzie się składał, podobnie jak
zie ponad możliwości zegarków prezento- wyświetlanych znaków i ich słabą czytelność zegary mechaniczne, z wielu kółek zębatych,
wanych jak dotąd w EdW. Nasz nowy zega- przy zmiennych warunkach oświetlenia. Ta które zazębiając się o siebie i obracając
rek, zbudowany z wykorzystaniem zaledwie wada może być powodem słusznej krytyki z ustaloną prędkością, wskazują nam aktual-
jednego układu scalonego - procesora typu układu, którego wskazania będą widoczne ny czas. Patrząc na program sterujący pracą
AT89C4051 posiada następujące funkcje: tylko z niewielkiej odległości i przy dobrym naszego czasomierza, nie zobaczymy nicze-
- Wskazywanie bieżącego czasu w formacie: oświetleniu. Na tę krytykę mogę odpowie- go innego, niż to, co widział Ludwik XVI,
godziny/minuty/sekundy dzieć dwoma stwierdzeniami: zaglądając w głąb swoich ukochanych zega-
- Wskazywanie aktualnej daty w formacie: - nasz zegarek jest urządzeniem przeznaczo- rów. Zrealizujemy metodami elektroniczny-
dzień miesiąca: miesiąc nym do pracy na biurku lub nocnym stoliku mi to samo, co mechanicy tworzyli już od se-
- Budzik działający w cyklu dobowym. gdzie małe wymiary cyferek nie powinny tek lat metodami klasycznymi.
- Ustawianie aktualnego czasu być szczególnie uciążliwe. Można także za- Co jest podstawą konstrukcji każdego ze-
- Ustawianie aktualnej daty stosować wyświetlacz z podświetlaniem. gara mechanicznego? Zwykle takie malutkie
- Ustawianie czasu budzenia Bez jakichkolwiek przeróbek można do kółeczko, nazywało się chyba balans albo ja-
- Włączanie i wyłączanie budzika naszego zegara dołączyć.... wyświetlacze koś podobnie. To ono decydowało o precyzji
- Wprowadzanie korekty czasu wyrównują- LED o wysokości aż 57mm! Takie rozwiąza- zegara, taktując ze stałą częstotliwością jego
cej niedokładności spowodowane zastosowa- nie pozwoli na zastosowanie układu w roli mechanizm. Właściwie to kółko było jakby
niem taniego, popularnego rezonatora kwar- zegara tablicowego, widocznego nawet z od- okrągłym wahadełkiem, ale istotne jest tylko
cowego ległości kilkudziesięciu metrów! to, że posiadało małe ząbki, które napędzały
- Pomiar temperatury w zakresie od - 20 do większe kółeczko - sekundnik. Taki właśnie
+100 stopni Celsjusza dokonywany za pomo- Opis układu balans, wahadło decydujące o precyzji nasze-
cą cyfrowego termometru DS1820 Schemat elektryczny proponowanego układu go zegara musimy teraz sobie zaprojektować,
- Możliwość sterowania wyświetlaczy sied- zegarka został pokazany na rysunku 1. Ko- wykorzystując do tego celu nowo poznany
miosegmentowych LED o wysokości 57mm. mentowanie tak prostego hardware'u nie mia- składnik każdego systemu mikroprocesoro-
Nie są to może parametry zbyt imponują- łoby chyba większego sensu. Wystarczy wego - timer.
ce, ale jak na tak małe i proste urządzenie stwierdzić, że do wyświetlania danych został Ponieważ balans naszego zegarka ma pra-
całkowicie wystarczające. Zegary elektro- zastosowany standardowy wyświetlacz alfa- cować nieustannie, niezależnie od innych
niczne należą do grupy urządzeń najchętniej numeryczny LCD 16*1, element dobrze zna- czynności wykonywanych przez procesor,
budowanych przez hobbystów elektroników. ny Czytelnikom EdW, a w szczególności najlepiej byłoby wykorzystać do jego budo-
Ja także bardzo lubię projektować i wykony- Uczestnikom i Sympatykom kursu BASCOM wy timer pracujący w trybie 2 - AUTORE-
wać układy takich zegarów i dlatego opisy- College. Do sterowania pracą zegara wyko- LOAD. Niestety, napotykamy tu na pewne
wane urządzenie jest pierwszym, ale nie rzystane będą cztery przyciski S1 ... S4, a mi- ograniczenie wynikające z zasady pracy ti-
ostatnim zegarem zbudowanym w technice niaturowy przekazniczek RL1 może posłużyć mera w tym trybie: maksymalną wartość
mikroprocesorowej, który zostanie opisany do włączania i wyłączania urządzeń peryferyj- liczby, którą możemy załadować do timera,
na łamach EdW. nych służących jako sygnalizatory budzika. równą 255. Taki balans kręciłby się z zawrot-
Wracajmy jednak do opisywanej kon- Ogromne znaczenia ma zainstalowanie w sy- ną prędkością, przerwania następowałyby
strukcji, która jest układem przeznaczonym stemie dwóch magistrali transmisji danych: jedno po drugim, co mogłoby niejednokrot-
głównie dla początkujących konstruktorów, 1WIRE i I2C. O ich użyteczności przekonamy nie spowolnić inne funkcje wykonywane
Elektronika dla Wszystkich
14
Projekty AVT
przez procesor. Zrezygnujmy zatem z propo- tycznie! Nie zapominajmy bowiem, że na za- Rozrzut parametrów tych oscylatorów jest
nowanego trybu i zastosujmy tryb 1 pracy ti- trzymanie, przeładowanie i ponowne urucho- dość znaczny, co powoduje odchyłki wska-
mera, z programowym ładowaniem i urucha- mienie timera procesor potrzebuje także tro- zywanego czasu od czasu wzorcowego do-
mianiem timera. chę czasu. Z obliczeń i z doświadczeń prze- chodzące niekiedy nawet do kilku - kilkuna-
A zatem Timer0 procesora musi być skon- prowadzonych w symulacji programowej wy- stu sekund na dobę. W roku 2001 trudno po-
figurowany w następujący sposób: nika, że na te operacje procesor "zużyje" aż godzić się z taką "precyzją" i należy znalezć
54 takty zegarowe. A zatem liczba Å‚adowana jakieÅ› rozwiÄ…zanie dajÄ…ce naszemu zegarowi
Config Timer0 = Timer , Gate = Internal , Mode = 1 do rejestrów timera musi wynosić 4150. cechy morskiego chronometru.
On Timer0 Timer0_int Każde wystąpienie przerwania pochodzą-
cego z Timera1 powoduje skok programu do
L
i
s
t
i
n
g
1
'Listing 1
Wewnętrzny oscylator procesora pracuje procedury zawartej w podprogramie obsługi
Timer0_int:
z częstotliwością 11059200Hz, co wynika przerwania TIMER0_INT, pokazanej na li-
Counter0 = 4150 'załaduj do rejestru timera1
wartość 4150
z zastosowania taniego i popularnego rezona- stingu 1. Jest to najważniejsza część progra-
Start Timer0 'uruchom timer1
tora kwarcowego o tej właśnie częstotliwości mu obsługującego nasz zegar, w której reali-
Incr Int_temp 'zwiększ o 1 zmienną pomoc-
niczÄ… zliczajÄ…cÄ… kolejne przerwania
rezonansowej. Pamiętajmy jednak, że czę- zowane są wszystkie funkcje związane z od-
If Int_temp = 15 Then
stotliwość ta jest wewnętrznie dzielona przez liczaniem sekund, minut, godzin, dni i mie-
'jeżeli zmienna pomocnicza
INT_TEMP przyjęła wartość 15 (zliczono 15 wystąpień
12 i dopiero potem używana jako zegar ma- sięcy. Z premedytacją zrezygnowałem ze zli-
przerwania timera1), to:
szynowy procesora. A zatem realna częstotli- czania lat: można przecież nie wiedzieć,
Seconds_flag = 1 'zmienna pomocnicza
SECONDS_FLAG przyjmuje wartość 1 (patrz listing3)
wość taktowania procesora wynosi która jest godzina, można zapomnieć jaki
Incr Seconds 'zwiększ o 1 wartość sekund
11059200/12 = 921600Hz. mamy dzień miesiąca czy nawet miesiąc, ale
If Hours = 12 And Minutes = 0 And Seconds = 30
And Correction_flag = 1 Then
Liczba ta znacznie przekracza pojemność rok? Byłby to z pewnością szczyt roztargnie-
'jeżeli jest godzina 12:00:30,
zastosowanego timera, który wobec tego zo- nia, wart uwiecznienia w księdze Guinnessa!
a także zmienna CORRECTION_FLAG jest równa 1, to:
Seconds = Seconds + Seconds_correction
stanie zmuszony do kilkukrotnego zliczania Rezygnacja ze zliczania lat pociągnęła za so-
'dokonaj korekty wskazywanego
w ciągu sekundy. Następnym krokiem będzie bą jedną, drobną niedogodność: program nie
czasu
Correction_flag = 0
zatem znalezienie jak największej liczby, jest w stanie rozpoznać lat przestępnych. Jed-
'po dokonaniu korekty ustaw
która musi spełnić następujące warunki: nak nie sądzę, aby skorygowanie wartości
ponownie zmiennÄ… CORRECTION_FLAG na 0,
co pozwoli na dokonanie kolejnej korekty za
- być mniejszą lub równą 65536 dnia miesiąca raz na cztery lata było dla ko-
24 godziny
- wynik dzielenia 921600 przez tÄ™ liczbÄ™ mu- gokolwiek zbyt fatygujÄ…ce!
End If 'koniec warunku
si być liczbą całkowitą. Mam nadzieję, że podprogramy pokazane
Int_temp = 0 'zmienna pomocnicza zliczania
Liczbą tą jest 15: 11059200/15 = 61440, na listingu 1 i 2, realizujące najważniejsze przerwań zostaje wyzerowana
If Seconds = 60 Then
czyli że wykorzystywać będziemy prawie ca- funkcje naszego zegara są całkowicie zrozu-
'jeżeli wartość sekund zwiększyła
łą pojemność timera. W trybie 1 maksymalna miałe dla Czytelników i że wyjaśnienia może się do 60, to:
Seconds = 0 'wyzeruj wartość sekund, oraz
pojemność timera określona jest liczbą dwu- wymagać jedynie funkcja korekty czasu, do-
Incr Minutes 'zwiększ wartość minut
bajtową i wynosi 65536. Wynika z tego, że konywanej automatycznie raz na dobę. If Alarm_hour = Hours And Alarm_minute = Minutes
And Alarm_flag = 1 Then
aby osiągnąć przepełnienie timera i wygene- Do stabilizacji pracy wewnętrznego oscy-
'jeżeli aktualny czas jest zgodny
rowanie przerwania we właściwym czasie, ti- latora procesora 89C4051 wykorzystany zo- z czasem ustawionym dla budzika i jeżeli udzielone
zostało zezwolenie na włączenie sygnału budzenia
mer musi za każdym razem rozpocząć zlicza- stał popularny i tani rezonator kwarcowy
(zmienna ALARM_FLAG), to:
nie od wartości 65536 - 61440 = 4096. Teore- 11.0659200MHz. Popularny i tani może nie- Set Rel : SET T1 'włącz przekaznik alarmu
i tranzystor sterujÄ…cy piezo (w konfiguracji
kiedy oznaczać: "nie najwyższej jakości"
programu użyto REL ALIAS P1.0 i T1 ALIAS P3.4)
Rys. 1 Schemat ideowy i tak właśnie jest niejednokrotnie w praktyce.
Elektronika dla Wszystkich
15
Projekty AVT
ułamka sekundy na dobę niepotrzebnie zwięk- świetlaczy, niestety relatywnie kosztownych,
Else 'jeżeli powyższe warunki nie są
szyłoby koszt wykonania zegara i dlatego zde- o wysokości 57 mm, umożliwi obserwację
spełnione, to:
Reset Rel 'wyłącz przekaznik alarmu
cydowałem się na dość niekonwencjonalne wskazań zegara z odległości do kilkudziesięciu
End If 'koniec warunku
rozwiązanie, i ile wiem nie spotykane dotąd metrów i nawet w całkowitej ciemności.
If Minutes = 60 Then
'jeżeli wartość minut stała się
w konstrukcjach zegarów. Wykorzystujemy tu
równa 60, to:
fakt, że błąd wskazań zegara "domowego",
Minutes = 0 'wartość minut staje się równa
L
i
s
t
i
n
g
3
'Listing 3
0, oraz:
pracującego w mniej więcej stałych warun-
Incr Hours 'zwiększa się wartość godzin
Sub Display_time
kach termicznych jest raczej stały i nie zmie-
If Hours = 24 Then
Cls 'wyczyść ekran wyświetlacza
'jeżeli wartość godzin stałą się
nia siÄ™ w funkcji czasu. Te parÄ™ sekund na do- Seconds_flag = 1
równa 24, to:
'zmienna pomocnicza
bę możemy sobie "odpuścić", byleby błąd
Hours = 0 'wartość godzin staje się równa
SECONDS_FLAG przyjmuje wartość 1, zezwalającą
0, oraz:
wskazań nie kumulował się w miarę upływu na wyświetlenie na ekranie
Incr Day 'zwiększ wartość dni
aktualnego czasu
kolejnych dni. Temu właśnie służy funkcja ko-
Correction_flag = 1
Waitms 255 'zaczekaj 255 ms
'udziel zezwolenia na korektÄ™
rekty czasu, wykonywana raz na dobÄ™, punk- Do
czasu w rozpoczynajÄ…cym siÄ™ dniu
If Seconds_flag = 1 Then
tualnie o godzinie 12:00:30. Do licznika se-
Call Days 'wezwij podprogram obliczajÄ…cy
'jeżeli jest zezwolenie na
dni w danym miesiÄ…cu (patrz listing 2)
wyświetlenie czasu, to:
kund zostaje wtedy dodana lub odjęta ustalona
End If 'koniec warunku
Seconds_flag = 0
uprzednio doświadczalnie wartość z przedzia-
End If 'koniec warunku
'anuluj zezwolenie aż do upływu
End If 'koniec warunku
kolejnej sekundy (patrz listing 1)
łu -20 ... +20 sekund. Większa wartość korek-
End If 'koniec warunku
Home 'ustaw kursor na poczÄ…tkowej pozycji
ty nie została przewidziana, ponieważ rezona-
Return 'koniec obsługi przerwania TIMER1
Lcd "Time: " 'wyświetl napis informacyjny
If Hours < 10 Then Lcd "0";
tor kwarcowy dający odchyłki większe niż 20
'jeżeli wartość godzin jest
sekund na dobę należy po prostu wyrzucić lub
mniejsza od 10, to wyświetl zero wiodące
L
i
s
t
i
n
g
2
'Listing 2
Lcd Hours ; ":" ; 'wyświetl wartość godzin
zastosować w układzie, w którym precyzja ge-
Sub Days
If Minutes < 10 Then Lcd "0";
neratora kwarcowego nie jest zbyt istotna.
If Day = 29 And Month = 2 Then
'jeżeli wartość minut jest mniejsza
'jeżeli wartość dnia zmieniła się
od 10, to wyświetl zero wiodące
Sposób wprowadzanie korekty czasy zo-
na 29 dzień lutego, to:
Lcd Minutes ; ":" ;
stał pokazany na listingu 5.
Incr Month 'zwiększ wartość miesięcy
'wyświetl wartość minut
Day = 1 'dzień miesiąca staje się równy 1
If Seconds < 10 Then Lcd "0";
Program obsługujący nasz zegar może
End If 'koniec warunku
'jeżeli wartość sekund jest
pracować w kilku, zmienianych za pomocą
If Day = 31 Then 'jeżeli wartość dnia miesiąca
mniejsza od 10, to wyświetl zero wiodące
osiągnęła 31, to
Lcd Seconds 'wyświetl wartośc sekund
klawiszy S1 i S4 pętlach programowych.
Select Case Month 'w zależności od aktualnego
X = Makebcd(hours)
Wykonują one następujące funkcje:
miesiąca wezwij podprogram zakończenia miesiąca:
'przedstaw wartość godzin w
Case 4 : Call Month_incr
kodzie BCD
- wyświetlanie aktualnego czasu
Case 6 : Call Month_incr
I2csend 112 , X
- wyświetlanie aktualnej daty
Case 9 : Call Month_incr
'wyślij otrzymaną wartość na
2
Case 11 : Call Month_incr
magistralÄ™ I C pod adres 112
- wyświetlanie czasu budzenia
End Select
X = Makebcd(minutes)
- ustawianie czasu i jego ewentualnej korekty
End If 'koniec warunku
'przedstaw wartość minut w
If Day = 32 Then 'jeżeli wartość dnia miesiąca
kodzie BCD
- ustawianie daty
osiągnęła 32, to:
I2csend 114 , X
Select Case Month 'w zależności od aktualnego - ustawianie czasu budzenia
'wyślij otrzymaną wartość na
2
miesiąca wezwij podprogram zakończenia miesiąca:
magistralÄ™ I C pod adres 114
- włączanie i wyłączanie budzika
Case 1 : Call Month_incr
X = Makebcd(seconds)
Case 3 : Call Month_incr - wyświetlanie aktualnej temperatury
'przedstaw wartośc sekund w
Case 5 : Call Month_incr
kodzie BCD
Wszystkie te podprogramy sÄ… w istocie
Case 7 : Call Month_incr
I2csend 116 , X
Case 8 : Call Month_incr bardzo podobne do siebie i dlatego też dla 'wyślij otrzymaną wartość na
2
Case 10 : Call Month_incr
magistralÄ™ I C pod adres 116
przykładu omówimy tylko dwa z nich: wy-
Case 12 : Call Month_incr
End If 'koniec warunku i wyświetlania danych
End Select świetlanie czasu i ustawianie czasu. Prezen-
End If 'koniec warunku
Set S1 'spróbuj ustawić stan wysoki na
towanie całego listingu programu w tym ar-
If Month = 13 Then Month = 1
przycisku S1
'jeżeli wartość miesiąca tykule nie miałoby większego sensu, tym If S1 = 0 Then Call Display_date
osiągnęła 13, to wartość miesiąca staje się równa 1
'jeżeli próba nieudana (przycisk
bardziej że jego wersja zródłowa została
End Sub
naciśnięty) to przejdz do podprogramu
Sub Month_incr 'podprogram zakończenia miesiąca
umieszczona na stronie www.edw.com.pl . wyświetlania daty
Incr Month 'zwiększ wartość miesiąca
Set S4 'spróbuj ustawić stan wysoki na
Na listingu 3 został pokazany podprogram
Day = 1 'dzień równy 1
przycisku S4
End Sub
realizujący funkcję wyświetlania aktualnego If S4 = 0 Then Call Settime
'jeżeli próba nieudana, to wezwij
czasu. Zasada jego działania została wyczerpu-
podprogram ustawiania czasu
Takich rozwiązań może być wiele. Każdy jąco opisana w komentarzach, a dodatkowego Loop
End Sub
z nas ma do dyspozycji, i to całkowicie za dar- wyjaśnienia wymaga jedynie cel wysyłania in-
mo, zegar wskazujący czas z dokładnością do formacji o aktualnym czasie na magistralę I2C.
1 sekundy na 5 milionów lat. Mam tu na my- Magistrala I2C, szczegółowo opisywana Listing 4 pokazuje podprogram ustawiania
śli atomowy wzorzec czasu DCF dostępny za w ramach kursu BASCOM COLLEGE, jest bieżącego czasu. Podprogram ustawiania daty
pośrednictwem fal radiowych na terenie całej jednym z najważniejszych "naczyń krwiono- zbudowany jest prawie identycznie i nie ma w tej
Europy. Jednak zegar wykorzystujący do ko- śnych" wielu systemów mikroprocesorowych. chwili sensu szczegółowo się nim zajmować.
rekty czasu sygnał DCF jest urządzeniem dość Umożliwia ona dołączanie do systemu różnych
skomplikowanym lub raczej wymagającym układów peryferyjnych, pełniących niejedno-
L
i
s
t
i
n
g
4
'Listing 4
bardziej skomplikowanego programu i nieco krotnie dość złożone funkcje, a sterowanych za
Sub Settime
"lepszego" procesora niż nasz miniaturowy pośrednictwem tylko dwóch wyprowadzeń pro-
Cls 'wyczyść ekran wyświetlacza
Setting_flag = 1
zegarek. A zatem synchronizacją wskazań ze- cesora. W przypadku naszego zegara magistrala
'zmienna pomocnicza
gara za pomocą sygnału DCF zajmiemy I2C umożliwia dołączenie do niego dwóch lub
SETTING_FLAG przyjmuje wartość 1 zezwalającą na
wyświetlenie danych
się pózniej, a dla naszego prostego układziku trzech (jeżeli chcemy także wyświetlać sekun-
Temp1 = Hours 'zmienna pomocnicza TEMP1
poszukajmy innego, tańszego i prostszego dy) modułów wyświetlaczy LED o znacznych
przyjmuje wartość godzin
Temp2 = Minutes
rozwiązania. Zastosowanie kosztownego ge- wymiarach. Są to moduły AVT-859, opisane
'zmienna pomocnicza TEMP2
neratora kwarcowego, odpornego na zmiany przez niżej podpisanego w numerze 8/00 Elek-
przyjmuje wartość minut
temperatury i dającego dokładność rzędu troniki Praktycznej. Zastosowanie takich wy-
Elektronika dla Wszystkich
16
Projekty AVT
Niestety, program ten zawierał pewne, dość
Waitms 255 'zaczekaj 255 ms
Lcd "0," ; T 'wyświetl zero wiodące
istotne błędy, uniemożliwiające poprawne
Do
Else 'w przeciwnym przypadku
Do
wyświetlanie temperatur ujemnych i w takiej If T < 0 And T > -10 Then
If Setting_flag = 1 Then
'jeżeli temperatura mniejsza od zera, to:
postaci został niegdyś opublikowany przeze
'jeżeli zmienna pomocnicza
Locate 1 , 7
SETTING_FLAG ma wartość 1, to:
mnie w Elektronice Praktycznej. Błędy algo- 'ustaw kursor na pozycji 7
Home 'ustaw kursor na pierwszej pozycji
T = T * -1
rytmu konwersji danych zostały zauważone
Lcd "Set time: " 'wyświetl komunikat
'przelicz wartość temperatury
If Temp1 < 10 Then Lcd "0";
i poprawione przez KolegÄ™ Artura Klimu- Lcd "-0," ; T
'jeżeli wartość zmiennej TEMP1
'dodaj zero wiodÄ…ce ze znakiem "-"
jest mniejsza od 10, to wyświetl zero wiodące szko (artx@poland.com), a ja korzystam
Else 'w przeciwnym przypadku:
Lcd Temp1 ; ":" ; 'wyświetl wartość zmiennej
Locate 1 , 8
z okazji do złożenia Mu podziękowań.
TEMP1
'ustaw kursor na pozycji 8
If Temp2 < 10 Then Lcd "0";
Lcd T 'wyświetl wartość temperatury
'jeżeli wartość zmiennej TEMP2
T = T / 10
L
i
s
t
i
n
g
5
'Listing 5
jest mniejsza od 10, to wyświetl zero wiodące
'podziel wartość temperatury przez 10
Lcd Temp2 ; 'wyświetl wartość zmiennej
Locate 1 , 7
'UWAGA: zmienna SECONDS_CORRECTION musi
TEMP2
'cofnij kursor na pozycjÄ™ 7
być zadeklarowana jako SINGLE, aby umożliwić przyj-
Lcd T ; ","
mowanie wartości mniejszych od zera
Setting_flag = 0 'wprowadz zakaz wyświetlania
'wyświetl wartość temperatury
Sub Set_correction
danych aż do wprowadzenia zmiany którejś
+ znak dziesiętny
Cls 'wyczyść ekran wyświetlacza
z wartości
End If 'koniec warunku
Do
End If 'koniec warunku i koniec wyświetlania
End If 'koniec warunku
Home 'ustaw kursor na pierwszej pozycji
Waitms 255 'zaczekaj 255 ms
Loop
Lcd "Correction: " ; Seconds_correction ; " "
Set S2 'spróbuj ustawić stan wysoki na
End Sub
'wyświetl komunikat i aktualną
przycisku S2
Sub Read1820
wartość korekty czasu
If S2 = 0 Then 'jeżeli próba nieudana (przycisk
1wreset
Waitms 255 'zaczekaj 255 ms
naciśnięty), to:
1wwrite &HCC 'żądanie zgłoszenia się układu
Set S2 'spróbuj ustawić stan wysoki na
Incr Temp1 'zwiększ wartośc zmiennej
dołączonego do magistrali 1WIRE
przycisku S2
TEMP1
1wwrite &HBE'żądanie podanie wyniku pomiaru
If S2 = 0 And Seconds_correction < 20 Then Incr
Setting_flag = 1 'udziel zezwolenia na aktualizacjÄ™
temperatury
Seconds_correction
wyświetlania danych
Bd(1) = 1wread(9)
'jeżeli przycisk naciśnięty i wartość
If Temp1 = 24 Then Temp1 = 0
'odczytanie wyniku
współczynnika korekty jest mniejsza od 20, to zwiększ
'jeżeli zmienna TEMP1
Tmp = Bd(1) And 1
wartość zmiennej SECONDS_CORRECTION
przekroczyła wartość 23, to zmienna TEMP1
'ta i dalsze linie: konwersja odczytanego
Set S3 'spróbuj ustawić stan wysoki na
przyjmuje wartość 0
wyniku do postaci liczby dziesiętnej
przycisku S3
End If 'koniec warunku
If Tmp = 1 Then Decr Bd(1)
If S3 = 0 And Seconds_correction > -20 Then Decr
Set S3 'spróbuj ustawić stan wysoki na
T = Makeint(bd(1) , Bd(2))
Seconds_correction
przycisku S3
T = T * 50
'jeżeli przycisk naciśnięty i wartość
If S3 = 0 Then 'jeżeli próba nieudana (przycisk
T = T - 25
współczynnika korekty jest większa od -20, to zmniejsz
naciśnięty), to:
T1 = Bd(8) - Bd(7)
wartość zmiennej SECONDS_CORRECTION
Incr Temp2 'zwiększ wartośc zmiennej
T1 = T1 * 100
Set S4 'spróbuj ustawić stan wysoki na
TEMP2
T1 = T1 / Bd(8)
przycisku S4
Setting_flag = 1 'udziel zezwolenia na aktualizacjÄ™
T = T + T1
If S4 = 0 Then Call Display_time
wyświetlania danych
T = T / 10
'jeżeli przycisk naciśnięty, to powróć
If Temp2 = 60 Then Temp2 = 0
End Sub
do podprogramu wyświetlania czasu
'jeżeli zmienna TEMP2
Loop
przekroczyła wartość 59, to zmienna TEMP1 przyjmu-
End Sub
je wartość 0
End If 'koniec warunku
Na tym możemy zakończyć pobieżne
Set S4 'spróbuj ustawić stan wysoki na
omawianie programu sterujÄ…cego pracÄ… na-
przycisku S4
L
i
s
t
i
n
g
6
'Listing 6
If S4 = 0 Then 'jeżeli próba nieudana (przycisk
szego zegarka. Chciałbym, aby Czytelnicy
naciśnięty), to:
Sub Display_temperature potraktowali zaprezentowane listingi jedynie
Hours = Temp1 'zmienna godzin przyjmuje
1wreset 'inicjalizacja magistrali 1WIRE
wartość zmiennej TEMP1
jako wskazówki do samodzielnego napisania
Minutes = Temp2 If Err = 1 Then 'jeżeli do magistrali nie jest
programu sterujÄ…cego pracÄ… zegara. Oczywi-
'zmienna minut przyjmuje wartość
dołączony termometr DS1820, to:
zmiennej TEMP2
Cls 'wyczyść ekran wyświetlacza
ście, zaprogramowane procesory będą do-
Seconds = 0 'licznik sekund zostaje
Lcd " NO SENSOR"
starczane w kitach, a także dołączane do pły-
wyzerowany
'wyświetl komunikat o braku
Call Set_correction
tek obwodów drukowanych, ale samodzielne
termometru
'wezwij podprogram ustawiania
Wait 1 'zaczekaj 1 sekundÄ™
napisanie programu będzie zawsze najwięk-
korekty czasu
Call Display_time 'ponownie wezwij podprogram
End If 'koniec warunku
szÄ… satysfakcjÄ… dla Konstruktora.
Loop wyświetlania aktualnego czasu
End Sub
End If 'koniec warunku
Do
Montaż i uruchomienie
1wwrite &HCC 'żądanie zgłoszenia się układu
Warto jeszcze przyjrzeć się podprogramo- Na rysunku 2 została pokazana mozaika
dołączonego do magistrali 1WIRE
wi ustawiania korekty czasu przedstawione- 1wwrite &H44 'rozpoczęcie konwersji analogowej
ścieżek płytki obwodu drukowanego wyko-
wartości zmierzonej temperatury na postać cyfrową
mu na listingu 5. nanego na laminacie jednostronnym oraz
Waitms 255 'zaczekaj 255 ms
Nie mieliśmy jeszcze okazji wspomnieć rozmieszczenie na niej elementów. Tak wła-
Waitms 255 'zaczekaj 255 ms
o kolejnej funkcji naszego zegara, nie zwiÄ…za- Waitms 255 'zaczekaj 255 ms
ściwie to mamy do dyspozycji aż dwie płyt-
Set S1 'spróbuj ustawić stan wysoki na
nej tym razem z pomiarem upływu czasu. Jest ki: druga z nich może posłużyć jako w miarę
przycisku S1
nią wbudowany w program obsługi zegara estetyczna płyta czołowa, umożliwiająca
If S1 = 0 Then Call Display_time
moduł pomiaru temperatury w otoczeniu. szybkie wykonanie obudowy do zegarka.
'jeżeli próba nieudana (przycisk
naciśnięty), to wezwij podprogram wyświetlania czasu
Do pomiaru temperatury wykorzystany Montaż układu wykonujemy typowo,
Call Read1820
został popularny układ termometru cyfro- z następującym wyjątkiem: wyświetlacz al-
'wezwij podprogram odczytu
wego DS1820 produkcji firmy DALLAS. danych z termometru DS1820 fanumeryczny i przyciski S1...S4 muszÄ…
Cls 'wyczyść ekran wyświetlacza
Procedury odczytu temperatury z tego ukła- zostać zamontowane od strony ścieżek, po
Locate 1 , 3 'ustaw kursor na wskazanej pozycji
du i wyświetlania wyników pomiaru na wy- uprzednim wlutowaniu wszystkich pozo-
Lcd "T = " 'wyświetl literę "T"
świetlaczu LCD zostały pokazane na listin- Locate 1 , 12 'ustaw kursor w 12 kolumnie stałych elementów. Do zamocowania
Lcd Chr(0) ; "C" 'wyświetl symbol stopnia
gu 6. Procedura kalkulacji otrzymanych wyświetlacza wygodnie będzie użyć poje-
If T < 10 And T >= 0 Then
z układu danych w celu uzyskania rozdziel- dynczego szeregu goldpinów. Przed osta-
'jeżeli temperatura mniejsza od 10
czości 0,1 stopnia jest wzorowana na progra- a większa od zera, to: tecznym zamontowaniem wyświetlacza
Locate 1 , 7'na pozycji 7
mie opublikowanym przez firmę MCS Elec- musimy bardzo dokładnie sprawdzić ja-
tronics na jej stronie www.mcselec.com. kość wykonania pozostałych połączeń,
Elektronika dla Wszystkich
17
Projekty AVT
ponieważ po zamontowaniu tego elementu
utracimy dostęp do położonych pod nim
ścieżek i punktów lutowniczych.
Po zmontowaniu płytki bazowej zegara
pozostanie nam już tylko połączenie jej
z płytą czołową, o ile oczywiście zechcemy
wykorzystywać ten dodatkowy element. Po-
łączenia możemy dokonać za pomocą czte-
rech śrubek M3, których łebki przylutujemy
do dużych punktów lutowniczych zlokalizo-
wanych na spodniej stronie płyty czołowej.
Podłużne punkty lutownicze umieszczone
także na spodniej stronie płyty czołowej mo-
gą posłużyć do przylutowania do nich pa-
sków laminatu lub cienkiej blachy stanowią-
cych boczne ścianki obudowy zegara.
Po wykonaniu tych wszystkich czynności
możemy już włączyć zasilanie zegara, czyli
dołączyć do złącza CON1 napięcie +5VDC,
stabilizowane. Jako zródło zasilania najle-
piej wykorzystać zasilacz tzw. "wtyczkowy"
o dowolnej obciążalności prądowej.
Pobór prądu przez nasz zegar jest bardzo
mały i z wyświetlaczem alfanumerycznym
bez podświetlania nie przekracza 20mA. Na Klawisz S4: Naciśnięcie tego klawisza pod- Rys. 2 Schemat montażowy
płytce umieszczone zostało dodatkowe złą- czas wyświetlania czasu, daty lub czasu bu-
cze, oznaczone jako BT1. Do tego złącza mo- dzenia powoduje przejście układu w tryb Rys. 3
żemy dołączyć baterię składającą się z czte- ustawiania wymienionych wartości. Powtór-
rech ogniw R6 lub AAA, pełniącą rolę zasila- ne naciśnięcie S4 powoduje powrót do wy-
nia awaryjnego, podtrzymującego wskazania świetlania danych.
zegara podczas przerw w zasilaniu z sieci. Klawisz S3: W trybie ustawiania cyklicznie
Funkcje klawiszy S1...S4 zwiększa wartość godzin lub dni miesiąca.
Klawisz S1: Kolejne naciśnięcia tego klawi- Podczas ustawiania korekty czasu zmniejsza
sza powodują przechodzenie układu do wy- jej wartość. W trybie wyświetlania danych
świetlania: czasu, daty, czasu ustawiania bu- włącza/wyłącza budzik.
dzika, wyświetlania temperatury. Klawisz S2: W trybie ustawiania cyklicznie
zwiększa wartość minut lub miesiąca. Pod-
Wykaz elementów
Rys. 4 czas ustawiania korekty czasu zwiększa jej
Kondensatory
wartość.
C1, C2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .33pF
C
1
,
C
2
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
3
3
p
F
Na rysunku 3 zo-
C3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1µF/16V
C
3
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
1
µ
F
/
1
6
V
stał pokazany sposób
C4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .100µF/16V
C
4
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
1
0
0
µ
F
/
1
6
V
połączenia termome-
C5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .100nF
C
5
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
1
0
0
n
F
tru DS1820 z ukła-
Rezystory
dem zegara. Prze-
PR1 . . . . . . . . . .potencjometr montażowy miniaturowy 1k&!
P
R
1
.
.
.
.
.
.
.
.
.
.
p
o
t
e
n
c
j
o
m
e
t
r
m
o
n
t
a
ż
o
w
y
m
i
n
i
a
t
u
r
o
w
y
1
k
&!
wód łączący termo-
R1, R3, R4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .10k&!
R
1
,
R
3
,
R
4
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
1
0
k
&!
metr z zegarkiem
R2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .4,7k&!
R
2
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
4
,
7
k
&!
może być praktycz-
Półprzewodniki
nie dowolnej długo-
D2, D1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1N4001
D
2
,
D
1
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
1
N
4
0
0
1
ści (do 100 m).
IC1 . . . . . . . . . . . . . .zaprogramowany procesor AT89C4051
I
C
1
.
.
.
.
.
.
.
.
.
.
.
.
.
.
z
a
p
r
o
g
r
a
m
o
w
a
n
y
p
r
o
c
e
s
o
r
A
T
8
9
C
4
0
5
1
Na rysunku 4
T1, T2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .BC548
T
1
,
T
2
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
B
C
5
4
8
przedstawiono sche- Dodatkowo układ termometru DS1820
D
o
d
a
t
k
o
w
o
u
k
Å‚
a
d
t
e
r
m
o
m
e
t
r
u
D
S
1
8
2
0
mat połączenia zega- Pozostałe
D
P
1
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
w
y
Å›
w
i
e
t
l
a
c
z
a
l
f
a
n
u
m
e
r
y
c
z
n
y
1
6
*
1
ra z modułem wy- DP1 . . . . . . . . . . . . . . . . .wyświetlacz alfanumeryczny 16*1
C
O
N
1
,
C
O
N
4
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
A
R
K
2
(
3
,
5
m
m
)
świetlaczy siedmio- CON1,CON4 . . . . . . . . . . . . . . . . . . . . . . . . .ARK2 (3,5mm)
CON2,CON3 . . . . . . . . . . . . . . . . . . . . . . . .ARK3 (3,5mm)
C
O
N
2
,
C
O
N
3
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
A
R
K
3
(
3
,
5
m
m
)
segmentowych LED
CON5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .4x goldpin
C
O
N
5
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
4
x
g
o
l
d
p
i
n
AVT-859. Drugi mo-
PK1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .OMRON 5V
P
K
1
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
O
M
R
O
N
5
V
duł AVT-859 podłą-
Q1 . . . . . . . . . . . . . . . . . . .rezonator kwarcowy 11.059MHz
Q
1
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
r
e
z
o
n
a
t
o
r
k
w
a
r
c
o
w
y
1
1
.
0
5
9
M
H
z
cza siÄ™ do linii iden-
S1, S2, S3, S4 . . . . . . . . . . . . .przycisk microswitch 16mm
S
1
,
S
2
,
S
3
,
S
4
.
.
.
.
.
.
.
.
.
.
.
.
.
p
r
z
y
c
i
s
k
m
i
c
r
o
s
w
i
t
c
h
1
6
m
m
tycznie.
Rząd 14 goldpinów do zamocowania wyświetlacza
R
z
Ä…
d
1
4
g
o
l
d
p
i
n
ó
w
d
o
z
a
m
o
c
o
w
a
n
i
a
w
y
Å›
w
i
e
t
l
a
c
z
a
Komplet podzespołów z płytką
Zbigniew Raabe
jest dostępny w sieci handlowej AVT
e-mail: zbigniew.
jako kit szkolny AVT-2488
raabe @edw.com.pl
Elektronika dla Wszystkich
18
Wyszukiwarka
Podobne podstrony:
elektr zegar sterujący z mikroprocesoremliczby pierwszeInternet Pierwsza pomocAnalizowanie działania układów mikroprocesorowychPowstał pierwszy, stabilny tranzystor na bazie pojedynczego atomuPIERWSZEPierwsza ofiara ukraińskiego faszyzmuTHE CLOCK zegar telling the time podawanie godzin i cwiczenia1997 05 Zegar meczowyPierwszy wyklad 14?z tłaFIT PL pierwszy w Polsce portal fitnesswięcej podobnych podstron