X-Git-Url: https://git.smho.de/gw/?p=owSlave2.git;a=blobdiff_plain;f=DS18B20_VOC_DS2438_SHT%20direct%2FDS18B20_DS2438.c;h=2522a0ee013d948722ba6acc08e974506eaba1e6;hp=4448c39b6fc5a4f6ccec50189d80f99db43e4c7c;hb=refs%2Fheads%2Fmaster;hpb=485bc58764a5b2a1296dee25aadb42316e8defe0 diff --git a/DS18B20_VOC_DS2438_SHT direct/DS18B20_DS2438.c b/DS18B20_VOC_DS2438_SHT direct/DS18B20_DS2438.c index 4448c39..2522a0e 100644 --- a/DS18B20_VOC_DS2438_SHT direct/DS18B20_DS2438.c +++ b/DS18B20_VOC_DS2438_SHT direct/DS18B20_DS2438.c @@ -42,9 +42,9 @@ #include "../common/I2C/USI_TWI_Master.h" #include "../common/I2C/SHT2xV2.h" #include "../common/calibr.h" +#include "../common/owSlave_tools.h" -extern void OWINIT(void); -extern void EXTERN_SLEEP(void); +OWST_EXTERN_VARS @@ -58,24 +58,11 @@ volatile uint8_t config_info2[26]={0x01,0x06, 0x05,0x08, 0x04,0x07, 11,0x08, 0x0 #error "Variable not correct" #endif -extern uint8_t mode; -extern uint8_t gcontrol; -extern uint8_t reset_indicator; -extern uint8_t alarmflag; -volatile uint8_t wdcounter=1; +extern uint8_t cpsp; - -#if defined(__AVR_ATtiny24__)||defined(__AVR_ATtiny44__) || defined(__AVR_ATtiny84__) || defined(__AVR_ATtiny24A__)||defined(__AVR_ATtiny44A__) || defined(__AVR_ATtiny84A__) -ISR(WATCHDOG_vect) { - #else - ISR(WDT_vect) { - #endif - wdcounter++; - if (reset_indicator==1) reset_indicator++; - else if (reset_indicator==2) mode=0; +OWST_WDT_ISR - } typedef union { @@ -114,11 +101,12 @@ ISR(WATCHDOG_vect) { union{ uint8_t page3[8]; //25 struct { + uint8_t free; uint16_t R0; uint16_t VS; uint8_t cmode; int16_t ip; - uint8_t free; + }; }; union{ @@ -130,7 +118,19 @@ ISR(WATCHDOG_vect) { uint16_t r_week_max; }; }; - uint8_t page5[8]; //41 + union{ + uint8_t page5[8]; //41 + struct { + uint8_t codeVOC; // immer 0x37 nach Neustart + uint8_t days_of_r0; //Anzahl der Tage fuer die r0 ermittelt wird + int8_t corr_VOC_mult; //r0 corr + int8_t corr_VOC_div; + uint16_t vv3; + uint8_t time_corr; //Wiregate; + uint8_t reset_code; + }; + uint16_t page5d[4]; + }; uint8_t page6[8]; //49 uint8_t page7[8]; //57 @@ -142,17 +142,18 @@ ISR(WATCHDOG_vect) { - volatile int16_t am2302_temp; - volatile uint16_t am2302_hum; + volatile int16_t DS2438_2_TEMP; + volatile uint16_t DS2438_2_VAD; + volatile uint16_t DS2438_2_VDD=0x01F4; + + OWST_TESTSW - uint8_t userRegister[1]; - int16_t sRH,sT; double temperatureC,humidityRH,hhum; volatile double l; - uint16_t weekmaxarr[8]; + uint16_t weekmaxarr[33]; //Kompensieren der Abhänigkeit von RS/RO von Temperatur und Luftfeuchte inline double interp(double t, double h) { @@ -170,31 +171,16 @@ ISR(WATCHDOG_vect) { double la[4]; uint8_t lainit=1; - int testSW(void) { - uint8_t r; - DDRB&=~(1<0) { //8s pack2.tol_s8++; @@ -306,8 +308,8 @@ ISR(WATCHDOG_vect) { pack2.tol_s8=0; pack2.tol_d++; //rund 180 Jahre :-) pack2.r_week_max=0; - weekmaxarr[7]=pack2.r_day_max; - for(uint8_t i=0;i<7;i++) { + weekmaxarr[pack2.days_of_r0]=pack2.r_day_max; + for(uint8_t i=0;ipack2.r_week_max) pack2.r_week_max=weekmaxarr[i]; @@ -330,19 +332,20 @@ ISR(WATCHDOG_vect) { getSHT2xHumTemp(&temperatureC,&humidityRH); ip=interp(temperatureC,humidityRH); pack2.ip=ip*1000; - double RH=calibr_hum(temperatureC,-0.2,humidityRH)*10.0; - double TC =temperatureC *10.0-2; + //double RH=calibr_hum(temperatureC,-0.2,humidityRH)*10.0; + //double TC =temperatureC *10.0-2; + double RH=humidityRH*10.0; + double TC=temperatureC*10.0; if (testSW()) { - am2302_hum=RH; - am2302_temp=TC*25.6; + DS2438_2_VAD=RH; + DS2438_2_TEMP=TC*25.6; config_info2[5]=12; //10V = 100% }else{ hhum=(1.0546-0.000216*TC)*(RH); - //am2302_hum=0.318*hhum +76.0; - am2302_hum=0.31*hhum +80; - am2302_temp=TC*25.6; + DS2438_2_VAD=0.31*hhum +80; + DS2438_2_TEMP=TC*25.6; config_info2[5]=7; } mr=0; @@ -387,13 +390,21 @@ ISR(WATCHDOG_vect) { pack2.r_day_max=l*100; } } else if (l>4; uint8_t af=0; @@ -406,27 +417,13 @@ ISR(WATCHDOG_vect) { sei(); EXTERN_SLEEP(); } - if ((gcontrol==2)||(gcontrol==3)) { + if (gcontrol) { gcontrol=0; } - #if defined(__AVR_ATtiny25__)||defined(__AVR_ATtiny45__) || defined(__AVR_ATtiny85__) - if (((TIMSK & (1<