segmentów a tych dwóch wyświetlaczy. Podczas odmierzania czasu na wyjście świecą segmenty b, po naruszeniu linii L1 w czasie na wejście świecą segmenty f. Włączenie syreny alarmowej zaświeca segmenty g - poziome kreski i pozostają one zaświecone na stałe jako pamięć alarmu. Znajdź polecenia, które kasują świecenie tych segmentów - zwróć uwagę, że wyłączenie alarmu ze stanu czuwania do spoczynku nie gasi ich. Zostaną wygaszone przez naciśnięcie przycisku SI na płytce, ale tylko w stanie spoczynku (S2- rozwarty).
Zwróć uwagę, że wykorzystujemy tu watchdog w jego klasycznej roli. Jak wiesz, główną jego rolą jest przywrócenie poprawnej pracy procesora w przypadku, gdyby z jakichś powodów program, jak mówią niektórzy, „poszedł w krzaki”, czyli „wykrza-czył się”. Jeśli z powodu jakiejś usterki podczas pracy naszego programu licznik watch-doga nie zostanie wyzerowany przez dwie sekundy, nastąpi reset procesora. Zwróć uwagę, że po resecie do wszystkich bitów zmiennej Stan wpisujemy liczbę 0. Dzięki temu w razie zakłócenia w programie i po zadziałaniu watchdoga centralka automatycznie wejdzie w stan czuwania, a nie w stan spoczynku. Stracimy tylko ewentualną informację, czy wcześniej wystąpił alarm, przechowywaną w komórce Portb.6.
W naszej centralce watchdog wprawdzie powinien czuwać, ale my tego nie jesteśmy w stanie sprawdzić, bo nie potrafimy zaburzyć pracy programu. Mógłbyś w tym celu obniżać napięcie zasilania poniżej 2,7V. Jeśli chcesz - spróbuj. Prawdopodobnie zdziwisz się, przy jak niskim napięciu procesor jeszcze pracuje. A jeśli chcesz sprawdzić, że nasz wierny pies rzeczywiście czuwa, zmodyfikuj początek procedury obsługi przerwania (jedną linijkę) programu według rysunku 114 (COUc.bas). Wtedy naciśnięcie przycisku SI na płytce przez ponad 2 sekundy wymusi reakcję watchdoga i reset procesora.
Oczywiście, jeśliby taka centralka miała znaleźć zastosowanie praktyczne, należałoby ją znacznie zmienić, zarówno jeśli chodzi o sprzęt, jak i program. Tym niemniej mamy kolejny powód do zadowolenia - rozwiązaliśmy kolejne wzięte z życia zadanie i wykorzystaliśmy watchdog. Nadeszła pora na
zablokowanie pracy i wyzerowanie obwodów procesora (wewnętrzny reset). Sygnał z punktu X jest też doprowadzony na wejście zerujące licznika binarnego. Po zaniku stanu wysokiego w punkcie, ^ czyli po zaniku sygnału wymuszającego, procesor ® jeszcze nie zaczyna pracy - stan przerzutnika RS Z '
NM
' C021b Prosta centralka alarmowa - kompletny program
'dwie linie dozorowe LI -zwłoczna - PD.5, L2-natychmiastowa - PD.6 'ukryty przełącznik sterujący ■ PD 1 (S2)
'przycisk SI służy do kasowania wskazania alarmu na wyświetlaczu PD.2 i Q2 - wyjście do syreny alarmowe]
Dim Stan As By te '( bajt stanu centralki Stan 7 - Bit Niewykorzystany Stan.6 - Flaga Czasu Alarmu
Stan.S - Bit Pomocniczy Potrzebny Przy Włączaniu Czuwania
Stan 4 - Stan Klucza S2(zał / Wyłącz Alarm) 1 -spoczynek 0 -praca
Stan.3 - L2 - Linia Natychmiastowa
Stan.2 - Flaga Czasu Na Wyjście
Stan 1 - Flaga Czasu Na Wejście
Stan 0 - LI - Linia Z Opóźnieniem(zwłoczna) ')
Dim Czasalarmu As Byte Czaswyjscia As Byte Czaswejscia As Byte Enable Interrupts Enable Timerl Config Timor1 1 Timer Prescale * 64 Config Watchdog “ 2048 Start Watchdog 'reset po około 2 sekundach
On Timerl Co500ms Config Portb * Output ' portB - wyjście
Config Portd “ ^BO000100 'PD 2 — wyjście brzęczyka, reszta - wejścia
Portd - 255 'wszystkie wejścia podciągnięte PD 2*1 - syrena wyłączona
Portb ■ 127 'wygasza wyświetlacze ale kropki mogą świecić, bo PB 6*0
Stan * 0 'po resecie stan czuwania (l) - ze względu na watchdoga
Const Czasal ■ 10 240 'Czas alarmu liczba<255 240*0 5s * 120s - 2 minuty
Const Czaswy * 8 '50 'Czas na wyjście liczba<255 50*0.5s - 25 sekund
Const Czaswe * 6 '30 'Czas na wyłączenie alarmu liczba<255 30*0.5s * 15s
Do Loop End
główny program, jak zwykle
CoSOOms 'procedura obsługi przerwania od Timeral
Timerl * 34286 'co daje 31250*16mikrosekund, czyli O.Ssekundy
Reset Watchdog 'głaszczemy psa żeby się nie złościł
'najpierw sprawdzamy stan linii LI, L2 oraz wejść SI. S2
Stan 4 * Pind 1 'przepisz stan klucza
Stan 3 * Pind 6 'przepisz stan L2
Stan 0 * Pind 5 'przepisz stan LI
'tu mamy trzy liczniki czasu
If Stan 6 * 1 Then 'gdy flaga alarmu ustawiona
Portb 6*0 'włącz segmenty g wyświetlaczy
Decr Czasalarmu 'zmniejsz zawartość licznika
If Czasąlarmu * 255 Then Stan 6 0 zakończ odliczanie czasu
Elsę ‘gdy flaga wyzerowana, czyli w spoczynku
Czasalarmu * Czasal 'przygotuj do następnego cyklu
End If
If Stan 2*1 Then gdy flaga czasu na wyjście ustawiona Portb 1*0 'włącz segmenty b wyświetlaczy
Decr Czaswyjscia zmniejsz zawartość licznika
If Czaswyjscia * 255 Then Stan 2*0 'zakończ odliczanie czasu
Elsę 'gdy flaga wyzerowana czyli w spoczynku
Czaswyjscia "Czaswy 'przygotuj do następnego cyklu
Portb 1 * 1 'oraz wygaś segmenty b
End If
If Stan 1-1 Then 'gdy flaga czasu na wejście ustawiona
Portb 5*0 'włącz segmenty f wyświetlaczy
Decr Czaswejscia 'zmniejsz zawartość licznika
If Czaswejscia * 255 Then
Stan 1*0 'zakończ odliczanie czasu na wejście
Stan 6*1 włącz alarm
End If
Elsę 'gdy flaga wyzerowana, czyli w spoczynku
Czaswejscia * Czaswe 'przygotuj do następnego cyklu
Portb 5*1 'wygaś segmenty f - wskaźnik czasu na wejście
End If
'tu sprawdzamy stan centralki.
If Stan 4 * 1 Then 'gdy centralka wyłączona czyli klucz S2 - rozwarty Stan “ &B00110000 'oprócz wcześniej ustawionego bitu Stan.5 (S2)
' dodatkowo ustawiamy bit pomocniczy Stan.5, a resztę zerujemy If Pind 0*0 Then Portb " 127 'gasi segment g - kasuje pamięć alarmu
Elsę 'praca centralki klucz S2 - zwarty
If Stan 5*1 Then ' jednorazowo po włączeniu czuwania
Stan 2*1 'zablokujemy linię zwłoczhą i odmierzymy czas na wyjście Stan 5*0 'jednorazowo więc wyzeruj bit pomocniczy •
End If
If Stan > 7 Then gdy pobudzona linia natychmiastowa L2 - zawsze włącz alarm Stan 6*1 zacznij odmierzać czas alarmu Elsę 'gdy L2 nie pobudzona, wtedy Stan-0 .7 i można
If Stan “ 1 Then Stan 1*1 'zacząć odmierzać czas na wejście
End If End If
Portb 0 * Stan 4 'segmenty a świadczą o włączeniu czuwanie centralki
Portd 2 * Not Stan 6 'ewentualnie włącz syrenę dołączoną do Q2
Return
tonst czaswe * b
ju czas na wyłączenie alarmu iiczoa<2bb 3U*u.bs * ibs
Do Loop End 'główny program, jak zwykle
CoSOOms 'procedura obsługi przerwania od Timeral
Timerl * 34286 'co daje 31250*16mikrosekund. czyli O.Ssekundy ^
If Pind 0 * 1 Then Reset Watchdog 'tylko gdy SI w spoczynku
'naciśnięcie SI przez ponad 2 sekundy wywołą reakcję watchdoga i reset procesora
'najpierw sprawdzamy stan linii LI L2 oraz wejść SI. S2
Qt-«rł A o Pi rvH 1 1 4»r-.i <*:'? 1/ 1 nr-.=*
nie zmienia się. Zaczyna pracę jedynie licznik binarny. Stan przerzutnika RS zmieni się dopiero wtedy, gdy licznik binarny zliczy odpowiednią liczbę impulsów (zależnie od stanu bitu FSTR) -wtedy stan wysoki na wejściu R wyzeruje prze-rzutnik i umożliwi rozpoczęcie pracy programu.
Tabela 2 pokazuje wartości kluczowych parametrów związanych z obwodami rese-tu przy napięciu zasilania 5V.
POR. Procedura zerowania po włączeniu
Tabela 2
► |
1 Oznaczenie |
Parametr |
Min |
l\p Max Jednostka 1 | |
r |
VPOT |
Napięcie progowe POR przy włączaniu |
1,0 |
1,4 1,8 |
V |
NH |
Napięcie progowe POR przy wyłączaniu |
0,4 |
0,6 0,8 |
V | |
> |
VRST |
Napięcie progowe końcówki RESET |
- 0,85VCC |
V | |
Td |
FSTR=0 |
11 |
16 21 |
ms | |
Td |
FSTR=1 |
0,25 |
0,28 0,31 |
ms |
zasilania, nazywana POR (power-on reset), zaczyna się, gdy napięcie zasilania wzrośnie powyżej pewnego progu. Według karty katalogowej to napięcie progowe, oznaczane V|>ot. wynosi typowo l,4V (l,0V...l,8V, zależnie od egzemplarza procesora). Dopiero po przekroczeniu tego napięcia zaczyna się właściwa procedura przygotowująca procesor do pracy. Zaczyna pracować zarówno oscylator RC watchdoga, jak też oscylator kwarcowy taktujący mikroprocesor. Procesor jednak jeszcze nie realizuje programu. Pracuje oscylator RC oraz dodatkowy licznik binarny zapewniający opóźnienie. Dopiero gdy w czasie Td licznik ten zliczy 16384 impulsów oscylatora RC, zaczyna się
36 Grudzień 2003 Elektronika dla Wszystkich