Das Open-Control-Projekt - Die Alternative zur C-Control-I


Das Forum zur C-Control-1
Welche C-Control-Varianten existieren?
Übersicht - Suchen - Neueste 50 Beiträge - Neuer Beitrag - Login - Registrieren
INFO - FAQ - CC2-Forum - CCPro-Forum 

 Re: einmaliges Ereignis Kategorie: Hardware (von Kay - 2.02.2005 13:14)
 Als Antwort auf einmaliges Ereignis von Hans - 2.02.2005 12:29
manfred gab den entscheidenden hinweis schon: merker
ein bit, das man setzt und das im weiteren programmablauf
zur verhinderung anderer aktionen abgefragt werden kann.

aktuell bastle ich gerade an einer zeitgesteuerten, langsamen
auf- und abdimmung für eine terrarienbeleuchtung. weil zur
vermeidung von überhitzung vor allem im sommer der dimmer
ggf. am tag heruntergeregelt werden muss, muss ausserhalb
der "sonnenauf- und abgänge" ebenfalls weiterer eingriff in den
ausgabewert möglich sein. es war ohne merker nicht machbar:
das programm im anhang ist nur der dimmerbezogne teil.
wenn du versuchst, die funktionsweise zu durchschauen,
achte auf die beiden merker (flags)
dimtarget und diminproc


define dimtimeconst   51 'Dimstufenzeit in 20-ms-Steps
define dimhightime  0700 'Einschaltzeit Dimmer in hhmm
define dimlowtime   0703 'Auschaltzeit Dimmer  in hhmm

define timerini  word

define i         byte    'Schleifenzaehler
define j         byte    'Auslesepuffer
define dimlev    byte    'Dimmerpegel (nur 0...20 zulaessig!)

define dimtarget bit[191] 'Flag: aktuelles Dimmer-Endziel
define diminproc bit[192] 'Flag: on  = ein Dimm-Prozess laeuft

define dimport   port[14]

dimport = off

#main 'Hauptschleife
   gosub DIM
goto main

#DIM
   if diminproc then dimtest
   if hour * 100 + minute = dimhightime then set_dimup
   if hour * 100 + minute = dimlowtime  then set_dimdown
   return
   #set_dimup
      dimtarget = on
      diminproc = on
      goto dimup
   #set_dimdown
      dimtarget = off
      diminproc = on
      goto dimdown
   #dimtest
      if abs (timer - timerini) < dimtimeconst then return
      if dimtarget then dimup
   #dimdown
      if dimlev > 0 then dimlev = dimlev - 1
      goto dimendend
   #dimup
      if dimlev < 20 then dimlev = dimlev + 1
   #dimendend
      sys &h12c,dimlev 'Dimmerausgabe setzen
      if dimlev =  0 then diminproc = off
      if dimlev = 20 then diminproc = off
      timerini = timer
return


allen, die mit dem dimmer vertraut sind und sich über meine
umgangsweise mit ihm wundern, sei gesagt: ich habe einen
anderen treiber gebastelt. warum und wie, werde ich innerhalb
eines mittlerweile recht alten threads hier dieser tage noch genau
beschreiben.

 Antwort schreiben

Bisherige Antworten: