INFO - FAQ - CC2-Forum - CCPro-Forum |
|
Hallo zusammen, ich werde mal mein zusammengeschustertes Programm hier reinstellen. Ich habe folgendes Problem: Immer wenn meine Pumpe ausgeht, sprich wenn K1 abfällt, bricht die Spannung zusammen, sodass ich wieder Start drücken muss. Kann das ein Programmierfehler sein? Oder eher weil die Eheimpumpe ca. 25cm von der Station weg steht? Wobei versetzen kann ich da nix, weil das Zeug ist in einem Unterschrank. Ich bin im übrigen über alle Tips, Ratschläge und Verbesserungen bezüglich des Programmes sehr dankbar. define cmd byte[3] define i byte[2] define LCDLight Bit[192] define LCD_RS_0 &B10 : define LCD_RS_1 &B11 :define LCD_nowrite &B0 define prnLCD &h197 define PCFread &h10e define PCFwrite &h101 define PCF 64 define wert byte[1]' Byte zum Zwischenspeichern der define P0 Bit[1] ' Portzustände. Es kann jedes define P1 Bit[2] ' beliebige Byte vom RAM gewählt define P2 Bit[3] ' werden. define P3 Bit[4] define P4 Bit[5] define P5 Bit[6] define P6 Bit[7] define P7 Bit[8] 'ASCII Define A_ &H41 : Define B_ &H42 : Define C_ &H43 : Define D_ &H44 : Define E_ &H45 Define F_ &H46 : Define G_ &H47 : Define H_ &H48 : Define I_ &H49 : Define J_ &H4A Define K_ &H4B : Define L_ &H4C : Define M_ &H4D : Define N_ &H4E : Define O_ &H4F Define P_ &H50 : Define Q_ &H51 : Define R_ &H52 : Define S_ &H53 : Define T_ &H54 Define U_ &H55 : Define V_ &H56 : Define W_ &H57 : Define X_ &H58 : Define Y_ &H59 : Define Z_ &H5A Define ak &H61 : Define bk &H62 : Define ck &H63 : Define dk &H64 : Define ek &H65 Define fk &H66 : Define gk &H67 : Define hk &H68 : Define ik &H69 : Define jk &H6A Define kk &H6B : Define lk &H6C : Define mk &H6D : Define nk &H6E : Define ok &H6F Define pk &H70 : Define qk &H71 : Define rk &H72 : Define sk &H73 : Define tk &H74 Define uk &H75 : Define vk &H76 : Define wk &H77 : Define xk &H78 : Define yk &H79 : Define zk &H7A Define SPACE &H20 : Define MINUS &H2D : Define GLEICH &H3D : Define DPP &H3A Define Dot &H2E Define Line1 &H80 : Define Line2 &HC0 'Für 2x20 LCD 'Define Line1 &H80 : Define Line2 &HC0 : Define Line3 &H90 : Define Line4 &HD0 'Für 4x16 LCD '----------------------------------------- define Temp2 ad[6] 'Tempsensor 2 define sck port[3] 'LF define dataout port[4] 'LF define Rel1 port[1] 'Relais define Rel2 port[2] define Rel3 port[5] define Rel4 port[6] define K1 port[7] 'Pumpe define K2 port[8] define wert12 word [7] define f1 word [8] 'eingefügt define ts word [9] define shtvalue word [10] define xy word [11] define cme byte [4] define k byte [5] define j byte [6] define test1 byte [7] define test2 byte [8] define test3 byte [9] 'T1 define test4 byte [10] define test5 byte [11] define test6 byte [12] deact Rel1 'Rain deact Rel2 'T5 deact Rel3 'UV deact Rel4 'Heizung K1=OFF 'Pumpe K2=OFF ' frei (Lüftung) '---------------------------------------- gosub LCD_Init LCDLight=ON : gosub setPCFLight #FunkUhrFehlt If year > 90 then goto FunkUhrFehlt #loop 'Hauptprogramm 'print wert12 ; wert12 = hour *100 + minute ' aktuelle Uhrzeit zwischenspeichern für die Auswertung '----------------------------------------- gosub sht11 gosub Rain gosub T5 gosub UV gosub Heizung gosub Pumpe '----------------------------------------- cmd=Line1 : gosub LCD_CMD cmd=hour : gosub LCD_Zahl2null cmd=DPP : gosub LCD_Char cmd=minute : gosub LCD_Zahl2null cmd=Line1+7 : gosub LCD_CMD cmd=&H54 : gosub LCD_Char cmd=&H3D : gosub LCD_Char cmd=test3 : gosub LCD_zahl2 cmd=&h2c : gosub LCD_Char 'Komma cmd=test4 : gosub LCD_zahl2null sys prnLCD,LCDLight,0,PCF : print "/"; cmd=test5 : gosub LCD_zahl2 cmd=&h2c : gosub LCD_Char 'Komma cmd=test6 : gosub LCD_zahl2null cmd=Line2 : gosub LCD_CMD cmd=day : gosub LCD_Zahl2null cmd=Dot : gosub LCD_Char cmd=month : gosub LCD_Zahl2null sys prnLCD,LCDLight,0,PCF : print ".20"; cmd=year : gosub LCD_Zahl2null cmd=Line2+12 : gosub LCD_CMD cmd=&H4C : gosub LCD_Char cmd=&H46 : gosub LCD_Char cmd=&H3D : gosub LCD_Char cmd=test1 : gosub LCD_zahl2 cmd=&h2c : gosub LCD_Char 'Komma cmd=test2 : gosub LCD_zahl2null pause 45 cmd=Line1 : gosub LCD_CMD cmd=hour : gosub LCD_Zahl2null cmd=DPP : gosub LCD_Char cmd=minute : gosub LCD_Zahl2null cmd=Line1+7 : gosub LCD_CMD cmd=&H54 : gosub LCD_Char cmd=&H3D : gosub LCD_Char cmd=test3 : gosub LCD_zahl2 cmd=&h2c : gosub LCD_Char 'Komma cmd=test4 : gosub LCD_zahl2null sys prnLCD,LCDLight,0,PCF : print "/"; cmd=test5 : gosub LCD_zahl2 cmd=&h2c : gosub LCD_Char 'Komma cmd=test6 : gosub LCD_zahl2null cmd=Line2 : gosub LCD_CMD cmd=day : gosub LCD_Zahl2null cmd=Dot : gosub LCD_Char cmd=month : gosub LCD_Zahl2null sys prnLCD,LCDLight,0,PCF : print ".20"; cmd=year : gosub LCD_Zahl2null cmd=Line2+12 : gosub LCD_CMD cmd=&H4C : gosub LCD_Char cmd=&H46 : gosub LCD_Char cmd=&H3D : gosub LCD_Char cmd=test1 : gosub LCD_zahl2 cmd=&h2c : gosub LCD_Char 'Komma cmd=test2 : gosub LCD_zahl2null pause 45 goto loop '-----------------------es folgt eingefügtes #Rain if wert12 >= 1840 then goto RainAus if wert12 >= 1839 and second >= 50 then goto RainAus ' Uhrzeit lässt sich sekundengenau vorgeben if wert12 >= 1839 and second >= 05 then goto RainEin ' Einschaltung von 15 bis 37 Sekunden Uhrzeit if wert12 >= 1839 then goto RainAus if wert12 >= 1137 then goto RainAus if wert12 >= 1136 and second >= 50 then goto RainAus ' Uhrzeit lässt sich sekundengenau vorgeben if wert12 >= 1136 and second >= 05 then goto RainEin ' Einschaltung von 15 bis 37 Sekunden Uhrzeit if wert12 >= 1136 then goto RainAus if wert12 >= 606 then goto RainAus if wert12 >= 605 and second >= 50 then goto RainAus ' Uhrzeit lässt sich sekundengenau vorgeben if wert12 >= 605 and second >= 05 then goto RainEin ' Einschaltung von 15 bis 37 Sekunden Uhrzeit if wert12 >= 605 then goto RainAus #RainAus deact Rel1 goto EndeRain #RainEin Rel1 = off #EndeRain '---------------------------------------------- #T5 if wert12 >= 2150 then goto T5Aus if wert12 >= 610 then goto T5Ein #T5Aus deact Rel2 goto EndeT5 #T5Ein Rel2 = off #EndeT5 '-------------------------------------------- #UV if wert12 >= 2200 then goto UVAus if wert12 >= 600 then goto UVEin #UVAus deact Rel3 goto EndeUV #UVEin Rel3 = off #EndeUV '--------------------------------------------- #Heizung if test3 >= 26 then goto HeizungAus if test3 >= 10 then goto HeizungEin #HeizungAus deact Rel4 goto EndeHeizung #HeizungEin Rel4 = off #EndeHeizung #Pumpe if wert12 >= 1850 then goto PumpeAus if wert12 >= 1845 then goto PumpeEin #PumpeAus K1=Off goto EndePumpe #PumpeEin K1=On #EndePumpe #sht11 Cme = &B00000011 'temp gosub Getit shtvalue=shtvalue-4000 test3 = shtvalue/100 test4 = shtvalue mod 100 test5 = (temp2*5-250)/10 test6 = (temp2*5-250) mod 10 Cme = &B00000101 'hyg gosub Getit ts = shtvalue / 16 k = shtvalue Mod 16 looktab shtab,ts,xy ts=ts-1 looktab shtab,ts,f1 xy = (xy - f1) * k /16 shtvalue=f1 + xy if shtvalue>=1000 then shtvalue=999 test1 = shtvalue/10 test2 = shtvalue mod 10 return #getit 'first reset comm. sck=0 Dataout=1 For k = 1 To 12 Sck=1 gosub wait Sck=0 gosub wait Next 'start sequence sck=1 gosub wait Dataout=0 gosub wait Sck=0 gosub wait Sck=1 gosub wait Dataout=1 gosub wait Sck=0 gosub wait 'Shiftout command for k=0 to 7 if (cme and 128)=0 then dataout=0 else dataout=1 sck=1 gosub wait sck=0 gosub wait cme=cme shl 1 next deact dataout sck=1 gosub wait Sck=0 gosub wait #bitwait if dataout<>0 then goto bitwait 'Shiftin data MSB gosub shiftin shtvalue = xy Dataout=0 'ack Sck=1 gosub wait Sck=0 gosub wait deact dataout 'Shiftin Data LSB gosub shiftin shtvalue=shtvalue shl 8 shtvalue = shtvalue Or xy return #shiftin xy=0 for k=0 to 7 sck=1 gosub wait j=abs(dataout) sck=0 gosub wait xy=xy shl 1 xy=xy or j next return #wait return table shtab "sht.tab" '----PCF8574-Aufrufe------------------------- define pop DA[1] 'Trick zum auslesen des Stacks(siehe ccintern.dharlos.de) 'Byte zum PCF8574 senden: sys PCFwrite,wert,PCF 'Byte vom PCF8574 lesen: sys PCFread,PCF+1 'Leseadresse=65 wert=pop 'Einzelport am PCF8574 setzen: sys PCFread,PCF+1 wert=pop P2 = off 'z.B P2 am PCF8574 auf Low setzen sys PCFwrite,wert,PCF 'Einzelport am PCF8574 umschalten(toggle): sys PCFread,PCF+1 wert=pop P0 = not P0 'z.B P0 am PCF8574 togglen sys PCFwrite,wert,PCF '----LCD-Funktionen-------------------------- 'Zahlausgaben #LCD_Zahl3 ' 3 stellige Zahl ausgeben if cmd > 99 then sys &h124,LCDLight,(cmd/100)+&h30,PCF else sys &h124,LCDLight,&h20,PCF #LCD_Zahl2 ' 2 stellige Zahl ausgeben if cmd > 9 then sys &h124,LCDLight,((cmd/10) mod 10)+&h30,PCF else sys &h124,LCDLight,&h20,PCF #LCD_Zahl1 '1 stellige Zahl ausgeben sys &h124,LCDLight,(cmd mod 10)+&h30,PCF return #LCD_Zahl3null ' 3 stellige Zahl ausgeben mit führender Nullen z.B.: 025 od. 005 sys &h124,LCDLight,(cmd/100)+&h30,PCF #LCD_Zahl2null ' 2 stellige Zahl ausgeben mit führender Null z.B.: 05 sys &h124,LCDLight,((cmd/10) mod 10)+&h30,PCF goto LCD_Zahl1 #LCD_CLS sys &h12e,LCDLight,&b00000001,PCF return #LCD_CMD sys &h12e,LCDLight,cmd,PCF return #LCD_Char sys &h124,LCDLight,cmd,PCF return #LCD_Init sys &h142,0,PCF sys &h12e,0,&b00111000,PCF sys &h138,0,&b00100000,PCF sys &h12e,0,&b00101000,PCF sys &h12e,0,&b00001110,PCF sys &h12e,0,&b00000001,PCF sys &h12e,0,&b00000110,PCF return #setPCFLight sys &h142,LCDLight,0,PCF return 'syscode "pcflcd_pcf.s19" Vielen Dank für eure Unterstützung...Andreas |
Antwort schreiben |