INFO - FAQ - CC2-Forum - CCPro-Forum |
|
hi brauche wieder einmal eure hilfe: mein fertiges programm funktioniert komplett so wie ich es will aber die hardware bei der lüftersteuerung spielt nicht mit. also ich habe an meiner ccontrol eine relaisplatine mit der verschiedene geräte gesteuert werden konkret werden mit relais 1-4 verschiedene geräte gesteuert und mit relais 5-8 ein lüfter in verschiedene stuffen temperaturabhängig gedimmt. und da ist mein problem die dimmung funktioniert über einen spartrafo der mir 4 verschiedene spannungen auf 4 ausgängen ausgibt (80V 125V 175V 230V). wenn sich jetz der relais schaltzustand von zB 80V auf zB 125V verändert kommt es zu einem kurzschluss weil zwei ausgänge kurzzeitig über den lüfter verbunden werden!!!!!!!!!!! nun meine idee die relais müssen sich erst aus und dann wieder einschalten aber nur wenn sich der schalt zustand verändert sonst würde sich der lüfter jede sekunde an und aus schalten das bekommt dem nicht lange. hoffe ihr habt mein problem verstanden und könnt mir da weiterhelfen vielen dank schon mal quellcode: (betreffende stelle fett) 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 key 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 Sensor 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] 'Variablen Relaisplatine 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 aktzeit Word[9] define count word[8] define value word[12] define vrel1 bit[185] 'Relais 1 define vrel2 bit[186] 'Relais 2 define vrel3 bit[187] 'Relais 3 define vrel4 bit[188] 'Relais 4 define vrel5 bit[189] 'Relais 5 define vrel6 bit[190] 'Relais 6 define vrel7 bit[191] 'Relais 7 define vrel8 bit[192] 'Relais 8 'define relalt byte[22] define lastmin byte[19] define lcd_buf byte[20] define lcd_param byte[21] '*** ASCII-Codes *** define LEERZ &H20 define NULL &H30 define DOPPELPUNKT &H3A define KOMMA &H2C define GRAD &HDF define C &H43 define PUNKT &H2E define PROZENT &H25 '_____________________________________PROGRAMM______________________________________________________________ gosub SHTinit gosub LCD_INIT count = 0 open# for write 'Datei ruecksetzen close# rel=0 relalt=0 lastmin = 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/10;",";Feuchte mod 10;"%rH" else print "Fehler" 'print minute; ":"; second 'print "count="; 'print count pause 50 #Lüfter 'OK if temperatur >2600 then gosub r8 if temperatur >2500 and temperatur <=2600 then gosub r7 if temperatur >2400 and temperatur <=2500 then gosub r6 if temperatur <=2400 then gosub r5 #Heizer 'OK if temperatur >= 2200 then gosub r2aus if temperatur <= 1800 then gosub r2 #Befeuchter 'OK if feuchte >= 700 then gosub r3aus if feuchte <= 600 then gosub r3 #LichtTimer 'OK rel1=off aktzeit = hour *100 + minute if aktzeit >=0200 and aktzeit <2000 then gosub r1 #WasserTimer 'OK rel4=off aktzeit = hour *100 + minute if (aktzeit >=0800 and second > 20) and (aktzeit <0801 and second < 30) then gosub r4 if (aktzeit >=1800 and second > 20) and (aktzeit <1801 and second < 30) then gosub r4 goto next #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 gosub WRITETIME gosub speichern 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 #speichern #zeitprüfung if minute mod 10 = 0 and minute <> lastmin then gosub speicher ' wenn Minute voll und in dieser Sekunde nicht schon geschrieben lastmin = minute #auslesen if not key then gosub dump 'wenn Taste gedrueckt, dann ausgeben goto ende #speicher open# for append if filefree <= 6 then return #printer print# day print# hour print# minute print# Temperatur print# Feuchte print# rel close# count = count + 1 return #dump' Messwerte ausgeben count = 0 print "Uhrzeit", " Temperatur", "Feuchte ";"LHBP5678" open# for read #dumpnext if eof then goto löschen input# value if value>9 then print value;" "; else print "0";value;" "; input# value if value>9 then print value;":"; else print "0";value;":"; input# value if value>9 then print value;" "; else print "0";value;" "; input# value print value/100;",";abs((value/10))mod 10;abs(value mod 10);"°C", input# value print value/10;",";value mod 10;"%rH", input# value print ABS(vrel1);ABS(vrel2);ABS(vrel3);ABS(vrel4);ABS(vrel5);ABS(vrel6);ABS(vrel7);ABS(vrel8) goto dumpnext #löschen open# for write 'Datei ruecksetzen close# #ende return #WRITETIME lcd_param = 1 : gosub LCD_GOTOLINE lcd_param = NULL+Temperatur/1000 : gosub LCD_WRITECHAR lcd_param = NULL+(Temperatur mod 1000)/100 : gosub LCD_WRITECHAR lcd_param = KOMMA : gosub LCD_WRITECHAR lcd_param = NULL+(Temperatur mod 100)/10: gosub LCD_WRITECHAR lcd_param = NULL+Temperatur mod 10 : gosub LCD_WRITECHAR lcd_param = GRAD : gosub LCD_WRITECHAR lcd_param = C : gosub LCD_WRITECHAR lcd_param = LEERZ : gosub LCD_WRITECHAR lcd_param = NULL+Feuchte/100 : gosub LCD_WRITECHAR lcd_param = NULL+(Feuchte mod 100)/10 : gosub LCD_WRITECHAR lcd_param = KOMMA : gosub LCD_WRITECHAR lcd_param = NULL+Feuchte mod 10: gosub LCD_WRITECHAR lcd_param = PROZENT : gosub LCD_WRITECHAR lcd_param = 2 : gosub LCD_GOTOLINE lcd_param = NULL + hour / 10 : gosub LCD_WRITECHAR lcd_param = NULL + hour mod 10 : gosub LCD_WRITECHAR lcd_param = DOPPELPUNKT : gosub LCD_WRITECHAR lcd_param = NULL + minute / 10 : gosub LCD_WRITECHAR lcd_param = NULL + minute mod 10 : gosub LCD_WRITECHAR lcd_param = LEERZ : gosub LCD_WRITECHAR lcd_param = NULL + day / 10 : gosub LCD_WRITECHAR lcd_param = NULL + day mod 10 : gosub LCD_WRITECHAR lcd_param = PUNKT : gosub LCD_WRITECHAR lcd_param = NULL + month / 10 : gosub LCD_WRITECHAR lcd_param = NULL + month mod 10 : gosub LCD_WRITECHAR lcd_param = PUNKT : gosub LCD_WRITECHAR lcd_param = LEERZ : gosub LCD_WRITECHAR lcd_param = NULL+count/100 : gosub LCD_WRITECHAR lcd_param = NULL+(count mod 100)/10: gosub LCD_WRITECHAR lcd_param = NULL+count mod 10 : gosub LCD_WRITECHAR return #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" '------------------------------LCD---------------------- #LCD_INIT ' alle ports 0 lcd_port = OFF ' 8-Bit-Modus aktivieren lcd_param=&H38 : gosub LCD_WRITECMD ' mit 8-Bit-Command in 4-Bit-Modus umschalten lcd_port=&B00000010 tog lcd_e tog lcd_e ' ab jetzt 4-Bit-Modus lcd_param = &H28 : gosub LCD_WRITECMD lcd_param = &H0C : gosub LCD_WRITECMD ' Display loeschen #LCD_CLS lcd_param = &H02 : gosub LCD_WRITECMD lcd_param = &H01 : gosub LCD_WRITECMD return ' Zeilenwechsel #LCD_GOTOLINE if lcd_param = 1 then lcd_param = &H80 if lcd_param = 2 then lcd_param = &HC0 goto LCD_WRITECMD ' LCD-Kommando #LCD_WRITECMD lcd_buf = OFF goto LCD_WRITE ' Zeichenausgabe #LCD_WRITECHAR lcd_buf = &B00100000 ' Kommando oder Zeichen an Display senden #LCD_WRITE lcd_port = lcd_buf or (lcd_param shr 4) ' Hi-Nibble tog lcd_e tog lcd_e lcd_port = lcd_buf or (lcd_param and &H0F) ' Lo-Nibble tog lcd_e tog lcd_e return |
Antwort schreiben |