#picaxe 08m2 ; SOUMRAKOVY SPINAC ; Iniciace disablebod ; zakaz sledovani UN SETFREQ K250 ; snizeni kmitoctu (odberu PIC) PULLUP %00001000 ; plullup k pinu C.3 low C.0 ; volny I/O low C.1 ; elektroda G = GND (TY vypnut) low C.2 ; volny I/O ;C.3 = pullup ; volny vstup ;C.4 = FT ; fotocidlo symbol Hmez =b0 ; Horni mez (pro sepnti TY1) symbol Dmez =b1 ; Dolni mez (pro vypnuti TY1) symbol Hyst =b2 ; hysterze Symbol PP =b3 ; indikace pullup Symbol UFT =w2 ; vysledek mereni na FT symbol Nref =w3 ; zmena +UN k Vref pro korekci Hmez, Dmez symbol KH =w6 ; konstanta po Hmez symbol KD =w7 ; konstanta po Dmez symbol Unap =w8 ; napajeci napeti +UN symbol zb=w13 ; zbytek po modulo deleni LET PP=0 ; priznak pullup (ON=1, OFF=0) LET Hyst=10 ; 256/3=85bit na 1V ;------------------------------------------------------------------------------ ; Po pripojeni 230V zmeri uroven tmy a svetla, zapise ji pro priste, sepne TY1. START:; pripojeno k 230V ; 1 Zmeri TMU: pause 1250 ;pauza 20sec pro ustaleni +UN (62,5=1sec pri 250kHz) READADC 4,UFT ;zmeri TMU Hmez=UFT ;TMU zapise do Hmez GOSUB zmerUN ;zmeri +UN, zapise do Unap GOSUB KHx ;spocita konstantu +UN/Hmez, vrati KH*100 High C.1 ;sepne TY1 ; 2 Zmeri SVETLO: pause 3750 ;pauza 60sec pro ustaleni +UN READADC 4,UFT ;zmeri napeti na FT po sepnuti Dmez=UFT ;zapise Dmez pro pristi vypnuti GOSUB zmerUN ;zmeri +UN, zapise Unap GOSUB KDx ;spocita konstantu +UN/Dmez, vrati KD*100 IF UFT=>42 THEN GOTO Vypni ;pullup NE je-li napeti na FT vetsi jak 0,5V ; 3 PULLUP IF UFT<42 THEN PULLUP %00011000 PP=1 ENDIF ;pullup ANO je-li napeti na FT mensi jak 0,5V (3V/6=256/6) pause 625 ;pause 10s pro ustaleni +UN READADC 4,UFT ;opet zmeri napeti na RF Dmez=UFT ;zapise Dmez pro pristi vypnuti GOSUB zmerUN ;zmeri +UN, zapise Unap GOSUB KDx ;spocita konstantu, vrati KD*100 ;------------------------------------------------------------------------------ ; 4 Hlavni PROGRAM Vypni: pause 625 ;pauza 10s GOSUB zmerUN ;zmeri +UN Dmez=Unap*100/KD ;aktualizuje Dmez Dmez=Dmez-Hyst ;zavede hysterzi READADC 4,UFT ;zmeri napeti na FT IF UFTHmez THEN high C.1 ELSE GOTO Zapni ENDIF ;vyhodnoti: je-li tma zapne IF PP=1 THEN PULLUP %00011000 ENDIF ;byl-li na staru pp, zapni pp pause 3750 ;pauza 1min pro ustaleni +UN GOTO Vypni ;---------------------------------------------------------------------------------- ; 5 RUTINY KHx: ;A/B=C w10= Unap/Hmez ;stovky zb= Unap//Hmez*10 ; W11= zb/Hmez ;desitky zb= zb//Hmez*10 ; w12= zb/Hmez ;jednotky zb= zb//Hmez ; w10= w10*100 w11=w11*10 KH= w10+w11+w12 RETURN KDx: ;;A/B=C w10= Unap/Dmez ;stovky zb= Unap//Dmez*10 ; W11= zb/Dmez ;desitky zb= zb//Dmez*10 ; w12= zb/Dmez ;jednotky zb= zb//Dmez ; w10= w10*100 w11=w11*10 KD= w10+w11+w12 RETURN zmerUN: CALIBADC Nref ;zmeri zmenu pomeru +UN ku Uref w10= 261/Nref ;vypocita okamzite napeti +UN zb= 261//Nref*10 w11= zb/Nref zb= zb//Nref*10 w12= zb/Nref zb= zb//Nref w10= w10*100 w11=w11*10 Unap= w10+w11+w12 RETURN ;* konec