HCC Forth-gg
27 nov 2002

Schemerschakelaar

Willem Ouwerkerk

De comparator in de AT89C2051

De AT89C2051 zoals gebruikt in het 'Egel werkboek heeft naast digitale in en uitgangen ook een comparator ingebouwd (een comparator vergelijkt twee analoge ingangs spanningen en verandert zijn uitgang van laag naar hoog als het signaal op de + ingang groter wordt dan dat op de - ingang en vice-versa). De comparator zit aangesloten op pen P1.0 (+) en P1.1 (-). De uitgang zit intern doorverbonden met pen 6 van poort-3.

We maken een schemerschakelaar

De comparator gaan we nu gebruiken om het omgevingslicht te meten en afhankelijk daarvan een lamp aan en uit te schakelen. We doen dit door op P1.1 (AIN1) een spanningsdeler aan te sluiten bestaande uit een LDR en een gewone weerstand, op P1.0 (AIN0) sluiten we een regelbare weerstand aan, hiermee stellen we het 'schemer' niveau in. Op P3.5 sluiten we vervolgens een solid-state relais aan via een weerstand, deze schakelt de lamp aan/uit. Tenslotte sluiten we een signalerings LED via een weerstand aan op P3.2.
Het programma gebruikt een korte vertraging en P3.7 om een hysterese aan de schakeldrempel toe te voegen hiermee wordt voorkomen dat rond zonsop- en zonsondergang de lamp gaat knipperen. De LED gaat bij het opstarten even knipperen en werkt daarna tegengesteld aan de lamp. D.w.z. dat de LED aan is als de lamp uit is en andersom.

Over de software

De software schakelt de lamp onmiddelijk in als het lichtniveau laag is. Zodra het licht wordt, wordt er een timer gestart die er voor zorgt dat de lamp na twee seconden uitgeschakeld wordt. Korte lichtveranderingen schakelen de lamp dan niet uit.

b4schemer.frt (ByteForth source)
 \ De schemerschakelaar neemt 133 bytes in beslag.

 89C2051  TARGET          \ Zet doel chip
 ASSEMBLER
 P3: .2 BIT-SFR LED       \ Led uitgang
 P3: .5 BIT-SFR LAMP      \ Solid state relaisuitgang
 P3: .6 BIT-SFR DONKER?   \ Schemerschak. uitgang
 P3: .7 BIT-SFR HYSTERESE \ Wijzig schakelniveau
 WORK
 VARIABLE TIMER           \ Afvaltijd bij zonsopgang

 : KNIPPER       ( -- )   \ Toon opstarten
     5 FOR                \ Knipper 5 maal
     SET LED  200 MS
     CLEAR LED 200 MS
     NEXT ;

 : LAMP-AAN      ( -- )
     SET HYSTERESE        \ Verhoog lichtgrens
     SET LED              \ Led uit
     CLEAR LAMP           \ Lamp aan
     CLEAR TIMER ;        \ Reset afvaltimer

 : LAMP-UIT      ( -- )
     FROM TIMER 10 = IF   \ 2 seconden voorbij?
         CLEAR HYSTERESE  \ Verlaag donkergrens
         CLEAR LED        \ Led aan
         SET LAMP         \ Lamp uit
     ELSE
         INCR TIMER       \ Stel afschakelen uit
     THEN ;

 : SCHEMERSCHAKELAAR ( -- )
     SETUP  KNIPPER
     CLEAR TIMER         \ Start schemerschakelaar
     BEGIN
         DONKER? IF      \ Wordt het donker?
             LAMP-AAN    \ Ja, ...
         ELSE
             LAMP-UIT    \ Nee, ...
         THEN
         200 MS          \ Wacht even
     AGAIN ;

 ' SCHEMERSCHAKELAAR  RESET-VEC  SET-VECTOR

egeltje top