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: Relais Programm testen Kategorie: Programmierung Basic (von mibr85 - 31.08.2005 18:24)
 Als Antwort auf Re: Relais Programm testen von ManfredW - 31.08.2005 18:10
mibr85 nutzt:  CC1-Unit V1.1

>
> > Hier noch eine frage.
> > warum gehen wenn die temperatur steigt die relais nacheinander an und bleiben alle an erst wenn die temperatur sink gehen nach einander die jeweiligen relais wieder aus.
> > ich will aber das jeweils nur ein relais angeht.
>
> Hallo,
> anstelle der Temperatur gib zum Testen einen festen Wert vor.
> Wenn jetzt nur ein Relais schaltet, ist die Ausgaberoutine in Ordnung.  
also es ist ja alles in ordnung bis darauf das wenn
> > #Lüfter
> 'Einfügung für Test ohne Temperatur
> rel = 1  'Relais1,  =4 für Relais3, =8 für Relais4, usw.  
> goto next
> #zurück
> return
also es ist ja alles in ordnung bis darauf: temp =z.B.2540 rel8=an
dann lasse ich temp steig sagen wir auf 2650 dann geht rel7 an aber rel8 eben nicht aus und das soll es aber.
bei temp >3200 sind alle relais an es soll aber nur rel1 an sein und alle andern wieder aus

> >  rel = 0
> >  if temperatur >3200 then rel1=on
> >  if temperatur >3100 and <=3200 then rel2=on
> >  if temperatur >3000 and <=3100 then rel3=on
> >  if temperatur >2900 and <=3000 then rel4=on
> >  if temperatur >2800 and <=2900 then rel5=on
> >  if temperatur >2700 and <=2800 then rel6=on
> >  if temperatur >2600 and <=2700 then rel7=on
> >  if temperatur >2500 and <=2600 then rel8=on
> >  goto next
> >  #zurück
> > return
>
> Weitere Möglichkeiten
> Sicherstellen, dass nur ein Relais schaltet.
> > ' rel = 0  entfällt
> 'Bitmuster auf rel setzen
> if temperatur >3200 then rel = &B 00000001
> if temperatur >3100 and <=3200 then rel=&B 00000010
> usw.
das geht bei mir nicht weil ich erst alle relais setzen mus und dan erst weiter geben will
mein fertiges programm soll dann ca so aussehen
(wobei der heizer und der befeuchter schon 1A funktionieren nur der rest noch nicht)



'--------------------------------------------------------------
'Digitalports
define Clock Port[1] 'Serial clock input für SHT75
define Data Port[2] 'Serial data für SHT75
define DS Port[3]'DATA IN für Relaisplatine
define SH Port[4] 'Shift CLK für Relaisplatine
define ST Port[5] 'Stotre CLK für Relaisplatine
define Tür port[6] 'Türschalter auf/zu
define Licht port[7] 'Lichtstatus an/aus
define FREI port[8] 'Frei
define lcd_rs port[14] 'LCD-Port
define lcd_rw port[13] 'LCD-Port
define lcd_e port[15] 'LCD-Port

define lcd_port byteport[2] 'LCD-Port


'Variablen
define tempW word[1] 'Überlappung mit Byte 1 & 2 !!!!
define temp  byte[1] 'temporäres Datenbyte
define temp2 byte[2] 'temporäres Datenbyte
define i     byte[3]
define ack   byte[4]

define dataW   word[3]
define dataWhi byte[5]
define dataWlo byte[6]

define Temperatur word[4]
define Feuchte word[5]

define tempW2  word[6]




define rel byte[13] 'Byte-Puffer für rel1 bis rel8
define rel1 bit[97] 'Relais 1
define rel2 bit[98] 'Relais 2
define rel3 bit[99] 'Relais 3
define rel4 bit[100] 'Relais 4
define rel5 bit[101] 'Relais 5
define rel6 bit[102] 'Relais 6
define rel7 bit[103] 'Relais 7
define rel8 bit[104] 'Relais 8
define rn byte[14] 'Relaisnummer



define lcd_buf byte[15]
define lcd_param byte[16]

define aktzeit Word[9]



'_____________________________________PROGRAMM______________________________________________________________



gosub SHTinit
rel=0

