New I2C devices
[owSlave2.git] / DS18B20_Thermocouble_DS2438_SHT / DS18B20_DS2438.c
index 3cf6053..4927b99 100644 (file)
 extern void OWINIT();\r
 extern void EXTERN_SLEEP();\r
 \r
-const float k_rs[54] PROGMEM ={0.000000,24.125000,48.585366,72.731707,96.829268,121.097561,145.700000,170.600000,195.650000,220.625000,245.365854,269.853659,294.119048,318.195122,342.166667,366.000000,389.761905,413.428571,437.023810,460.558140,484.047619,507.511628,530.976190,554.418605,577.883721,601.395349,624.952381,648.571429,672.285714,696.073171,719.976190,744.000000,768.146341,792.439024,816.853659,841.414634,866.125000,890.975000,916.000000,941.179487,966.525000,992.025641,1017.717949,1043.589744,1069.657895,1095.945946,1122.432432,1149.184211,1176.189189,1203.472222,1231.083333,1259.000000,1287.285714,1315.941176};\r
+//const float k_rs[54] PROGMEM ={0.000000,24.125000,48.585366,72.731707,96.829268,121.097561,145.700000,170.600000,195.650000,220.625000,245.365854,269.853659,294.119048,318.195122,342.166667,366.000000,389.761905,413.428571,437.023810,460.558140,484.047619,507.511628,530.976190,554.418605,577.883721,601.395349,624.952381,648.571429,672.285714,696.073171,719.976190,744.000000,768.146341,792.439024,816.853659,841.414634,866.125000,890.975000,916.000000,941.179487,966.525000,992.025641,1017.717949,1043.589744,1069.657895,1095.945946,1122.432432,1149.184211,1176.189189,1203.472222,1231.083333,1259.000000,1287.285714,1315.941176};\r
+const float k_rs[61] PROGMEM ={ -212.538462, -166.260870, -124.892857, -97.562500, -66.888889, -34.157895, 0.000000, 24.125000, 48.585366, 72.731707, 96.829268, 121.097561, 145.700000, 170.600000, 195.650000, 220.625000, 245.365854, 269.853659, 294.119048, 318.192771, 342.166667, 366.000000, 389.761905, 413.428571, 437.023810, 460.558140, 484.047619, 507.511628, 530.976190, 554.418605, 577.883721, 601.395349, 624.952381, 648.571429, 672.285714, 696.073171, 719.976190, 744.000000, 768.146341, 792.439024, 816.853659, 841.414634, 866.125000, 890.975000, 916.000000, 941.179487, 966.525000, 992.025641, 1017.717949, 1043.589744, 1069.657895, 1095.945946, 1122.432432, 1149.173333, 1176.189189, 1203.472222, 1231.083333, 1259.000000, 1287.285714, 1315.941176, 1344.941176};\r
+#define k_ofs 6\r
+\r
 //const float j_rs[70] PROGMEM ={0, 18.302913, 34.830476, 50.783019, 70.653704, 90.505455, 110.341818, 130.165455, 149.163636, 160.791071, 180.596364, 200.398214, 220.200000, 240.000000, 250.882883, 270.603636, 290.409091, 310.216364, 330.025455, 342.472727, 360.649091, 380.461818, 400.275000, 420.087273, 435.275676, 450.703636, 470.503636, 490.298214, 510.082456, 523.486726, 540.621053, 560.370175, 580.105172, 591.979487, 610.527119, 630.213559, 644.601653, 660.534426, 680.168852, 690.787097, 710.391935, 729.123810, 740.559375, 760.126562, 770.684615, 790.235385, 800.782812, 820.331250, 834.681250, 850.446032, 870.017460, 880.600000, 900.196774, 911.099187, 930.432787, 950.073333, 960.728333, 980.396667, 1000.078333, 1010.772881, 1030.475862, 1050.187931, 1065.717241, 1080.631034, 1100.358621, 1120.089655, 1131.840000,1150.556897, 1170.294737, 1190.035088};\r
 double gettemp_rs(double V) {\r
-       uint8_t iv=(uint8_t)(V);\r
+       uint8_t iv=(uint8_t)(V+k_ofs);\r
        float t0=pgm_read_float(&(k_rs[iv]));\r
        float t1=pgm_read_float(&(k_rs[iv+1]));\r
-       return t0+(t1-t0)/1*(V-iv);\r
+       return t0+(t1-t0)/1*((V+k_ofs)-iv);\r
 }\r
 \r
 \r
@@ -161,11 +164,17 @@ volatile pack2_t pack2;
 \r
 volatile double V,ktemp;\r
 \r
-uint16_t ADmess() {\r
-       ADMUX=0b10101101;\r
+double ADmess() {\r
+       ADMUX=0b10101101;  //PA2 + //PA1 - \r
        ADCSRA|=(1<<ADSC);\r
        while ((ADCSRA&(1<<ADSC)));\r
-       return ADC;\r
+       if (ADC==0) {\r
+               ADMUX=0b10001101; //PA2 - //PA1 +\r
+               ADCSRA|=(1<<ADSC);\r
+               while ((ADCSRA&(1<<ADSC)));\r
+               return -(double)ADC;\r
+       }\r
+       return (double)ADC;\r
 }\r
 \r
 volatile int16_t am2302_temp;\r
@@ -222,7 +231,7 @@ int main(void){
        ADCSRA=(1<<ADEN)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0);\r
        //DDRB|=(1<<PINB1);\r
 \r
-       uint16_t ares[16],sum;\r
+       double ares[16],sum;\r
        uint8_t par=0;\r
        ares[0]=0;//ADmess();\r
        for (par=1;par<16;par++) {\r
@@ -272,16 +281,16 @@ int main(void){
                        for(uint8_t i=0;i<16;i++) {\r
                                sum+=ares[i];\r
                        }\r
-                       V=sum/20.0/1024.0*1.12*1000.0/16.0;\r
+                       V=sum/20.0/1024.0*1.12*1000.0/16.0;//Spannung in mV\r
                        //V=sum/20.0/1024.0*1.01*1000.0/16.0;\r
-                       uint16_t htemp;\r
+                       int16_t htemp;\r
                        ktemp=gettemp_rs(V);\r
                        //htemp=(ktemp*16)/10;\r
                        htemp=(ktemp*16+temperatureC*1.6)/10;\r
 \r
-                       uint16_t w=htemp;\r
-                       uint8_t t8=w>>4;\r
-                       uint8_t af=0;\r
+                       int16_t w=htemp;\r
+                       int8_t t8=w>>4;\r
+                       int8_t af=0;\r
                        if (t8>pack1.TH) af=1;\r
                        if (t8<=pack1.TL) af=1; \r
                        cli();\r