R14 R13 R12 R11 R10
testowej elementów R20, R13, T5 oraz R19, R14, T6 - patrz rysunek 108. Gdy jumpery J1, J2 będą zwierać punkty A, B, naruszenie linii LI, L2 spowoduje wyłączenie normalnie otwartych tranzystorów T5, T6, co można też wykorzystać do sygnalizacji stanu linii na wyświetlaczu W2. Jumpery zwierające punkty B, C wyłączą tranzystory T5, T6. Układ będzie też pracował bez jumperów J1, J2 — wtedy przy konfiguracji wejścia trzeba obowiązkowo wpisać jedynki do komórek PortD.5
i PortD.6, co zapewni „lekkie”, ale wystarczające podciągnięcie wejść i obniży pobór prądu. Gdybyś chciał praktycznie wykorzystać taki układ, powinieneś na wejściach linii dodać obwody ochronne, zabezpieczające przed uszkodzeniem wejść. Ściślej biorąc, w prawdziwej centralce należałoby wprowadzić więcej zmian, ale naszym celem jest nauka programowania, więc pominiemy te zagadnienia. W każdym razie działanie ma być następujące: rozwarcie przełącznika S2 (stan
egzemplarzami. Nie znaczy to, że częstotliwość bez powodu będzie „rozjeżdżać się” w tak szerokich granicach, niemniej generalnie stabilność oscylatora jest słaba. Oznacza to, że nie ma mowy o precyzyjnym odmierzaniu czasu za pomocą watch-doga. Na szczęście z reguły nie jest to potrzebne - w praktycznych zastosowaniach wystarczy „precyzja” rzędu ±50%. Przy zasilaniu napięciem 5V częstotliwość oscylatora wynosi typowo nieco powyżej IM Hz i występuje dość prosta zależność między pojemnością licznika a czasem trwania cyklu zliczania. Dlatego też twórca BA-SCOM-a, Mark Alberts, słusznie uprościł sprawę, i podczas pisania programu konfigurując watchdog podajemy przybliżony czas pełnego cyklu licznika, wyrażony w milisekundach:
CONFIG WATCHDOG = czas gdzie czas to jedna z ośmiu liczb: 16,32, 64 , 128,256,512 , 1024, 2048. Oznacza to, że czas cyklu watchdoga może wynosić od około 16ms do około 2 sekund. Oczywiście są to wartości przybliżone, z dokładnością ±20%, a może nawet jeszcze gorszą. Podkreślam to, żebyś czasem nie wpadł na „genialny” pomysł i nie próbował wykorzystywać watchdoga do precyzyjnego odmierzania czasu.
Po konfiguracji, na początek działania programu trzeba jeszcze włączyć watchdoga poleceniem Start Watchdog
Podczas prawidłowej pracy programu wykorzystującego watchdog w klasycznym trybie, licznik jest okresowo zerowany przez program i nie nastąpi reset procesora. Reset procesora nastąpi tylko wtedy, jeśli program przestanie pracować poprawnie i gdy przez zadany czas program nie wyzeruje licznika watchdoga. Aby okresowo zerować licznik watchdoga, obowiązkowo trzeba w programie umieścić polecenie
E L E M
B |
Nazwa |
Bit7 |
Brt6 |
Bit5 |
r Bit4 |
Bi»3 |
Blt2 |
Bit1 |
BitO |
Jllj |
SREG |
1 |
T |
H |
S |
V |
N |
Z |
c |
SPL |
SP7 |
SP6 |
SP5 |
SP4 |
SP3 |
SP2 |
SP1 |
SP0 | |
GIMSK |
INT1 |
INT0 | |||||||
GR |
■NfTFI |
BHTFO | |||||||
umsK |
lOEfl |
OOE1A |
tioei |
TOEO | |||||
IW |
TOW1 |
OCF1A |
ICF1 |
TOVD | |||||
ihcucr |
SE |
SU |
ISC11 |
RSCIO |
tscoi |
ISCOO | |||
TCCM |
CSQ2 |
CSOI |
CSOO | ||||||
lont |
polecenie Start WATCHDOG. Dodatkowy bit WDTOE (Watchdog
Tiirn-off Enable) dodano, żeby wykluczyć możliwość przypadkowego wyłączenia watchdoga przy nieprawidłowej pracy programu. Mianowicie watchdog nie da się wyłączyć przy próbie zwyczajnego wyzerowania bitu WDE. Aby wyzerować bit WDE trzeba najpierw ustawić (!) bit WDTOE, a właściwie wpisać stan wysoki jednocześnie do bitów WDTOE i WDE (mimo że wcześniej WDE=1), a dopiero potem w czasie krótszym niż cztery takty zegara wyzerować WDE. Przy programowaniu w asemblerze wymaga to przynajmniej dwóch rozkazów. Użytkownicy BASCOM-a nie muszą nawet o tym wiedzieć, bo do zablokowania watchdoga wykorzystają polecenie Stop WATCHDOG, które zawiera potrzebną procedurę - zostanie
Elektronika dla Wszystkich Grudzień 2003 33