'____________________________________________TEMPERATURSENSOR________________________________________________________

#messen
 Temperatur = SHTgettemp
 Feuchte = SHTgethyg
 put 12
 print "Temperatur:",
 print Temperatur '/100;",";abs((Temperatur/10))mod 10;abs(Temperatur mod 10);"°C"
 print "Feuchte: ",
 if Feuchte>=0 then print Feuchte else print "Fehler" '/10;",";Feuchte mod 10;"%rH" else print "Fehler"
 print minute; ":"; second
 pause 50
 



#Lüfter
 rel5=off
 rel6=off
 rel7=off
 rel8=off
 if temperatur >2700 then gosub r8
 if temperatur >2600 and <=2700 then gosub r7
 if temperatur >2500 and <=2600 then gosub r6
 if temperatur <=2500 then gosub r5 'Relais: 5=stufe 1 temp<23°C, 6=stufe 2 temp>23°C, 7=stufe 3 Temp>25°C, 8=stufe 4 temp>=28°C




#Heizer 'ok
 if temperatur >= 2200 then gosub r2aus' temp <=17°C an, temp>= 22°C aus
 if temperatur <= 1700 then gosub r2
 



#Befeuchter 'OK
 if feuchte >= 800 then gosub r3aus'RLF <= 30% an, RLF >=60% aus
 if feuchte <= 750 then gosub r3



#LichtTimer
 rel1=off
 aktzeit = hour *100 + minute
 if  aktzeit >= 0001 and <=0002 then gosub r1

#WasserTimer
 rel4=off
 aktzeit = hour *100 + minute
 if  aktzeit >= 0003 and <=0004 then gosub r4


goto next
 


'______________________________________________________RELAIS START________________________________________________

 #r1
  rel1=on
 return
 #r2
  rel2=on
 return
 #r2aus
  rel2=off
 return
 #r3
  rel3=on
 return
 #r3aus
  rel3=off
 return
 #r4
  rel4=on
 return
 #r5
  rel5=on
 return
 #r6
  rel6=on
 return
 #r7
  rel7=on
 return
 #r8
  rel8=on
 return

#next
 gosub shift
 pulse ST
goto messen

#shift 'Routine zum seriellen Senden der Daten zur Scheiberegistererweiterung
 for rn=7 to 0 step -1
  DS=(rel shr rn) and 1
  pulse SH
 next
return
'____________________________________________________RELAIS ENDE_________________________________________________







#SHTinit
 deact Data
 Clock = 0
 for i=0 to 10 pulse Clock
return

#SHTstart
 Clock =-1
 Data  = 0
 Clock = 0
 Clock =-1
 deact Data
 Clock = 0
return

#SHTwrite
 for i=0 to 7
  if (temp shl i) and &h80 then deact Data else Data = 0
  pulse Clock
 next i
 deact Data
 Clock = -1
 temp=(Data=0)
 Clock =0
return temp

#SHTread
 temp=0
 for i=0 to 7
  Clock =-1
  temp=(temp shl 1) or (Data and 1)
  Clock = 0
 next i
 if ack then Data = 0 else deact Data
 pulse Clock
 deact Data
return temp

#SHTreadint
 tempW = timer
 #SHTwloop
  if timer-tempW>=50 then return &hF000
 if Data then goto SHTwloop
 ack = 1
 dataWhi=SHTread 'High-Byte
 ack = 0
 dataWlo=SHTread 'Low-Byte
return dataW

#SHTgettemp
 gosub SHTstart
 temp = &b00011 : gosub SHTwrite
 dataW = SHTreadint-4000
return dataW

#SHTgethyg
 gosub SHTstart
 temp = &b00101 : gosub SHTwrite
 Feuchte=SHTreadint
 if Feuchte and &h8000 then return -1
 tempW = Feuchte shr 4
 i = Feuchte mod 16
 looktab shtab,tempW,tempW2
 tempW = tempW - 1
 looktab shtab,tempW,tempW
 tempW2 = ((tempW2 - tempW) * i) shr 4
 Feuchte = tempW + tempW2
return Feuchte

table shtab "sht.tab"



 Antwort schreiben

Bisherige Antworten:

Re: Relais Programm testen (von ManfredW - 31.08.2005 19:03)