From: Tobias <tm@tm3d.de>
Date: Wed, 23 Nov 2016 12:51:28 +0000 (+0100)
Subject: HDC1080 support
X-Git-Url: https://git.smho.de/?a=commitdiff_plain;h=3608ace7dd5bd4fa5d7d49224ef770b21596092c;p=owSlave2.git

HDC1080 support
---

diff --git a/DS18B20_Thermocouble_DS2438_SHT/DS18B20_DS2438.c b/DS18B20_Thermocouble_DS2438_SHT/DS18B20_DS2438.c
index e78a682..d3e41f1 100644
--- a/DS18B20_Thermocouble_DS2438_SHT/DS18B20_DS2438.c
+++ b/DS18B20_Thermocouble_DS2438_SHT/DS18B20_DS2438.c
@@ -1,315 +1,315 @@
-
-// Copyright (c) 2015, Tobias Mueller tm(at)tm3d.de
-// All rights reserved.
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-//  * Redistributions of source code must retain the above copyright
-//    notice, this list of conditions and the following disclaimer.
-//  * Redistributions in binary form must reproduce the above copyright
-//    notice, this list of conditions and the following disclaimer in the
-//    documentation and/or other materials provided with the
-//    distribution.
-//  * All advertising materials mentioning features or use of this
-//    software must display the following acknowledgement: This product
-//    includes software developed by tm3d.de and its contributors.
-//  * Neither the name of tm3d.de nor the names of its contributors may
-//    be used to endorse or promote products derived from this software
-//    without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-#define F_CPU 8000000UL
-#include <avr/io.h>
-#include <avr/interrupt.h>
-#include <util/delay.h>
-#include <avr/wdt.h>
-#include <avr/sleep.h>
-#include <avr/pgmspace.h>
-#include "../common/I2C/USI_TWI_Master.h"
-#include "../common/I2C/SHT2x.h"
-
-
-extern void OWINIT();
-extern void EXTERN_SLEEP();
-
-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};
-//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};
-double gettemp_rs(double V) {
-	uint8_t iv=(uint8_t)(V);
-	float t0=pgm_read_float(&(k_rs[iv]));
-	float t1=pgm_read_float(&(k_rs[iv+1]));
-	return t0+(t1-t0)/1*(V-iv);
-}
-
-
-
-
-
-uint8_t owid1[8]={0x28, 0xA6, 0xD9, 0x84, 0x00, 0x00, 0x03, 0x68};/**/
-uint8_t owid2[8]={0x26, 0xA7, 0xD9, 0x84, 0x00, 0x00, 0x03, 0x20};/**/
-uint8_t config_info1[16]={0x01,0x02 ,0x00,0x00, 0x00,0x00, 0x00,0x00, 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00};	
-uint8_t config_info2[16]={0x01,0x06, 0x05,0x08, 0x04,0x07, 0x00,0x00, 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00};	
-	
-#if (owid>128) 
-#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=5;
-
-
-#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 
-	//sleep_disable();          // Disable Sleep on Wakeup
-	wdcounter++;
-	if (reset_indicator==1) reset_indicator++;
-	else if (reset_indicator==2) mode=0;
-/*	if (timeout==2) {
-		DIS_TIMER;
-		EN_OWINT;
-		mode=OWM_SLEEP;
-	}
-	timeout++;*/
-	//sleep_enable();           // Enable Sleep Mode
-
-}
-
-int testSW(void) {
-	uint8_t r;
-	DDRB&=~(1<<PORTB0);  //Eingang
-	__asm__ __volatile__ ("nop");
-	PORTB|=(1<<PORTB0); //Pullup
-	__asm__ __volatile__ ("nop");
-	__asm__ __volatile__ ("nop");
-	__asm__ __volatile__ ("nop");
-	__asm__ __volatile__ ("nop");
-	__asm__ __volatile__ ("nop");
-	r=PINB&(1<<PORTB0);
-	__asm__ __volatile__ ("nop");
-	PORTB&=~(1<<PORTB0);
-	__asm__ __volatile__ ("nop");
-	DDRB|=(1<<PORTB0);  //Eingang
-	return (r==0);
-	
-	
-}
-
-
-typedef union {
-	volatile uint8_t bytes[8];
-	struct {
-		uint16_t temp;  //0
-		uint8_t TH;  //2
-		uint8_t TL;  //3
-		uint8_t config;  //4
-		uint8_t rrFF; //5
-		uint8_t rr00; //6
-		uint8_t rr10; //7
-	};
-} pack1_t;
-volatile pack1_t pack1;
-
-
-
-typedef union {
-	#if  defined(__AVR_ATtiny25__)
-	volatile uint8_t bytes[16];
-	#else
-	volatile uint8_t bytes[64];
-	#endif
-	struct {
-		uint8_t status;  //1
-		int16_t temp;  //2
-		uint16_t voltage;  //4
-		uint16_t current;  //6
-		uint8_t threshold; //8
-		
-		uint8_t page1[8]; //9
-		#if  defined(__AVR_ATtiny25__)
-		#else
-		uint8_t page2[8]; //17
-		uint8_t page3[8]; //25
-		uint8_t page4[8];  //33
-		uint8_t page5[8];  //41
-		uint8_t page6[8];  //49
-		uint8_t page7[8];  //57
-		//uint8_t crc;  //65
-		#endif
-	};
-} pack2_t;
-volatile pack2_t pack2;
-
-
-volatile double V,ktemp;
-
-uint16_t ADmess() {
-	ADMUX=0b10101101;
-	ADCSRA|=(1<<ADSC);
-	while ((ADCSRA&(1<<ADSC)));
-	return ADC;
-}
-
-volatile int16_t am2302_temp;
-volatile uint16_t am2302_hum;
-
-
-uint8_t userRegister[1];
-int16_t sRH,sT;
-volatile double temperatureC,humidityRH;
-volatile double l;
-
-uint8_t max_adr=0;
-
-int main(void){
-    //PRR|=(1<<PRADC);  // adc for save Power
-	pack1.temp=0x0550;
-	pack1.config=0x7F;
-	pack1.TH=75;
-	pack1.TL=70;
-	pack1.rrFF=0xFF;
-	pack1.rr00=0;
-	pack1.rr10=0x10;
-	PORTA=0xFF-(1<<PINA1)-(1<<PINA2);
-	PORTB=0xFF;
-	OWINIT();
-
-	MCUCR &=~(1<<PUD); //All Pins Pullup...
-	MCUCR |=(1<<BODS);
-
-	WDTCSR |= ((1<<WDCE) );   // Enable the WD Change Bit//| (1<<WDE)
-	WDTCSR |=   (1<<WDIE) |              // Enable WDT Interrupt
-	(1<<WDP2) | (1<<WDP1);   // Set Timeout to ~1 seconds
-	if (testSW()) {
-		config_info2[5]=8;
-		}else{
-		config_info2[5]=7;
-	}
-	MCUSR=0;
-	USI_TWI_Master_Initialise();
-	SHT2x_SoftReset();
-	SHT2x_ReadUserRegister(userRegister);
-	//(userRegister & ~SHT2x_RES_MASK) | SHT2x_RES_10_13BIT;
-	SHT2x_WriteUserRegister(userRegister); //write changed user reg
-	// --- measure humidity with "Hold Master Mode (HM)" ---
-	SHT2x_MeasurePoll(HUMIDITY, &sRH);
-	// --- measure temperature with "Polling Mode" (no hold master) ---
-	SHT2x_MeasurePoll(TEMP, &sT);
-	//-- calculate humidity and temperature --
-	//temperatureC = SHT2x_CalcTemperatureC(sT);
-	//humidityRH = SHT2x_CalcRH(sRH);
-	
-	gcontrol=1;
-	sei();
-	ADCSRA=(1<<ADEN)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0);
-	//DDRB|=(1<<PINB1);
-
-	uint16_t ares[16],sum;
-	uint8_t par=0;
-	ares[0]=0;//ADmess();
-	for (par=1;par<16;par++) {
-		ares[par]=ares[0];
-	}
-	par=0;
-    while(1)   {
-		if ((gcontrol==2)||(gcontrol==3)) {
-			wdcounter=1;
-			gcontrol=0;
-			
-		}
-		
-		if (wdcounter>0) {
-			if (par==0) {
-				//PORTB|=(1<<PINB1); //Dauer 440ms
-				SHT2x_MeasurePoll(HUMIDITY, &sRH);
-				// --- measure temperature with "Polling Mode" (no hold master) ---
-				SHT2x_MeasurePoll(TEMP, &sT);
-				//-- calculate humidity and temperature --
-				temperatureC = SHT2x_CalcTemperatureC(sT)*10.0-2;
-				humidityRH = SHT2x_CalcRH(sRH)*10.0+5;
-				if (humidityRH>1000) humidityRH=1000;
-				if (testSW()) {
-					am2302_hum= humidityRH*10.0;
-					am2302_temp=temperatureC*25.6;
-					//
-					config_info2[5]=8;
-				}else{
-					double hhum=(1.0546-0.000216*temperatureC)*(humidityRH);
-					//am2302_hum=0.318*hhum +76.0;
-					am2302_hum=0.31*hhum +80;
-					am2302_temp=temperatureC*25.6;
-					//am2302_temp=am2302_temp-45;
-					config_info2[5]=7;
-				}
-			}
-			ares[par]=ADmess();
-			par++;
-			if (par>15) par=0;
-			wdcounter=0;
-		}
-	
-		if (gcontrol==1) {
-			gcontrol=0;
-			sum=0;
-			for(uint8_t i=0;i<16;i++) {
-				sum+=ares[i];
-			}
-			V=sum/20.0/1024.0*1.12*1000.0/16.0;
-			//V=sum/20.0/1024.0*1.01*1000.0/16.0;
-			uint16_t htemp;
-			ktemp=gettemp_rs(V);
-			//htemp=(ktemp*16)/10;
-			htemp=(ktemp*16+temperatureC*1.6)/10;
-
-			uint16_t w=htemp;
-			uint8_t t8=w>>4;
-			uint8_t af=0;
-			if (t8>pack1.TH) af=1;
-			if (t8<=pack1.TL) af=1; 
-			cli();
-			pack1.temp=w;
-			//pack.temp++;
-			alarmflag=af;
-			sei();			
-			EXTERN_SLEEP();		
-		}
-		
-
-		
-#if  defined(__AVR_ATtiny25__)||defined(__AVR_ATtiny45__)  || defined(__AVR_ATtiny85__)
-			if (((TIMSK & (1<<TOIE0))==0)&& (mode==0))
-#endif			
-#if  defined(__AVR_ATtiny24__)||defined(__AVR_ATtiny44__)  || defined(__AVR_ATtiny84__) ||defined(__AVR_ATtiny24A__)||defined(__AVR_ATtiny44A__)  || defined(__AVR_ATtiny84A__)
-			if (((TIMSK0 & (1<<TOIE0))==0)&& (mode==0))
-#endif
-			  {
-
-			MCUCR|=(1<<SE)|(1<<SM1);
-			MCUCR&=~(1<<ISC01);
-		} else {
-			MCUCR|=(1<<SE);
-			MCUCR&=~(1<<SM1);
-		}
-		asm("SLEEP");
-   }
-
-
+
+// Copyright (c) 2015, Tobias Mueller tm(at)tm3d.de
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//  * Redistributions of source code must retain the above copyright
+//    notice, this list of conditions and the following disclaimer.
+//  * Redistributions in binary form must reproduce the above copyright
+//    notice, this list of conditions and the following disclaimer in the
+//    documentation and/or other materials provided with the
+//    distribution.
+//  * All advertising materials mentioning features or use of this
+//    software must display the following acknowledgement: This product
+//    includes software developed by tm3d.de and its contributors.
+//  * Neither the name of tm3d.de nor the names of its contributors may
+//    be used to endorse or promote products derived from this software
+//    without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+#define F_CPU 8000000UL
+#include <avr/io.h>
+#include <avr/interrupt.h>
+#include <util/delay.h>
+#include <avr/wdt.h>
+#include <avr/sleep.h>
+#include <avr/pgmspace.h>
+#include "../common/I2C/USI_TWI_Master.h"
+#include "../common/I2C/SHT2x.h"
+
+
+extern void OWINIT();
+extern void EXTERN_SLEEP();
+
+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};
+//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};
+double gettemp_rs(double V) {
+	uint8_t iv=(uint8_t)(V);
+	float t0=pgm_read_float(&(k_rs[iv]));
+	float t1=pgm_read_float(&(k_rs[iv+1]));
+	return t0+(t1-t0)/1*(V-iv);
+}
+
+
+
+
+
+uint8_t owid1[8]={0x28, 0xA6, 0xD9, 0x84, 0x00, 0x00, 0x03, 0x68};/**/
+uint8_t owid2[8]={0x26, 0xA7, 0xD9, 0x84, 0x00, 0x00, 0x03, 0x20};/**/
+uint8_t config_info1[16]={0x01,0x02 ,0x00,0x00, 0x00,0x00, 0x00,0x00, 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00};	
+uint8_t config_info2[16]={0x01,0x06, 0x05,0x08, 0x04,0x07, 0x00,0x00, 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00};	
+	
+#if (owid>128) 
+#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=5;
+
+
+#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 
+	//sleep_disable();          // Disable Sleep on Wakeup
+	wdcounter++;
+	if (reset_indicator==1) reset_indicator++;
+	else if (reset_indicator==2) mode=0;
+/*	if (timeout==2) {
+		DIS_TIMER;
+		EN_OWINT;
+		mode=OWM_SLEEP;
+	}
+	timeout++;*/
+	//sleep_enable();           // Enable Sleep Mode
+
+}
+
+int testSW(void) {
+	uint8_t r;
+	DDRB&=~(1<<PORTB0);  //Eingang
+	__asm__ __volatile__ ("nop");
+	PORTB|=(1<<PORTB0); //Pullup
+	__asm__ __volatile__ ("nop");
+	__asm__ __volatile__ ("nop");
+	__asm__ __volatile__ ("nop");
+	__asm__ __volatile__ ("nop");
+	__asm__ __volatile__ ("nop");
+	r=PINB&(1<<PORTB0);
+	__asm__ __volatile__ ("nop");
+	PORTB&=~(1<<PORTB0);
+	__asm__ __volatile__ ("nop");
+	DDRB|=(1<<PORTB0);  //Eingang
+	return (r==0);
+	
+	
+}
+
+
+typedef union {
+	volatile uint8_t bytes[8];
+	struct {
+		uint16_t temp;  //0
+		uint8_t TH;  //2
+		uint8_t TL;  //3
+		uint8_t config;  //4
+		uint8_t rrFF; //5
+		uint8_t rr00; //6
+		uint8_t rr10; //7
+	};
+} pack1_t;
+volatile pack1_t pack1;
+
+
+
+typedef union {
+	#if  defined(__AVR_ATtiny25__)
+	volatile uint8_t bytes[16];
+	#else
+	volatile uint8_t bytes[64];
+	#endif
+	struct {
+		uint8_t status;  //1
+		int16_t temp;  //2
+		uint16_t voltage;  //4
+		uint16_t current;  //6
+		uint8_t threshold; //8
+		
+		uint8_t page1[8]; //9
+		#if  defined(__AVR_ATtiny25__)
+		#else
+		uint8_t page2[8]; //17
+		uint8_t page3[8]; //25
+		uint8_t page4[8];  //33
+		uint8_t page5[8];  //41
+		uint8_t page6[8];  //49
+		uint8_t page7[8];  //57
+		//uint8_t crc;  //65
+		#endif
+	};
+} pack2_t;
+volatile pack2_t pack2;
+
+
+volatile double V,ktemp;
+
+uint16_t ADmess() {
+	ADMUX=0b10101101;
+	ADCSRA|=(1<<ADSC);
+	while ((ADCSRA&(1<<ADSC)));
+	return ADC;
+}
+
+volatile int16_t am2302_temp;
+volatile uint16_t am2302_hum;
+
+
+uint8_t userRegister[1];
+int16_t sRH,sT;
+volatile double temperatureC,humidityRH;
+volatile double l;
+
+uint8_t max_adr=0;
+
+int main(void){
+    //PRR|=(1<<PRADC);  // adc for save Power
+	pack1.temp=0x0550;
+	pack1.config=0x7F;
+	pack1.TH=75;
+	pack1.TL=70;
+	pack1.rrFF=0xFF;
+	pack1.rr00=0;
+	pack1.rr10=0x10;
+	PORTA=0xFF-(1<<PINA1)-(1<<PINA2);
+	PORTB=0xFF;
+	OWINIT();
+
+	MCUCR &=~(1<<PUD); //All Pins Pullup...
+	MCUCR |=(1<<BODS);
+
+	WDTCSR |= ((1<<WDCE) );   // Enable the WD Change Bit//| (1<<WDE)
+	WDTCSR |=   (1<<WDIE) |              // Enable WDT Interrupt
+	(1<<WDP2) | (1<<WDP1);   // Set Timeout to ~1 seconds
+	if (testSW()) {
+		config_info2[5]=8;
+		}else{
+		config_info2[5]=7;
+	}
+	MCUSR=0;
+	USI_TWI_Master_Initialise();
+	SHT2x_SoftReset();
+	SHT2x_ReadUserRegister(userRegister);
+	//(userRegister & ~SHT2x_RES_MASK) | SHT2x_RES_10_13BIT;
+	SHT2x_WriteUserRegister(userRegister); //write changed user reg
+	// --- measure humidity with "Hold Master Mode (HM)" ---
+	SHT2x_MeasurePoll(HUMIDITY, &sRH);
+	// --- measure temperature with "Polling Mode" (no hold master) ---
+	SHT2x_MeasurePoll(TEMP, &sT);
+	//-- calculate humidity and temperature --
+	//temperatureC = SHT2x_CalcTemperatureC(sT);
+	//humidityRH = SHT2x_CalcRH(sRH);
+	
+	gcontrol=1;
+	sei();
+	ADCSRA=(1<<ADEN)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0);
+	//DDRB|=(1<<PINB1);
+
+	uint16_t ares[16],sum;
+	uint8_t par=0;
+	ares[0]=0;//ADmess();
+	for (par=1;par<16;par++) {
+		ares[par]=ares[0];
+	}
+	par=0;
+    while(1)   {
+		if ((gcontrol==2)||(gcontrol==3)) {
+			wdcounter=1;
+			gcontrol=0;
+			
+		}
+		
+		if (wdcounter>0) {
+			if (par==0) {
+				//PORTB|=(1<<PINB1); //Dauer 440ms
+				SHT2x_MeasurePoll(HUMIDITY, &sRH);
+				// --- measure temperature with "Polling Mode" (no hold master) ---
+				SHT2x_MeasurePoll(TEMP, &sT);
+				//-- calculate humidity and temperature --
+				temperatureC = SHT2x_CalcTemperatureC(sT)*10.0-2;
+				humidityRH = SHT2x_CalcRH(sRH)*10.0+5;
+				if (humidityRH>1000) humidityRH=1000;
+				if (testSW()) {
+					am2302_hum= humidityRH*10.0;
+					am2302_temp=temperatureC*25.6;
+					//
+					config_info2[5]=8;
+				}else{
+					double hhum=(1.0546-0.000216*temperatureC)*(humidityRH);
+					//am2302_hum=0.318*hhum +76.0;
+					am2302_hum=0.31*hhum +80;
+					am2302_temp=temperatureC*25.6;
+					//am2302_temp=am2302_temp-45;
+					config_info2[5]=7;
+				}
+			}
+			ares[par]=ADmess();
+			par++;
+			if (par>15) par=0;
+			wdcounter=0;
+		}
+	
+		if (gcontrol==1) {
+			gcontrol=0;
+			sum=0;
+			for(uint8_t i=0;i<16;i++) {
+				sum+=ares[i];
+			}
+			V=sum/20.0/1024.0*1.12*1000.0/16.0;
+			//V=sum/20.0/1024.0*1.01*1000.0/16.0;
+			uint16_t htemp;
+			ktemp=gettemp_rs(V);
+			//htemp=(ktemp*16)/10;
+			htemp=(ktemp*16+temperatureC*1.6)/10;
+
+			uint16_t w=htemp;
+			uint8_t t8=w>>4;
+			uint8_t af=0;
+			if (t8>pack1.TH) af=1;
+			if (t8<=pack1.TL) af=1; 
+			cli();
+			pack1.temp=w;
+			//pack.temp++;
+			alarmflag=af;
+			sei();			
+			EXTERN_SLEEP();		
+		}
+		
+
+		
+#if  defined(__AVR_ATtiny25__)||defined(__AVR_ATtiny45__)  || defined(__AVR_ATtiny85__)
+			if (((TIMSK & (1<<TOIE0))==0)&& (mode==0))
+#endif			
+#if  defined(__AVR_ATtiny24__)||defined(__AVR_ATtiny44__)  || defined(__AVR_ATtiny84__) ||defined(__AVR_ATtiny24A__)||defined(__AVR_ATtiny44A__)  || defined(__AVR_ATtiny84A__)
+			if (((TIMSK0 & (1<<TOIE0))==0)&& (mode==0))
+#endif
+			  {
+
+			MCUCR|=(1<<SE)|(1<<SM1);
+			MCUCR&=~(1<<ISC01);
+		} else {
+			MCUCR|=(1<<SE);
+			MCUCR&=~(1<<SM1);
+		}
+		asm("SLEEP");
+   }
+
+
 }
\ No newline at end of file
diff --git a/DS2423/DS2423.atsln b/DS2423/DS2423.atsln
index b3b4676..55ec947 100644
--- a/DS2423/DS2423.atsln
+++ b/DS2423/DS2423.atsln
@@ -1,20 +1,20 @@
-
-Microsoft Visual Studio Solution File, Format Version 11.00
-# Atmel Studio Solution File, Format Version 11.00
-Project("{54F91283-7BC4-4236-8FF9-10F437C3AD48}") = "DS2423", "DS2423.cproj", "{26106A5A-6618-4774-943F-65C46DDB610B}"
-EndProject
-Global
-	GlobalSection(SolutionConfigurationPlatforms) = preSolution
-		Debug|AVR = Debug|AVR
-		Release|AVR = Release|AVR
-	EndGlobalSection
-	GlobalSection(ProjectConfigurationPlatforms) = postSolution
-		{26106A5A-6618-4774-943F-65C46DDB610B}.Debug|AVR.ActiveCfg = Debug|AVR
-		{26106A5A-6618-4774-943F-65C46DDB610B}.Debug|AVR.Build.0 = Debug|AVR
-		{26106A5A-6618-4774-943F-65C46DDB610B}.Release|AVR.ActiveCfg = Release|AVR
-		{26106A5A-6618-4774-943F-65C46DDB610B}.Release|AVR.Build.0 = Release|AVR
-	EndGlobalSection
-	GlobalSection(SolutionProperties) = preSolution
-		HideSolutionNode = FALSE
-	EndGlobalSection
-EndGlobal
+
+Microsoft Visual Studio Solution File, Format Version 11.00
+# Atmel Studio Solution File, Format Version 11.00
+Project("{54F91283-7BC4-4236-8FF9-10F437C3AD48}") = "DS2423", "DS2423.cproj", "{26106A5A-6618-4774-943F-65C46DDB610B}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|AVR = Debug|AVR
+		Release|AVR = Release|AVR
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{26106A5A-6618-4774-943F-65C46DDB610B}.Debug|AVR.ActiveCfg = Debug|AVR
+		{26106A5A-6618-4774-943F-65C46DDB610B}.Debug|AVR.Build.0 = Debug|AVR
+		{26106A5A-6618-4774-943F-65C46DDB610B}.Release|AVR.ActiveCfg = Release|AVR
+		{26106A5A-6618-4774-943F-65C46DDB610B}.Release|AVR.Build.0 = Release|AVR
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+EndGlobal
diff --git a/DS2423_komische platine/DS2423.atsln b/DS2423_komische platine/DS2423.atsln
index b3b4676..55ec947 100644
--- a/DS2423_komische platine/DS2423.atsln	
+++ b/DS2423_komische platine/DS2423.atsln	
@@ -1,20 +1,20 @@
-
-Microsoft Visual Studio Solution File, Format Version 11.00
-# Atmel Studio Solution File, Format Version 11.00
-Project("{54F91283-7BC4-4236-8FF9-10F437C3AD48}") = "DS2423", "DS2423.cproj", "{26106A5A-6618-4774-943F-65C46DDB610B}"
-EndProject
-Global
-	GlobalSection(SolutionConfigurationPlatforms) = preSolution
-		Debug|AVR = Debug|AVR
-		Release|AVR = Release|AVR
-	EndGlobalSection
-	GlobalSection(ProjectConfigurationPlatforms) = postSolution
-		{26106A5A-6618-4774-943F-65C46DDB610B}.Debug|AVR.ActiveCfg = Debug|AVR
-		{26106A5A-6618-4774-943F-65C46DDB610B}.Debug|AVR.Build.0 = Debug|AVR
-		{26106A5A-6618-4774-943F-65C46DDB610B}.Release|AVR.ActiveCfg = Release|AVR
-		{26106A5A-6618-4774-943F-65C46DDB610B}.Release|AVR.Build.0 = Release|AVR
-	EndGlobalSection
-	GlobalSection(SolutionProperties) = preSolution
-		HideSolutionNode = FALSE
-	EndGlobalSection
-EndGlobal
+
+Microsoft Visual Studio Solution File, Format Version 11.00
+# Atmel Studio Solution File, Format Version 11.00
+Project("{54F91283-7BC4-4236-8FF9-10F437C3AD48}") = "DS2423", "DS2423.cproj", "{26106A5A-6618-4774-943F-65C46DDB610B}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|AVR = Debug|AVR
+		Release|AVR = Release|AVR
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{26106A5A-6618-4774-943F-65C46DDB610B}.Debug|AVR.ActiveCfg = Debug|AVR
+		{26106A5A-6618-4774-943F-65C46DDB610B}.Debug|AVR.Build.0 = Debug|AVR
+		{26106A5A-6618-4774-943F-65C46DDB610B}.Release|AVR.ActiveCfg = Release|AVR
+		{26106A5A-6618-4774-943F-65C46DDB610B}.Release|AVR.Build.0 = Release|AVR
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+EndGlobal
diff --git a/DS2423_komische platine/DS2423.c b/DS2423_komische platine/DS2423.c
index 8e27c78..2cf20e3 100644
--- a/DS2423_komische platine/DS2423.c	
+++ b/DS2423_komische platine/DS2423.c	
@@ -1,236 +1,236 @@
-
-// Copyright (c) 2016, Tobias Mueller tm(at)tm3d.de
-// All rights reserved.
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-//  * Redistributions of source code must retain the above copyright
-//    notice, this list of conditions and the following disclaimer.
-//  * Redistributions in binary form must reproduce the above copyright
-//    notice, this list of conditions and the following disclaimer in the
-//    documentation and/or other materials provided with the
-//    distribution.
-//  * All advertising materials mentioning features or use of this
-//    software must display the following acknowledgement: This product
-//    includes software developed by tm3d.de and its contributors.
-//  * Neither the name of tm3d.de nor the names of its contributors may
-//    be used to endorse or promote products derived from this software
-//    without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-
-#define F_CPU 8000000UL
-#include <avr/io.h>
-#include <avr/interrupt.h>
-#include <util/delay.h>
-#include <avr/wdt.h>
-#include <avr/sleep.h>
-
-
-
-
-extern void OWINIT();
-
-uint8_t owid[8]={0x1D, 0xA2, 0xD9, 0x84, 0x00, 0x26, 0x02, 0x5C};/**/
-uint8_t config_info[16]={0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
-
-	
-
-extern uint8_t mode;
-extern uint8_t gcontrol;
-extern uint8_t reset_indicator;
-
-
-volatile uint8_t wdcounter;
-
-
-
-
-typedef union {
-	volatile uint8_t bytes[45];
-	struct {
-		uint16_t addr;
-		uint8_t status;
-		uint8_t scratch[32];//3
-		uint32_t counter;  //35
-		uint32_t zero;   //39
-		uint16_t crc;  //43
-	};
-} counterpack_t;
-counterpack_t pack;
-
-typedef union {
-	uint32_t c32[4];
-	uint8_t c8[16];
-} counters_t;
-
-volatile counters_t counters;
-
-volatile uint8_t istat;
-
-#define PCINT_VECTOR PCINT0_vect
-#define PIN_REG PINA
-#define PIN_DDR DDRA
-#define PIN_CH0 (1<<PINA3)
-#define PIN_CH1 (1<<PINA4)
-#define PIN_CH2 (1<<PINA1)
-#define PIN_CH3 (1<<PINA2)
-#define LPIN_CH2 (1<<PINB0)
-#define LDD_CH2 DDRB
-#define LPORT_CH2 PORTB
-#define LPIN_CH3 (1<<PINA5)
-#define LDD_CH3 DDRA
-#define LPORT_CH3 PORTA
-#define LPIN_CH0 (1<<PINA7)
-#define LDD_CH0 DDRA
-#define LPORT_CH0 PORTA
-#define LPIN_CH1 (1<<PINB1)
-#define LDD_CH1 DDRB
-#define LPORT_CH1 PORTB
-#define PORT_EE PINA //WARNING have to be the same PORT like PINREG because of istat
-#define PIN_EE (1<<PINA0)
-#define TEST_TIMER  ((TIMSK0 & (1<<TOIE0))==0)
-
-
-
-ISR(PCINT0_vect) {
-	if (((PIN_REG&PIN_CH0)==0)&&((istat&PIN_CH0)==PIN_CH0)) {	counters.c32[0]++;	LPORT_CH2|=LPIN_CH2;}
-	if (((PIN_REG&PIN_CH1)==0)&&((istat&PIN_CH1)==PIN_CH1)) {	counters.c32[1]++;	LPORT_CH2|=LPIN_CH2;}
-	if (((PIN_REG&PIN_CH2)==0)&&((istat&PIN_CH2)==PIN_CH2)) {	counters.c32[2]++;	LPORT_CH2|=LPIN_CH2;}
-	if (((PIN_REG&PIN_CH3)==0)&&((istat&PIN_CH3)==PIN_CH3)) {	counters.c32[3]++;	LPORT_CH2|=LPIN_CH2;}
-
-	if (((PORT_EE&PIN_EE)==0)&&((istat&PIN_EE)==PIN_EE))  {
-		
-		_delay_ms(50);
-	if (((PORT_EE&PIN_EE)==0))  {
-
-		
-
-		LPORT_CH1|=LPIN_CH1;
-		EEARH=0;
-		for(uint8_t i=0;i<16;i++) {
-			uint8_t addr=i^0x0C;
-			while(EECR & (1<<EEPE));
-			EECR = (0<<EEPM1)|(0<<EEPM0);
-			EEARL = i;
-			EEDR = counters.c8[addr];
-			EECR |= (1<<EEMPE);
-			EECR |= (1<<EEPE);
-		}
-		_delay_ms(250);
-		LPORT_CH1&=~LPIN_CH1;
-
-	}
-	GIFR|=(1<<PCIF0);
-	}
-	if ((((PINA&(1<<PINA6)))==0)&&((istat&(1<<PINA6))==(1<<PINA6)))   {
-		_delay_ms(100);
-		if (((PINA&(1<<PINA6)))==0) {
-			LPORT_CH3|=LPIN_CH3;
-			_delay_ms(100);
-
-			counters.c32[0]=0;
-			counters.c32[2]=0;
-			counters.c32[1]=0;
-			counters.c32[3]=0;
-			LPORT_CH3&=~LPIN_CH3;
-			}
-		GIFR|=(1<<PCIF0);
-
-	}
-	istat=PIN_REG;
-	
-}
-
-
-int main(void){
-    PRR|=(1<<PRUSI)|(1<<PRADC);  //Switch off usi and adc for save Power
-	OWINIT();
-	
-	pack.zero=0;
-	counters.c32[0]=0;
-	counters.c32[2]=0;
-	counters.c32[1]=0;
-	counters.c32[3]=0;
-	ACSR|=(1<<ACD);  //Disable Comparator
-	ADCSRB|=(1<<ACME); //Disable Analog multiplexer
-	MCUCR &=~(1<<PUD); //All Pins Pullup...
-
-	PORTB|=0xFF-(1<<PINB2); //Make PullUp an all Pins but not OW_PIN
-	PORTA|=0xFF; 
-	PORTA&=~((1<<PINA1)|(1<<PINA2)|(1<<PINA3)|(1<<PINA4));
-				
-	GIMSK|=(1<<PCIE0);
-	PCMSK0=(1<<PCINT1)|(1<<PCINT2)|(1<<PCINT3)|(1<<PCINT4);
-	//Spannungsdetektor
-	DDRA&=~(1<<PINA0);
-	PCMSK0|=(1<<PCINT0);
-	PORTA&=~(1<<PINA0);
-	//Taster
-	DDRA&=~(1<<PINA6);
-	PCMSK0|=(1<<PCINT6);
-	PORTA|=(1<<PINA6); //Pullup
-
-
-
-	LDD_CH0|=LPIN_CH0;
-	LPORT_CH0&=~LPIN_CH0;
-	LDD_CH1|=LPIN_CH1;
-	LPORT_CH1&=~LPIN_CH1;
-	LDD_CH2|=LPIN_CH2;
-	LPORT_CH2&=~LPIN_CH2;
-	LDD_CH3|=LPIN_CH3;
-	LPORT_CH3&=~LPIN_CH3;
-
-
-
-	LPORT_CH0|=LPIN_CH0;
-	_delay_ms(500);
-	LPORT_CH0&=~LPIN_CH0;
-	
-	istat=PINA;
-	EEARH=0;
-	uint8_t addr;
-	for(uint8_t i=0;i<16;i++) {
-		addr=i^0x0C;
-		while(EECR & (1<<EEPE));   
-		EEARL=i;
-		EECR |= (1<<EERE);
-		counters.c8[addr]=EEDR;
-	}
-	for (uint8_t i=0;i<4;i++) {
-		if (counters.c32[i]==0xFFFFFFFF) counters.c32[i]=0;
-		//counters.c32[i]=0;
-	}
-
-   
-	sei();
-    while(1)   {
-	    if (LPORT_CH2&LPIN_CH2) {
-			_delay_ms(50);
-			LPORT_CH2&=~LPIN_CH2;
-		}
-		//Test if timer active and no sleep then Idle else Power Down
-		if (TEST_TIMER&&(mode==0)) {
-			MCUCR|=(1<<SE)|(1<<SM1); //Power Down, only low level on 1-Wire and pin change on PCINT wakes up
-			MCUCR&=~(1<<ISC01);
-		} else {
-			MCUCR|=(1<<SE);
-			MCUCR&=~(1<<SM1); 
-		}
-		asm("SLEEP");
-   }
+
+// Copyright (c) 2016, Tobias Mueller tm(at)tm3d.de
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//  * Redistributions of source code must retain the above copyright
+//    notice, this list of conditions and the following disclaimer.
+//  * Redistributions in binary form must reproduce the above copyright
+//    notice, this list of conditions and the following disclaimer in the
+//    documentation and/or other materials provided with the
+//    distribution.
+//  * All advertising materials mentioning features or use of this
+//    software must display the following acknowledgement: This product
+//    includes software developed by tm3d.de and its contributors.
+//  * Neither the name of tm3d.de nor the names of its contributors may
+//    be used to endorse or promote products derived from this software
+//    without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+#define F_CPU 8000000UL
+#include <avr/io.h>
+#include <avr/interrupt.h>
+#include <util/delay.h>
+#include <avr/wdt.h>
+#include <avr/sleep.h>
+
+
+
+
+extern void OWINIT();
+
+uint8_t owid[8]={0x1D, 0xA2, 0xD9, 0x84, 0x00, 0x26, 0x02, 0x5C};/**/
+uint8_t config_info[16]={0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
+
+	
+
+extern uint8_t mode;
+extern uint8_t gcontrol;
+extern uint8_t reset_indicator;
+
+
+volatile uint8_t wdcounter;
+
+
+
+
+typedef union {
+	volatile uint8_t bytes[45];
+	struct {
+		uint16_t addr;
+		uint8_t status;
+		uint8_t scratch[32];//3
+		uint32_t counter;  //35
+		uint32_t zero;   //39
+		uint16_t crc;  //43
+	};
+} counterpack_t;
+counterpack_t pack;
+
+typedef union {
+	uint32_t c32[4];
+	uint8_t c8[16];
+} counters_t;
+
+volatile counters_t counters;
+
+volatile uint8_t istat;
+
+#define PCINT_VECTOR PCINT0_vect
+#define PIN_REG PINA
+#define PIN_DDR DDRA
+#define PIN_CH0 (1<<PINA3)
+#define PIN_CH1 (1<<PINA4)
+#define PIN_CH2 (1<<PINA1)
+#define PIN_CH3 (1<<PINA2)
+#define LPIN_CH2 (1<<PINB0)
+#define LDD_CH2 DDRB
+#define LPORT_CH2 PORTB
+#define LPIN_CH3 (1<<PINA5)
+#define LDD_CH3 DDRA
+#define LPORT_CH3 PORTA
+#define LPIN_CH0 (1<<PINA7)
+#define LDD_CH0 DDRA
+#define LPORT_CH0 PORTA
+#define LPIN_CH1 (1<<PINB1)
+#define LDD_CH1 DDRB
+#define LPORT_CH1 PORTB
+#define PORT_EE PINA //WARNING have to be the same PORT like PINREG because of istat
+#define PIN_EE (1<<PINA0)
+#define TEST_TIMER  ((TIMSK0 & (1<<TOIE0))==0)
+
+
+
+ISR(PCINT0_vect) {
+	if (((PIN_REG&PIN_CH0)==0)&&((istat&PIN_CH0)==PIN_CH0)) {	counters.c32[0]++;	LPORT_CH2|=LPIN_CH2;}
+	if (((PIN_REG&PIN_CH1)==0)&&((istat&PIN_CH1)==PIN_CH1)) {	counters.c32[1]++;	LPORT_CH2|=LPIN_CH2;}
+	if (((PIN_REG&PIN_CH2)==0)&&((istat&PIN_CH2)==PIN_CH2)) {	counters.c32[2]++;	LPORT_CH2|=LPIN_CH2;}
+	if (((PIN_REG&PIN_CH3)==0)&&((istat&PIN_CH3)==PIN_CH3)) {	counters.c32[3]++;	LPORT_CH2|=LPIN_CH2;}
+
+	if (((PORT_EE&PIN_EE)==0)&&((istat&PIN_EE)==PIN_EE))  {
+		
+		_delay_ms(50);
+	if (((PORT_EE&PIN_EE)==0))  {
+
+		
+
+		LPORT_CH1|=LPIN_CH1;
+		EEARH=0;
+		for(uint8_t i=0;i<16;i++) {
+			uint8_t addr=i^0x0C;
+			while(EECR & (1<<EEPE));
+			EECR = (0<<EEPM1)|(0<<EEPM0);
+			EEARL = i;
+			EEDR = counters.c8[addr];
+			EECR |= (1<<EEMPE);
+			EECR |= (1<<EEPE);
+		}
+		_delay_ms(250);
+		LPORT_CH1&=~LPIN_CH1;
+
+	}
+	GIFR|=(1<<PCIF0);
+	}
+	if ((((PINA&(1<<PINA6)))==0)&&((istat&(1<<PINA6))==(1<<PINA6)))   {
+		_delay_ms(100);
+		if (((PINA&(1<<PINA6)))==0) {
+			LPORT_CH3|=LPIN_CH3;
+			_delay_ms(100);
+
+			counters.c32[0]=0;
+			counters.c32[2]=0;
+			counters.c32[1]=0;
+			counters.c32[3]=0;
+			LPORT_CH3&=~LPIN_CH3;
+			}
+		GIFR|=(1<<PCIF0);
+
+	}
+	istat=PIN_REG;
+	
+}
+
+
+int main(void){
+    PRR|=(1<<PRUSI)|(1<<PRADC);  //Switch off usi and adc for save Power
+	OWINIT();
+	
+	pack.zero=0;
+	counters.c32[0]=0;
+	counters.c32[2]=0;
+	counters.c32[1]=0;
+	counters.c32[3]=0;
+	ACSR|=(1<<ACD);  //Disable Comparator
+	ADCSRB|=(1<<ACME); //Disable Analog multiplexer
+	MCUCR &=~(1<<PUD); //All Pins Pullup...
+
+	PORTB|=0xFF-(1<<PINB2); //Make PullUp an all Pins but not OW_PIN
+	PORTA|=0xFF; 
+	PORTA&=~((1<<PINA1)|(1<<PINA2)|(1<<PINA3)|(1<<PINA4));
+				
+	GIMSK|=(1<<PCIE0);
+	PCMSK0=(1<<PCINT1)|(1<<PCINT2)|(1<<PCINT3)|(1<<PCINT4);
+	//Spannungsdetektor
+	DDRA&=~(1<<PINA0);
+	PCMSK0|=(1<<PCINT0);
+	PORTA&=~(1<<PINA0);
+	//Taster
+	DDRA&=~(1<<PINA6);
+	PCMSK0|=(1<<PCINT6);
+	PORTA|=(1<<PINA6); //Pullup
+
+
+
+	LDD_CH0|=LPIN_CH0;
+	LPORT_CH0&=~LPIN_CH0;
+	LDD_CH1|=LPIN_CH1;
+	LPORT_CH1&=~LPIN_CH1;
+	LDD_CH2|=LPIN_CH2;
+	LPORT_CH2&=~LPIN_CH2;
+	LDD_CH3|=LPIN_CH3;
+	LPORT_CH3&=~LPIN_CH3;
+
+
+
+	LPORT_CH0|=LPIN_CH0;
+	_delay_ms(500);
+	LPORT_CH0&=~LPIN_CH0;
+	
+	istat=PINA;
+	EEARH=0;
+	uint8_t addr;
+	for(uint8_t i=0;i<16;i++) {
+		addr=i^0x0C;
+		while(EECR & (1<<EEPE));   
+		EEARL=i;
+		EECR |= (1<<EERE);
+		counters.c8[addr]=EEDR;
+	}
+	for (uint8_t i=0;i<4;i++) {
+		if (counters.c32[i]==0xFFFFFFFF) counters.c32[i]=0;
+		//counters.c32[i]=0;
+	}
+
+   
+	sei();
+    while(1)   {
+	    if (LPORT_CH2&LPIN_CH2) {
+			_delay_ms(50);
+			LPORT_CH2&=~LPIN_CH2;
+		}
+		//Test if timer active and no sleep then Idle else Power Down
+		if (TEST_TIMER&&(mode==0)) {
+			MCUCR|=(1<<SE)|(1<<SM1); //Power Down, only low level on 1-Wire and pin change on PCINT wakes up
+			MCUCR&=~(1<<ISC01);
+		} else {
+			MCUCR|=(1<<SE);
+			MCUCR&=~(1<<SM1); 
+		}
+		asm("SLEEP");
+   }
 }
\ No newline at end of file
diff --git a/DS2438_DHT22/DS2438_DHT22.atsln b/DS2438_DHT22/DS2438_DHT22.atsln
index 1c780e5..ea73243 100644
--- a/DS2438_DHT22/DS2438_DHT22.atsln
+++ b/DS2438_DHT22/DS2438_DHT22.atsln
@@ -1,22 +1,22 @@
-
-Microsoft Visual Studio Solution File, Format Version 12.00
-# Atmel Studio Solution File, Format Version 11.00
-VisualStudioVersion = 14.0.23107.0
-MinimumVisualStudioVersion = 10.0.40219.1
-Project("{54F91283-7BC4-4236-8FF9-10F437C3AD48}") = "DS2438_DHT22", "DS2438_DHT22.cproj", "{DCE6C7E3-EE26-4D79-826B-08594B9AD897}"
-EndProject
-Global
-	GlobalSection(SolutionConfigurationPlatforms) = preSolution
-		Debug|AVR = Debug|AVR
-		Release|AVR = Release|AVR
-	EndGlobalSection
-	GlobalSection(ProjectConfigurationPlatforms) = postSolution
-		{DCE6C7E3-EE26-4D79-826B-08594B9AD897}.Debug|AVR.ActiveCfg = Debug|AVR
-		{DCE6C7E3-EE26-4D79-826B-08594B9AD897}.Debug|AVR.Build.0 = Debug|AVR
-		{DCE6C7E3-EE26-4D79-826B-08594B9AD897}.Release|AVR.ActiveCfg = Release|AVR
-		{DCE6C7E3-EE26-4D79-826B-08594B9AD897}.Release|AVR.Build.0 = Release|AVR
-	EndGlobalSection
-	GlobalSection(SolutionProperties) = preSolution
-		HideSolutionNode = FALSE
-	EndGlobalSection
-EndGlobal
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Atmel Studio Solution File, Format Version 11.00
+VisualStudioVersion = 14.0.23107.0
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{54F91283-7BC4-4236-8FF9-10F437C3AD48}") = "DS2438_DHT22", "DS2438_DHT22.cproj", "{DCE6C7E3-EE26-4D79-826B-08594B9AD897}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|AVR = Debug|AVR
+		Release|AVR = Release|AVR
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{DCE6C7E3-EE26-4D79-826B-08594B9AD897}.Debug|AVR.ActiveCfg = Debug|AVR
+		{DCE6C7E3-EE26-4D79-826B-08594B9AD897}.Debug|AVR.Build.0 = Debug|AVR
+		{DCE6C7E3-EE26-4D79-826B-08594B9AD897}.Release|AVR.ActiveCfg = Release|AVR
+		{DCE6C7E3-EE26-4D79-826B-08594B9AD897}.Release|AVR.Build.0 = Release|AVR
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+EndGlobal
diff --git a/DS2438_HDC1080/DS2438_HDC1080.c b/DS2438_HDC1080/DS2438_HDC1080.c
index 9af48ec..a41484a 100644
--- a/DS2438_HDC1080/DS2438_HDC1080.c
+++ b/DS2438_HDC1080/DS2438_HDC1080.c
@@ -1,200 +1,200 @@
-// Copyright (c) 2016, Tobias Mueller tm(at)tm3d.de
-// All rights reserved.
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-//  * Redistributions of source code must retain the above copyright
-//    notice, this list of conditions and the following disclaimer.
-//  * Redistributions in binary form must reproduce the above copyright
-//    notice, this list of conditions and the following disclaimer in the
-//    documentation and/or other materials provided with the
-//    distribution.
-//  * All advertising materials mentioning features or use of this
-//    software must display the following acknowledgement: This product
-//    includes software developed by tm3d.de and its contributors.
-//  * Neither the name of tm3d.de nor the names of its contributors may
-//    be used to endorse or promote products derived from this software
-//    without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-
-#define F_CPU 8000000UL
-#include <avr/io.h>
-#include <avr/interrupt.h>
-#include <util/delay.h>
-#include <avr/wdt.h>
-#include <avr/sleep.h>
-#include <avr/pgmspace.h>
-#include "../common/I2C/USI_TWI_Master.h"
-#include "../common/I2C/HDC1080.h"
-#include "../common/calibr.h"
-
-extern void OWINIT();
-extern void EXTERN_SLEEP();
-
-uint8_t owid[8]={0x26, 0xA2, 0xD9, 0x84, 0x00, 0x00, 0x05, 0x16};/**/
-uint8_t config_info[16]={0x01,0x06, 0x05,0x08, 0x04,0x07, 0x00,0x00, 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
-//uint8_t config_info[16]={0x01,0x06, 0x05,0x08, 0x04,0x08, 0x00,0x00, 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
-	
-
-extern uint8_t mode;
-extern uint8_t gcontrol;
-extern uint8_t reset_indicator;
-extern uint8_t alarmflag;
-
-volatile uint8_t wdcounter=5;
-
-
-typedef union {
-
-	volatile uint8_t bytes[64];
-	struct {
-		uint8_t status;  //1
-		int16_t temp;  //2
-		uint16_t voltage;  //4
-		uint16_t current;  //6
-		uint8_t threshold; //8
-		
-		uint8_t page1[8]; //9
-		uint8_t page2[8]; //17
-		uint8_t page3[8]; //25
-		uint8_t page4[8];  //33
-		uint8_t page5[8];  //41
-		uint8_t page6[8];  //49
-		uint8_t page7[8];  //57
-		//uint8_t crc;  //65
-	};
-} pack_t;
-volatile pack_t pack;
-
-
-
-volatile int16_t am2302_temp;
-volatile uint16_t am2302_hum;
-
-uint8_t userRegister[1];
-int16_t sRH,sT;
-volatile double temperatureC,humidityRH;
-volatile double l;
-
-#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;
-
-
-}
-
-int testSW(void) {
-	uint8_t r;
-	DDRB&=~(1<<PORTB0);  //Eingang
-	 __asm__ __volatile__ ("nop"); 
-	 PORTB|=(1<<PORTB0); //Pullup
-	 __asm__ __volatile__ ("nop"); 
-	 __asm__ __volatile__ ("nop"); 
-	 __asm__ __volatile__ ("nop"); 
-	 __asm__ __volatile__ ("nop"); 
-	 __asm__ __volatile__ ("nop"); 
-	 r=PINB&(1<<PORTB0);
-	 __asm__ __volatile__ ("nop"); 
-	 PORTB&=~(1<<PORTB0); 
-	 __asm__ __volatile__ ("nop"); 
-	DDRB|=(1<<PORTB0);  //Eingang
-	return (r==0);
-	 
-	 
-}
-
-int main(void){
-     PRR|=(1<<PRADC);  // adc for save Power
-	PORTA=0xFF;
-	PORTB=0xFF-(1<<PORTB0); //Schalter kann gegen Masse sein und zieht dann immer Strom
-	DDRB|=(1<<PORTB0); //Als Ausgang und 0
-	
-	
-	OWINIT();
-
-	ACSR|=(1<<ACD);  //Disable Comparator
-	ADCSRB|=(1<<ACME); //Disable Analog multiplexer
-	MCUCR &=~(1<<PUD); //All Pins Pullup...
-	MCUCR |=(1<<BODS);
-
-	
-	WDTCSR |= ((1<<WDCE) );   // Enable the WD Change Bit//| (1<<WDE)
-	WDTCSR |=   (1<<WDIE) |              // Enable WDT Interrupt
-	(1<<WDP3) | (1<<WDP0);   // Set Timeout to ~8 seconds
-	 if (testSW()) {
-		config_info[5]=8;
-	}else{
-		config_info[5]=7;
-	 }
-	
-    uint8_t i;
-    for(i=0;i<64;i++) pack.bytes[i]=0;
-	MCUSR=0;
-	USI_TWI_Master_Initialise();
-	HDC1080_Init();
-	HDC1080_Readf(&temperatureC,&humidityRH);
-	
-	sei();
-	
-	 while(1)   {
-		 if (gcontrol) {
-			 wdcounter=3;
-			 gcontrol=0;
-		 }
-		 if (wdcounter>2) {
-			 //PORTB|=(1<<PINB1); //Dauer 440ms
-			 HDC1080_Readf(&temperatureC,&humidityRH);
-
-			 humidityRH = calibr_hum(temperatureC,-0.2,humidityRH)*10.0;
-			 temperatureC-=0.2;
-			 temperatureC*=10.0;
-			 if (testSW()) {
-				 am2302_hum= humidityRH;
-				 am2302_temp=temperatureC*25.6;
-				 //am2302_temp=am2302_temp-45;
-				 config_info[5]=12;	
-				 
-			 }else{
-				 
-				double hhum=(1.0546-0.000216*temperatureC)*(humidityRH);
-				//am2302_hum=0.318*hhum +76.0;
-				am2302_hum=0.31*hhum +80;
-				am2302_temp=temperatureC*25.6;
-				//am2302_temp=am2302_temp-45;
-				config_info[5]=7;
-			 }
-			 //PORTB&=~(1<<PINB1);
-			 wdcounter=0;
-		 }
-
-		if (((TIMSK0 & (1<<TOIE0))==0)&& (mode==0))	  {
-			MCUCR|=(1<<SE)|(1<<SM1);
-			MCUCR&=~(1<<ISC01);
-		} else {
-			MCUCR|=(1<<SE);
-			MCUCR&=~(1<<SM1);
-		}
-		asm("SLEEP");
-	}
-
-
+// Copyright (c) 2016, Tobias Mueller tm(at)tm3d.de
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//  * Redistributions of source code must retain the above copyright
+//    notice, this list of conditions and the following disclaimer.
+//  * Redistributions in binary form must reproduce the above copyright
+//    notice, this list of conditions and the following disclaimer in the
+//    documentation and/or other materials provided with the
+//    distribution.
+//  * All advertising materials mentioning features or use of this
+//    software must display the following acknowledgement: This product
+//    includes software developed by tm3d.de and its contributors.
+//  * Neither the name of tm3d.de nor the names of its contributors may
+//    be used to endorse or promote products derived from this software
+//    without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+#define F_CPU 8000000UL
+#include <avr/io.h>
+#include <avr/interrupt.h>
+#include <util/delay.h>
+#include <avr/wdt.h>
+#include <avr/sleep.h>
+#include <avr/pgmspace.h>
+#include "../common/I2C/USI_TWI_Master.h"
+#include "../common/I2C/HDC1080.h"
+#include "../common/calibr.h"
+
+extern void OWINIT();
+extern void EXTERN_SLEEP();
+
+uint8_t owid[8]={0x26, 0xA2, 0xD9, 0x84, 0x00, 0x00, 0x05, 0x16};/**/
+uint8_t config_info[16]={0x01,0x06, 0x05,0x08, 0x04,0x07, 0x00,0x00, 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
+//uint8_t config_info[16]={0x01,0x06, 0x05,0x08, 0x04,0x08, 0x00,0x00, 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
+	
+
+extern uint8_t mode;
+extern uint8_t gcontrol;
+extern uint8_t reset_indicator;
+extern uint8_t alarmflag;
+
+volatile uint8_t wdcounter=5;
+
+
+typedef union {
+
+	volatile uint8_t bytes[64];
+	struct {
+		uint8_t status;  //1
+		int16_t temp;  //2
+		uint16_t voltage;  //4
+		uint16_t current;  //6
+		uint8_t threshold; //8
+		
+		uint8_t page1[8]; //9
+		uint8_t page2[8]; //17
+		uint8_t page3[8]; //25
+		uint8_t page4[8];  //33
+		uint8_t page5[8];  //41
+		uint8_t page6[8];  //49
+		uint8_t page7[8];  //57
+		//uint8_t crc;  //65
+	};
+} pack_t;
+volatile pack_t pack;
+
+
+
+volatile int16_t am2302_temp;
+volatile uint16_t am2302_hum;
+
+uint8_t userRegister[1];
+int16_t sRH,sT;
+volatile double temperatureC,humidityRH;
+volatile double l;
+
+#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;
+
+
+}
+
+int testSW(void) {
+	uint8_t r;
+	DDRB&=~(1<<PORTB0);  //Eingang
+	 __asm__ __volatile__ ("nop"); 
+	 PORTB|=(1<<PORTB0); //Pullup
+	 __asm__ __volatile__ ("nop"); 
+	 __asm__ __volatile__ ("nop"); 
+	 __asm__ __volatile__ ("nop"); 
+	 __asm__ __volatile__ ("nop"); 
+	 __asm__ __volatile__ ("nop"); 
+	 r=PINB&(1<<PORTB0);
+	 __asm__ __volatile__ ("nop"); 
+	 PORTB&=~(1<<PORTB0); 
+	 __asm__ __volatile__ ("nop"); 
+	DDRB|=(1<<PORTB0);  //Eingang
+	return (r==0);
+	 
+	 
+}
+
+int main(void){
+     PRR|=(1<<PRADC);  // adc for save Power
+	PORTA=0xFF;
+	PORTB=0xFF-(1<<PORTB0); //Schalter kann gegen Masse sein und zieht dann immer Strom
+	DDRB|=(1<<PORTB0); //Als Ausgang und 0
+	
+	
+	OWINIT();
+
+	ACSR|=(1<<ACD);  //Disable Comparator
+	ADCSRB|=(1<<ACME); //Disable Analog multiplexer
+	MCUCR &=~(1<<PUD); //All Pins Pullup...
+	MCUCR |=(1<<BODS);
+
+	
+	WDTCSR |= ((1<<WDCE) );   // Enable the WD Change Bit//| (1<<WDE)
+	WDTCSR |=   (1<<WDIE) |              // Enable WDT Interrupt
+	(1<<WDP3) | (1<<WDP0);   // Set Timeout to ~8 seconds
+	 if (testSW()) {
+		config_info[5]=8;
+	}else{
+		config_info[5]=7;
+	 }
+	
+    uint8_t i;
+    for(i=0;i<64;i++) pack.bytes[i]=0;
+	MCUSR=0;
+	USI_TWI_Master_Initialise();
+	HDC1080_Init();
+	HDC1080_Readf(&temperatureC,&humidityRH);
+	
+	sei();
+	
+	 while(1)   {
+		 if (gcontrol) {
+			 wdcounter=3;
+			 gcontrol=0;
+		 }
+		 if (wdcounter>2) {
+			 //PORTB|=(1<<PINB1); //Dauer 440ms
+			 HDC1080_Readf(&temperatureC,&humidityRH);
+
+			 humidityRH = calibr_hum(temperatureC,-0.2,humidityRH)*10.0;
+			 temperatureC-=0.2;
+			 temperatureC*=10.0;
+			 if (testSW()) {
+				 am2302_hum= humidityRH;
+				 am2302_temp=temperatureC*25.6;
+				 //am2302_temp=am2302_temp-45;
+				 config_info[5]=12;	
+				 
+			 }else{
+				 
+				double hhum=(1.0546-0.000216*temperatureC)*(humidityRH);
+				//am2302_hum=0.318*hhum +76.0;
+				am2302_hum=0.31*hhum +80;
+				am2302_temp=temperatureC*25.6;
+				//am2302_temp=am2302_temp-45;
+				config_info[5]=7;
+			 }
+			 //PORTB&=~(1<<PINB1);
+			 wdcounter=0;
+		 }
+
+		if (((TIMSK0 & (1<<TOIE0))==0)&& (mode==0))	  {
+			MCUCR|=(1<<SE)|(1<<SM1);
+			MCUCR&=~(1<<ISC01);
+		} else {
+			MCUCR|=(1<<SE);
+			MCUCR&=~(1<<SM1);
+		}
+		asm("SLEEP");
+	}
+
+
 }
\ No newline at end of file
diff --git a/DS2450_SHT2X_BMP280/DS2450_SHT2X_BMP280.c b/DS2450_SHT2X_BMP280/DS2450_SHT2X_BMP280.c
index 83b8dbc..d641086 100644
--- a/DS2450_SHT2X_BMP280/DS2450_SHT2X_BMP280.c
+++ b/DS2450_SHT2X_BMP280/DS2450_SHT2X_BMP280.c
@@ -1,311 +1,311 @@
-
-// Copyright (c) 2015, Tobias Mueller tm(at)tm3d.de
-// All rights reserved.
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-//  * Redistributions of source code must retain the above copyright
-//    notice, this list of conditions and the following disclaimer.
-//  * Redistributions in binary form must reproduce the above copyright
-//    notice, this list of conditions and the following disclaimer in the
-//    documentation and/or other materials provided with the
-//    distribution.
-//  * All advertising materials mentioning features or use of this
-//    software must display the following acknowledgement: This product
-//    includes software developed by tm3d.de and its contributors.
-//  * Neither the name of tm3d.de nor the names of its contributors may
-//    be used to endorse or promote products derived from this software
-//    without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-#define F_CPU 8000000UL
-#include <avr/io.h>
-#include <avr/interrupt.h>
-#include <util/delay.h>
-#include <avr/wdt.h>
-#include <avr/sleep.h>
-#include <avr/pgmspace.h>
-#include "../common/I2C/USI_TWI_Master.h"
-#include "../common/I2C/SHT2x.h"
-#include "../common/I2C/BMP280.h"
-extern void OWINIT();
-extern void EXTERN_SLEEP();
-
-uint8_t owid[8]={0x20, 0xA2, 0xD9, 0x84, 0x00, 0x16, 0x02, 0x5D};/**/
-uint8_t config_info[16]={0x01,14,0x04,0x08,  0x06,0x09, 0x02,16,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
-
-#if (owid>128) 
-#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=10;
-
-
-#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;
-}
-
-typedef union {
-	volatile uint8_t bytes[0x20];
-	struct {
-		//Page0
-		uint16_t A;  //0
-		uint16_t B;  //2
-		uint16_t C;  //4
-		uint16_t D;  //6
-		//Page1
-		uint8_t CSA1;
-		uint8_t CSA2;
-		uint8_t CSB1;
-		uint8_t CSB2;
-		uint8_t CSC1;
-		uint8_t CSC2;
-		uint8_t CSD1;
-		uint8_t CSD2;
-		//Page2
-		uint8_t LA;
-		uint8_t HA;
-		uint8_t LB;
-		uint8_t HB;
-		uint8_t LC;
-		uint8_t HC;
-		uint8_t LD;
-		uint8_t HD;
-		//Page3
-		uint8_t FC1;
-		uint8_t FC2;
-		uint8_t FC3;
-		uint8_t FC4;
-		uint8_t VCCP;
-		uint8_t FC5;
-		uint8_t FC6;
-		uint8_t FC7;
-		uint8_t convc1;
-		uint8_t convc2;
-		
-		
-	};
-} pack_t;
-volatile pack_t pack;
-
-
-
-volatile int16_t am2302_temp;
-volatile uint16_t am2302_hum;
-
-
-uint8_t userRegister[1];
-int16_t sRH,sT;
-volatile double temperatureC,humidityRH;
-uint32_t P;
-int32_t t;
-
-
-
-
-int main(void){
-	pack.A=0;
-	pack.B=0;
-	pack.C=0;
-	pack.D=0;
-	pack.CSA1=0x08;
-	pack.CSA2=0x8C;
-	pack.CSB1=0x08;
-	pack.CSB2=0x8C;
-	pack.CSC1=0x08;
-	pack.CSC2=0x8C;
-	pack.CSD1=0x08;
-	pack.CSD2=0x8C;
-	pack.HA=0xFF;
-	pack.LA=0x00;
-	pack.HB=0xFF;
-	pack.LB=0x00;
-	pack.HC=0xFF;
-	pack.LC=0x00;
-	pack.HD=0xFF;
-	pack.LD=0x00;
-	pack.VCCP=0;
-    PORTB=0xFF-(1<<PORTB0); //Schalter kann gegen Masse sein und zieht dann immer Strom
-	DDRB|=(1<<PORTB0); //Als Ausgang und 0
-	PORTA=0xFF;  //All Pull up;
-	 PRR|=(1<<PRADC);  // adc for save Power
-
-	ACSR|=(1<<ACD);  //Disable Comparator
-	OWINIT();
-
-	MCUCR &=~(1<<PUD); //All Pins Pullup...
-	MCUCR |=(1<<BODS);
-	WDTCSR |= ((1<<WDCE) );   // Enable the WD Change Bit//| (1<<WDE)
-	WDTCSR |=   (1<<WDIE) |              // Enable WDT Interrupt
-	(1<<WDP3) | (1<<WDP0);   // Set Timeout to ~8 seconds
-	
-	gcontrol=1;
-	
-	USI_TWI_Master_Initialise();
-	bmp280Init();
-	SHT2x_SoftReset();
-	SHT2x_ReadUserRegister(userRegister);
-	//(userRegister & ~SHT2x_RES_MASK) | SHT2x_RES_10_13BIT;
-	SHT2x_WriteUserRegister(userRegister); //write changed user reg
-	// --- measure humidity with "Hold Master Mode (HM)" ---
-	//SHT2x_MeasurePoll(HUMIDITY, &sRH);
-	// --- measure temperature with "Polling Mode" (no hold master) ---
-	//SHT2x_MeasurePoll(TEMP, &sT);
-	//-- calculate humidity and temperature --
-	//temperatureC = SHT2x_CalcTemperatureC(sT);
-	//humidityRH = SHT2x_CalcRH(sRH);
-	
-	sei();
-	
-	//DDRB|=(1<<PINB1);
-
-    while(1)   {
-	
-	if (wdcounter>3) {	
-		SHT2x_MeasurePoll(HUMIDITY, &sRH);
-		// --- measure temperature with "Polling Mode" (no hold master) ---
-		SHT2x_MeasurePoll(TEMP, &sT);
-		//-- calculate humidity and temperature --
-		temperatureC = SHT2x_CalcTemperatureC(sT);
-		humidityRH = SHT2x_CalcRH(sRH);
-		bmp280ConvertInt(&t,&P,1);
-		wdcounter=0;
-	}
-	
-
-		
-		
-
-
-		if (gcontrol) {
-			//PORTB|=(1<<PINB1);
-			uint8_t bb=1;
-			uint8_t bb1=1;
-			for(uint8_t i=0;i<4;i++){
-				if (pack.convc1&bb1) {
-					if (pack.convc2&(bb)) {pack.bytes[i*2]=0;pack.bytes[i*2+1]=0;}
-					bb=bb<<1;
-					if (pack.convc2&(bb)) {pack.bytes[i*2]=0xFF;pack.bytes[i*2+1]=0xFF;}
-					bb=bb<<1;
-				} else bb=bb<<2;
-				bb1=bb1<<1;				
-			}
-			//CHanel A
-			if (pack.convc1&1) {
-				/*if (pack.CSA2&0x01)	ADMUX=0; else ADMUX=0x80;
-				_delay_us(100);
-				ADCSRA|=(1<<ADSC);
-				while ((ADCSRA&(1<<ADSC)));
-				cli();pack.A=ADC;sei();*/
-				uint16_t ct=(temperatureC*100.0)+32767;
-				cli();pack.A=ct;sei();
-				wdcounter=10;
-				alarmflag=0;
-				
-				if (pack.CSA2&0x08)  //AEH
-					if (pack.bytes[1]>pack.HA) {alarmflag=1;pack.CSA2|=0x20;}
-				if (pack.CSA2&0x04)  //AEL
-					if (pack.bytes[1]<pack.LA) {alarmflag=1;pack.CSA2|=0x10;}
-			}
-
-			if (pack.convc1&2) {
-				/*if (pack.CSB2&0x01)	ADMUX=1; else ADMUX=0x81;
-				_delay_us(100);
-				ADCSRA|=(1<<ADSC);
-				while ((ADCSRA&(1<<ADSC)));
-				cli();pack.B=ADC;sei();*/
-				wdcounter=10;
-				cli();pack.B=humidityRH*100;sei();
-				if (pack.CSB2&0x08)  //AEH
-					if (pack.bytes[1]>pack.HB) {alarmflag=1;pack.CSB2|=0x20;}
-				if (pack.CSB2&0x04)  //AEL
-					if (pack.bytes[1]<pack.LB) {alarmflag=1;pack.CSB2|=0x10;}
-			}
-
-			if (pack.convc1&4) {
-				/*if (pack.CSC2&0x01)	ADMUX=2; else ADMUX=0x82;
-				_delay_us(100);
-				ADCSRA|=(1<<ADSC);
-				while ((ADCSRA&(1<<ADSC)));
-				cli();pack.C=ADC;sei();*/
-				wdcounter=10;
-				cli();pack.C=0;sei();
-				if (pack.CSC2&0x08)  //AEH
-					if (pack.bytes[1]>pack.HC) {alarmflag=1;pack.CSC2|=0x20;}
-				if (pack.CSC2&0x04)  //AEL
-					if (pack.bytes[1]<pack.LC) {alarmflag=1;pack.CSC2|=0x10;}
-			} 
-			if (pack.convc1&8) {
-				/*if (pack.CSD2&0x01)	ADMUX=3; else ADMUX=0x83;
-				_delay_us(100);
-				ADCSRA|=(1<<ADSC);
-				while ((ADCSRA&(1<<ADSC)));
-				cli();pack.D=ADC;sei();*/
-				wdcounter=10;
-				cli();pack.D=P/100.0*32.0;sei();
-				if (pack.CSD2&0x08)  //AEH
-					if (pack.bytes[1]>pack.HD) {alarmflag=1;pack.CSD2|=0x20;}
-				if (pack.CSD2&0x04)  //AEL
-					if (pack.bytes[1]<pack.LD) {alarmflag=1;pack.CSD2|=0x10;}
-			}
-			
-			EXTERN_SLEEP();
-			//PORTB&=~(1<<PINB1);
-		}
-
-		/*uint8_t bb=1;
-		for(uint8_t i=0;i<4;i++) {
-			if (pack.bytes[8+i*2]&0x80) {  //Chanel as output
-				if (pack.bytes[8+i*2]&0x40) {
-					DDRA|=bb;
-				} else {
-					DDRA&=~bb;
-				}
-			} else {
-				DDRA&=~bb;
-			}
-			bb=bb*2;
-		}*/
-		
-#if  defined(__AVR_ATtiny25__)||defined(__AVR_ATtiny45__)  || defined(__AVR_ATtiny85__)
-			if (((TIMSK & (1<<TOIE0))==0)&& (mode==0))
-#endif			
-#if  defined(__AVR_ATtiny24__)||defined(__AVR_ATtiny44__)  || defined(__AVR_ATtiny84__) ||defined(__AVR_ATtiny24A__)||defined(__AVR_ATtiny44A__)  || defined(__AVR_ATtiny84A__)
-			if (((TIMSK0 & (1<<TOIE0))==0)&& (mode==0))
-#endif
-			  {
-
-			MCUCR|=(1<<SE)|(1<<SM1);
-			MCUCR&=~(1<<ISC01);
-		} else {
-			MCUCR|=(1<<SE);
-			MCUCR&=~(1<<SM1);
-		}
-	//	asm("SLEEP");
-   }
-
-
+
+// Copyright (c) 2015, Tobias Mueller tm(at)tm3d.de
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//  * Redistributions of source code must retain the above copyright
+//    notice, this list of conditions and the following disclaimer.
+//  * Redistributions in binary form must reproduce the above copyright
+//    notice, this list of conditions and the following disclaimer in the
+//    documentation and/or other materials provided with the
+//    distribution.
+//  * All advertising materials mentioning features or use of this
+//    software must display the following acknowledgement: This product
+//    includes software developed by tm3d.de and its contributors.
+//  * Neither the name of tm3d.de nor the names of its contributors may
+//    be used to endorse or promote products derived from this software
+//    without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+#define F_CPU 8000000UL
+#include <avr/io.h>
+#include <avr/interrupt.h>
+#include <util/delay.h>
+#include <avr/wdt.h>
+#include <avr/sleep.h>
+#include <avr/pgmspace.h>
+#include "../common/I2C/USI_TWI_Master.h"
+#include "../common/I2C/SHT2x.h"
+#include "../common/I2C/BMP280.h"
+extern void OWINIT();
+extern void EXTERN_SLEEP();
+
+uint8_t owid[8]={0x20, 0xA2, 0xD9, 0x84, 0x00, 0x16, 0x02, 0x5D};/**/
+uint8_t config_info[16]={0x01,14,0x04,0x08,  0x06,0x09, 0x02,16,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
+
+#if (owid>128) 
+#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=10;
+
+
+#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;
+}
+
+typedef union {
+	volatile uint8_t bytes[0x20];
+	struct {
+		//Page0
+		uint16_t A;  //0
+		uint16_t B;  //2
+		uint16_t C;  //4
+		uint16_t D;  //6
+		//Page1
+		uint8_t CSA1;
+		uint8_t CSA2;
+		uint8_t CSB1;
+		uint8_t CSB2;
+		uint8_t CSC1;
+		uint8_t CSC2;
+		uint8_t CSD1;
+		uint8_t CSD2;
+		//Page2
+		uint8_t LA;
+		uint8_t HA;
+		uint8_t LB;
+		uint8_t HB;
+		uint8_t LC;
+		uint8_t HC;
+		uint8_t LD;
+		uint8_t HD;
+		//Page3
+		uint8_t FC1;
+		uint8_t FC2;
+		uint8_t FC3;
+		uint8_t FC4;
+		uint8_t VCCP;
+		uint8_t FC5;
+		uint8_t FC6;
+		uint8_t FC7;
+		uint8_t convc1;
+		uint8_t convc2;
+		
+		
+	};
+} pack_t;
+volatile pack_t pack;
+
+
+
+volatile int16_t am2302_temp;
+volatile uint16_t am2302_hum;
+
+
+uint8_t userRegister[1];
+int16_t sRH,sT;
+volatile double temperatureC,humidityRH;
+uint32_t P;
+int32_t t;
+
+
+
+
+int main(void){
+	pack.A=0;
+	pack.B=0;
+	pack.C=0;
+	pack.D=0;
+	pack.CSA1=0x08;
+	pack.CSA2=0x8C;
+	pack.CSB1=0x08;
+	pack.CSB2=0x8C;
+	pack.CSC1=0x08;
+	pack.CSC2=0x8C;
+	pack.CSD1=0x08;
+	pack.CSD2=0x8C;
+	pack.HA=0xFF;
+	pack.LA=0x00;
+	pack.HB=0xFF;
+	pack.LB=0x00;
+	pack.HC=0xFF;
+	pack.LC=0x00;
+	pack.HD=0xFF;
+	pack.LD=0x00;
+	pack.VCCP=0;
+    PORTB=0xFF-(1<<PORTB0); //Schalter kann gegen Masse sein und zieht dann immer Strom
+	DDRB|=(1<<PORTB0); //Als Ausgang und 0
+	PORTA=0xFF;  //All Pull up;
+	 PRR|=(1<<PRADC);  // adc for save Power
+
+	ACSR|=(1<<ACD);  //Disable Comparator
+	OWINIT();
+
+	MCUCR &=~(1<<PUD); //All Pins Pullup...
+	MCUCR |=(1<<BODS);
+	WDTCSR |= ((1<<WDCE) );   // Enable the WD Change Bit//| (1<<WDE)
+	WDTCSR |=   (1<<WDIE) |              // Enable WDT Interrupt
+	(1<<WDP3) | (1<<WDP0);   // Set Timeout to ~8 seconds
+	
+	gcontrol=1;
+	
+	USI_TWI_Master_Initialise();
+	bmp280Init();
+	SHT2x_SoftReset();
+	SHT2x_ReadUserRegister(userRegister);
+	//(userRegister & ~SHT2x_RES_MASK) | SHT2x_RES_10_13BIT;
+	SHT2x_WriteUserRegister(userRegister); //write changed user reg
+	// --- measure humidity with "Hold Master Mode (HM)" ---
+	//SHT2x_MeasurePoll(HUMIDITY, &sRH);
+	// --- measure temperature with "Polling Mode" (no hold master) ---
+	//SHT2x_MeasurePoll(TEMP, &sT);
+	//-- calculate humidity and temperature --
+	//temperatureC = SHT2x_CalcTemperatureC(sT);
+	//humidityRH = SHT2x_CalcRH(sRH);
+	
+	sei();
+	
+	//DDRB|=(1<<PINB1);
+
+    while(1)   {
+	
+	if (wdcounter>3) {	
+		SHT2x_MeasurePoll(HUMIDITY, &sRH);
+		// --- measure temperature with "Polling Mode" (no hold master) ---
+		SHT2x_MeasurePoll(TEMP, &sT);
+		//-- calculate humidity and temperature --
+		temperatureC = SHT2x_CalcTemperatureC(sT);
+		humidityRH = SHT2x_CalcRH(sRH);
+		bmp280ConvertInt(&t,&P,1);
+		wdcounter=0;
+	}
+	
+
+		
+		
+
+
+		if (gcontrol) {
+			//PORTB|=(1<<PINB1);
+			uint8_t bb=1;
+			uint8_t bb1=1;
+			for(uint8_t i=0;i<4;i++){
+				if (pack.convc1&bb1) {
+					if (pack.convc2&(bb)) {pack.bytes[i*2]=0;pack.bytes[i*2+1]=0;}
+					bb=bb<<1;
+					if (pack.convc2&(bb)) {pack.bytes[i*2]=0xFF;pack.bytes[i*2+1]=0xFF;}
+					bb=bb<<1;
+				} else bb=bb<<2;
+				bb1=bb1<<1;				
+			}
+			//CHanel A
+			if (pack.convc1&1) {
+				/*if (pack.CSA2&0x01)	ADMUX=0; else ADMUX=0x80;
+				_delay_us(100);
+				ADCSRA|=(1<<ADSC);
+				while ((ADCSRA&(1<<ADSC)));
+				cli();pack.A=ADC;sei();*/
+				uint16_t ct=(temperatureC*100.0)+32767;
+				cli();pack.A=ct;sei();
+				wdcounter=10;
+				alarmflag=0;
+				
+				if (pack.CSA2&0x08)  //AEH
+					if (pack.bytes[1]>pack.HA) {alarmflag=1;pack.CSA2|=0x20;}
+				if (pack.CSA2&0x04)  //AEL
+					if (pack.bytes[1]<pack.LA) {alarmflag=1;pack.CSA2|=0x10;}
+			}
+
+			if (pack.convc1&2) {
+				/*if (pack.CSB2&0x01)	ADMUX=1; else ADMUX=0x81;
+				_delay_us(100);
+				ADCSRA|=(1<<ADSC);
+				while ((ADCSRA&(1<<ADSC)));
+				cli();pack.B=ADC;sei();*/
+				wdcounter=10;
+				cli();pack.B=humidityRH*100;sei();
+				if (pack.CSB2&0x08)  //AEH
+					if (pack.bytes[1]>pack.HB) {alarmflag=1;pack.CSB2|=0x20;}
+				if (pack.CSB2&0x04)  //AEL
+					if (pack.bytes[1]<pack.LB) {alarmflag=1;pack.CSB2|=0x10;}
+			}
+
+			if (pack.convc1&4) {
+				/*if (pack.CSC2&0x01)	ADMUX=2; else ADMUX=0x82;
+				_delay_us(100);
+				ADCSRA|=(1<<ADSC);
+				while ((ADCSRA&(1<<ADSC)));
+				cli();pack.C=ADC;sei();*/
+				wdcounter=10;
+				cli();pack.C=0;sei();
+				if (pack.CSC2&0x08)  //AEH
+					if (pack.bytes[1]>pack.HC) {alarmflag=1;pack.CSC2|=0x20;}
+				if (pack.CSC2&0x04)  //AEL
+					if (pack.bytes[1]<pack.LC) {alarmflag=1;pack.CSC2|=0x10;}
+			} 
+			if (pack.convc1&8) {
+				/*if (pack.CSD2&0x01)	ADMUX=3; else ADMUX=0x83;
+				_delay_us(100);
+				ADCSRA|=(1<<ADSC);
+				while ((ADCSRA&(1<<ADSC)));
+				cli();pack.D=ADC;sei();*/
+				wdcounter=10;
+				cli();pack.D=P/100.0*32.0;sei();
+				if (pack.CSD2&0x08)  //AEH
+					if (pack.bytes[1]>pack.HD) {alarmflag=1;pack.CSD2|=0x20;}
+				if (pack.CSD2&0x04)  //AEL
+					if (pack.bytes[1]<pack.LD) {alarmflag=1;pack.CSD2|=0x10;}
+			}
+			
+			EXTERN_SLEEP();
+			//PORTB&=~(1<<PINB1);
+		}
+
+		/*uint8_t bb=1;
+		for(uint8_t i=0;i<4;i++) {
+			if (pack.bytes[8+i*2]&0x80) {  //Chanel as output
+				if (pack.bytes[8+i*2]&0x40) {
+					DDRA|=bb;
+				} else {
+					DDRA&=~bb;
+				}
+			} else {
+				DDRA&=~bb;
+			}
+			bb=bb*2;
+		}*/
+		
+#if  defined(__AVR_ATtiny25__)||defined(__AVR_ATtiny45__)  || defined(__AVR_ATtiny85__)
+			if (((TIMSK & (1<<TOIE0))==0)&& (mode==0))
+#endif			
+#if  defined(__AVR_ATtiny24__)||defined(__AVR_ATtiny44__)  || defined(__AVR_ATtiny84__) ||defined(__AVR_ATtiny24A__)||defined(__AVR_ATtiny44A__)  || defined(__AVR_ATtiny84A__)
+			if (((TIMSK0 & (1<<TOIE0))==0)&& (mode==0))
+#endif
+			  {
+
+			MCUCR|=(1<<SE)|(1<<SM1);
+			MCUCR&=~(1<<ISC01);
+		} else {
+			MCUCR|=(1<<SE);
+			MCUCR&=~(1<<SM1);
+		}
+	//	asm("SLEEP");
+   }
+
+
 }
\ No newline at end of file
diff --git a/DS2450_SHT2X_BMP280/OWDS2450.S b/DS2450_SHT2X_BMP280/OWDS2450.S
index aec56b7..1d81abd 100644
--- a/DS2450_SHT2X_BMP280/OWDS2450.S
+++ b/DS2450_SHT2X_BMP280/OWDS2450.S
@@ -1,247 +1,247 @@
-
-// Copyright (c) 2015, Tobias Mueller tm(at)tm3d.de
-// All rights reserved. 
-// 
-// Redistribution and use in source and binary forms, with or without 
-// modification, are permitted provided that the following conditions are 
-// met: 
-// 
-//  * Redistributions of source code must retain the above copyright 
-//    notice, this list of conditions and the following disclaimer. 
-//  * Redistributions in binary form must reproduce the above copyright 
-//    notice, this list of conditions and the following disclaimer in the 
-//    documentation and/or other materials provided with the 
-//    distribution. 
-//  * All advertising materials mentioning features or use of this 
-//    software must display the following acknowledgement: This product 
-//    includes software developed by tm3d.de and its contributors. 
-//  * Neither the name of tm3d.de nor the names of its contributors may 
-//    be used to endorse or promote products derived from this software 
-//    without specific prior written permission. 
-// 
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
-
-#define _CHANGEABLE_ID_
-#define _ZERO_POLLING_
-
-#include "../common/OWConfig.s"
-#include "../common/OWCRC16.s"
-
-.extern pack,8
-.comm addr,1 ;zweites Adressbyte ist unnoetig (Warum auch immer fuer 32 Byte 16 Bit Adressen verwendet werden....)
-.comm crcsave,1 ; zwischenspeicherspeicher fuer crc nur zweites byte....
-//.extern  am2302_temp,2
-
-
-
-.macro CHIP_INIT 	
-.endm
-
-.macro COMMAND_TABLE
-		rjmp h_readmemoryaddr
-		rjmp h_readmemory
-		rjmp h_readmemorycrc1
-		rjmp h_readmemorycrc2
-		rjmp h_writememoryaddr
-		rjmp h_writememory
-		rjmp h_writememorycrc1
-		rjmp h_writememorycrc2
-		rjmp h_writememoryreadback
-		rjmp h_convert
-		rjmp h_convertcrc1
-		rjmp h_convertcrc2
-		rjmp h_convert_conv
-.endm
-
-#include "../common/OWRomFunctions.s"
-#include "../common/OWTimerInterrupt.s"
-
-
-
-; Ab hier Geraeteabhaenging
-#define OW_READ_MEMORY_ADDR OW_FIRST_COMMAND+0
-#define OW_READ_MEMORY OW_FIRST_COMMAND+1
-#define OW_READ_MEMORY_CRC1 OW_FIRST_COMMAND+2
-#define OW_READ_MEMORY_CRC2 OW_FIRST_COMMAND+3
-#define OW_WRITE_MEMORY_ADDR OW_FIRST_COMMAND+4
-#define OW_WRITE_MEMORY OW_FIRST_COMMAND+5
-#define OW_WRITE_MEMORY_CRC1 OW_FIRST_COMMAND+6
-#define OW_WRITE_MEMORY_CRC2 OW_FIRST_COMMAND+7
-#define OW_WRITE_MEMORY_READBACK OW_FIRST_COMMAND+8
-#define OW_CONVERT OW_FIRST_COMMAND+9
-#define OW_CONVERT_CRC1 OW_FIRST_COMMAND+10
-#define OW_CONVERT_CRC2 OW_FIRST_COMMAND+11
-#define OW_CONVERT_CONV OW_FIRST_COMMAND+12
-
-;---------------------------------------------------
-;	READ COMMAND and start operation
-;---------------------------------------------------
-
-
-h_readcommand:
-	clr r_bytep
-#ifndef _DIS_FLASH_
-	FLASH_COMMANDS ; muss zu erst sein....
-#endif
-	cset 0xAA,OW_READ_MEMORY_ADDR
-	cset 0x55,OW_WRITE_MEMORY_ADDR
-	cset 0x3C,OW_CONVERT
-	FW_CONFIG_INFO
-#ifdef _CHANGEABLE_ID_
-	CHANGE_ID_COMMANDS
-#endif
-	ldi r_mode,OW_SLEEP
-	rjmp handle_end
-
-
-h_readmemoryaddr:
-	cpi r_bytep,0  ;erstes Adressbyte ?
-	brne h_readmemory_addr_byte1 ;nein dann weiter
-	andi r_rwbyte,0x1F  ; nur Adressen zwischen 0 und 0x1F zulassen
-	sts addr,r_rwbyte  ;speichern des ersten bytes
-	rjmp handle_end_inc
-h_readmemory_addr_byte1:  ;zweiters Addressbyte wird nicht gespeichert!
-	ldi r_mode,OW_READ_MEMORY ;weiter zu read Memory
-	;;ldi r_bcount,1 ;ist unten
-	ldi r_sendflag,1 ;jetzt sendet der Slave zum Master
-	clr r_bytep
-	rjmp h_readmemory2
-h_readmemory:
-	lds r_bytep,addr
-	inc r_bytep
-	sts addr,r_bytep
-	andi r_bytep,0x07
-	breq h_readmemory_init_crc
-h_readmemory2:
-	lds r_bytep,addr
-	;andi r_bytep,0x1F ist oben
-	configZ pack,r_bytep
-	ld   r_rwbyte,Z
-	;ldi r_bcount,1
-	rjmp handle_end ;sendet das Byte und geht zu h_readmemory
-h_readmemory_init_crc:; init erstes CRC byte
-	lds r_rwbyte,crc
-	com r_rwbyte
-	lds r_temp,crc+1
-	com r_temp
-	sts crcsave,r_temp
-	ldi r_mode,OW_READ_MEMORY_CRC1
-	;ldi r_bcount,1
-	rjmp handle_end
-h_readmemory_end:
-	ldi  r_mode,OW_SLEEP
-	clr r_sendflag
-	rjmp handle_end
-h_readmemorycrc1:;init zweites CRC Byte
-	lds r_rwbyte,crcsave
-	;ldi r_bcount,1
-	ldi r_mode,OW_READ_MEMORY_CRC2
-	rjmp handle_end
-h_readmemorycrc2:;weiteres senden..... nach zweitem Byte
-	lds r_temp,addr
-	andi r_temp,0xE0
-	brne h_readmemory_end; ende des speichers
-	ldi r_mode,OW_READ_MEMORY
-	CRCInit1 ;Start with new CRC
-	rjmp h_readmemory2
-
-h_writememoryaddr:
-	cpi r_bytep,0  ;erstes Adressbyte ?
-	brne h_writememory_addr_byte1 ;nein dann weiter
-	andi r_rwbyte,0x1F  ; nur Adressen zwischen 0 und 0x1F zulassen
-	sts addr,r_rwbyte  ;speichern des ersten bytes
-	inc r_bytep
-	;ldi r_bcount,1
-	rjmp handle_end
-h_writememory_addr_byte1:  ;zweiters Addressbyte wird nicht gespeichert!
-	ldi r_mode,OW_WRITE_MEMORY ;weiter zu read Memory
-	;ldi r_bcount,1 ;; _________________________________________________in handle_end integrieren.....
-	lds r_bytep,addr
-	rjmp handle_end ;read Memory Byte
-h_writememory:
-	lds r_bytep,addr
-	configZ pack,r_bytep
-	st Z,r_rwbyte
-	;ldi r_bcount,1
-	ldi r_mode,OW_WRITE_MEMORY_CRC1
-	ldi r_sendflag,1 ;jetzt sendet der Slave zum Master
-	lds r_rwbyte,crc
-	com r_rwbyte
-	lds r_temp,crc+1
-	com r_temp
-	sts crcsave,r_temp
-	rjmp handle_end
-h_writememorycrc1:
-	lds r_rwbyte,crcsave
-	;ldi r_bcount,1
-	ldi r_mode,OW_WRITE_MEMORY_CRC2
-	rjmp handle_end
-h_writememorycrc2:
-	lds r_temp,addr
-	configZ pack,r_temp
-	ld r_rwbyte,Z
-	;ldi r_bcount,1
-	ldi r_mode,OW_WRITE_MEMORY_READBACK
-	rjmp handle_end
-h_writememoryreadback:
-	ldi r_temp,0x00
-	sts crc+1,r_temp
-	lds r_temp,addr
-	inc r_temp
-	sts addr,r_temp
-	sts crc,r_temp
-	ldi r_sendflag,0
-	;ldi r_bcount,1
-	ldi r_mode,OW_WRITE_MEMORY
-	rjmp handle_end
-
-h_convert:
-	cpi r_bytep,0  ;erstes Adressbyte ?
-	brne h_convert_byte1 ;nein dann weiter
-	inc r_bytep
-	sts pack+0x20,r_rwbyte
-	;ldi r_bcount,1
-	rjmp handle_end
-h_convert_byte1: ;zweies byte glesen go crc#
-	sts pack+0x21,r_rwbyte
-	lds r_rwbyte,crc
-	com r_rwbyte
-	lds r_temp,crc+1
-	com r_temp
-	sts crcsave,r_temp
-	ldi r_mode,OW_CONVERT_CRC1
-	;ldi r_bcount,1
-	ldi r_sendflag,1
-	rjmp handle_end	
-h_convertcrc1:
-	lds r_rwbyte,crcsave
-	;ldi r_bcount,1
-	ldi r_mode,OW_CONVERT_CRC2
-	rjmp handle_end
-h_convertcrc2:
-	ldi r_temp,1
-	sts gcontrol,r_temp
-	;ldi r_bcount,1
-	ldi r_mode,OW_CONVERT_CONV
-	;clr r_sendflag
-	ldi r_sendflag,3 ;set bit 0 and 1 for no zero polling
-h_convert_conv:
-	ldi r_bcount,0
-	ldi r_rwbyte,0
-	rjmp handle_end_no_bcount	
-
-
-
-
-#include "../common/OWPinInterrupt.s"
+
+// Copyright (c) 2015, Tobias Mueller tm(at)tm3d.de
+// All rights reserved. 
+// 
+// Redistribution and use in source and binary forms, with or without 
+// modification, are permitted provided that the following conditions are 
+// met: 
+// 
+//  * Redistributions of source code must retain the above copyright 
+//    notice, this list of conditions and the following disclaimer. 
+//  * Redistributions in binary form must reproduce the above copyright 
+//    notice, this list of conditions and the following disclaimer in the 
+//    documentation and/or other materials provided with the 
+//    distribution. 
+//  * All advertising materials mentioning features or use of this 
+//    software must display the following acknowledgement: This product 
+//    includes software developed by tm3d.de and its contributors. 
+//  * Neither the name of tm3d.de nor the names of its contributors may 
+//    be used to endorse or promote products derived from this software 
+//    without specific prior written permission. 
+// 
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
+
+#define _CHANGEABLE_ID_
+#define _ZERO_POLLING_
+
+#include "../common/OWConfig.s"
+#include "../common/OWCRC16.s"
+
+.extern pack,8
+.comm addr,1 ;zweites Adressbyte ist unnoetig (Warum auch immer fuer 32 Byte 16 Bit Adressen verwendet werden....)
+.comm crcsave,1 ; zwischenspeicherspeicher fuer crc nur zweites byte....
+//.extern  am2302_temp,2
+
+
+
+.macro CHIP_INIT 	
+.endm
+
+.macro COMMAND_TABLE
+		rjmp h_readmemoryaddr
+		rjmp h_readmemory
+		rjmp h_readmemorycrc1
+		rjmp h_readmemorycrc2
+		rjmp h_writememoryaddr
+		rjmp h_writememory
+		rjmp h_writememorycrc1
+		rjmp h_writememorycrc2
+		rjmp h_writememoryreadback
+		rjmp h_convert
+		rjmp h_convertcrc1
+		rjmp h_convertcrc2
+		rjmp h_convert_conv
+.endm
+
+#include "../common/OWRomFunctions.s"
+#include "../common/OWTimerInterrupt.s"
+
+
+
+; Ab hier Geraeteabhaenging
+#define OW_READ_MEMORY_ADDR OW_FIRST_COMMAND+0
+#define OW_READ_MEMORY OW_FIRST_COMMAND+1
+#define OW_READ_MEMORY_CRC1 OW_FIRST_COMMAND+2
+#define OW_READ_MEMORY_CRC2 OW_FIRST_COMMAND+3
+#define OW_WRITE_MEMORY_ADDR OW_FIRST_COMMAND+4
+#define OW_WRITE_MEMORY OW_FIRST_COMMAND+5
+#define OW_WRITE_MEMORY_CRC1 OW_FIRST_COMMAND+6
+#define OW_WRITE_MEMORY_CRC2 OW_FIRST_COMMAND+7
+#define OW_WRITE_MEMORY_READBACK OW_FIRST_COMMAND+8
+#define OW_CONVERT OW_FIRST_COMMAND+9
+#define OW_CONVERT_CRC1 OW_FIRST_COMMAND+10
+#define OW_CONVERT_CRC2 OW_FIRST_COMMAND+11
+#define OW_CONVERT_CONV OW_FIRST_COMMAND+12
+
+;---------------------------------------------------
+;	READ COMMAND and start operation
+;---------------------------------------------------
+
+
+h_readcommand:
+	clr r_bytep
+#ifndef _DIS_FLASH_
+	FLASH_COMMANDS ; muss zu erst sein....
+#endif
+	cset 0xAA,OW_READ_MEMORY_ADDR
+	cset 0x55,OW_WRITE_MEMORY_ADDR
+	cset 0x3C,OW_CONVERT
+	FW_CONFIG_INFO
+#ifdef _CHANGEABLE_ID_
+	CHANGE_ID_COMMANDS
+#endif
+	ldi r_mode,OW_SLEEP
+	rjmp handle_end
+
+
+h_readmemoryaddr:
+	cpi r_bytep,0  ;erstes Adressbyte ?
+	brne h_readmemory_addr_byte1 ;nein dann weiter
+	andi r_rwbyte,0x1F  ; nur Adressen zwischen 0 und 0x1F zulassen
+	sts addr,r_rwbyte  ;speichern des ersten bytes
+	rjmp handle_end_inc
+h_readmemory_addr_byte1:  ;zweiters Addressbyte wird nicht gespeichert!
+	ldi r_mode,OW_READ_MEMORY ;weiter zu read Memory
+	;;ldi r_bcount,1 ;ist unten
+	ldi r_sendflag,1 ;jetzt sendet der Slave zum Master
+	clr r_bytep
+	rjmp h_readmemory2
+h_readmemory:
+	lds r_bytep,addr
+	inc r_bytep
+	sts addr,r_bytep
+	andi r_bytep,0x07
+	breq h_readmemory_init_crc
+h_readmemory2:
+	lds r_bytep,addr
+	;andi r_bytep,0x1F ist oben
+	configZ pack,r_bytep
+	ld   r_rwbyte,Z
+	;ldi r_bcount,1
+	rjmp handle_end ;sendet das Byte und geht zu h_readmemory
+h_readmemory_init_crc:; init erstes CRC byte
+	lds r_rwbyte,crc
+	com r_rwbyte
+	lds r_temp,crc+1
+	com r_temp
+	sts crcsave,r_temp
+	ldi r_mode,OW_READ_MEMORY_CRC1
+	;ldi r_bcount,1
+	rjmp handle_end
+h_readmemory_end:
+	ldi  r_mode,OW_SLEEP
+	clr r_sendflag
+	rjmp handle_end
+h_readmemorycrc1:;init zweites CRC Byte
+	lds r_rwbyte,crcsave
+	;ldi r_bcount,1
+	ldi r_mode,OW_READ_MEMORY_CRC2
+	rjmp handle_end
+h_readmemorycrc2:;weiteres senden..... nach zweitem Byte
+	lds r_temp,addr
+	andi r_temp,0xE0
+	brne h_readmemory_end; ende des speichers
+	ldi r_mode,OW_READ_MEMORY
+	CRCInit1 ;Start with new CRC
+	rjmp h_readmemory2
+
+h_writememoryaddr:
+	cpi r_bytep,0  ;erstes Adressbyte ?
+	brne h_writememory_addr_byte1 ;nein dann weiter
+	andi r_rwbyte,0x1F  ; nur Adressen zwischen 0 und 0x1F zulassen
+	sts addr,r_rwbyte  ;speichern des ersten bytes
+	inc r_bytep
+	;ldi r_bcount,1
+	rjmp handle_end
+h_writememory_addr_byte1:  ;zweiters Addressbyte wird nicht gespeichert!
+	ldi r_mode,OW_WRITE_MEMORY ;weiter zu read Memory
+	;ldi r_bcount,1 ;; _________________________________________________in handle_end integrieren.....
+	lds r_bytep,addr
+	rjmp handle_end ;read Memory Byte
+h_writememory:
+	lds r_bytep,addr
+	configZ pack,r_bytep
+	st Z,r_rwbyte
+	;ldi r_bcount,1
+	ldi r_mode,OW_WRITE_MEMORY_CRC1
+	ldi r_sendflag,1 ;jetzt sendet der Slave zum Master
+	lds r_rwbyte,crc
+	com r_rwbyte
+	lds r_temp,crc+1
+	com r_temp
+	sts crcsave,r_temp
+	rjmp handle_end
+h_writememorycrc1:
+	lds r_rwbyte,crcsave
+	;ldi r_bcount,1
+	ldi r_mode,OW_WRITE_MEMORY_CRC2
+	rjmp handle_end
+h_writememorycrc2:
+	lds r_temp,addr
+	configZ pack,r_temp
+	ld r_rwbyte,Z
+	;ldi r_bcount,1
+	ldi r_mode,OW_WRITE_MEMORY_READBACK
+	rjmp handle_end
+h_writememoryreadback:
+	ldi r_temp,0x00
+	sts crc+1,r_temp
+	lds r_temp,addr
+	inc r_temp
+	sts addr,r_temp
+	sts crc,r_temp
+	ldi r_sendflag,0
+	;ldi r_bcount,1
+	ldi r_mode,OW_WRITE_MEMORY
+	rjmp handle_end
+
+h_convert:
+	cpi r_bytep,0  ;erstes Adressbyte ?
+	brne h_convert_byte1 ;nein dann weiter
+	inc r_bytep
+	sts pack+0x20,r_rwbyte
+	;ldi r_bcount,1
+	rjmp handle_end
+h_convert_byte1: ;zweies byte glesen go crc#
+	sts pack+0x21,r_rwbyte
+	lds r_rwbyte,crc
+	com r_rwbyte
+	lds r_temp,crc+1
+	com r_temp
+	sts crcsave,r_temp
+	ldi r_mode,OW_CONVERT_CRC1
+	;ldi r_bcount,1
+	ldi r_sendflag,1
+	rjmp handle_end	
+h_convertcrc1:
+	lds r_rwbyte,crcsave
+	;ldi r_bcount,1
+	ldi r_mode,OW_CONVERT_CRC2
+	rjmp handle_end
+h_convertcrc2:
+	ldi r_temp,1
+	sts gcontrol,r_temp
+	;ldi r_bcount,1
+	ldi r_mode,OW_CONVERT_CONV
+	;clr r_sendflag
+	ldi r_sendflag,3 ;set bit 0 and 1 for no zero polling
+h_convert_conv:
+	ldi r_bcount,0
+	ldi r_rwbyte,0
+	rjmp handle_end_no_bcount	
+
+
+
+
+#include "../common/OWPinInterrupt.s"
 .end
\ No newline at end of file
diff --git a/DS2450_SHT2X_BMP280_MAX44009/DS2450.pdf b/DS2450_SHT2X_BMP280_MAX44009/DS2450.pdf
deleted file mode 100644
index c692e4b..0000000
Binary files a/DS2450_SHT2X_BMP280_MAX44009/DS2450.pdf and /dev/null differ
diff --git a/DS2450_SHT2X_MAX44009/DS2450_SHT2X_MAX44009.c b/DS2450_SHT2X_MAX44009/DS2450_SHT2X_MAX44009.c
index 8afb2e0..b321c96 100644
--- a/DS2450_SHT2X_MAX44009/DS2450_SHT2X_MAX44009.c
+++ b/DS2450_SHT2X_MAX44009/DS2450_SHT2X_MAX44009.c
@@ -1,316 +1,316 @@
-
-// Copyright (c) 2015, Tobias Mueller tm(at)tm3d.de
-// All rights reserved.
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-//  * Redistributions of source code must retain the above copyright
-//    notice, this list of conditions and the following disclaimer.
-//  * Redistributions in binary form must reproduce the above copyright
-//    notice, this list of conditions and the following disclaimer in the
-//    documentation and/or other materials provided with the
-//    distribution.
-//  * All advertising materials mentioning features or use of this
-//    software must display the following acknowledgement: This product
-//    includes software developed by tm3d.de and its contributors.
-//  * Neither the name of tm3d.de nor the names of its contributors may
-//    be used to endorse or promote products derived from this software
-//    without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-#define F_CPU 8000000UL
-#include <avr/io.h>
-#include <avr/interrupt.h>
-#include <util/delay.h>
-#include <avr/wdt.h>
-#include <avr/sleep.h>
-#include <avr/pgmspace.h>
-#include "../common/I2C/USI_TWI_Master.h"
-#include "../common/I2C/SHT2x.h"
-#include "../common/I2C/MAX44009.h"
-extern void OWINIT();
-extern void EXTERN_SLEEP();
-
-uint8_t owid[8]={0x20, 0xA2, 0xD9, 0x84, 0x00, 0x16, 0x02, 0x5D};/**/
-uint8_t config_info[16]={0x01,14,0x04,0x08, 0x03,15, 0x06,0x09,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
-
-#if (owid>128) 
-#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=10;
-
-
-#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;
-}
-
-typedef union {
-	volatile uint8_t bytes[0x20];
-	struct {
-		//Page0
-		uint16_t A;  //0
-		uint16_t B;  //2
-		uint16_t C;  //4
-		uint16_t D;  //6
-		//Page1
-		uint8_t CSA1;
-		uint8_t CSA2;
-		uint8_t CSB1;
-		uint8_t CSB2;
-		uint8_t CSC1;
-		uint8_t CSC2;
-		uint8_t CSD1;
-		uint8_t CSD2;
-		//Page2
-		uint8_t LA;
-		uint8_t HA;
-		uint8_t LB;
-		uint8_t HB;
-		uint8_t LC;
-		uint8_t HC;
-		uint8_t LD;
-		uint8_t HD;
-		//Page3
-		uint8_t FC1;
-		uint8_t FC2;
-		uint8_t FC3;
-		uint8_t FC4;
-		uint8_t VCCP;
-		uint8_t FC5;
-		uint8_t FC6;
-		uint8_t FC7;
-		uint8_t convc1;
-		uint8_t convc2;
-		
-		
-	};
-} pack_t;
-volatile pack_t pack;
-
-
-
-volatile int16_t am2302_temp;
-volatile uint16_t am2302_hum;
-
-
-uint8_t userRegister[1];
-int16_t sRH,sT;
-volatile double temperatureC,humidityRH;
-volatile double l;
-uint32_t P;
-int32_t t;
-uint8_t max_adr=0;
-
-
-
-int main(void){
-	pack.A=0;
-	pack.B=0;
-	pack.C=0;
-	pack.D=0;
-	pack.CSA1=0x08;
-	pack.CSA2=0x8C;
-	pack.CSB1=0x08;
-	pack.CSB2=0x8C;
-	pack.CSC1=0x08;
-	pack.CSC2=0x8C;
-	pack.CSD1=0x08;
-	pack.CSD2=0x8C;
-	pack.HA=0xFF;
-	pack.LA=0x00;
-	pack.HB=0xFF;
-	pack.LB=0x00;
-	pack.HC=0xFF;
-	pack.LC=0x00;
-	pack.HD=0xFF;
-	pack.LD=0x00;
-	pack.VCCP=0;
-    PORTB=0xFF-(1<<PORTB0); //Schalter kann gegen Masse sein und zieht dann immer Strom
-	DDRB|=(1<<PORTB0); //Als Ausgang und 0
-	PORTA=0xFF;  //All Pull up;
-	 PRR|=(1<<PRADC);  // adc for save Power
-
-	ACSR|=(1<<ACD);  //Disable Comparator
-	OWINIT();
-
-	MCUCR &=~(1<<PUD); //All Pins Pullup...
-	MCUCR |=(1<<BODS);
-	WDTCSR |= ((1<<WDCE) );   // Enable the WD Change Bit//| (1<<WDE)
-	WDTCSR |=   (1<<WDIE) |              // Enable WDT Interrupt
-	(1<<WDP3) | (1<<WDP0);   // Set Timeout to ~8 seconds
-	
-	gcontrol=1;
-	
-	USI_TWI_Master_Initialise();
-	SHT2x_SoftReset();
-	SHT2x_ReadUserRegister(userRegister);
-	//(userRegister & ~SHT2x_RES_MASK) | SHT2x_RES_10_13BIT;
-	SHT2x_WriteUserRegister(userRegister); //write changed user reg
-	// --- measure humidity with "Hold Master Mode (HM)" ---
-	//SHT2x_MeasurePoll(HUMIDITY, &sRH);
-	// --- measure temperature with "Polling Mode" (no hold master) ---
-	//SHT2x_MeasurePoll(TEMP, &sT);
-	//-- calculate humidity and temperature --
-	//temperatureC = SHT2x_CalcTemperatureC(sT);
-	//humidityRH = SHT2x_CalcRH(sRH);
-	if (checkMAX44009(0)) max_adr=0; else max_adr=1 ;
-	
-	sei();
-	
-	//DDRB|=(1<<PINB1);
-
-    while(1)   {
-	
-	if (wdcounter>3) {	
-		SHT2x_MeasurePoll(HUMIDITY, &sRH);
-		// --- measure temperature with "Polling Mode" (no hold master) ---
-		SHT2x_MeasurePoll(TEMP, &sT);
-		//-- calculate humidity and temperature --
-		temperatureC = SHT2x_CalcTemperatureC(sT);
-		humidityRH = SHT2x_CalcRH(sRH);
-
-		l=MAX44009getlux(max_adr);
-		if (l<0.030) l=0.030; //Darf nicht 0 sein. minimum -35°C Sensor minimum 0.045
-		//double l=1000;
-		l=(log(l)*1000)+32767.0;
-		wdcounter=0;
-	}
-	
-
-		
-		
-
-
-		if (gcontrol) {
-			//PORTB|=(1<<PINB1);
-			uint8_t bb=1;
-			uint8_t bb1=1;
-			for(uint8_t i=0;i<4;i++){
-				if (pack.convc1&bb1) {
-					if (pack.convc2&(bb)) {pack.bytes[i*2]=0;pack.bytes[i*2+1]=0;}
-					bb=bb<<1;
-					if (pack.convc2&(bb)) {pack.bytes[i*2]=0xFF;pack.bytes[i*2+1]=0xFF;}
-					bb=bb<<1;
-				} else bb=bb<<2;
-				bb1=bb1<<1;				
-			}
-			//CHanel A
-			if (pack.convc1&1) {
-				/*if (pack.CSA2&0x01)	ADMUX=0; else ADMUX=0x80;
-				_delay_us(100);
-				ADCSRA|=(1<<ADSC);
-				while ((ADCSRA&(1<<ADSC)));
-				cli();pack.A=ADC;sei();*/
-				uint16_t ct=(temperatureC*100.0)+32767;
-				cli();pack.A=ct;sei();
-				wdcounter=10;
-				alarmflag=0;
-				
-				if (pack.CSA2&0x08)  //AEH
-					if (pack.bytes[1]>pack.HA) {alarmflag=1;pack.CSA2|=0x20;}
-				if (pack.CSA2&0x04)  //AEL
-					if (pack.bytes[1]<pack.LA) {alarmflag=1;pack.CSA2|=0x10;}
-			}
-
-			if (pack.convc1&2) {
-				/*if (pack.CSB2&0x01)	ADMUX=1; else ADMUX=0x81;
-				_delay_us(100);
-				ADCSRA|=(1<<ADSC);
-				while ((ADCSRA&(1<<ADSC)));
-				cli();pack.B=ADC;sei();*/
-				wdcounter=10;
-				cli();pack.B=humidityRH*100;sei();
-				if (pack.CSB2&0x08)  //AEH
-					if (pack.bytes[1]>pack.HB) {alarmflag=1;pack.CSB2|=0x20;}
-				if (pack.CSB2&0x04)  //AEL
-					if (pack.bytes[1]<pack.LB) {alarmflag=1;pack.CSB2|=0x10;}
-			}
-
-			if (pack.convc1&4) {
-				/*if (pack.CSC2&0x01)	ADMUX=2; else ADMUX=0x82;
-				_delay_us(100);
-				ADCSRA|=(1<<ADSC);
-				while ((ADCSRA&(1<<ADSC)));
-				cli();pack.C=ADC;sei();*/
-				wdcounter=10;
-				cli();pack.C=l;sei();
-				if (pack.CSC2&0x08)  //AEH
-					if (pack.bytes[1]>pack.HC) {alarmflag=1;pack.CSC2|=0x20;}
-				if (pack.CSC2&0x04)  //AEL
-					if (pack.bytes[1]<pack.LC) {alarmflag=1;pack.CSC2|=0x10;}
-			} 
-			if (pack.convc1&8) {
-				/*if (pack.CSD2&0x01)	ADMUX=3; else ADMUX=0x83;
-				_delay_us(100);
-				ADCSRA|=(1<<ADSC);
-				while ((ADCSRA&(1<<ADSC)));
-				cli();pack.D=ADC;sei();*/
-				wdcounter=10;
-				cli();pack.D=0;sei();
-				if (pack.CSD2&0x08)  //AEH
-					if (pack.bytes[1]>pack.HD) {alarmflag=1;pack.CSD2|=0x20;}
-				if (pack.CSD2&0x04)  //AEL
-					if (pack.bytes[1]<pack.LD) {alarmflag=1;pack.CSD2|=0x10;}
-			}
-			
-			EXTERN_SLEEP();
-			//PORTB&=~(1<<PINB1);
-		}
-
-		/*uint8_t bb=1;
-		for(uint8_t i=0;i<4;i++) {
-			if (pack.bytes[8+i*2]&0x80) {  //Chanel as output
-				if (pack.bytes[8+i*2]&0x40) {
-					DDRA|=bb;
-				} else {
-					DDRA&=~bb;
-				}
-			} else {
-				DDRA&=~bb;
-			}
-			bb=bb*2;
-		}*/
-		
-#if  defined(__AVR_ATtiny25__)||defined(__AVR_ATtiny45__)  || defined(__AVR_ATtiny85__)
-			if (((TIMSK & (1<<TOIE0))==0)&& (mode==0))
-#endif			
-#if  defined(__AVR_ATtiny24__)||defined(__AVR_ATtiny44__)  || defined(__AVR_ATtiny84__) ||defined(__AVR_ATtiny24A__)||defined(__AVR_ATtiny44A__)  || defined(__AVR_ATtiny84A__)
-			if (((TIMSK0 & (1<<TOIE0))==0)&& (mode==0))
-#endif
-			  {
-
-			MCUCR|=(1<<SE)|(1<<SM1);
-			MCUCR&=~(1<<ISC01);
-		} else {
-			MCUCR|=(1<<SE);
-			MCUCR&=~(1<<SM1);
-		}
-	//	asm("SLEEP");
-   }
-
-
+
+// Copyright (c) 2015, Tobias Mueller tm(at)tm3d.de
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//  * Redistributions of source code must retain the above copyright
+//    notice, this list of conditions and the following disclaimer.
+//  * Redistributions in binary form must reproduce the above copyright
+//    notice, this list of conditions and the following disclaimer in the
+//    documentation and/or other materials provided with the
+//    distribution.
+//  * All advertising materials mentioning features or use of this
+//    software must display the following acknowledgement: This product
+//    includes software developed by tm3d.de and its contributors.
+//  * Neither the name of tm3d.de nor the names of its contributors may
+//    be used to endorse or promote products derived from this software
+//    without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+#define F_CPU 8000000UL
+#include <avr/io.h>
+#include <avr/interrupt.h>
+#include <util/delay.h>
+#include <avr/wdt.h>
+#include <avr/sleep.h>
+#include <avr/pgmspace.h>
+#include "../common/I2C/USI_TWI_Master.h"
+#include "../common/I2C/SHT2x.h"
+#include "../common/I2C/MAX44009.h"
+extern void OWINIT();
+extern void EXTERN_SLEEP();
+
+uint8_t owid[8]={0x20, 0xA2, 0xD9, 0x84, 0x00, 0x16, 0x02, 0x5D};/**/
+uint8_t config_info[16]={0x01,14,0x04,0x08, 0x03,15, 0x06,0x09,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
+
+#if (owid>128) 
+#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=10;
+
+
+#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;
+}
+
+typedef union {
+	volatile uint8_t bytes[0x20];
+	struct {
+		//Page0
+		uint16_t A;  //0
+		uint16_t B;  //2
+		uint16_t C;  //4
+		uint16_t D;  //6
+		//Page1
+		uint8_t CSA1;
+		uint8_t CSA2;
+		uint8_t CSB1;
+		uint8_t CSB2;
+		uint8_t CSC1;
+		uint8_t CSC2;
+		uint8_t CSD1;
+		uint8_t CSD2;
+		//Page2
+		uint8_t LA;
+		uint8_t HA;
+		uint8_t LB;
+		uint8_t HB;
+		uint8_t LC;
+		uint8_t HC;
+		uint8_t LD;
+		uint8_t HD;
+		//Page3
+		uint8_t FC1;
+		uint8_t FC2;
+		uint8_t FC3;
+		uint8_t FC4;
+		uint8_t VCCP;
+		uint8_t FC5;
+		uint8_t FC6;
+		uint8_t FC7;
+		uint8_t convc1;
+		uint8_t convc2;
+		
+		
+	};
+} pack_t;
+volatile pack_t pack;
+
+
+
+volatile int16_t am2302_temp;
+volatile uint16_t am2302_hum;
+
+
+uint8_t userRegister[1];
+int16_t sRH,sT;
+volatile double temperatureC,humidityRH;
+volatile double l;
+uint32_t P;
+int32_t t;
+uint8_t max_adr=0;
+
+
+
+int main(void){
+	pack.A=0;
+	pack.B=0;
+	pack.C=0;
+	pack.D=0;
+	pack.CSA1=0x08;
+	pack.CSA2=0x8C;
+	pack.CSB1=0x08;
+	pack.CSB2=0x8C;
+	pack.CSC1=0x08;
+	pack.CSC2=0x8C;
+	pack.CSD1=0x08;
+	pack.CSD2=0x8C;
+	pack.HA=0xFF;
+	pack.LA=0x00;
+	pack.HB=0xFF;
+	pack.LB=0x00;
+	pack.HC=0xFF;
+	pack.LC=0x00;
+	pack.HD=0xFF;
+	pack.LD=0x00;
+	pack.VCCP=0;
+    PORTB=0xFF-(1<<PORTB0); //Schalter kann gegen Masse sein und zieht dann immer Strom
+	DDRB|=(1<<PORTB0); //Als Ausgang und 0
+	PORTA=0xFF;  //All Pull up;
+	 PRR|=(1<<PRADC);  // adc for save Power
+
+	ACSR|=(1<<ACD);  //Disable Comparator
+	OWINIT();
+
+	MCUCR &=~(1<<PUD); //All Pins Pullup...
+	MCUCR |=(1<<BODS);
+	WDTCSR |= ((1<<WDCE) );   // Enable the WD Change Bit//| (1<<WDE)
+	WDTCSR |=   (1<<WDIE) |              // Enable WDT Interrupt
+	(1<<WDP3) | (1<<WDP0);   // Set Timeout to ~8 seconds
+	
+	gcontrol=1;
+	
+	USI_TWI_Master_Initialise();
+	SHT2x_SoftReset();
+	SHT2x_ReadUserRegister(userRegister);
+	//(userRegister & ~SHT2x_RES_MASK) | SHT2x_RES_10_13BIT;
+	SHT2x_WriteUserRegister(userRegister); //write changed user reg
+	// --- measure humidity with "Hold Master Mode (HM)" ---
+	//SHT2x_MeasurePoll(HUMIDITY, &sRH);
+	// --- measure temperature with "Polling Mode" (no hold master) ---
+	//SHT2x_MeasurePoll(TEMP, &sT);
+	//-- calculate humidity and temperature --
+	//temperatureC = SHT2x_CalcTemperatureC(sT);
+	//humidityRH = SHT2x_CalcRH(sRH);
+	if (checkMAX44009(0)) max_adr=0; else max_adr=1 ;
+	
+	sei();
+	
+	//DDRB|=(1<<PINB1);
+
+    while(1)   {
+	
+	if (wdcounter>3) {	
+		SHT2x_MeasurePoll(HUMIDITY, &sRH);
+		// --- measure temperature with "Polling Mode" (no hold master) ---
+		SHT2x_MeasurePoll(TEMP, &sT);
+		//-- calculate humidity and temperature --
+		temperatureC = SHT2x_CalcTemperatureC(sT);
+		humidityRH = SHT2x_CalcRH(sRH);
+
+		l=MAX44009getlux(max_adr);
+		if (l<0.030) l=0.030; //Darf nicht 0 sein. minimum -35°C Sensor minimum 0.045
+		//double l=1000;
+		l=(log(l)*1000)+32767.0;
+		wdcounter=0;
+	}
+	
+
+		
+		
+
+
+		if (gcontrol) {
+			//PORTB|=(1<<PINB1);
+			uint8_t bb=1;
+			uint8_t bb1=1;
+			for(uint8_t i=0;i<4;i++){
+				if (pack.convc1&bb1) {
+					if (pack.convc2&(bb)) {pack.bytes[i*2]=0;pack.bytes[i*2+1]=0;}
+					bb=bb<<1;
+					if (pack.convc2&(bb)) {pack.bytes[i*2]=0xFF;pack.bytes[i*2+1]=0xFF;}
+					bb=bb<<1;
+				} else bb=bb<<2;
+				bb1=bb1<<1;				
+			}
+			//CHanel A
+			if (pack.convc1&1) {
+				/*if (pack.CSA2&0x01)	ADMUX=0; else ADMUX=0x80;
+				_delay_us(100);
+				ADCSRA|=(1<<ADSC);
+				while ((ADCSRA&(1<<ADSC)));
+				cli();pack.A=ADC;sei();*/
+				uint16_t ct=(temperatureC*100.0)+32767;
+				cli();pack.A=ct;sei();
+				wdcounter=10;
+				alarmflag=0;
+				
+				if (pack.CSA2&0x08)  //AEH
+					if (pack.bytes[1]>pack.HA) {alarmflag=1;pack.CSA2|=0x20;}
+				if (pack.CSA2&0x04)  //AEL
+					if (pack.bytes[1]<pack.LA) {alarmflag=1;pack.CSA2|=0x10;}
+			}
+
+			if (pack.convc1&2) {
+				/*if (pack.CSB2&0x01)	ADMUX=1; else ADMUX=0x81;
+				_delay_us(100);
+				ADCSRA|=(1<<ADSC);
+				while ((ADCSRA&(1<<ADSC)));
+				cli();pack.B=ADC;sei();*/
+				wdcounter=10;
+				cli();pack.B=humidityRH*100;sei();
+				if (pack.CSB2&0x08)  //AEH
+					if (pack.bytes[1]>pack.HB) {alarmflag=1;pack.CSB2|=0x20;}
+				if (pack.CSB2&0x04)  //AEL
+					if (pack.bytes[1]<pack.LB) {alarmflag=1;pack.CSB2|=0x10;}
+			}
+
+			if (pack.convc1&4) {
+				/*if (pack.CSC2&0x01)	ADMUX=2; else ADMUX=0x82;
+				_delay_us(100);
+				ADCSRA|=(1<<ADSC);
+				while ((ADCSRA&(1<<ADSC)));
+				cli();pack.C=ADC;sei();*/
+				wdcounter=10;
+				cli();pack.C=l;sei();
+				if (pack.CSC2&0x08)  //AEH
+					if (pack.bytes[1]>pack.HC) {alarmflag=1;pack.CSC2|=0x20;}
+				if (pack.CSC2&0x04)  //AEL
+					if (pack.bytes[1]<pack.LC) {alarmflag=1;pack.CSC2|=0x10;}
+			} 
+			if (pack.convc1&8) {
+				/*if (pack.CSD2&0x01)	ADMUX=3; else ADMUX=0x83;
+				_delay_us(100);
+				ADCSRA|=(1<<ADSC);
+				while ((ADCSRA&(1<<ADSC)));
+				cli();pack.D=ADC;sei();*/
+				wdcounter=10;
+				cli();pack.D=0;sei();
+				if (pack.CSD2&0x08)  //AEH
+					if (pack.bytes[1]>pack.HD) {alarmflag=1;pack.CSD2|=0x20;}
+				if (pack.CSD2&0x04)  //AEL
+					if (pack.bytes[1]<pack.LD) {alarmflag=1;pack.CSD2|=0x10;}
+			}
+			
+			EXTERN_SLEEP();
+			//PORTB&=~(1<<PINB1);
+		}
+
+		/*uint8_t bb=1;
+		for(uint8_t i=0;i<4;i++) {
+			if (pack.bytes[8+i*2]&0x80) {  //Chanel as output
+				if (pack.bytes[8+i*2]&0x40) {
+					DDRA|=bb;
+				} else {
+					DDRA&=~bb;
+				}
+			} else {
+				DDRA&=~bb;
+			}
+			bb=bb*2;
+		}*/
+		
+#if  defined(__AVR_ATtiny25__)||defined(__AVR_ATtiny45__)  || defined(__AVR_ATtiny85__)
+			if (((TIMSK & (1<<TOIE0))==0)&& (mode==0))
+#endif			
+#if  defined(__AVR_ATtiny24__)||defined(__AVR_ATtiny44__)  || defined(__AVR_ATtiny84__) ||defined(__AVR_ATtiny24A__)||defined(__AVR_ATtiny44A__)  || defined(__AVR_ATtiny84A__)
+			if (((TIMSK0 & (1<<TOIE0))==0)&& (mode==0))
+#endif
+			  {
+
+			MCUCR|=(1<<SE)|(1<<SM1);
+			MCUCR&=~(1<<ISC01);
+		} else {
+			MCUCR|=(1<<SE);
+			MCUCR&=~(1<<SM1);
+		}
+	//	asm("SLEEP");
+   }
+
+
 }
\ No newline at end of file
diff --git a/DS2450_SHT2X_MAX44009/OWDS2450.S b/DS2450_SHT2X_MAX44009/OWDS2450.S
index aec56b7..1d81abd 100644
--- a/DS2450_SHT2X_MAX44009/OWDS2450.S
+++ b/DS2450_SHT2X_MAX44009/OWDS2450.S
@@ -1,247 +1,247 @@
-
-// Copyright (c) 2015, Tobias Mueller tm(at)tm3d.de
-// All rights reserved. 
-// 
-// Redistribution and use in source and binary forms, with or without 
-// modification, are permitted provided that the following conditions are 
-// met: 
-// 
-//  * Redistributions of source code must retain the above copyright 
-//    notice, this list of conditions and the following disclaimer. 
-//  * Redistributions in binary form must reproduce the above copyright 
-//    notice, this list of conditions and the following disclaimer in the 
-//    documentation and/or other materials provided with the 
-//    distribution. 
-//  * All advertising materials mentioning features or use of this 
-//    software must display the following acknowledgement: This product 
-//    includes software developed by tm3d.de and its contributors. 
-//  * Neither the name of tm3d.de nor the names of its contributors may 
-//    be used to endorse or promote products derived from this software 
-//    without specific prior written permission. 
-// 
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
-
-#define _CHANGEABLE_ID_
-#define _ZERO_POLLING_
-
-#include "../common/OWConfig.s"
-#include "../common/OWCRC16.s"
-
-.extern pack,8
-.comm addr,1 ;zweites Adressbyte ist unnoetig (Warum auch immer fuer 32 Byte 16 Bit Adressen verwendet werden....)
-.comm crcsave,1 ; zwischenspeicherspeicher fuer crc nur zweites byte....
-//.extern  am2302_temp,2
-
-
-
-.macro CHIP_INIT 	
-.endm
-
-.macro COMMAND_TABLE
-		rjmp h_readmemoryaddr
-		rjmp h_readmemory
-		rjmp h_readmemorycrc1
-		rjmp h_readmemorycrc2
-		rjmp h_writememoryaddr
-		rjmp h_writememory
-		rjmp h_writememorycrc1
-		rjmp h_writememorycrc2
-		rjmp h_writememoryreadback
-		rjmp h_convert
-		rjmp h_convertcrc1
-		rjmp h_convertcrc2
-		rjmp h_convert_conv
-.endm
-
-#include "../common/OWRomFunctions.s"
-#include "../common/OWTimerInterrupt.s"
-
-
-
-; Ab hier Geraeteabhaenging
-#define OW_READ_MEMORY_ADDR OW_FIRST_COMMAND+0
-#define OW_READ_MEMORY OW_FIRST_COMMAND+1
-#define OW_READ_MEMORY_CRC1 OW_FIRST_COMMAND+2
-#define OW_READ_MEMORY_CRC2 OW_FIRST_COMMAND+3
-#define OW_WRITE_MEMORY_ADDR OW_FIRST_COMMAND+4
-#define OW_WRITE_MEMORY OW_FIRST_COMMAND+5
-#define OW_WRITE_MEMORY_CRC1 OW_FIRST_COMMAND+6
-#define OW_WRITE_MEMORY_CRC2 OW_FIRST_COMMAND+7
-#define OW_WRITE_MEMORY_READBACK OW_FIRST_COMMAND+8
-#define OW_CONVERT OW_FIRST_COMMAND+9
-#define OW_CONVERT_CRC1 OW_FIRST_COMMAND+10
-#define OW_CONVERT_CRC2 OW_FIRST_COMMAND+11
-#define OW_CONVERT_CONV OW_FIRST_COMMAND+12
-
-;---------------------------------------------------
-;	READ COMMAND and start operation
-;---------------------------------------------------
-
-
-h_readcommand:
-	clr r_bytep
-#ifndef _DIS_FLASH_
-	FLASH_COMMANDS ; muss zu erst sein....
-#endif
-	cset 0xAA,OW_READ_MEMORY_ADDR
-	cset 0x55,OW_WRITE_MEMORY_ADDR
-	cset 0x3C,OW_CONVERT
-	FW_CONFIG_INFO
-#ifdef _CHANGEABLE_ID_
-	CHANGE_ID_COMMANDS
-#endif
-	ldi r_mode,OW_SLEEP
-	rjmp handle_end
-
-
-h_readmemoryaddr:
-	cpi r_bytep,0  ;erstes Adressbyte ?
-	brne h_readmemory_addr_byte1 ;nein dann weiter
-	andi r_rwbyte,0x1F  ; nur Adressen zwischen 0 und 0x1F zulassen
-	sts addr,r_rwbyte  ;speichern des ersten bytes
-	rjmp handle_end_inc
-h_readmemory_addr_byte1:  ;zweiters Addressbyte wird nicht gespeichert!
-	ldi r_mode,OW_READ_MEMORY ;weiter zu read Memory
-	;;ldi r_bcount,1 ;ist unten
-	ldi r_sendflag,1 ;jetzt sendet der Slave zum Master
-	clr r_bytep
-	rjmp h_readmemory2
-h_readmemory:
-	lds r_bytep,addr
-	inc r_bytep
-	sts addr,r_bytep
-	andi r_bytep,0x07
-	breq h_readmemory_init_crc
-h_readmemory2:
-	lds r_bytep,addr
-	;andi r_bytep,0x1F ist oben
-	configZ pack,r_bytep
-	ld   r_rwbyte,Z
-	;ldi r_bcount,1
-	rjmp handle_end ;sendet das Byte und geht zu h_readmemory
-h_readmemory_init_crc:; init erstes CRC byte
-	lds r_rwbyte,crc
-	com r_rwbyte
-	lds r_temp,crc+1
-	com r_temp
-	sts crcsave,r_temp
-	ldi r_mode,OW_READ_MEMORY_CRC1
-	;ldi r_bcount,1
-	rjmp handle_end
-h_readmemory_end:
-	ldi  r_mode,OW_SLEEP
-	clr r_sendflag
-	rjmp handle_end
-h_readmemorycrc1:;init zweites CRC Byte
-	lds r_rwbyte,crcsave
-	;ldi r_bcount,1
-	ldi r_mode,OW_READ_MEMORY_CRC2
-	rjmp handle_end
-h_readmemorycrc2:;weiteres senden..... nach zweitem Byte
-	lds r_temp,addr
-	andi r_temp,0xE0
-	brne h_readmemory_end; ende des speichers
-	ldi r_mode,OW_READ_MEMORY
-	CRCInit1 ;Start with new CRC
-	rjmp h_readmemory2
-
-h_writememoryaddr:
-	cpi r_bytep,0  ;erstes Adressbyte ?
-	brne h_writememory_addr_byte1 ;nein dann weiter
-	andi r_rwbyte,0x1F  ; nur Adressen zwischen 0 und 0x1F zulassen
-	sts addr,r_rwbyte  ;speichern des ersten bytes
-	inc r_bytep
-	;ldi r_bcount,1
-	rjmp handle_end
-h_writememory_addr_byte1:  ;zweiters Addressbyte wird nicht gespeichert!
-	ldi r_mode,OW_WRITE_MEMORY ;weiter zu read Memory
-	;ldi r_bcount,1 ;; _________________________________________________in handle_end integrieren.....
-	lds r_bytep,addr
-	rjmp handle_end ;read Memory Byte
-h_writememory:
-	lds r_bytep,addr
-	configZ pack,r_bytep
-	st Z,r_rwbyte
-	;ldi r_bcount,1
-	ldi r_mode,OW_WRITE_MEMORY_CRC1
-	ldi r_sendflag,1 ;jetzt sendet der Slave zum Master
-	lds r_rwbyte,crc
-	com r_rwbyte
-	lds r_temp,crc+1
-	com r_temp
-	sts crcsave,r_temp
-	rjmp handle_end
-h_writememorycrc1:
-	lds r_rwbyte,crcsave
-	;ldi r_bcount,1
-	ldi r_mode,OW_WRITE_MEMORY_CRC2
-	rjmp handle_end
-h_writememorycrc2:
-	lds r_temp,addr
-	configZ pack,r_temp
-	ld r_rwbyte,Z
-	;ldi r_bcount,1
-	ldi r_mode,OW_WRITE_MEMORY_READBACK
-	rjmp handle_end
-h_writememoryreadback:
-	ldi r_temp,0x00
-	sts crc+1,r_temp
-	lds r_temp,addr
-	inc r_temp
-	sts addr,r_temp
-	sts crc,r_temp
-	ldi r_sendflag,0
-	;ldi r_bcount,1
-	ldi r_mode,OW_WRITE_MEMORY
-	rjmp handle_end
-
-h_convert:
-	cpi r_bytep,0  ;erstes Adressbyte ?
-	brne h_convert_byte1 ;nein dann weiter
-	inc r_bytep
-	sts pack+0x20,r_rwbyte
-	;ldi r_bcount,1
-	rjmp handle_end
-h_convert_byte1: ;zweies byte glesen go crc#
-	sts pack+0x21,r_rwbyte
-	lds r_rwbyte,crc
-	com r_rwbyte
-	lds r_temp,crc+1
-	com r_temp
-	sts crcsave,r_temp
-	ldi r_mode,OW_CONVERT_CRC1
-	;ldi r_bcount,1
-	ldi r_sendflag,1
-	rjmp handle_end	
-h_convertcrc1:
-	lds r_rwbyte,crcsave
-	;ldi r_bcount,1
-	ldi r_mode,OW_CONVERT_CRC2
-	rjmp handle_end
-h_convertcrc2:
-	ldi r_temp,1
-	sts gcontrol,r_temp
-	;ldi r_bcount,1
-	ldi r_mode,OW_CONVERT_CONV
-	;clr r_sendflag
-	ldi r_sendflag,3 ;set bit 0 and 1 for no zero polling
-h_convert_conv:
-	ldi r_bcount,0
-	ldi r_rwbyte,0
-	rjmp handle_end_no_bcount	
-
-
-
-
-#include "../common/OWPinInterrupt.s"
+
+// Copyright (c) 2015, Tobias Mueller tm(at)tm3d.de
+// All rights reserved. 
+// 
+// Redistribution and use in source and binary forms, with or without 
+// modification, are permitted provided that the following conditions are 
+// met: 
+// 
+//  * Redistributions of source code must retain the above copyright 
+//    notice, this list of conditions and the following disclaimer. 
+//  * Redistributions in binary form must reproduce the above copyright 
+//    notice, this list of conditions and the following disclaimer in the 
+//    documentation and/or other materials provided with the 
+//    distribution. 
+//  * All advertising materials mentioning features or use of this 
+//    software must display the following acknowledgement: This product 
+//    includes software developed by tm3d.de and its contributors. 
+//  * Neither the name of tm3d.de nor the names of its contributors may 
+//    be used to endorse or promote products derived from this software 
+//    without specific prior written permission. 
+// 
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
+
+#define _CHANGEABLE_ID_
+#define _ZERO_POLLING_
+
+#include "../common/OWConfig.s"
+#include "../common/OWCRC16.s"
+
+.extern pack,8
+.comm addr,1 ;zweites Adressbyte ist unnoetig (Warum auch immer fuer 32 Byte 16 Bit Adressen verwendet werden....)
+.comm crcsave,1 ; zwischenspeicherspeicher fuer crc nur zweites byte....
+//.extern  am2302_temp,2
+
+
+
+.macro CHIP_INIT 	
+.endm
+
+.macro COMMAND_TABLE
+		rjmp h_readmemoryaddr
+		rjmp h_readmemory
+		rjmp h_readmemorycrc1
+		rjmp h_readmemorycrc2
+		rjmp h_writememoryaddr
+		rjmp h_writememory
+		rjmp h_writememorycrc1
+		rjmp h_writememorycrc2
+		rjmp h_writememoryreadback
+		rjmp h_convert
+		rjmp h_convertcrc1
+		rjmp h_convertcrc2
+		rjmp h_convert_conv
+.endm
+
+#include "../common/OWRomFunctions.s"
+#include "../common/OWTimerInterrupt.s"
+
+
+
+; Ab hier Geraeteabhaenging
+#define OW_READ_MEMORY_ADDR OW_FIRST_COMMAND+0
+#define OW_READ_MEMORY OW_FIRST_COMMAND+1
+#define OW_READ_MEMORY_CRC1 OW_FIRST_COMMAND+2
+#define OW_READ_MEMORY_CRC2 OW_FIRST_COMMAND+3
+#define OW_WRITE_MEMORY_ADDR OW_FIRST_COMMAND+4
+#define OW_WRITE_MEMORY OW_FIRST_COMMAND+5
+#define OW_WRITE_MEMORY_CRC1 OW_FIRST_COMMAND+6
+#define OW_WRITE_MEMORY_CRC2 OW_FIRST_COMMAND+7
+#define OW_WRITE_MEMORY_READBACK OW_FIRST_COMMAND+8
+#define OW_CONVERT OW_FIRST_COMMAND+9
+#define OW_CONVERT_CRC1 OW_FIRST_COMMAND+10
+#define OW_CONVERT_CRC2 OW_FIRST_COMMAND+11
+#define OW_CONVERT_CONV OW_FIRST_COMMAND+12
+
+;---------------------------------------------------
+;	READ COMMAND and start operation
+;---------------------------------------------------
+
+
+h_readcommand:
+	clr r_bytep
+#ifndef _DIS_FLASH_
+	FLASH_COMMANDS ; muss zu erst sein....
+#endif
+	cset 0xAA,OW_READ_MEMORY_ADDR
+	cset 0x55,OW_WRITE_MEMORY_ADDR
+	cset 0x3C,OW_CONVERT
+	FW_CONFIG_INFO
+#ifdef _CHANGEABLE_ID_
+	CHANGE_ID_COMMANDS
+#endif
+	ldi r_mode,OW_SLEEP
+	rjmp handle_end
+
+
+h_readmemoryaddr:
+	cpi r_bytep,0  ;erstes Adressbyte ?
+	brne h_readmemory_addr_byte1 ;nein dann weiter
+	andi r_rwbyte,0x1F  ; nur Adressen zwischen 0 und 0x1F zulassen
+	sts addr,r_rwbyte  ;speichern des ersten bytes
+	rjmp handle_end_inc
+h_readmemory_addr_byte1:  ;zweiters Addressbyte wird nicht gespeichert!
+	ldi r_mode,OW_READ_MEMORY ;weiter zu read Memory
+	;;ldi r_bcount,1 ;ist unten
+	ldi r_sendflag,1 ;jetzt sendet der Slave zum Master
+	clr r_bytep
+	rjmp h_readmemory2
+h_readmemory:
+	lds r_bytep,addr
+	inc r_bytep
+	sts addr,r_bytep
+	andi r_bytep,0x07
+	breq h_readmemory_init_crc
+h_readmemory2:
+	lds r_bytep,addr
+	;andi r_bytep,0x1F ist oben
+	configZ pack,r_bytep
+	ld   r_rwbyte,Z
+	;ldi r_bcount,1
+	rjmp handle_end ;sendet das Byte und geht zu h_readmemory
+h_readmemory_init_crc:; init erstes CRC byte
+	lds r_rwbyte,crc
+	com r_rwbyte
+	lds r_temp,crc+1
+	com r_temp
+	sts crcsave,r_temp
+	ldi r_mode,OW_READ_MEMORY_CRC1
+	;ldi r_bcount,1
+	rjmp handle_end
+h_readmemory_end:
+	ldi  r_mode,OW_SLEEP
+	clr r_sendflag
+	rjmp handle_end
+h_readmemorycrc1:;init zweites CRC Byte
+	lds r_rwbyte,crcsave
+	;ldi r_bcount,1
+	ldi r_mode,OW_READ_MEMORY_CRC2
+	rjmp handle_end
+h_readmemorycrc2:;weiteres senden..... nach zweitem Byte
+	lds r_temp,addr
+	andi r_temp,0xE0
+	brne h_readmemory_end; ende des speichers
+	ldi r_mode,OW_READ_MEMORY
+	CRCInit1 ;Start with new CRC
+	rjmp h_readmemory2
+
+h_writememoryaddr:
+	cpi r_bytep,0  ;erstes Adressbyte ?
+	brne h_writememory_addr_byte1 ;nein dann weiter
+	andi r_rwbyte,0x1F  ; nur Adressen zwischen 0 und 0x1F zulassen
+	sts addr,r_rwbyte  ;speichern des ersten bytes
+	inc r_bytep
+	;ldi r_bcount,1
+	rjmp handle_end
+h_writememory_addr_byte1:  ;zweiters Addressbyte wird nicht gespeichert!
+	ldi r_mode,OW_WRITE_MEMORY ;weiter zu read Memory
+	;ldi r_bcount,1 ;; _________________________________________________in handle_end integrieren.....
+	lds r_bytep,addr
+	rjmp handle_end ;read Memory Byte
+h_writememory:
+	lds r_bytep,addr
+	configZ pack,r_bytep
+	st Z,r_rwbyte
+	;ldi r_bcount,1
+	ldi r_mode,OW_WRITE_MEMORY_CRC1
+	ldi r_sendflag,1 ;jetzt sendet der Slave zum Master
+	lds r_rwbyte,crc
+	com r_rwbyte
+	lds r_temp,crc+1
+	com r_temp
+	sts crcsave,r_temp
+	rjmp handle_end
+h_writememorycrc1:
+	lds r_rwbyte,crcsave
+	;ldi r_bcount,1
+	ldi r_mode,OW_WRITE_MEMORY_CRC2
+	rjmp handle_end
+h_writememorycrc2:
+	lds r_temp,addr
+	configZ pack,r_temp
+	ld r_rwbyte,Z
+	;ldi r_bcount,1
+	ldi r_mode,OW_WRITE_MEMORY_READBACK
+	rjmp handle_end
+h_writememoryreadback:
+	ldi r_temp,0x00
+	sts crc+1,r_temp
+	lds r_temp,addr
+	inc r_temp
+	sts addr,r_temp
+	sts crc,r_temp
+	ldi r_sendflag,0
+	;ldi r_bcount,1
+	ldi r_mode,OW_WRITE_MEMORY
+	rjmp handle_end
+
+h_convert:
+	cpi r_bytep,0  ;erstes Adressbyte ?
+	brne h_convert_byte1 ;nein dann weiter
+	inc r_bytep
+	sts pack+0x20,r_rwbyte
+	;ldi r_bcount,1
+	rjmp handle_end
+h_convert_byte1: ;zweies byte glesen go crc#
+	sts pack+0x21,r_rwbyte
+	lds r_rwbyte,crc
+	com r_rwbyte
+	lds r_temp,crc+1
+	com r_temp
+	sts crcsave,r_temp
+	ldi r_mode,OW_CONVERT_CRC1
+	;ldi r_bcount,1
+	ldi r_sendflag,1
+	rjmp handle_end	
+h_convertcrc1:
+	lds r_rwbyte,crcsave
+	;ldi r_bcount,1
+	ldi r_mode,OW_CONVERT_CRC2
+	rjmp handle_end
+h_convertcrc2:
+	ldi r_temp,1
+	sts gcontrol,r_temp
+	;ldi r_bcount,1
+	ldi r_mode,OW_CONVERT_CONV
+	;clr r_sendflag
+	ldi r_sendflag,3 ;set bit 0 and 1 for no zero polling
+h_convert_conv:
+	ldi r_bcount,0
+	ldi r_rwbyte,0
+	rjmp handle_end_no_bcount	
+
+
+
+
+#include "../common/OWPinInterrupt.s"
 .end
\ No newline at end of file
diff --git a/DS2450_VOC_SHT_BMP/DS2450.atsln b/DS2450_VOC_SHT_BMP/DS2450.atsln
index 848bac3..09276c9 100644
--- a/DS2450_VOC_SHT_BMP/DS2450.atsln
+++ b/DS2450_VOC_SHT_BMP/DS2450.atsln
@@ -1,22 +1,22 @@
-
-Microsoft Visual Studio Solution File, Format Version 12.00
-# Atmel Studio Solution File, Format Version 11.00
-VisualStudioVersion = 14.0.23107.0
-MinimumVisualStudioVersion = 10.0.40219.1
-Project("{54F91283-7BC4-4236-8FF9-10F437C3AD48}") = "DS2450", "DS2450.cproj", "{DCE6C7E3-EE26-4D79-826B-08594B9AD897}"
-EndProject
-Global
-	GlobalSection(SolutionConfigurationPlatforms) = preSolution
-		Debug|AVR = Debug|AVR
-		Release|AVR = Release|AVR
-	EndGlobalSection
-	GlobalSection(ProjectConfigurationPlatforms) = postSolution
-		{DCE6C7E3-EE26-4D79-826B-08594B9AD897}.Debug|AVR.ActiveCfg = Debug|AVR
-		{DCE6C7E3-EE26-4D79-826B-08594B9AD897}.Debug|AVR.Build.0 = Debug|AVR
-		{DCE6C7E3-EE26-4D79-826B-08594B9AD897}.Release|AVR.ActiveCfg = Release|AVR
-		{DCE6C7E3-EE26-4D79-826B-08594B9AD897}.Release|AVR.Build.0 = Release|AVR
-	EndGlobalSection
-	GlobalSection(SolutionProperties) = preSolution
-		HideSolutionNode = FALSE
-	EndGlobalSection
-EndGlobal
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Atmel Studio Solution File, Format Version 11.00
+VisualStudioVersion = 14.0.23107.0
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{54F91283-7BC4-4236-8FF9-10F437C3AD48}") = "DS2450", "DS2450.cproj", "{DCE6C7E3-EE26-4D79-826B-08594B9AD897}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|AVR = Debug|AVR
+		Release|AVR = Release|AVR
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{DCE6C7E3-EE26-4D79-826B-08594B9AD897}.Debug|AVR.ActiveCfg = Debug|AVR
+		{DCE6C7E3-EE26-4D79-826B-08594B9AD897}.Debug|AVR.Build.0 = Debug|AVR
+		{DCE6C7E3-EE26-4D79-826B-08594B9AD897}.Release|AVR.ActiveCfg = Release|AVR
+		{DCE6C7E3-EE26-4D79-826B-08594B9AD897}.Release|AVR.Build.0 = Release|AVR
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+EndGlobal
diff --git a/DS2450_VOC_SHT_BMP/DS2450_VOC_SHT_BMP.c b/DS2450_VOC_SHT_BMP/DS2450_VOC_SHT_BMP.c
index cc9f16f..db77580 100644
--- a/DS2450_VOC_SHT_BMP/DS2450_VOC_SHT_BMP.c
+++ b/DS2450_VOC_SHT_BMP/DS2450_VOC_SHT_BMP.c
@@ -1,464 +1,464 @@
-
-// Copyright (c) 2015, Tobias Mueller tm(at)tm3d.de
-// All rights reserved.
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-//  * Redistributions of source code must retain the above copyright
-//    notice, this list of conditions and the following disclaimer.
-//  * Redistributions in binary form must reproduce the above copyright
-//    notice, this list of conditions and the following disclaimer in the
-//    documentation and/or other materials provided with the
-//    distribution.
-//  * All advertising materials mentioning features or use of this
-//    software must display the following acknowledgement: This product
-//    includes software developed by tm3d.de and its contributors.
-//  * Neither the name of tm3d.de nor the names of its contributors may
-//    be used to endorse or promote products derived from this software
-//    without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-#define F_CPU 8000000UL
-#include <avr/io.h>
-#include <avr/interrupt.h>
-#include <util/delay.h>
-#include <avr/wdt.h>
-#include <avr/sleep.h>
-#include "../common/I2C/USI_TWI_Master.h"
-#include "../common/I2C/MAX1164x.h"
-#include "../common/I2C/SHT2x.h"
-#include "../common/calibr.h"
-#include "../common/I2C/BMP280.h"
-
-
-
-extern void OWINIT();
-extern void EXTERN_SLEEP();
-
-uint8_t owid[8]={0x20, 0xA2, 0xD9, 0x84, 0x00, 0x16, 0x02, 0x5D};/**/
-uint8_t config_info[16]={0x01,14, 0x04,0x08, 0x08,1, 0x02,16,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
-
-#if (owid>128) 
-#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;
-
-
-#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;
-
-
-}
-
-volatile uint16_t _temp;
-volatile uint16_t _hum;
-
-
-uint8_t userRegister[1];
-int16_t sRH,sT;
-double temperatureC,humidityRH,hhum;
-double l;
-
-double R0;
-uint16_t mr;
-uint8_t startup=10;
-double ip;
-
-uint32_t bmp_P;
-int32_t bmp_t;
-
-uint8_t max_adr=0;
-#define CH0_M MAX1164x_C_SCAN0|MAX1164x_C_SGL
-#define CH1_M MAX1164x_C_SCAN0|MAX1164x_C_SGL|MAX1164x_C_CS0
-#define CH0_CH1 MAX1164x_C_SCAN0
-//|MAX1164x_C_CS0
-
-uint16_t weekmaxarr[8];
-
-
-typedef union {
-	volatile uint8_t bytes[0x20];
-	struct {
-		//Page0
-		uint16_t A;  //0
-		uint16_t B;  //2
-		uint16_t C;  //4
-		uint16_t D;  //6
-		//Page1
-		uint8_t CSA1;
-		uint8_t CSA2;
-		uint8_t CSB1;
-		uint8_t CSB2;
-		uint8_t CSC1;
-		uint8_t CSC2;
-		uint8_t CSD1;
-		uint8_t CSD2;
-		//Page2
-		uint8_t LA;
-		uint8_t HA;
-		uint8_t LB;
-		uint8_t HB;
-		uint8_t LC;
-		uint8_t HC;
-		uint8_t LD;
-		uint8_t HD;
-		//Page3
-		uint8_t FC1;
-		uint8_t FC2;
-		uint8_t FC3;
-		uint8_t FC4;
-		uint8_t VCCP;
-		uint8_t FC5;
-		uint8_t FC6;
-		uint8_t FC7;
-		uint8_t convc1;
-		uint8_t convc2;
-		
-		
-	};
-} pack_t;
-volatile pack_t pack;
-
-
-typedef struct {
-	int16_t current;  //6
-	uint16_t R0;
-	//uint16_t VS;
-	uint8_t cmode;
-	int16_t ip;
-	//uint8_t free;
-	uint16_t tol_s8;
-	uint16_t tol_d;
-	uint16_t r_day_max;
-	uint16_t r_week_max;
-} pack2_t;
-volatile pack2_t pack2;
-
-
-//Kompensieren der Abhänigkeit von RS/RO von Temperatur und Luftfeuchte
-inline double interp(double t, double h) {
-	double h2;
-	 double t2;
-	h2=h*h;
-	t2=t*t;
-	return 4.76111e-9*h2*t2-3.96956e-7*h2*t+0.0000408889*h2-1.07132e-6*h*t2+0.000115968*h*t-0.0101333*h+0.000163806*t2-0.0241179*t+1.80591;
-}
-
-#define EEPROM_R0 0
-#define EEPROM_R0d 2
-#define EEPROM_R0w 4
-#define EEPROM_dol 6
-
-
-uint16_t readEEPROM(uint8_t addr,uint16_t def) {
-	uint16_t hr;
-	while(EECR & (1<<EEPE));
-	EEARL=addr+1;
-	EECR |= (1<<EERE);
-	hr=EEDR;
-	if (hr!=0xFF) {
-		hr=hr<<8;
-		while(EECR & (1<<EEPE));
-		EEARL=addr;
-		EECR |= (1<<EERE);
-		hr|=EEDR;
-		return hr;
-	}
-	return def;
-}
-
-void writeEEPROM(uint8_t addr,uint16_t val) {
-	while(EECR & (1<<EEPE));
-	EECR = (0<<EEPM1)|(0<<EEPM0);
-	EEARL = addr;
-	EEDR = val&0xFF;
-	EECR |= (1<<EEMPE);
-	EECR |= (1<<EEPE);
-	while(EECR & (1<<EEPE));
-	EECR = (0<<EEPM1)|(0<<EEPM0);
-	EEARL = addr+1;
-	EEDR = val>>8;
-	EECR |= (1<<EEMPE);
-	EECR |= (1<<EEPE);
-}
-
-
-
-
-
-int main(void){
-	PRR|=(1<<PRADC);  // adc for save Power
-	PORTA=0xFF;
-	PORTB=0xFF-(1<<PORTB0); //Schalter kann gegen Masse sein und zieht dann immer Strom
-	DDRB|=(1<<PORTB0); //Als Ausgang und 0
-	OWINIT();
-	DDRB|=(1<<PINB1);//Ausgang und 1
-	DDRA|=(1<<PINA0);
-	
-	WDTCSR |= ((1<<WDCE) );   // Enable the WD Change Bit//| (1<<WDE)
-	WDTCSR |=   (1<<WDIE) |              // Enable WDT Interrupt
-	//(1<<WDP0) |(1<<WDP2) | (1<<WDP1);    // Set Timeout to ~2 seconds
-	(1<<WDP3) | (1<<WDP0);    // Set Timeout to ~8 seconds
-
-	MCUSR=0;
-	pack.A=0;
-	pack.B=0;
-	pack.C=0;
-	pack.D=0;
-	pack.CSA1=0x08;
-	pack.CSA2=0x8C;
-	pack.CSB1=0x08;
-	pack.CSB2=0x8C;
-	pack.CSC1=0x08;
-	pack.CSC2=0x8C;
-	pack.CSD1=0x08;
-	pack.CSD2=0x8C;
-	pack.HA=0xFF;
-	pack.LA=0x00;
-	pack.HB=0xFF;
-	pack.LB=0x00;
-	pack.HC=0xFF;
-	pack.LC=0x00;
-	pack.HD=0xFF;
-	pack.LD=0x00;
-	pack.VCCP=0;
-
-	pack2.cmode=0;
-	pack2.R0=readEEPROM(EEPROM_R0,1);
-	R0=pack2.R0/100.0;
-		
-	pack2.r_day_max=readEEPROM(EEPROM_R0d,1);
-	pack2.r_week_max=readEEPROM(EEPROM_R0w,1);
-	pack2.tol_d=readEEPROM(EEPROM_dol,0); 
-	pack2.tol_s8=0;  //Tag faengt mit Einschalten an
-	for(uint8_t i=0;i<7;i++) {
-		weekmaxarr[i]=pack2.r_week_max;
-	}
-
-	USI_TWI_Master_Initialise();
-	bmp280Init();
-	SHT2x_SoftReset();
-	SHT2x_ReadUserRegister(userRegister);
-	SHT2x_WriteUserRegister(userRegister); //write changed user reg
-	MAX1164x_config(MAX1164x_S_SEL2|MAX1164x_S_SEL0,CH0_M);//#define MAX1164x_C_CS0
-	_delay_ms(30); //Internal Referenz start
-	//2970 -> 1,5V	
-	gcontrol=1;
-	sei();
-	
-
-    while(1)   {
-
-		/*if (pack1.config==0x1F) {
-			pack1.config=0x7F;
-			R0=1;
-			pack2.R0=0;
-			writeEEPROM(EEPROM_R0,0);
-		} 
-		if (pack1.config==0x05) {
-			pack1.config=0x7F;				
-			pack2.r_day_max=1;
-			pack2.r_week_max=1;
-			pack2.tol_d=0;
-			pack2.tol_s8=0;  //Tag faengt mit Einschalten an	
-			R0=1;	
-			writeEEPROM(EEPROM_R0,0xFF);
-			writeEEPROM(EEPROM_R0d,0xFF);  //Maximum des Tages
-			writeEEPROM(EEPROM_R0w,0xFF); //Maximum der Letzten 7 Tage
-			writeEEPROM(EEPROM_dol,0xFF); //Anzahl der Betriebstage		
-			for(uint8_t i=0;i<7;i++) {
-				weekmaxarr[i]=1;
-			}				
-		} */
-		if (wdcounter>0) {
-			pack2.tol_s8++;
-			if (pack2.tol_s8>(10000))  {//10800 ist theortisch der Tag aber meistens zu lang
-				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[i]=weekmaxarr[i+1];
-					if (weekmaxarr[i]>pack2.r_week_max) pack2.r_week_max=weekmaxarr[i];
-				}
-				if (pack2.tol_d>7) {
-					pack2.R0=pack2.r_week_max;
-				} else {
-					pack2.R0=pack2.r_day_max;
-				}
-				//R0=pack2.R0/100.0-0.5*(pack2.R0/100.0-R0);
-				R0=R0-(R0-pack2.R0/100.0)*0.5	;
-				pack2.R0=R0*100;
-				writeEEPROM(EEPROM_R0,pack2.R0);
-				writeEEPROM(EEPROM_R0d,pack2.r_day_max);  //Maximum des Tages
-				writeEEPROM(EEPROM_R0w,pack2.r_week_max); //Maximum der Letzten 7 Tage
-				writeEEPROM(EEPROM_dol,pack2.tol_d); //Anzahl der Betriebstage
-				pack2.r_day_max=0;
-			}
-			if (startup!=0) startup--;
-			SHT2x_MeasurePoll(HUMIDITY, &sRH);
-			// --- measure temperature with "Polling Mode" (no hold master) ---
-			SHT2x_MeasurePoll(TEMP, &sT);
-			//-- calculate humidity and temperature --
-			temperatureC = SHT2x_CalcTemperatureC(sT);
-			humidityRH = SHT2x_CalcRH(sRH);
-			ip=interp(temperatureC,humidityRH);
-			pack2.ip=ip*1000;
-			//humidityRH=calibr_hum(temperatureC,-0.45,humidityRH);
-			//temperatureC =temperatureC -0.45;
-			_hum= humidityRH*100.0;
-			_temp=(temperatureC*100.0)+32767;
-			//PORTB&=~(1<<PINB1);
-			mr=0;
-//Kritische Sektion !___Ein Breakpoint in dieser Section kann den TGS8100 zerstoeren!___________________________
-			PORTB&=~(1<<PINB1); //Auf 0 Ziehen
-			_delay_us(150);
-			mr+=MAX1164x_read();
-			_delay_us(150);
-			mr+=MAX1164x_read();
-			PORTB|=(1<<PINB1);
-//ENDE Kritische Sektion !______________________________
-			//l=mr/2.0*2.048/4096; 
-			// l maximal 2  mr max 4096  //mr 2V=8000 
-			
-			if (pack2.cmode) { //cmode=0 V 0..2 V cmode=1 V 1.5..3.5V
-				//l+=1.5; //Spannung real
-				mr+=6000;
-			} 
-			//if (l>1.8) {
-			if (mr>7200) {				
-				if (pack2.cmode==0) {
-					MAX1164x_config(MAX1164x_S_SEL2|MAX1164x_S_SEL0,CH0_CH1);
-					pack2.cmode=1;
-				}
-			}
-			//if (l<1.6) {
-			if (mr<6400) {	
-				if (pack2.cmode==1) {
-					MAX1164x_config(MAX1164x_S_SEL2|MAX1164x_S_SEL0,CH0_M);
-					pack2.cmode=0;
-				}
-				
-				
-			}
-			//pack2.VS=mr*5/2;
-			l=mr/4000.0;
-			l=( 3/l- 1) *30;
-			pack2.current=l*100;
-			
-			l=l/ip;
-			
-			if (startup==0){
-				if (l>R0) {
-					R0=l;
-					pack2.R0=R0*100;
-					writeEEPROM(EEPROM_R0,pack2.R0);
-
-				}
-				if (l*100>pack2.r_day_max) {
-					pack2.r_day_max=l*100;
-				}
-			} else if (l<R0) l=R0; //negative Werte am Anfang verhintern
-			l=R0/l;
-			l=log(l);
-			l=l*160*4; //fuer DS18B20
-			bmp280ConvertIntP1(&bmp_P);
-			bmp_P=bmp_P/3;    // /100.0*32.0;
-			wdcounter=0;
-			
-		}
-
-		if (gcontrol) {
-			//PORTB|=(1<<PINB1);
-			uint8_t bb=1;
-			uint8_t bb1=1;
-			for(uint8_t i=0;i<4;i++){
-				if (pack.convc1&bb1) {
-					if (pack.convc2&(bb)) {pack.bytes[i*2]=0;pack.bytes[i*2+1]=0;}
-					bb=bb<<1;
-					if (pack.convc2&(bb)) {pack.bytes[i*2]=0xFF;pack.bytes[i*2+1]=0xFF;}
-					bb=bb<<1;
-				} else bb=bb<<2;
-				bb1=bb1<<1;				
-			}
-			//CHanel A
-			if (pack.convc1&1) {
-				cli();pack.A=_temp;sei();
-				alarmflag=0;
-				if (pack.CSA2&0x08)  //AEH
-					if (pack.bytes[1]>pack.HA) {alarmflag=1;pack.CSA2|=0x20;}
-				if (pack.CSA2&0x04)  //AEL
-					if (pack.bytes[1]<pack.LA) {alarmflag=1;pack.CSA2|=0x10;}
-			}
-
-			if (pack.convc1&2) {
-				cli();pack.B=_hum;sei();
-				if (pack.CSB2&0x08)  //AEH
-					if (pack.bytes[1]>pack.HB) {alarmflag=1;pack.CSB2|=0x20;}
-				if (pack.CSB2&0x04)  //AEL
-					if (pack.bytes[1]<pack.LB) {alarmflag=1;pack.CSB2|=0x10;}
-			}
-
-			if (pack.convc1&4) {
-				cli();pack.C=l;sei();
-				if (pack.CSC2&0x08)  //AEH
-					if (pack.bytes[1]>pack.HC) {alarmflag=1;pack.CSC2|=0x20;}
-				if (pack.CSC2&0x04)  //AEL
-					if (pack.bytes[1]<pack.LC) {alarmflag=1;pack.CSC2|=0x10;}
-			} 
-			if (pack.convc1&8) {
-				cli();pack.D=bmp_P;sei();
-				if (pack.CSD2&0x08)  //AEH
-					if (pack.bytes[1]>pack.HD) {alarmflag=1;pack.CSD2|=0x20;}
-				if (pack.CSD2&0x04)  //AEL
-					if (pack.bytes[1]<pack.LD) {alarmflag=1;pack.CSD2|=0x10;}
-			}
-			
-			EXTERN_SLEEP();
-			//PORTB&=~(1<<PINB1);
-		}
-
-		
-#if  defined(__AVR_ATtiny25__)||defined(__AVR_ATtiny45__)  || defined(__AVR_ATtiny85__)
-			if (((TIMSK & (1<<TOIE0))==0)&& (mode==0))
-#endif			
-#if  defined(__AVR_ATtiny24__)||defined(__AVR_ATtiny44__)  || defined(__AVR_ATtiny84__) ||defined(__AVR_ATtiny24A__)||defined(__AVR_ATtiny44A__)  || defined(__AVR_ATtiny84A__)
-			if (((TIMSK0 & (1<<TOIE0))==0)&& (mode==0))
-#endif
-			  {
-
-			MCUCR|=(1<<SE)|(1<<SM1);
-			MCUCR&=~(1<<ISC01);
-		} else {
-			MCUCR|=(1<<SE);
-			MCUCR&=~(1<<SM1);
-		}
-	//	asm("SLEEP");
-   }
-
-
-}
+
+// Copyright (c) 2015, Tobias Mueller tm(at)tm3d.de
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//  * Redistributions of source code must retain the above copyright
+//    notice, this list of conditions and the following disclaimer.
+//  * Redistributions in binary form must reproduce the above copyright
+//    notice, this list of conditions and the following disclaimer in the
+//    documentation and/or other materials provided with the
+//    distribution.
+//  * All advertising materials mentioning features or use of this
+//    software must display the following acknowledgement: This product
+//    includes software developed by tm3d.de and its contributors.
+//  * Neither the name of tm3d.de nor the names of its contributors may
+//    be used to endorse or promote products derived from this software
+//    without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+#define F_CPU 8000000UL
+#include <avr/io.h>
+#include <avr/interrupt.h>
+#include <util/delay.h>
+#include <avr/wdt.h>
+#include <avr/sleep.h>
+#include "../common/I2C/USI_TWI_Master.h"
+#include "../common/I2C/MAX1164x.h"
+#include "../common/I2C/SHT2x.h"
+#include "../common/calibr.h"
+#include "../common/I2C/BMP280.h"
+
+
+
+extern void OWINIT();
+extern void EXTERN_SLEEP();
+
+uint8_t owid[8]={0x20, 0xA2, 0xD9, 0x84, 0x00, 0x16, 0x02, 0x5D};/**/
+uint8_t config_info[16]={0x01,14, 0x04,0x08, 0x08,1, 0x02,16,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
+
+#if (owid>128) 
+#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;
+
+
+#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;
+
+
+}
+
+volatile uint16_t _temp;
+volatile uint16_t _hum;
+
+
+uint8_t userRegister[1];
+int16_t sRH,sT;
+double temperatureC,humidityRH,hhum;
+double l;
+
+double R0;
+uint16_t mr;
+uint8_t startup=10;
+double ip;
+
+uint32_t bmp_P;
+int32_t bmp_t;
+
+uint8_t max_adr=0;
+#define CH0_M MAX1164x_C_SCAN0|MAX1164x_C_SGL
+#define CH1_M MAX1164x_C_SCAN0|MAX1164x_C_SGL|MAX1164x_C_CS0
+#define CH0_CH1 MAX1164x_C_SCAN0
+//|MAX1164x_C_CS0
+
+uint16_t weekmaxarr[8];
+
+
+typedef union {
+	volatile uint8_t bytes[0x20];
+	struct {
+		//Page0
+		uint16_t A;  //0
+		uint16_t B;  //2
+		uint16_t C;  //4
+		uint16_t D;  //6
+		//Page1
+		uint8_t CSA1;
+		uint8_t CSA2;
+		uint8_t CSB1;
+		uint8_t CSB2;
+		uint8_t CSC1;
+		uint8_t CSC2;
+		uint8_t CSD1;
+		uint8_t CSD2;
+		//Page2
+		uint8_t LA;
+		uint8_t HA;
+		uint8_t LB;
+		uint8_t HB;
+		uint8_t LC;
+		uint8_t HC;
+		uint8_t LD;
+		uint8_t HD;
+		//Page3
+		uint8_t FC1;
+		uint8_t FC2;
+		uint8_t FC3;
+		uint8_t FC4;
+		uint8_t VCCP;
+		uint8_t FC5;
+		uint8_t FC6;
+		uint8_t FC7;
+		uint8_t convc1;
+		uint8_t convc2;
+		
+		
+	};
+} pack_t;
+volatile pack_t pack;
+
+
+typedef struct {
+	int16_t current;  //6
+	uint16_t R0;
+	//uint16_t VS;
+	uint8_t cmode;
+	int16_t ip;
+	//uint8_t free;
+	uint16_t tol_s8;
+	uint16_t tol_d;
+	uint16_t r_day_max;
+	uint16_t r_week_max;
+} pack2_t;
+volatile pack2_t pack2;
+
+
+//Kompensieren der Abhänigkeit von RS/RO von Temperatur und Luftfeuchte
+inline double interp(double t, double h) {
+	double h2;
+	 double t2;
+	h2=h*h;
+	t2=t*t;
+	return 4.76111e-9*h2*t2-3.96956e-7*h2*t+0.0000408889*h2-1.07132e-6*h*t2+0.000115968*h*t-0.0101333*h+0.000163806*t2-0.0241179*t+1.80591;
+}
+
+#define EEPROM_R0 0
+#define EEPROM_R0d 2
+#define EEPROM_R0w 4
+#define EEPROM_dol 6
+
+
+uint16_t readEEPROM(uint8_t addr,uint16_t def) {
+	uint16_t hr;
+	while(EECR & (1<<EEPE));
+	EEARL=addr+1;
+	EECR |= (1<<EERE);
+	hr=EEDR;
+	if (hr!=0xFF) {
+		hr=hr<<8;
+		while(EECR & (1<<EEPE));
+		EEARL=addr;
+		EECR |= (1<<EERE);
+		hr|=EEDR;
+		return hr;
+	}
+	return def;
+}
+
+void writeEEPROM(uint8_t addr,uint16_t val) {
+	while(EECR & (1<<EEPE));
+	EECR = (0<<EEPM1)|(0<<EEPM0);
+	EEARL = addr;
+	EEDR = val&0xFF;
+	EECR |= (1<<EEMPE);
+	EECR |= (1<<EEPE);
+	while(EECR & (1<<EEPE));
+	EECR = (0<<EEPM1)|(0<<EEPM0);
+	EEARL = addr+1;
+	EEDR = val>>8;
+	EECR |= (1<<EEMPE);
+	EECR |= (1<<EEPE);
+}
+
+
+
+
+
+int main(void){
+	PRR|=(1<<PRADC);  // adc for save Power
+	PORTA=0xFF;
+	PORTB=0xFF-(1<<PORTB0); //Schalter kann gegen Masse sein und zieht dann immer Strom
+	DDRB|=(1<<PORTB0); //Als Ausgang und 0
+	OWINIT();
+	DDRB|=(1<<PINB1);//Ausgang und 1
+	DDRA|=(1<<PINA0);
+	
+	WDTCSR |= ((1<<WDCE) );   // Enable the WD Change Bit//| (1<<WDE)
+	WDTCSR |=   (1<<WDIE) |              // Enable WDT Interrupt
+	//(1<<WDP0) |(1<<WDP2) | (1<<WDP1);    // Set Timeout to ~2 seconds
+	(1<<WDP3) | (1<<WDP0);    // Set Timeout to ~8 seconds
+
+	MCUSR=0;
+	pack.A=0;
+	pack.B=0;
+	pack.C=0;
+	pack.D=0;
+	pack.CSA1=0x08;
+	pack.CSA2=0x8C;
+	pack.CSB1=0x08;
+	pack.CSB2=0x8C;
+	pack.CSC1=0x08;
+	pack.CSC2=0x8C;
+	pack.CSD1=0x08;
+	pack.CSD2=0x8C;
+	pack.HA=0xFF;
+	pack.LA=0x00;
+	pack.HB=0xFF;
+	pack.LB=0x00;
+	pack.HC=0xFF;
+	pack.LC=0x00;
+	pack.HD=0xFF;
+	pack.LD=0x00;
+	pack.VCCP=0;
+
+	pack2.cmode=0;
+	pack2.R0=readEEPROM(EEPROM_R0,1);
+	R0=pack2.R0/100.0;
+		
+	pack2.r_day_max=readEEPROM(EEPROM_R0d,1);
+	pack2.r_week_max=readEEPROM(EEPROM_R0w,1);
+	pack2.tol_d=readEEPROM(EEPROM_dol,0); 
+	pack2.tol_s8=0;  //Tag faengt mit Einschalten an
+	for(uint8_t i=0;i<7;i++) {
+		weekmaxarr[i]=pack2.r_week_max;
+	}
+
+	USI_TWI_Master_Initialise();
+	bmp280Init();
+	SHT2x_SoftReset();
+	SHT2x_ReadUserRegister(userRegister);
+	SHT2x_WriteUserRegister(userRegister); //write changed user reg
+	MAX1164x_config(MAX1164x_S_SEL2|MAX1164x_S_SEL0,CH0_M);//#define MAX1164x_C_CS0
+	_delay_ms(30); //Internal Referenz start
+	//2970 -> 1,5V	
+	gcontrol=1;
+	sei();
+	
+
+    while(1)   {
+
+		/*if (pack1.config==0x1F) {
+			pack1.config=0x7F;
+			R0=1;
+			pack2.R0=0;
+			writeEEPROM(EEPROM_R0,0);
+		} 
+		if (pack1.config==0x05) {
+			pack1.config=0x7F;				
+			pack2.r_day_max=1;
+			pack2.r_week_max=1;
+			pack2.tol_d=0;
+			pack2.tol_s8=0;  //Tag faengt mit Einschalten an	
+			R0=1;	
+			writeEEPROM(EEPROM_R0,0xFF);
+			writeEEPROM(EEPROM_R0d,0xFF);  //Maximum des Tages
+			writeEEPROM(EEPROM_R0w,0xFF); //Maximum der Letzten 7 Tage
+			writeEEPROM(EEPROM_dol,0xFF); //Anzahl der Betriebstage		
+			for(uint8_t i=0;i<7;i++) {
+				weekmaxarr[i]=1;
+			}				
+		} */
+		if (wdcounter>0) {
+			pack2.tol_s8++;
+			if (pack2.tol_s8>(10000))  {//10800 ist theortisch der Tag aber meistens zu lang
+				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[i]=weekmaxarr[i+1];
+					if (weekmaxarr[i]>pack2.r_week_max) pack2.r_week_max=weekmaxarr[i];
+				}
+				if (pack2.tol_d>7) {
+					pack2.R0=pack2.r_week_max;
+				} else {
+					pack2.R0=pack2.r_day_max;
+				}
+				//R0=pack2.R0/100.0-0.5*(pack2.R0/100.0-R0);
+				R0=R0-(R0-pack2.R0/100.0)*0.5	;
+				pack2.R0=R0*100;
+				writeEEPROM(EEPROM_R0,pack2.R0);
+				writeEEPROM(EEPROM_R0d,pack2.r_day_max);  //Maximum des Tages
+				writeEEPROM(EEPROM_R0w,pack2.r_week_max); //Maximum der Letzten 7 Tage
+				writeEEPROM(EEPROM_dol,pack2.tol_d); //Anzahl der Betriebstage
+				pack2.r_day_max=0;
+			}
+			if (startup!=0) startup--;
+			SHT2x_MeasurePoll(HUMIDITY, &sRH);
+			// --- measure temperature with "Polling Mode" (no hold master) ---
+			SHT2x_MeasurePoll(TEMP, &sT);
+			//-- calculate humidity and temperature --
+			temperatureC = SHT2x_CalcTemperatureC(sT);
+			humidityRH = SHT2x_CalcRH(sRH);
+			ip=interp(temperatureC,humidityRH);
+			pack2.ip=ip*1000;
+			//humidityRH=calibr_hum(temperatureC,-0.45,humidityRH);
+			//temperatureC =temperatureC -0.45;
+			_hum= humidityRH*100.0;
+			_temp=(temperatureC*100.0)+32767;
+			//PORTB&=~(1<<PINB1);
+			mr=0;
+//Kritische Sektion !___Ein Breakpoint in dieser Section kann den TGS8100 zerstoeren!___________________________
+			PORTB&=~(1<<PINB1); //Auf 0 Ziehen
+			_delay_us(150);
+			mr+=MAX1164x_read();
+			_delay_us(150);
+			mr+=MAX1164x_read();
+			PORTB|=(1<<PINB1);
+//ENDE Kritische Sektion !______________________________
+			//l=mr/2.0*2.048/4096; 
+			// l maximal 2  mr max 4096  //mr 2V=8000 
+			
+			if (pack2.cmode) { //cmode=0 V 0..2 V cmode=1 V 1.5..3.5V
+				//l+=1.5; //Spannung real
+				mr+=6000;
+			} 
+			//if (l>1.8) {
+			if (mr>7200) {				
+				if (pack2.cmode==0) {
+					MAX1164x_config(MAX1164x_S_SEL2|MAX1164x_S_SEL0,CH0_CH1);
+					pack2.cmode=1;
+				}
+			}
+			//if (l<1.6) {
+			if (mr<6400) {	
+				if (pack2.cmode==1) {
+					MAX1164x_config(MAX1164x_S_SEL2|MAX1164x_S_SEL0,CH0_M);
+					pack2.cmode=0;
+				}
+				
+				
+			}
+			//pack2.VS=mr*5/2;
+			l=mr/4000.0;
+			l=( 3/l- 1) *30;
+			pack2.current=l*100;
+			
+			l=l/ip;
+			
+			if (startup==0){
+				if (l>R0) {
+					R0=l;
+					pack2.R0=R0*100;
+					writeEEPROM(EEPROM_R0,pack2.R0);
+
+				}
+				if (l*100>pack2.r_day_max) {
+					pack2.r_day_max=l*100;
+				}
+			} else if (l<R0) l=R0; //negative Werte am Anfang verhintern
+			l=R0/l;
+			l=log(l);
+			l=l*160*4; //fuer DS18B20
+			bmp280ConvertIntP1(&bmp_P);
+			bmp_P=bmp_P/3;    // /100.0*32.0;
+			wdcounter=0;
+			
+		}
+
+		if (gcontrol) {
+			//PORTB|=(1<<PINB1);
+			uint8_t bb=1;
+			uint8_t bb1=1;
+			for(uint8_t i=0;i<4;i++){
+				if (pack.convc1&bb1) {
+					if (pack.convc2&(bb)) {pack.bytes[i*2]=0;pack.bytes[i*2+1]=0;}
+					bb=bb<<1;
+					if (pack.convc2&(bb)) {pack.bytes[i*2]=0xFF;pack.bytes[i*2+1]=0xFF;}
+					bb=bb<<1;
+				} else bb=bb<<2;
+				bb1=bb1<<1;				
+			}
+			//CHanel A
+			if (pack.convc1&1) {
+				cli();pack.A=_temp;sei();
+				alarmflag=0;
+				if (pack.CSA2&0x08)  //AEH
+					if (pack.bytes[1]>pack.HA) {alarmflag=1;pack.CSA2|=0x20;}
+				if (pack.CSA2&0x04)  //AEL
+					if (pack.bytes[1]<pack.LA) {alarmflag=1;pack.CSA2|=0x10;}
+			}
+
+			if (pack.convc1&2) {
+				cli();pack.B=_hum;sei();
+				if (pack.CSB2&0x08)  //AEH
+					if (pack.bytes[1]>pack.HB) {alarmflag=1;pack.CSB2|=0x20;}
+				if (pack.CSB2&0x04)  //AEL
+					if (pack.bytes[1]<pack.LB) {alarmflag=1;pack.CSB2|=0x10;}
+			}
+
+			if (pack.convc1&4) {
+				cli();pack.C=l;sei();
+				if (pack.CSC2&0x08)  //AEH
+					if (pack.bytes[1]>pack.HC) {alarmflag=1;pack.CSC2|=0x20;}
+				if (pack.CSC2&0x04)  //AEL
+					if (pack.bytes[1]<pack.LC) {alarmflag=1;pack.CSC2|=0x10;}
+			} 
+			if (pack.convc1&8) {
+				cli();pack.D=bmp_P;sei();
+				if (pack.CSD2&0x08)  //AEH
+					if (pack.bytes[1]>pack.HD) {alarmflag=1;pack.CSD2|=0x20;}
+				if (pack.CSD2&0x04)  //AEL
+					if (pack.bytes[1]<pack.LD) {alarmflag=1;pack.CSD2|=0x10;}
+			}
+			
+			EXTERN_SLEEP();
+			//PORTB&=~(1<<PINB1);
+		}
+
+		
+#if  defined(__AVR_ATtiny25__)||defined(__AVR_ATtiny45__)  || defined(__AVR_ATtiny85__)
+			if (((TIMSK & (1<<TOIE0))==0)&& (mode==0))
+#endif			
+#if  defined(__AVR_ATtiny24__)||defined(__AVR_ATtiny44__)  || defined(__AVR_ATtiny84__) ||defined(__AVR_ATtiny24A__)||defined(__AVR_ATtiny44A__)  || defined(__AVR_ATtiny84A__)
+			if (((TIMSK0 & (1<<TOIE0))==0)&& (mode==0))
+#endif
+			  {
+
+			MCUCR|=(1<<SE)|(1<<SM1);
+			MCUCR&=~(1<<ISC01);
+		} else {
+			MCUCR|=(1<<SE);
+			MCUCR&=~(1<<SM1);
+		}
+	//	asm("SLEEP");
+   }
+
+
+}
diff --git a/common/I2C/HDC1080.c b/common/I2C/HDC1080.c
index 3a55ddb..ca2f7ff 100644
--- a/common/I2C/HDC1080.c
+++ b/common/I2C/HDC1080.c
@@ -1,295 +1,295 @@
-// Copyright (c) 2016, Tobias Mueller tm(at)tm3d.de
-// All rights reserved.
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-//  * Redistributions of source code must retain the above copyright
-//    notice, this list of conditions and the following disclaimer.
-//  * Redistributions in binary form must reproduce the above copyright
-//    notice, this list of conditions and the following disclaimer in the
-//    documentation and/or other materials provided with the
-//    distribution.
-//  * All advertising materials mentioning features or use of this
-//    software must display the following acknowledgement: This product
-//    includes software developed by tm3d.de and its contributors.
-//  * Neither the name of tm3d.de nor the names of its contributors may
-//    be used to endorse or promote products derived from this software
-//    without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-//---------- Includes ----------------------------------------------------------
-#define F_CPU 8000000UL
-#include <avr/io.h>
-#include <avr/interrupt.h>
-#include <util/delay.h>
-#include <avr/wdt.h>
-#include <avr/sleep.h>
-#include "USI_TWI_Master.h"
-#include "HDC1080.h"
-typedef enum{
-	I2C_ADR_W = 128, // sensor I2C address + write bit
-	I2C_ADR_R = 129 // sensor I2C address + read bit
-}etI2cHeader;
-
-uint8_t HDC1080_Init() {
-	volatile uint8_t error=0;
-	I2c_StartCondition();
-	error |= I2c_WriteByte (I2C_ADR_W); // I2C Adr
-	error |= I2c_WriteByte (0x02); // Config
-	error |= I2c_WriteByte (0x0); // 14 bit
-	error |= I2c_WriteByte (0x0); // 
-	I2c_StopCondition();
-	return error;
-
-}
-
-uint8_t HDC1080_Readf(double * temperature, double * hum) {	
-	int16_t t;
-	uint16_t h;
-	uint8_t error=0;
-	error=HDC1080_Readi(&t,&h);
-	*temperature=(double)t/65536.0*165.0-40.0;
-	*hum=(double)h/65536.0*100;
-	return error;
-
-}
-uint8_t HDC1080_Readi(int16_t * temperature, uint16_t * hum) {
-	volatile uint8_t error=0;
-	I2c_StartCondition();
-	error |= I2c_WriteByte (I2C_ADR_W); // I2C Adr
-	error |= I2c_WriteByte (0x0); //
-	I2c_StopCondition();
-	_delay_ms(10);
-	I2c_StartCondition();
-	error |= I2c_WriteByte (I2C_ADR_R); //I2C address
-	*temperature=0;
-	*temperature |= I2c_ReadByte(ACK)<<8;
-	*temperature |= I2c_ReadByte(ACK); 
-	I2c_StopCondition();
-
-	I2c_StartCondition();
-	error |= I2c_WriteByte (I2C_ADR_W); // I2C Adr
-	error |= I2c_WriteByte (0x01); //
-	I2c_StopCondition();
-	_delay_ms(10);
-	I2c_StartCondition();
-	error |= I2c_WriteByte (I2C_ADR_R); //I2C address
-	*hum=0;
-	*hum|= I2c_ReadByte(ACK)<<8; 
-	*hum|= I2c_ReadByte(NO_ACK); 
-	I2c_StopCondition();
-	return error;
-	}
-
-/*
-
-const uint16_t POLYNOMIAL = 0x131; //P(x)=x^8+x^5+x^4+1 = 100110001
-
-
-//==============================================================================
-uint8_t SHT2x_CheckCrc(uint8_t data[], uint8_t nbrOfBytes, uint8_t checksum)
-//==============================================================================
-{
-	uint8_t crc = 0;
-	uint8_t byteCtr;
-	//calculates 8-Bit checksum with given polynomial
-	for (byteCtr = 0; byteCtr < nbrOfBytes; ++byteCtr)
-	{ crc ^= (data[byteCtr]);
-		for (uint8_t bit = 8; bit > 0; --bit)
-		{ if (crc & 0x80) crc = (crc << 1) ^ POLYNOMIAL;
-			else crc = (crc << 1);
-		}
-	}
-	if (crc != checksum) return CHECKSUM_ERROR;
-	else return 0;
-}
-//===========================================================================
-uint8_t SHT2x_ReadUserRegister(uint8_t *pRegisterValue)
-//===========================================================================
-{
-	uint8_t checksum; //variable for checksum byte
-	uint8_t error=0; //variable for error code
-	I2c_StartCondition();
-	error |= I2c_WriteByte (I2C_ADR_W);
-	error |= I2c_WriteByte (USER_REG_R);
-	I2c_StartCondition();
-	error |= I2c_WriteByte (I2C_ADR_R);
-	*pRegisterValue = I2c_ReadByte(ACK);
-	checksum=I2c_ReadByte(NO_ACK);
-	error |= SHT2x_CheckCrc (pRegisterValue,1,checksum);
-	I2c_StopCondition();
-	return error;
-}
-//===========================================================================
-uint8_t SHT2x_WriteUserRegister(uint8_t *pRegisterValue)
-//===========================================================================
-{
-	uint8_t error=0; //variable for error code
-	I2c_StartCondition();
-	error |= I2c_WriteByte (I2C_ADR_W);
-	error |= I2c_WriteByte (USER_REG_W);
-	error |= I2c_WriteByte (*pRegisterValue);
-	I2c_StopCondition();
-	return error;
-}
-//===========================================================================
-uint8_t SHT2x_MeasureHM(etSHT2xMeasureType eSHT2xMeasureType, int16_t *pMeasurand)
-//===========================================================================
-{
-	uint8_t checksum; //checksum
-	uint8_t data[2]; //data array for checksum verification
-	uint8_t error=0; //error variable
-	uint16_t i; //counting variable
-	//-- write I2C sensor address and command --
-	I2c_StartCondition();
-	error |= I2c_WriteByte (I2C_ADR_W); // I2C Adr
-	switch(eSHT2xMeasureType)
-	{ case HUMIDITY: error |= I2c_WriteByte (TRIG_RH_MEASUREMENT_HM); break;
-		case TEMP : error |= I2c_WriteByte (TRIG_T_MEASUREMENT_HM); break;
-		//default: assert(0);
-	}
-	//-- wait until hold master is released --
-	I2c_StartCondition();
-	error |= I2c_WriteByte (I2C_ADR_R);
-	//SCL=HIGH; // set SCL I/O port as input
-	DDR_USI&=~(1<<PIN_USI_SCL);
-	for(i=0; i<1000; i++) // wait until master hold is released or ;;;;; Son quatsch.... 1000 s *kopfschuettel*
-	{ _delay_ms(1); // a timeout (~1s) is reached
-		//if (SCL_CONF==1) break;
-		if (PIN_USI&(1<<PIN_USI_SCL)) break;
-	}
-	//-- check for timeout --
-	//Was wenn der SHT2x die leitung auf 0 laesst? Kurzschluss???
-	if((PIN_USI&(1<<PIN_USI_SCL))==0) error |= TIME_OUT_ERROR; else DDR_USI|=(1<<PIN_USI_SCL);
-	
-	//-- read two data bytes and one checksum byte --
-	*pMeasurand=((data[0] = I2c_ReadByte(ACK))>>8) & 0xFF;
-	*pMeasurand|=0xFF & (data[1] = I2c_ReadByte(ACK));
-//	pMeasurand->s16.u8H = data[0] = I2c_ReadByte(ACK);
-//	pMeasurand->s16.u8L = data[1] = I2c_ReadByte(ACK);
-
-	checksum=I2c_ReadByte(NO_ACK);
-	//-- verify checksum --
-	error |= SHT2x_CheckCrc (data,2,checksum);
-	I2c_StopCondition();
-	return error;
-}
-//===========================================================================
-uint8_t SHT2x_MeasurePoll(etSHT2xMeasureType eSHT2xMeasureType, int16_t *pMeasurand)
-//===========================================================================
-{
-	uint8_t checksum; //checksum
-	uint8_t data[2]; //data array for checksum verification
-	uint8_t error=0; //error variable
-	uint16_t i=0; //counting variable
-	//-- write I2C sensor address and command --
-	I2c_StartCondition();
-	error |= I2c_WriteByte (I2C_ADR_W); // I2C Adr
-	switch(eSHT2xMeasureType)
-	{ case HUMIDITY: error |= I2c_WriteByte (TRIG_RH_MEASUREMENT_POLL); break;
-		case TEMP : error |= I2c_WriteByte (TRIG_T_MEASUREMENT_POLL); break;
-		//default: assert(0);
-	}
-	//-- poll every 10ms for measurement ready. Timeout after 20 retries (200ms)--
-	do
-	{ I2c_StartCondition();
-		_delay_ms(200); //delay 10ms
-		if(i++ >= 20) break;
-	} while(I2c_WriteByte (I2C_ADR_R) == ACK_ERROR);
-	if (i>=20) error |= TIME_OUT_ERROR;
-	//-- read two data bytes and one checksum byte --
-	data[0]=I2c_ReadByte(ACK);
-	data[1]=I2c_ReadByte(ACK);
-	*pMeasurand=(data[0]<<8)|data[1];
-	
-//	pMeasurand->s16.u8H = data[0] = I2c_ReadByte(ACK);
-//	pMeasurand->s16.u8L = data[1] = I2c_ReadByte(ACK);
-	checksum=I2c_ReadByte(NO_ACK);
-	//-- verify checksum --
-	error |= SHT2x_CheckCrc (data,2,checksum);
-	I2c_StopCondition();
-	return error;
-}
-//===========================================================================
-uint8_t SHT2x_SoftReset(void)
-//===========================================================================
-{
-	uint8_t error=0; //error variable
-	I2c_StartCondition();
-	error |= I2c_WriteByte (I2C_ADR_W); // I2C Adr
-	error |= I2c_WriteByte (SOFT_RESET); // Command
-	I2c_StopCondition();
-	_delay_ms(15); // wait till sensor has restarted
-	return error;
-}
-//==============================================================================
-float SHT2x_CalcRH(uint16_t u16sRH)
-//==============================================================================
-{
-	double humidityRH; // variable for result
-	u16sRH &= ~0x0003; // clear bits [1..0] (status bits)
-	//-- calculate relative humidity [%RH] --
-	humidityRH = -6.0 + 125.0/65536 * (double)u16sRH; // RH= -6 + 125 * SRH/2^16
-	return humidityRH;
-}
-//==============================================================================
-float SHT2x_CalcTemperatureC(uint16_t u16sT)
-//==============================================================================
-{
-	double temperatureC; // variable for result
-	u16sT &= ~0x0003; // clear bits [1..0] (status bits)
-	//-- calculate temperature [°C] --
-	temperatureC= -46.85 + 175.72/65536 *(double)u16sT; //T= -46.85 + 175.72 * ST/2^16
-	return temperatureC;
-}
-//==============================================================================
-uint8_t SHT2x_GetSerialNumber(uint8_t u8SerialNumber[])
-//==============================================================================
-{
-	uint8_t error=0; //error variable
-	//Read from memory location 1
-	I2c_StartCondition();
-	error |= I2c_WriteByte (I2C_ADR_W); //I2C address
-	error |= I2c_WriteByte (0xFA); //Command for readout on-chip memory
-	error |= I2c_WriteByte (0x0F); //on-chip memory address
-	I2c_StartCondition();
-	error |= I2c_WriteByte (I2C_ADR_R); //I2C address
-	u8SerialNumber[5] = I2c_ReadByte(ACK); //Read SNB_3
-	I2c_ReadByte(ACK); //Read CRC SNB_3 (CRC is not analyzed)
-	u8SerialNumber[4] = I2c_ReadByte(ACK); //Read SNB_2
-	I2c_ReadByte(ACK); //Read CRC SNB_2 (CRC is not analyzed)
-	u8SerialNumber[3] = I2c_ReadByte(ACK); //Read SNB_1
-	I2c_ReadByte(ACK); //Read CRC SNB_1 (CRC is not analyzed)
-	u8SerialNumber[2] = I2c_ReadByte(ACK); //Read SNB_0
-	I2c_ReadByte(NO_ACK); //Read CRC SNB_0 (CRC is not analyzed)
-	I2c_StopCondition();
-	//Read from memory location 2
-	I2c_StartCondition();
-	error |= I2c_WriteByte (I2C_ADR_W); //I2C address
-	error |= I2c_WriteByte (0xFC); //Command for readout on-chip memory
-	error |= I2c_WriteByte (0xC9); //on-chip memory address
-	I2c_StartCondition();
-	error |= I2c_WriteByte (I2C_ADR_R); //I2C address
-	u8SerialNumber[1] = I2c_ReadByte(ACK); //Read SNC_1
-	u8SerialNumber[0] = I2c_ReadByte(ACK); //Read SNC_0
-	I2c_ReadByte(ACK); //Read CRC SNC0/1 (CRC is not analyzed)
-	u8SerialNumber[7] = I2c_ReadByte(ACK); //Read SNA_1
-	u8SerialNumber[6] = I2c_ReadByte(ACK); //Read SNA_0
-	I2c_ReadByte(NO_ACK); //Read CRC SNA0/1 (CRC is not analyzed)
-	I2c_StopCondition();
-	return error;
-}
+// Copyright (c) 2016, Tobias Mueller tm(at)tm3d.de
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//  * Redistributions of source code must retain the above copyright
+//    notice, this list of conditions and the following disclaimer.
+//  * Redistributions in binary form must reproduce the above copyright
+//    notice, this list of conditions and the following disclaimer in the
+//    documentation and/or other materials provided with the
+//    distribution.
+//  * All advertising materials mentioning features or use of this
+//    software must display the following acknowledgement: This product
+//    includes software developed by tm3d.de and its contributors.
+//  * Neither the name of tm3d.de nor the names of its contributors may
+//    be used to endorse or promote products derived from this software
+//    without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+//---------- Includes ----------------------------------------------------------
+#define F_CPU 8000000UL
+#include <avr/io.h>
+#include <avr/interrupt.h>
+#include <util/delay.h>
+#include <avr/wdt.h>
+#include <avr/sleep.h>
+#include "USI_TWI_Master.h"
+#include "HDC1080.h"
+typedef enum{
+	I2C_ADR_W = 128, // sensor I2C address + write bit
+	I2C_ADR_R = 129 // sensor I2C address + read bit
+}etI2cHeader;
+
+uint8_t HDC1080_Init() {
+	volatile uint8_t error=0;
+	I2c_StartCondition();
+	error |= I2c_WriteByte (I2C_ADR_W); // I2C Adr
+	error |= I2c_WriteByte (0x02); // Config
+	error |= I2c_WriteByte (0x0); // 14 bit
+	error |= I2c_WriteByte (0x0); // 
+	I2c_StopCondition();
+	return error;
+
+}
+
+uint8_t HDC1080_Readf(double * temperature, double * hum) {	
+	int16_t t;
+	uint16_t h;
+	uint8_t error=0;
+	error=HDC1080_Readi(&t,&h);
+	*temperature=(double)t/65536.0*165.0-40.0;
+	*hum=(double)h/65536.0*100;
+	return error;
+
+}
+uint8_t HDC1080_Readi(int16_t * temperature, uint16_t * hum) {
+	volatile uint8_t error=0;
+	I2c_StartCondition();
+	error |= I2c_WriteByte (I2C_ADR_W); // I2C Adr
+	error |= I2c_WriteByte (0x0); //
+	I2c_StopCondition();
+	_delay_ms(10);
+	I2c_StartCondition();
+	error |= I2c_WriteByte (I2C_ADR_R); //I2C address
+	*temperature=0;
+	*temperature |= I2c_ReadByte(ACK)<<8;
+	*temperature |= I2c_ReadByte(ACK); 
+	I2c_StopCondition();
+
+	I2c_StartCondition();
+	error |= I2c_WriteByte (I2C_ADR_W); // I2C Adr
+	error |= I2c_WriteByte (0x01); //
+	I2c_StopCondition();
+	_delay_ms(10);
+	I2c_StartCondition();
+	error |= I2c_WriteByte (I2C_ADR_R); //I2C address
+	*hum=0;
+	*hum|= I2c_ReadByte(ACK)<<8; 
+	*hum|= I2c_ReadByte(NO_ACK); 
+	I2c_StopCondition();
+	return error;
+	}
+
+/*
+
+const uint16_t POLYNOMIAL = 0x131; //P(x)=x^8+x^5+x^4+1 = 100110001
+
+
+//==============================================================================
+uint8_t SHT2x_CheckCrc(uint8_t data[], uint8_t nbrOfBytes, uint8_t checksum)
+//==============================================================================
+{
+	uint8_t crc = 0;
+	uint8_t byteCtr;
+	//calculates 8-Bit checksum with given polynomial
+	for (byteCtr = 0; byteCtr < nbrOfBytes; ++byteCtr)
+	{ crc ^= (data[byteCtr]);
+		for (uint8_t bit = 8; bit > 0; --bit)
+		{ if (crc & 0x80) crc = (crc << 1) ^ POLYNOMIAL;
+			else crc = (crc << 1);
+		}
+	}
+	if (crc != checksum) return CHECKSUM_ERROR;
+	else return 0;
+}
+//===========================================================================
+uint8_t SHT2x_ReadUserRegister(uint8_t *pRegisterValue)
+//===========================================================================
+{
+	uint8_t checksum; //variable for checksum byte
+	uint8_t error=0; //variable for error code
+	I2c_StartCondition();
+	error |= I2c_WriteByte (I2C_ADR_W);
+	error |= I2c_WriteByte (USER_REG_R);
+	I2c_StartCondition();
+	error |= I2c_WriteByte (I2C_ADR_R);
+	*pRegisterValue = I2c_ReadByte(ACK);
+	checksum=I2c_ReadByte(NO_ACK);
+	error |= SHT2x_CheckCrc (pRegisterValue,1,checksum);
+	I2c_StopCondition();
+	return error;
+}
+//===========================================================================
+uint8_t SHT2x_WriteUserRegister(uint8_t *pRegisterValue)
+//===========================================================================
+{
+	uint8_t error=0; //variable for error code
+	I2c_StartCondition();
+	error |= I2c_WriteByte (I2C_ADR_W);
+	error |= I2c_WriteByte (USER_REG_W);
+	error |= I2c_WriteByte (*pRegisterValue);
+	I2c_StopCondition();
+	return error;
+}
+//===========================================================================
+uint8_t SHT2x_MeasureHM(etSHT2xMeasureType eSHT2xMeasureType, int16_t *pMeasurand)
+//===========================================================================
+{
+	uint8_t checksum; //checksum
+	uint8_t data[2]; //data array for checksum verification
+	uint8_t error=0; //error variable
+	uint16_t i; //counting variable
+	//-- write I2C sensor address and command --
+	I2c_StartCondition();
+	error |= I2c_WriteByte (I2C_ADR_W); // I2C Adr
+	switch(eSHT2xMeasureType)
+	{ case HUMIDITY: error |= I2c_WriteByte (TRIG_RH_MEASUREMENT_HM); break;
+		case TEMP : error |= I2c_WriteByte (TRIG_T_MEASUREMENT_HM); break;
+		//default: assert(0);
+	}
+	//-- wait until hold master is released --
+	I2c_StartCondition();
+	error |= I2c_WriteByte (I2C_ADR_R);
+	//SCL=HIGH; // set SCL I/O port as input
+	DDR_USI&=~(1<<PIN_USI_SCL);
+	for(i=0; i<1000; i++) // wait until master hold is released or ;;;;; Son quatsch.... 1000 s *kopfschuettel*
+	{ _delay_ms(1); // a timeout (~1s) is reached
+		//if (SCL_CONF==1) break;
+		if (PIN_USI&(1<<PIN_USI_SCL)) break;
+	}
+	//-- check for timeout --
+	//Was wenn der SHT2x die leitung auf 0 laesst? Kurzschluss???
+	if((PIN_USI&(1<<PIN_USI_SCL))==0) error |= TIME_OUT_ERROR; else DDR_USI|=(1<<PIN_USI_SCL);
+	
+	//-- read two data bytes and one checksum byte --
+	*pMeasurand=((data[0] = I2c_ReadByte(ACK))>>8) & 0xFF;
+	*pMeasurand|=0xFF & (data[1] = I2c_ReadByte(ACK));
+//	pMeasurand->s16.u8H = data[0] = I2c_ReadByte(ACK);
+//	pMeasurand->s16.u8L = data[1] = I2c_ReadByte(ACK);
+
+	checksum=I2c_ReadByte(NO_ACK);
+	//-- verify checksum --
+	error |= SHT2x_CheckCrc (data,2,checksum);
+	I2c_StopCondition();
+	return error;
+}
+//===========================================================================
+uint8_t SHT2x_MeasurePoll(etSHT2xMeasureType eSHT2xMeasureType, int16_t *pMeasurand)
+//===========================================================================
+{
+	uint8_t checksum; //checksum
+	uint8_t data[2]; //data array for checksum verification
+	uint8_t error=0; //error variable
+	uint16_t i=0; //counting variable
+	//-- write I2C sensor address and command --
+	I2c_StartCondition();
+	error |= I2c_WriteByte (I2C_ADR_W); // I2C Adr
+	switch(eSHT2xMeasureType)
+	{ case HUMIDITY: error |= I2c_WriteByte (TRIG_RH_MEASUREMENT_POLL); break;
+		case TEMP : error |= I2c_WriteByte (TRIG_T_MEASUREMENT_POLL); break;
+		//default: assert(0);
+	}
+	//-- poll every 10ms for measurement ready. Timeout after 20 retries (200ms)--
+	do
+	{ I2c_StartCondition();
+		_delay_ms(200); //delay 10ms
+		if(i++ >= 20) break;
+	} while(I2c_WriteByte (I2C_ADR_R) == ACK_ERROR);
+	if (i>=20) error |= TIME_OUT_ERROR;
+	//-- read two data bytes and one checksum byte --
+	data[0]=I2c_ReadByte(ACK);
+	data[1]=I2c_ReadByte(ACK);
+	*pMeasurand=(data[0]<<8)|data[1];
+	
+//	pMeasurand->s16.u8H = data[0] = I2c_ReadByte(ACK);
+//	pMeasurand->s16.u8L = data[1] = I2c_ReadByte(ACK);
+	checksum=I2c_ReadByte(NO_ACK);
+	//-- verify checksum --
+	error |= SHT2x_CheckCrc (data,2,checksum);
+	I2c_StopCondition();
+	return error;
+}
+//===========================================================================
+uint8_t SHT2x_SoftReset(void)
+//===========================================================================
+{
+	uint8_t error=0; //error variable
+	I2c_StartCondition();
+	error |= I2c_WriteByte (I2C_ADR_W); // I2C Adr
+	error |= I2c_WriteByte (SOFT_RESET); // Command
+	I2c_StopCondition();
+	_delay_ms(15); // wait till sensor has restarted
+	return error;
+}
+//==============================================================================
+float SHT2x_CalcRH(uint16_t u16sRH)
+//==============================================================================
+{
+	double humidityRH; // variable for result
+	u16sRH &= ~0x0003; // clear bits [1..0] (status bits)
+	//-- calculate relative humidity [%RH] --
+	humidityRH = -6.0 + 125.0/65536 * (double)u16sRH; // RH= -6 + 125 * SRH/2^16
+	return humidityRH;
+}
+//==============================================================================
+float SHT2x_CalcTemperatureC(uint16_t u16sT)
+//==============================================================================
+{
+	double temperatureC; // variable for result
+	u16sT &= ~0x0003; // clear bits [1..0] (status bits)
+	//-- calculate temperature [°C] --
+	temperatureC= -46.85 + 175.72/65536 *(double)u16sT; //T= -46.85 + 175.72 * ST/2^16
+	return temperatureC;
+}
+//==============================================================================
+uint8_t SHT2x_GetSerialNumber(uint8_t u8SerialNumber[])
+//==============================================================================
+{
+	uint8_t error=0; //error variable
+	//Read from memory location 1
+	I2c_StartCondition();
+	error |= I2c_WriteByte (I2C_ADR_W); //I2C address
+	error |= I2c_WriteByte (0xFA); //Command for readout on-chip memory
+	error |= I2c_WriteByte (0x0F); //on-chip memory address
+	I2c_StartCondition();
+	error |= I2c_WriteByte (I2C_ADR_R); //I2C address
+	u8SerialNumber[5] = I2c_ReadByte(ACK); //Read SNB_3
+	I2c_ReadByte(ACK); //Read CRC SNB_3 (CRC is not analyzed)
+	u8SerialNumber[4] = I2c_ReadByte(ACK); //Read SNB_2
+	I2c_ReadByte(ACK); //Read CRC SNB_2 (CRC is not analyzed)
+	u8SerialNumber[3] = I2c_ReadByte(ACK); //Read SNB_1
+	I2c_ReadByte(ACK); //Read CRC SNB_1 (CRC is not analyzed)
+	u8SerialNumber[2] = I2c_ReadByte(ACK); //Read SNB_0
+	I2c_ReadByte(NO_ACK); //Read CRC SNB_0 (CRC is not analyzed)
+	I2c_StopCondition();
+	//Read from memory location 2
+	I2c_StartCondition();
+	error |= I2c_WriteByte (I2C_ADR_W); //I2C address
+	error |= I2c_WriteByte (0xFC); //Command for readout on-chip memory
+	error |= I2c_WriteByte (0xC9); //on-chip memory address
+	I2c_StartCondition();
+	error |= I2c_WriteByte (I2C_ADR_R); //I2C address
+	u8SerialNumber[1] = I2c_ReadByte(ACK); //Read SNC_1
+	u8SerialNumber[0] = I2c_ReadByte(ACK); //Read SNC_0
+	I2c_ReadByte(ACK); //Read CRC SNC0/1 (CRC is not analyzed)
+	u8SerialNumber[7] = I2c_ReadByte(ACK); //Read SNA_1
+	u8SerialNumber[6] = I2c_ReadByte(ACK); //Read SNA_0
+	I2c_ReadByte(NO_ACK); //Read CRC SNA0/1 (CRC is not analyzed)
+	I2c_StopCondition();
+	return error;
+}
 */
\ No newline at end of file
diff --git a/common/I2C/HDC1080.h b/common/I2C/HDC1080.h
index 801cca1..b250afe 100644
--- a/common/I2C/HDC1080.h
+++ b/common/I2C/HDC1080.h
@@ -1,42 +1,42 @@
-#ifndef HDC1080_H
-#define HDC1080_H
-// Copyright (c) 2016, Tobias Mueller tm(at)tm3d.de
-// All rights reserved.
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-//  * Redistributions of source code must retain the above copyright
-//    notice, this list of conditions and the following disclaimer.
-//  * Redistributions in binary form must reproduce the above copyright
-//    notice, this list of conditions and the following disclaimer in the
-//    documentation and/or other materials provided with the
-//    distribution.
-//  * All advertising materials mentioning features or use of this
-//    software must display the following acknowledgement: This product
-//    includes software developed by tm3d.de and its contributors.
-//  * Neither the name of tm3d.de nor the names of its contributors may
-//    be used to endorse or promote products derived from this software
-//    without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-
-uint8_t HDC1080_Init();
-
-uint8_t HDC1080_Readf(double * temperature, double * hum);
-uint8_t HDC1080_Readi(int16_t * temperature, uint16_t * hum);
-
-
-#endif
+#ifndef HDC1080_H
+#define HDC1080_H
+// Copyright (c) 2016, Tobias Mueller tm(at)tm3d.de
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//  * Redistributions of source code must retain the above copyright
+//    notice, this list of conditions and the following disclaimer.
+//  * Redistributions in binary form must reproduce the above copyright
+//    notice, this list of conditions and the following disclaimer in the
+//    documentation and/or other materials provided with the
+//    distribution.
+//  * All advertising materials mentioning features or use of this
+//    software must display the following acknowledgement: This product
+//    includes software developed by tm3d.de and its contributors.
+//  * Neither the name of tm3d.de nor the names of its contributors may
+//    be used to endorse or promote products derived from this software
+//    without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+uint8_t HDC1080_Init();
+
+uint8_t HDC1080_Readf(double * temperature, double * hum);
+uint8_t HDC1080_Readi(int16_t * temperature, uint16_t * hum);
+
+
+#endif
diff --git a/common/OWDS2450.S b/common/OWDS2450.S
index a60addd..c6a43ec 100644
--- a/common/OWDS2450.S
+++ b/common/OWDS2450.S
@@ -1,247 +1,247 @@
-
-// Copyright (c) 2015, Tobias Mueller tm(at)tm3d.de
-// All rights reserved. 
-// 
-// Redistribution and use in source and binary forms, with or without 
-// modification, are permitted provided that the following conditions are 
-// met: 
-// 
-//  * Redistributions of source code must retain the above copyright 
-//    notice, this list of conditions and the following disclaimer. 
-//  * Redistributions in binary form must reproduce the above copyright 
-//    notice, this list of conditions and the following disclaimer in the 
-//    documentation and/or other materials provided with the 
-//    distribution. 
-//  * All advertising materials mentioning features or use of this 
-//    software must display the following acknowledgement: This product 
-//    includes software developed by tm3d.de and its contributors. 
-//  * Neither the name of tm3d.de nor the names of its contributors may 
-//    be used to endorse or promote products derived from this software 
-//    without specific prior written permission. 
-// 
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
-
-//#define _CHANGEABLE_ID_
-#define _ZERO_POLLING_
-
-#include "../common/OWConfig.s"
-#include "../common/OWCRC16.s"
-
-.extern pack,8
-.comm addr,1 ;zweites Adressbyte ist unnoetig (Warum auch immer fuer 32 Byte 16 Bit Adressen verwendet werden....)
-.comm crcsave,1 ; zwischenspeicherspeicher fuer crc nur zweites byte....
-//.extern  am2302_temp,2
-
-
-
-.macro CHIP_INIT 	
-.endm
-
-.macro COMMAND_TABLE
-		rjmp h_readmemoryaddr
-		rjmp h_readmemory
-		rjmp h_readmemorycrc1
-		rjmp h_readmemorycrc2
-		rjmp h_writememoryaddr
-		rjmp h_writememory
-		rjmp h_writememorycrc1
-		rjmp h_writememorycrc2
-		rjmp h_writememoryreadback
-		rjmp h_convert
-		rjmp h_convertcrc1
-		rjmp h_convertcrc2
-		rjmp h_convert_conv
-.endm
-
-#include "../common/OWRomFunctions.s"
-#include "../common/OWTimerInterrupt.s"
-
-
-
-; Ab hier Geraeteabhaenging
-#define OW_READ_MEMORY_ADDR OW_FIRST_COMMAND+0
-#define OW_READ_MEMORY OW_FIRST_COMMAND+1
-#define OW_READ_MEMORY_CRC1 OW_FIRST_COMMAND+2
-#define OW_READ_MEMORY_CRC2 OW_FIRST_COMMAND+3
-#define OW_WRITE_MEMORY_ADDR OW_FIRST_COMMAND+4
-#define OW_WRITE_MEMORY OW_FIRST_COMMAND+5
-#define OW_WRITE_MEMORY_CRC1 OW_FIRST_COMMAND+6
-#define OW_WRITE_MEMORY_CRC2 OW_FIRST_COMMAND+7
-#define OW_WRITE_MEMORY_READBACK OW_FIRST_COMMAND+8
-#define OW_CONVERT OW_FIRST_COMMAND+9
-#define OW_CONVERT_CRC1 OW_FIRST_COMMAND+10
-#define OW_CONVERT_CRC2 OW_FIRST_COMMAND+11
-#define OW_CONVERT_CONV OW_FIRST_COMMAND+12
-
-;---------------------------------------------------
-;	READ COMMAND and start operation
-;---------------------------------------------------
-
-
-h_readcommand:
-	clr r_bytep
-#ifndef _DIS_FLASH_
-	FLASH_COMMANDS ; muss zu erst sein....
-#endif
-	cset 0xAA,OW_READ_MEMORY_ADDR
-	cset 0x55,OW_WRITE_MEMORY_ADDR
-	cset 0x3C,OW_CONVERT
-	FW_CONFIG_INFO
-#ifdef _CHANGEABLE_ID_
-	CHANGE_ID_COMMANDS
-#endif
-	ldi r_mode,OW_SLEEP
-	rjmp handle_end
-
-
-h_readmemoryaddr:
-	cpi r_bytep,0  ;erstes Adressbyte ?
-	brne h_readmemory_addr_byte1 ;nein dann weiter
-	andi r_rwbyte,0x1F  ; nur Adressen zwischen 0 und 0x1F zulassen
-	sts addr,r_rwbyte  ;speichern des ersten bytes
-	rjmp handle_end_inc
-h_readmemory_addr_byte1:  ;zweiters Addressbyte wird nicht gespeichert!
-	ldi r_mode,OW_READ_MEMORY ;weiter zu read Memory
-	;;ldi r_bcount,1 ;ist unten
-	ldi r_sendflag,1 ;jetzt sendet der Slave zum Master
-	clr r_bytep
-	rjmp h_readmemory2
-h_readmemory:
-	lds r_bytep,addr
-	inc r_bytep
-	sts addr,r_bytep
-	andi r_bytep,0x07
-	breq h_readmemory_init_crc
-h_readmemory2:
-	lds r_bytep,addr
-	;andi r_bytep,0x1F ist oben
-	configZ pack,r_bytep
-	ld   r_rwbyte,Z
-	;ldi r_bcount,1
-	rjmp handle_end ;sendet das Byte und geht zu h_readmemory
-h_readmemory_init_crc:; init erstes CRC byte
-	lds r_rwbyte,crc
-	com r_rwbyte
-	lds r_temp,crc+1
-	com r_temp
-	sts crcsave,r_temp
-	ldi r_mode,OW_READ_MEMORY_CRC1
-	;ldi r_bcount,1
-	rjmp handle_end
-h_readmemory_end:
-	ldi  r_mode,OW_SLEEP
-	clr r_sendflag
-	rjmp handle_end
-h_readmemorycrc1:;init zweites CRC Byte
-	lds r_rwbyte,crcsave
-	;ldi r_bcount,1
-	ldi r_mode,OW_READ_MEMORY_CRC2
-	rjmp handle_end
-h_readmemorycrc2:;weiteres senden..... nach zweitem Byte
-	lds r_temp,addr
-	andi r_temp,0xE0
-	brne h_readmemory_end; ende des speichers
-	ldi r_mode,OW_READ_MEMORY
-	CRCInit1 ;Start with new CRC
-	rjmp h_readmemory2
-
-h_writememoryaddr:
-	cpi r_bytep,0  ;erstes Adressbyte ?
-	brne h_writememory_addr_byte1 ;nein dann weiter
-	andi r_rwbyte,0x1F  ; nur Adressen zwischen 0 und 0x1F zulassen
-	sts addr,r_rwbyte  ;speichern des ersten bytes
-	inc r_bytep
-	;ldi r_bcount,1
-	rjmp handle_end
-h_writememory_addr_byte1:  ;zweiters Addressbyte wird nicht gespeichert!
-	ldi r_mode,OW_WRITE_MEMORY ;weiter zu read Memory
-	;ldi r_bcount,1 ;; _________________________________________________in handle_end integrieren.....
-	lds r_bytep,addr
-	rjmp handle_end ;read Memory Byte
-h_writememory:
-	lds r_bytep,addr
-	configZ pack,r_bytep
-	st Z,r_rwbyte
-	;ldi r_bcount,1
-	ldi r_mode,OW_WRITE_MEMORY_CRC1
-	ldi r_sendflag,1 ;jetzt sendet der Slave zum Master
-	lds r_rwbyte,crc
-	com r_rwbyte
-	lds r_temp,crc+1
-	com r_temp
-	sts crcsave,r_temp
-	rjmp handle_end
-h_writememorycrc1:
-	lds r_rwbyte,crcsave
-	;ldi r_bcount,1
-	ldi r_mode,OW_WRITE_MEMORY_CRC2
-	rjmp handle_end
-h_writememorycrc2:
-	lds r_temp,addr
-	configZ pack,r_temp
-	ld r_rwbyte,Z
-	;ldi r_bcount,1
-	ldi r_mode,OW_WRITE_MEMORY_READBACK
-	rjmp handle_end
-h_writememoryreadback:
-	ldi r_temp,0x00
-	sts crc+1,r_temp
-	lds r_temp,addr
-	inc r_temp
-	sts addr,r_temp
-	sts crc,r_temp
-	ldi r_sendflag,0
-	;ldi r_bcount,1
-	ldi r_mode,OW_WRITE_MEMORY
-	rjmp handle_end
-
-h_convert:
-	cpi r_bytep,0  ;erstes Adressbyte ?
-	brne h_convert_byte1 ;nein dann weiter
-	inc r_bytep
-	sts pack+0x20,r_rwbyte
-	;ldi r_bcount,1
-	rjmp handle_end
-h_convert_byte1: ;zweies byte glesen go crc#
-	sts pack+0x21,r_rwbyte
-	lds r_rwbyte,crc
-	com r_rwbyte
-	lds r_temp,crc+1
-	com r_temp
-	sts crcsave,r_temp
-	ldi r_mode,OW_CONVERT_CRC1
-	;ldi r_bcount,1
-	ldi r_sendflag,1
-	rjmp handle_end	
-h_convertcrc1:
-	lds r_rwbyte,crcsave
-	;ldi r_bcount,1
-	ldi r_mode,OW_CONVERT_CRC2
-	rjmp handle_end
-h_convertcrc2:
-	ldi r_temp,1
-	sts gcontrol,r_temp
-	;ldi r_bcount,1
-	ldi r_mode,OW_CONVERT_CONV
-	;clr r_sendflag
-	ldi r_sendflag,3 ;set bit 0 and 1 for no zero polling
-h_convert_conv:
-	ldi r_bcount,0
-	ldi r_rwbyte,0
-	rjmp handle_end_no_bcount	
-
-
-
-
-#include "../common/OWPinInterrupt.s"
+
+// Copyright (c) 2015, Tobias Mueller tm(at)tm3d.de
+// All rights reserved. 
+// 
+// Redistribution and use in source and binary forms, with or without 
+// modification, are permitted provided that the following conditions are 
+// met: 
+// 
+//  * Redistributions of source code must retain the above copyright 
+//    notice, this list of conditions and the following disclaimer. 
+//  * Redistributions in binary form must reproduce the above copyright 
+//    notice, this list of conditions and the following disclaimer in the 
+//    documentation and/or other materials provided with the 
+//    distribution. 
+//  * All advertising materials mentioning features or use of this 
+//    software must display the following acknowledgement: This product 
+//    includes software developed by tm3d.de and its contributors. 
+//  * Neither the name of tm3d.de nor the names of its contributors may 
+//    be used to endorse or promote products derived from this software 
+//    without specific prior written permission. 
+// 
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
+
+//#define _CHANGEABLE_ID_
+#define _ZERO_POLLING_
+
+#include "../common/OWConfig.s"
+#include "../common/OWCRC16.s"
+
+.extern pack,8
+.comm addr,1 ;zweites Adressbyte ist unnoetig (Warum auch immer fuer 32 Byte 16 Bit Adressen verwendet werden....)
+.comm crcsave,1 ; zwischenspeicherspeicher fuer crc nur zweites byte....
+//.extern  am2302_temp,2
+
+
+
+.macro CHIP_INIT 	
+.endm
+
+.macro COMMAND_TABLE
+		rjmp h_readmemoryaddr
+		rjmp h_readmemory
+		rjmp h_readmemorycrc1
+		rjmp h_readmemorycrc2
+		rjmp h_writememoryaddr
+		rjmp h_writememory
+		rjmp h_writememorycrc1
+		rjmp h_writememorycrc2
+		rjmp h_writememoryreadback
+		rjmp h_convert
+		rjmp h_convertcrc1
+		rjmp h_convertcrc2
+		rjmp h_convert_conv
+.endm
+
+#include "../common/OWRomFunctions.s"
+#include "../common/OWTimerInterrupt.s"
+
+
+
+; Ab hier Geraeteabhaenging
+#define OW_READ_MEMORY_ADDR OW_FIRST_COMMAND+0
+#define OW_READ_MEMORY OW_FIRST_COMMAND+1
+#define OW_READ_MEMORY_CRC1 OW_FIRST_COMMAND+2
+#define OW_READ_MEMORY_CRC2 OW_FIRST_COMMAND+3
+#define OW_WRITE_MEMORY_ADDR OW_FIRST_COMMAND+4
+#define OW_WRITE_MEMORY OW_FIRST_COMMAND+5
+#define OW_WRITE_MEMORY_CRC1 OW_FIRST_COMMAND+6
+#define OW_WRITE_MEMORY_CRC2 OW_FIRST_COMMAND+7
+#define OW_WRITE_MEMORY_READBACK OW_FIRST_COMMAND+8
+#define OW_CONVERT OW_FIRST_COMMAND+9
+#define OW_CONVERT_CRC1 OW_FIRST_COMMAND+10
+#define OW_CONVERT_CRC2 OW_FIRST_COMMAND+11
+#define OW_CONVERT_CONV OW_FIRST_COMMAND+12
+
+;---------------------------------------------------
+;	READ COMMAND and start operation
+;---------------------------------------------------
+
+
+h_readcommand:
+	clr r_bytep
+#ifndef _DIS_FLASH_
+	FLASH_COMMANDS ; muss zu erst sein....
+#endif
+	cset 0xAA,OW_READ_MEMORY_ADDR
+	cset 0x55,OW_WRITE_MEMORY_ADDR
+	cset 0x3C,OW_CONVERT
+	FW_CONFIG_INFO
+#ifdef _CHANGEABLE_ID_
+	CHANGE_ID_COMMANDS
+#endif
+	ldi r_mode,OW_SLEEP
+	rjmp handle_end
+
+
+h_readmemoryaddr:
+	cpi r_bytep,0  ;erstes Adressbyte ?
+	brne h_readmemory_addr_byte1 ;nein dann weiter
+	andi r_rwbyte,0x1F  ; nur Adressen zwischen 0 und 0x1F zulassen
+	sts addr,r_rwbyte  ;speichern des ersten bytes
+	rjmp handle_end_inc
+h_readmemory_addr_byte1:  ;zweiters Addressbyte wird nicht gespeichert!
+	ldi r_mode,OW_READ_MEMORY ;weiter zu read Memory
+	;;ldi r_bcount,1 ;ist unten
+	ldi r_sendflag,1 ;jetzt sendet der Slave zum Master
+	clr r_bytep
+	rjmp h_readmemory2
+h_readmemory:
+	lds r_bytep,addr
+	inc r_bytep
+	sts addr,r_bytep
+	andi r_bytep,0x07
+	breq h_readmemory_init_crc
+h_readmemory2:
+	lds r_bytep,addr
+	;andi r_bytep,0x1F ist oben
+	configZ pack,r_bytep
+	ld   r_rwbyte,Z
+	;ldi r_bcount,1
+	rjmp handle_end ;sendet das Byte und geht zu h_readmemory
+h_readmemory_init_crc:; init erstes CRC byte
+	lds r_rwbyte,crc
+	com r_rwbyte
+	lds r_temp,crc+1
+	com r_temp
+	sts crcsave,r_temp
+	ldi r_mode,OW_READ_MEMORY_CRC1
+	;ldi r_bcount,1
+	rjmp handle_end
+h_readmemory_end:
+	ldi  r_mode,OW_SLEEP
+	clr r_sendflag
+	rjmp handle_end
+h_readmemorycrc1:;init zweites CRC Byte
+	lds r_rwbyte,crcsave
+	;ldi r_bcount,1
+	ldi r_mode,OW_READ_MEMORY_CRC2
+	rjmp handle_end
+h_readmemorycrc2:;weiteres senden..... nach zweitem Byte
+	lds r_temp,addr
+	andi r_temp,0xE0
+	brne h_readmemory_end; ende des speichers
+	ldi r_mode,OW_READ_MEMORY
+	CRCInit1 ;Start with new CRC
+	rjmp h_readmemory2
+
+h_writememoryaddr:
+	cpi r_bytep,0  ;erstes Adressbyte ?
+	brne h_writememory_addr_byte1 ;nein dann weiter
+	andi r_rwbyte,0x1F  ; nur Adressen zwischen 0 und 0x1F zulassen
+	sts addr,r_rwbyte  ;speichern des ersten bytes
+	inc r_bytep
+	;ldi r_bcount,1
+	rjmp handle_end
+h_writememory_addr_byte1:  ;zweiters Addressbyte wird nicht gespeichert!
+	ldi r_mode,OW_WRITE_MEMORY ;weiter zu read Memory
+	;ldi r_bcount,1 ;; _________________________________________________in handle_end integrieren.....
+	lds r_bytep,addr
+	rjmp handle_end ;read Memory Byte
+h_writememory:
+	lds r_bytep,addr
+	configZ pack,r_bytep
+	st Z,r_rwbyte
+	;ldi r_bcount,1
+	ldi r_mode,OW_WRITE_MEMORY_CRC1
+	ldi r_sendflag,1 ;jetzt sendet der Slave zum Master
+	lds r_rwbyte,crc
+	com r_rwbyte
+	lds r_temp,crc+1
+	com r_temp
+	sts crcsave,r_temp
+	rjmp handle_end
+h_writememorycrc1:
+	lds r_rwbyte,crcsave
+	;ldi r_bcount,1
+	ldi r_mode,OW_WRITE_MEMORY_CRC2
+	rjmp handle_end
+h_writememorycrc2:
+	lds r_temp,addr
+	configZ pack,r_temp
+	ld r_rwbyte,Z
+	;ldi r_bcount,1
+	ldi r_mode,OW_WRITE_MEMORY_READBACK
+	rjmp handle_end
+h_writememoryreadback:
+	ldi r_temp,0x00
+	sts crc+1,r_temp
+	lds r_temp,addr
+	inc r_temp
+	sts addr,r_temp
+	sts crc,r_temp
+	ldi r_sendflag,0
+	;ldi r_bcount,1
+	ldi r_mode,OW_WRITE_MEMORY
+	rjmp handle_end
+
+h_convert:
+	cpi r_bytep,0  ;erstes Adressbyte ?
+	brne h_convert_byte1 ;nein dann weiter
+	inc r_bytep
+	sts pack+0x20,r_rwbyte
+	;ldi r_bcount,1
+	rjmp handle_end
+h_convert_byte1: ;zweies byte glesen go crc#
+	sts pack+0x21,r_rwbyte
+	lds r_rwbyte,crc
+	com r_rwbyte
+	lds r_temp,crc+1
+	com r_temp
+	sts crcsave,r_temp
+	ldi r_mode,OW_CONVERT_CRC1
+	;ldi r_bcount,1
+	ldi r_sendflag,1
+	rjmp handle_end	
+h_convertcrc1:
+	lds r_rwbyte,crcsave
+	;ldi r_bcount,1
+	ldi r_mode,OW_CONVERT_CRC2
+	rjmp handle_end
+h_convertcrc2:
+	ldi r_temp,1
+	sts gcontrol,r_temp
+	;ldi r_bcount,1
+	ldi r_mode,OW_CONVERT_CONV
+	;clr r_sendflag
+	ldi r_sendflag,3 ;set bit 0 and 1 for no zero polling
+h_convert_conv:
+	ldi r_bcount,0
+	ldi r_rwbyte,0
+	rjmp handle_end_no_bcount	
+
+
+
+
+#include "../common/OWPinInterrupt.s"
 .end
\ No newline at end of file
diff --git a/programmer/owflash.py b/programmer/owflash.py
index 5083173..47eef66 100644
--- a/programmer/owflash.py
+++ b/programmer/owflash.py
@@ -1,232 +1,232 @@
-#!/usr/bin/python
-# Copyright (c) 2015, Tobias Mueller tm(at)tm3d.de
-# All rights reserved. 
-# 
-# Redistribution and use in source and binary forms, with or without 
-# modification, are permitted provided that the following conditions are 
-# met: 
-# 
-#  * Redistributions of source code must retain the above copyright 
-#    notice, this list of conditions and the following disclaimer. 
-#  * Redistributions in binary form must reproduce the above copyright 
-#    notice, this list of conditions and the following disclaimer in the 
-#    documentation and/or other materials provided with the 
-#    distribution. 
-#  * All advertising materials mentioning features or use of this 
-#    software must display the following acknowledgement: This product 
-#    includes software developed by tm3d.de and its contributors. 
-#  * Neither the name of tm3d.de nor the names of its contributors may 
-#    be used to endorse or promote products derived from this software 
-#    without specific prior written permission. 
-# 
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 
-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 
-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 
-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 
-# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
-# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
-# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
-# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
-# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
-# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
-
-
-
-
-import time
-import subprocess
-import sys
-
-def owcom(dev,send,rc):
-	res=[]
-	f=open("/sys/bus/w1/devices/%s/rw" %(dev),"r+b",0)
-	f.write("".join(map(chr, send)))
-	if (rc!=0):
-		res=map(ord,f.read(rc))
-	f.close()
-	return res
-		
-
-def crc8(arr):
-	lscrc=0x0;
-	for v in arr:
-		bit=1;
-		while bit<256:
-			if (v&bit)==bit:
-				lb=1
-			else:
-				lb=0
-			if (lscrc&1)!=lb:
-				lscrc=(lscrc>>1)^0x8c 
-			else:
-				lscrc=(lscrc>>1)
-			bit=bit*2
-	return lscrc
-	
-def testnr(s):
-	for c in s.lower()[:]:
-		if not((c) in ['0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f','-']):
-			return False
-	return True
- 
-def addid(id,val):
-	for i in range(7):
-		id[i+1]=id[i+1]+val
-		if id[i+1]>254:
-			id[i+1]=id[i+1]-254
-			val=1
-		else:
-			return id
-	return id
-#
-
-print "Open Hex File ...",
-fi=open(sys.argv[1],"r")
-data=[]
-for l in fi.readlines():
-	sys.stdout.write(".")
-	sys.stdout.flush()
-	bc=int(l[1:3],16)
-	fw=int(l[3:7],16)
-	ty=int(l[7:9],16)
-	chsm=bc+(fw>>8)+(fw&0xFF)+ty
-	for i in range(bc):
-		p=9+(i*2)
-		d=int(l[p:p+2],16)
-		chsm=(chsm+d)&0xFF
-		data.append(d)
-	chsm=(chsm+int(l[9+bc*2:11+bc*2],16))&0xFF
-	if (chsm!=0):
-		print "Error Checksum...."
-		exit()
-	#print bc,fw,ty,chsm
-fi.close()
-print
-
-l=subprocess.check_output("ls /sys/bus/w1/devices/", shell=True)
-dc=0
-dl=[]
-for g in  (l.split("\n")):
-	if len(g)>2:
-		if testnr(g[0:2]):
-			dl.append(g)
-			dc=dc+1
-			print dc,") ",g
-if dc==0:
-	print "No 1-Wire Device found"
-	exit(0)
-n=int(raw_input("No. of Device: "))
-n=n-1
-if (n>dc-1)or(n<0):
-		exit(0)
-s=dl[n]
-sys.stdout.write('Go to Flashmode....')
-sys.stdout.flush()
-owcom(s,[0x88],0)
-owcom(s,[0x88],0)
-owcom(s,[0x88],0)
-for i in range (20):
-	l=subprocess.check_output("ls /sys/bus/w1/devices/", shell=True)
-	dc=0
-	dl=[]
-	sys.stdout.write(".")
-	sys.stdout.flush()
-	for g in  (l.split("\n")):
-		if (g[0:15]=="a3-55aa55aa55aa"):
-			break
-	if (g[0:15]!="a3-55aa55aa55aa"):
-		time.sleep(1)
-if (g[0:15]=="a3-55aa55aa55aa"):
-	print "found"
-else:
-	print "ERROR Enter Flashmode!" 
-	exit()
-f=open("/sys/bus/w1/devices/w1_bus_master1/w1_master_remove","r+b",0)
-f.write(s)
-f.close()
-time.sleep(5)
-s="a3-55aa55aa55aa"
-prog=data
-l=len(prog)
-if (l>7616):
-	print "Code to big  ... Max 7616 Byte (119 Pages)"
-	exit()
-pages= l/64
-for i in range(64-(l%64)):
-	#print i
-	prog.append(0xFF)
-pages= len(prog)/64
-if (pages>119):
-	print "Code to big  ... Max 7616 Byte (119 Pages)"
-	exit()
-
-
-print "Programm Page (of ", pages,")"
-	
-for i in range(pages):
-	sys.stdout.write("%i " % (i+1) )
-	sys.stdout.flush()
-
-	h=i*64;
-	hl=h&0xFF
-	hh=h>>8
-	#print hh, hl
-	mem=[hl,hh]+prog[h:h+64]
-	erroc=0
-	while (1):
-		owcom(s,[0x0F]+mem,0) 
-		rmem=owcom(s,[0xAA],66)
-		if (rmem!=mem):
-			print rmem
-			erroc=erroc+1
-			if erroc>5:
-				print "WRITING ERROR ... "
-				exit()
-			continue
-		owcom(s,[0x55],0)	
-		time.sleep(0.05)
-		owcom(s,[0xB8,hl,hh],0)
-		time.sleep(0.05)
-		rmem=owcom(s,[0xAA],66)
-		if (rmem!=mem):
-			print "error in flash"
-			print mem
-			print rmem
-			erroc=erroc+1
-			if erroc>5:
-				print "WRITING ERROR ... "
-				exit()
-			continue
-		#for v in rmem:
-		#	print "%02X " % (v),
-		break
-print "\nReset AVR"
-owcom(s,[0x89],0)
-time.sleep(1)
-f=open("/sys/bus/w1/devices/w1_bus_master1/w1_master_remove","r+b",0)
-f.write("a3-55aa55aa55aa")
-f.close()	
-	
-	
-
-
-
-
-#mem=[0x00,0x2]
-#for i in range (64):
-#	mem.append(i)
-#owcom(s,[0x0F]+mem,0)
-#rmem=owcom(s,[0xAA],70)
-#print rmem
-#owcom(s,[0x55],0)
-#time.sleep(0.05)
-#owcom(s,[0xB8,0x00,0x02],0)
-#time.sleep(0.05)
-#rmem=owcom(s,[0xAA],70)
-#print rmem
-#for v in rmem:
-#	print "%02X " % (v)
-		
-
-		
+#!/usr/bin/python
+# Copyright (c) 2015, Tobias Mueller tm(at)tm3d.de
+# All rights reserved. 
+# 
+# Redistribution and use in source and binary forms, with or without 
+# modification, are permitted provided that the following conditions are 
+# met: 
+# 
+#  * Redistributions of source code must retain the above copyright 
+#    notice, this list of conditions and the following disclaimer. 
+#  * Redistributions in binary form must reproduce the above copyright 
+#    notice, this list of conditions and the following disclaimer in the 
+#    documentation and/or other materials provided with the 
+#    distribution. 
+#  * All advertising materials mentioning features or use of this 
+#    software must display the following acknowledgement: This product 
+#    includes software developed by tm3d.de and its contributors. 
+#  * Neither the name of tm3d.de nor the names of its contributors may 
+#    be used to endorse or promote products derived from this software 
+#    without specific prior written permission. 
+# 
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
+
+
+
+
+import time
+import subprocess
+import sys
+
+def owcom(dev,send,rc):
+	res=[]
+	f=open("/sys/bus/w1/devices/%s/rw" %(dev),"r+b",0)
+	f.write("".join(map(chr, send)))
+	if (rc!=0):
+		res=map(ord,f.read(rc))
+	f.close()
+	return res
+		
+
+def crc8(arr):
+	lscrc=0x0;
+	for v in arr:
+		bit=1;
+		while bit<256:
+			if (v&bit)==bit:
+				lb=1
+			else:
+				lb=0
+			if (lscrc&1)!=lb:
+				lscrc=(lscrc>>1)^0x8c 
+			else:
+				lscrc=(lscrc>>1)
+			bit=bit*2
+	return lscrc
+	
+def testnr(s):
+	for c in s.lower()[:]:
+		if not((c) in ['0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f','-']):
+			return False
+	return True
+ 
+def addid(id,val):
+	for i in range(7):
+		id[i+1]=id[i+1]+val
+		if id[i+1]>254:
+			id[i+1]=id[i+1]-254
+			val=1
+		else:
+			return id
+	return id
+#
+
+print "Open Hex File ...",
+fi=open(sys.argv[1],"r")
+data=[]
+for l in fi.readlines():
+	sys.stdout.write(".")
+	sys.stdout.flush()
+	bc=int(l[1:3],16)
+	fw=int(l[3:7],16)
+	ty=int(l[7:9],16)
+	chsm=bc+(fw>>8)+(fw&0xFF)+ty
+	for i in range(bc):
+		p=9+(i*2)
+		d=int(l[p:p+2],16)
+		chsm=(chsm+d)&0xFF
+		data.append(d)
+	chsm=(chsm+int(l[9+bc*2:11+bc*2],16))&0xFF
+	if (chsm!=0):
+		print "Error Checksum...."
+		exit()
+	#print bc,fw,ty,chsm
+fi.close()
+print
+
+l=subprocess.check_output("ls /sys/bus/w1/devices/", shell=True)
+dc=0
+dl=[]
+for g in  (l.split("\n")):
+	if len(g)>2:
+		if testnr(g[0:2]):
+			dl.append(g)
+			dc=dc+1
+			print dc,") ",g
+if dc==0:
+	print "No 1-Wire Device found"
+	exit(0)
+n=int(raw_input("No. of Device: "))
+n=n-1
+if (n>dc-1)or(n<0):
+		exit(0)
+s=dl[n]
+sys.stdout.write('Go to Flashmode....')
+sys.stdout.flush()
+owcom(s,[0x88],0)
+owcom(s,[0x88],0)
+owcom(s,[0x88],0)
+for i in range (20):
+	l=subprocess.check_output("ls /sys/bus/w1/devices/", shell=True)
+	dc=0
+	dl=[]
+	sys.stdout.write(".")
+	sys.stdout.flush()
+	for g in  (l.split("\n")):
+		if (g[0:15]=="a3-55aa55aa55aa"):
+			break
+	if (g[0:15]!="a3-55aa55aa55aa"):
+		time.sleep(1)
+if (g[0:15]=="a3-55aa55aa55aa"):
+	print "found"
+else:
+	print "ERROR Enter Flashmode!" 
+	exit()
+f=open("/sys/bus/w1/devices/w1_bus_master1/w1_master_remove","r+b",0)
+f.write(s)
+f.close()
+time.sleep(5)
+s="a3-55aa55aa55aa"
+prog=data
+l=len(prog)
+if (l>7616):
+	print "Code to big  ... Max 7616 Byte (119 Pages)"
+	exit()
+pages= l/64
+for i in range(64-(l%64)):
+	#print i
+	prog.append(0xFF)
+pages= len(prog)/64
+if (pages>119):
+	print "Code to big  ... Max 7616 Byte (119 Pages)"
+	exit()
+
+
+print "Programm Page (of ", pages,")"
+	
+for i in range(pages):
+	sys.stdout.write("%i " % (i+1) )
+	sys.stdout.flush()
+
+	h=i*64;
+	hl=h&0xFF
+	hh=h>>8
+	#print hh, hl
+	mem=[hl,hh]+prog[h:h+64]
+	erroc=0
+	while (1):
+		owcom(s,[0x0F]+mem,0) 
+		rmem=owcom(s,[0xAA],66)
+		if (rmem!=mem):
+			print rmem
+			erroc=erroc+1
+			if erroc>5:
+				print "WRITING ERROR ... "
+				exit()
+			continue
+		owcom(s,[0x55],0)	
+		time.sleep(0.05)
+		owcom(s,[0xB8,hl,hh],0)
+		time.sleep(0.05)
+		rmem=owcom(s,[0xAA],66)
+		if (rmem!=mem):
+			print "error in flash"
+			print mem
+			print rmem
+			erroc=erroc+1
+			if erroc>5:
+				print "WRITING ERROR ... "
+				exit()
+			continue
+		#for v in rmem:
+		#	print "%02X " % (v),
+		break
+print "\nReset AVR"
+owcom(s,[0x89],0)
+time.sleep(1)
+f=open("/sys/bus/w1/devices/w1_bus_master1/w1_master_remove","r+b",0)
+f.write("a3-55aa55aa55aa")
+f.close()	
+	
+	
+
+
+
+
+#mem=[0x00,0x2]
+#for i in range (64):
+#	mem.append(i)
+#owcom(s,[0x0F]+mem,0)
+#rmem=owcom(s,[0xAA],70)
+#print rmem
+#owcom(s,[0x55],0)
+#time.sleep(0.05)
+#owcom(s,[0xB8,0x00,0x02],0)
+#time.sleep(0.05)
+#rmem=owcom(s,[0xAA],70)
+#print rmem
+#for v in rmem:
+#	print "%02X " % (v)
+		
+
+		
diff --git a/stest/fdiff.py b/stest/fdiff.py
deleted file mode 100644
index e4c2056..0000000
--- a/stest/fdiff.py
+++ /dev/null
@@ -1,74 +0,0 @@
-import math
-#Bezeichnungen:
-#r = relative Luftfeuchte
-#T = Temperatur in C
-#TK = Temperatur in Kelvin (TK = T + 273.15)
-#TD = Taupunkttemperatur in C
-#DD = Dampfdruck in hPa
-#SDD = Saettigungsdampfdruck in hPa
-
-#Parameter:
-#a = 7.5, b = 237.3 fuer T >= 0
-#a = 7.6, b = 240.7 fuer T < 0 ueber Wasser (Taupunkt)
-#a = 9.5, b = 265.5 fuer T < 0 ueber Eis (Frostpunkt)
-
-Rs = 8314.3 #J/(kmol*K) (universelle Gaskonstante)
-mw = 18.016 #kg/kmol (Molekulargewicht des Wasserdampfes)
-#AF = absolute Feuchte in g Wasserdampf pro m3 Luft
-
-#Formeln:
-
-#    SDD(T) = 6.1078 * 10^((a*T)/(b+T))
-#    DD(r,T) = r/100 * SDD(T)
-#    r(T,TD) = 100 * SDD(TD) / SDD(T)
-#    TD(r,T) = b*v/(a-v) mit v(r,T) = log10(DD(r,T)/6.1078)
-#    AF(r,TK) = 10^5 * mw/R* * DD(r,T)/TK; AF(TD,TK) = 10^5 * mw/R* * SDD(TD)/TK
-
-
-a=7.5
-b=237.3
-
-#a=r/100.0*SDD(T)/(T+273.15)*mw/Rs*10000
-#r=a*100/(SDD(T)/(T+273.15)*mw/Rs*10000)
-
-def SDD(T):
-	return 6.1078 * 10**((a*T)/(b+T))
-
-#def DD(r,T):
-#	return r/100 * SDD(T)
-
-#def _r(T,TD):
-#	return 100 * SDD(TD) / SDD(T)
-
-#def _v(r,T):
-#	return math.log10(DD(r,T)/6.1078)
-	
-#def TD(r,T):
-#	return b*v/(a-_v(r,T))  
-
-	
-#def AF(r,T):
-#	return 10000 * mw/Rs * DD(r,T)/(T+273.15) #; AF(TD,TK) = 10^5 * mw/R* * SDD(TD)/TK
-
-def AF1(r,T):
-	return r/100.0*SDD(T)/(T+273.15)*mw/Rs*10000
-
-def RF1(a,T):
-	return a*100/(SDD(T)/(T+273.15)*mw/Rs*10000)	
-#print(0.5*SDD(20)/(20+273.15)*mw/Rs*10000)
-d=[]
-for i in range(11):
-	s=""
-	r=[]
-	for j in range(6):
-		r.append((i*10)-RF1(AF1(i*10,j*10),j*10+0.5))
-		s=s+"%0.2f\t" % (r[len(r)-1])
-	print(s)
-	d.append(r)
-	
-for i in range(11):
-	s=""
-	for j in range(5):
-		s=s+"%0.4f\t" % (d[i][j]-d[i][j+1])
-	print(s)
-		
diff --git a/stest/find.py b/stest/find.py
deleted file mode 100644
index 415ffe3..0000000
--- a/stest/find.py
+++ /dev/null
@@ -1,292 +0,0 @@
-import sys
-import os
-import os.path
-import subprocess
-import io
-import time
-import math
-import shutil
-
-toolstr="/home/muto/owtools/src/owtools USB1 DC "
-devdict={}
-devwholist=[]
-f=open("DEVLIST.txt","r")
-for l in f.readlines():
-	ls=l.split(" ")
-	if (len(ls)>1):
-		devdict[ls[0]]=l.replace("\n","")
-		devwholist.append(ls[0])
-f.close()
-
-def id2string(id):
-	s=""
-	for i in range(8):
-		s=s+"%02X" %(id[7-i])
-	return s
-
-def string2id(s):
-	for i in range(8):
-		bl=[]
-		i2=14-i*2;
-		bl.append(int(s[i2:i2+2],16))
-	return bl
-
-
-def calculateValues(code, V, vn):
-	if code==1:
-		return V[vn] / 16.0; 
-	elif code==2:
-		return V[vn]/1.6; 
-	elif code==3:
-		return V[vn]*0.2 + 700; 
-	elif code==4:
-		return math.exp(V[vn] / 160.0); 
-	elif code==5:
-		return V[vn]*62.5 + 55000; 
-	elif code==6:
-		return V[vn] / 256.0; 
-	elif code==7:
-		if V[1]!=0:
-			return ((float(V[2]) / float(V[1]) - 0.16) / 0.0062) / (1.0546 - 0.00216*V[0]/256.0); 
-		else:
-			return 0
-	elif code==8:
-		return V[vn] / 100.0; 
-	elif code==9:
-		return V[vn] / 65535.0*5.1; 
-	elif code==10:
-		return V[vn] / 65535.0*2.55; 
-	elif code==11:
-		return V[vn] / 65535.0*1.1; 
-	elif code==12:
-		return V[vn] / 10.0; 
-	elif code==13:
-		return V[vn];  
-	elif code==14:
-		return (V[vn] - 32767.0) / 100.0;  
-	elif code==15:
-		return math.exp((V[vn]-32767.0)/1000.0); 
-	elif code==16:
-		return V[vn]/32.0; 
-	else:
-		return 0;
-
-def getName(code	):
-	if code==1:
-		return ["Temperatur","C"]
-	if code==2:
-		return ["Druck","hPa"]
-	if code==3:
-		return ["Beleuchtungsstaerke","lux"]
-	if code==4:
-		return ["Luftfeuchte","%%"]
-	if code==5:
-		return ["Konstante",""]
-	if code==6:
-		return ["Spannung","V"]
-	if code==7:
-		return ["Strom","mA"]
-	if code==8:
-		return ["VOC","ppm"]
-	if code==9:
-		return ["Counter",""]
-	return []
-
-
-def owCom(dev,send,rcount):
-	cmd=toolstr+id2string(dev)
-	#for i in range(8):
-	#	cmd=cmd+"%02X" %(dev[7-i])
-	cmd=cmd+" "
-	for b in send:
-		cmd=cmd+"%02X" % (b)
-	for i in range(rcount):
-		cmd=cmd+"FF"
-	#print(cmd.split(' '));
-	p = subprocess.Popen(cmd.split(' '), shell=False, bufsize=14000, stdin=subprocess.PIPE, stdout=subprocess.PIPE)
-	p.wait()
-	s=p.stdout.read().decode("utf-8")
-	l=s.split("\n");
-	#print(l[2])
-	bl=[]
-	for i in range(int(len(l[2])/2)):
-		i2=i*2;
-		bl.append(int(l[2][i2:i2+2],16))
-	return bl
-
-def owComStr(dev,sendstr):
-	cmd=toolstr+id2string(dev)
-	#for i in range(8):
-	#	cmd=cmd+"%02X" %(dev[7-i])
-	cmd=cmd+" "+sendstr
-	p = subprocess.Popen(cmd.split(' '), shell=False, bufsize=14000, stdin=subprocess.PIPE, stdout=subprocess.PIPE)
-	p.wait()
-	s=p.stdout.read().decode("utf-8")
-	#print(s);
-	ll=s.split("\n");
-	bll=[]
-	for l in ll[2:]:
-		bl=[]
-		for i in range(int(len(l)/2)):
-			i2=i*2;
-			bl.append(int(l[i2:i2+2],16))
-		bll.append(bl)
-	return bll
-
-def getValues(dev,voc):
-	pl=[]
-	#print(id2string(dev[0]),voc)
-	if dev[0][0]==0x26:
-		vnok=1
-		rc=0
-		while (vnok):
-			sbl=owComStr(dev[0],"4E000F_RB4_R_P7044_R_P70B800_RBE00FFFFFFFFFFFFFFFFFF_R4E0000_RB4_R_P70B800_RBE00FFFFFFFFFFFFFFFFFF_RBE03FFFFFFFFFFFFFFFFFF")
-			#print(sbl)
-			sb=sbl[4]
-			VDD=(sb[5]+sb[6]*256)
-			sb=sbl[8]
-			VAD=(sb[5]+sb[6]*256)
-			Temp=(sb[3]+sb[4]*256)
-			if (sb[4] & 0x80):
-				Temp-=0x10000
-			curr=sb[7]+sb[8]*256
-			if (sb[8] & 0x80):
-				curr-=0x10000
-			vals=[Temp,VDD,VAD,curr]
-			formellist=[6,8,7,8]
-			if dev[1][0]!=0xFF:
-				formellist=[]
-				for i in range(4):
-					if (dev[1][i*2+1])!=0:
-						formellist.append(dev[1][i*2+1])
-					else:
-						break
-			cvals=[]
-			for i in range(len(formellist)):
-				cvals.append(calculateValues(formellist[i],vals,i))
-			if (cvals[2]<=110):
-				vnok=0
-			else:
-				rc=rc+1
-				if (rc==3):
-					vnok=0
-					cvals[2]=100
-			if voc!=0:
-				#R0,VS,Corr,cmode,RS,RSR0,VOC1,VOC2
-				sb=sbl[9]
-				R0=(sb[2]+sb[3]*256)/100.0
-				VS=(sb[4]+sb[5]*256)/10000.0
-				Corr=(sb[7]+sb[8]*256)/1000.0
-				cmode=sb[6]
-				RS=(3/VS-1)*30
-				RSR0=(RS/R0)
-				VOC1=RSR0*Corr
-				VOC2=RSR0/Corr
-				cvals.append(R0)
-				cvals.append(VS)
-				cvals.append(Corr)
-				cvals.append(cmode)
-				cvals.append(RS)
-				cvals.append(RSR0)
-				cvals.append(VOC1)
-				cvals.append(VOC2)
-		return cvals
-	if dev[0][0]==0x28:
-		sbl=owComStr(dev[0],"44_R_PFF_PFF_PFF_PFFBEFFFFFFFFFFFFFFFFFF")
-		Temp=sbl[1][1]+sbl[1][2]*256
-		if (sbl[1][2] & 0x80):
-			Temp=-(Temp&0x7FFF)
-		if dev[1][0]!=0xFF:
-			return [calculateValues(dev[1][1],[Temp],0)]
-		else:
-			return [calculateValues(1,[Temp],0)]
-	return []
-
-	
-def owList(): 
-	cmd=toolstr[0:-3]
-	print(cmd)
-	p = subprocess.Popen(["./owtools","USB1"], shell=False, bufsize=14000, stdin=subprocess.PIPE, stdout=subprocess.PIPE)
-	p.wait()
-	s=p.stdout.read()
-	l=s.split("\n")
-	#print(l);
-	l=l[1:-1]
-	devlist=[]
-	ic=0
-	for d in l:
-		dev=[]
-		bl=[]
-		for i in range(8):
-			i2=14-i*2;
-			bl.append(int(d[i2:i2+2],16))
-		dev.append(bl)
-		#print(bl)
-		config=owCom(bl,[0x85],18)
-		#print(config)
-		if (config[1]==0xFF):
-			if (bl[0]==0x26):
-				config=[0,1,6,6,8,4,7,7,8,0]
-			if (bl[0]==0x28):
-				config=[0,1,1,0,0,0,0,0,0,0]
-		dev.append(config[1:])
-		bls=id2string(bl)
-		cs="%i: " %(ic)
-		ic=ic+1
-		cs=cs+bls+": "
-		if bls in devdict:
-			cs=cs+devdict[bls].split(",")[0].split(" ")[1]+" "
-		for i in range(4):
-			c=config[i*2+1]
-			if (c==0xFF):
-				cs=cs+"Noconfig "
-				if (bl[0]==0x26):
-					config=[0,1,6,6,8,4,7,7,8,0]
-				if (bl[0]==0x28):
-					config=[0,1,1,0,0,0,0,0,0,0]
-				break
-			if (c==0):
-				break
-			cs=cs+getName(c)[0]+" "
-		voc=0
-		if bls in devdict:
-			if "VOC" in devdict[bls]:
-				voc=1
-		l=getValues([bl,config[1:]],voc)
-		for v in l:
-			cs=cs+" %0.2f " %(v)
-		print(cs)
-		ddev=0
-		vm=0
-		if config[1]==0x08:
-			vm=1
-		#print("Test_configs")
-		i=0
-		for dv in devlist:
-			#print("c",dv[1][9:16])
-			#print("d",bl[0:7])
-			if dv[1][9:16]==bl[0:7]:
-				print("Double Device")
-				ddev=1
-				dv.append(dev[0])
-				dv.append(dev[1])
-				#if vm==1:
-					#voc_marker[i]=2
-			i=i+1
-		if ddev==0:
-			devlist.append(dev)
-			#voc_marker.append(vm)
-		#print("devlist",devlist)
-	return devlist
-
-dl=owList()
-#for d in dl:
-#	print(d)
-
-#while (1):
-#	for d in dl:
-#		ds=id2string(d[0])
-#		print(ds)
-		
-	
-	
\ No newline at end of file
diff --git a/stest/log_all.py b/stest/log_all.py
deleted file mode 100644
index a6ca49d..0000000
--- a/stest/log_all.py
+++ /dev/null
@@ -1,482 +0,0 @@
-import sys
-import os
-import os.path
-import subprocess
-import io
-import time
-import math
-import shutil
-
-toolstr="/home/muto/owtools/src/owtools USB1 DC "
-
-gplist=[] 
-
-def id2string(id):
-	s=""
-	for i in range(8):
-		s=s+"%02X" %(id[7-i])
-	return s
-
-def string2id(s):
-	for i in range(8):
-		bl=[]
-		i2=14-i*2;
-		bl.append(int(s[i2:i2+2],16))
-	return bl
-
-
-def calculateValues(code, V, vn):
-	if code==1:
-		return V[vn] / 16.0; 
-	elif code==2:
-		return V[vn]/1.6; 
-	elif code==3:
-		return V[vn]*0.2 + 700; 
-	elif code==4:
-		return math.exp(V[vn] / 160.0); 
-	elif code==5:
-		return V[vn]*62.5 + 55000; 
-	elif code==6:
-		return V[vn] / 256.0; 
-	elif code==7:
-		if V[1]!=0:
-			return ((float(V[2]) / float(V[1]) - 0.16) / 0.0062) / (1.0546 - 0.00216*V[0]/256.0); 
-		else:
-			return 0
-	elif code==8:
-		return V[vn] / 100.0; 
-	elif code==9:
-		return V[vn] / 65535.0*5.1; 
-	elif code==10:
-		return V[vn] / 65535.0*2.55; 
-	elif code==11:
-		return V[vn] / 65535.0*1.1; 
-	elif code==12:
-		return V[vn] / 10.0; 
-	elif code==13:
-		return V[vn];  
-	elif code==14:
-		return (V[vn] - 32767.0) / 100.0;  
-	elif code==15:
-		return math.exp((V[vn]-32767.0)/1000.0); 
-	elif code==16:
-		return V[vn]/32.0; 
-	else:
-		return 0;
-
-def getName(code	):
-	if code==1:
-		return ["Temperatur","C"]
-	if code==2:
-		return ["Druck","hPa"]
-	if code==3:
-		return ["Beleuchtungsstaerke","lux"]
-	if code==4:
-		return ["Luftfeuchte","%%"]
-	if code==5:
-		return ["Konstante",""]
-	if code==6:
-		return ["Spannung","V"]
-	if code==7:
-		return ["Strom","mA"]
-	if code==8:
-		return ["VOC","ppm"]
-	if code==9:
-		return ["Counter",""]
-	return []
-
-
-def owCom(dev,send,rcount):
-	cmd=toolstr+id2string(dev)
-	#for i in range(8):
-	#	cmd=cmd+"%02X" %(dev[7-i])
-	cmd=cmd+" "
-	for b in send:
-		cmd=cmd+"%02X" % (b)
-	for i in range(rcount):
-		cmd=cmd+"FF"
-	print(cmd.split(' '));
-	p = subprocess.Popen(cmd.split(' '), shell=False, bufsize=14000, stdin=subprocess.PIPE, stdout=subprocess.PIPE)
-	p.wait()
-	s=p.stdout.read().decode("utf-8")
-	l=s.split("\n");
-	#print(l[2])
-	bl=[]
-	for i in range(int(len(l[2])/2)):
-		i2=i*2;
-		bl.append(int(l[2][i2:i2+2],16))
-	return bl
-
-def owComStr(dev,sendstr):
-	cmd=toolstr+id2string(dev)
-	#for i in range(8):
-	#	cmd=cmd+"%02X" %(dev[7-i])
-	cmd=cmd+" "+sendstr
-	p = subprocess.Popen(cmd.split(' '), shell=False, bufsize=14000, stdin=subprocess.PIPE, stdout=subprocess.PIPE)
-	p.wait()
-	s=p.stdout.read().decode("utf-8")
-	#print(s);
-	ll=s.split("\n");
-	bll=[]
-	for l in ll[2:]:
-		bl=[]
-		for i in range(int(len(l)/2)):
-			i2=i*2;
-			bl.append(int(l[i2:i2+2],16))
-		bll.append(bl)
-	return bll
-
-voc_marker=[]
-
-def owList(): 
-	cmd=toolstr[0:-3]
-	print(cmd)
-	p = subprocess.Popen(["./owtools","USB1"], shell=False, bufsize=14000, stdin=subprocess.PIPE, stdout=subprocess.PIPE)
-	p.wait()
-	s=p.stdout.read()
-	l=s.split("\n")
-	#print(l);
-	l=l[1:-1]
-	devlist=[]
-	for d in l:
-		dev=[]
-		bl=[]
-		for i in range(8):
-			i2=14-i*2;
-			bl.append(int(d[i2:i2+2],16))
-		dev.append(bl)
-		#print(bl)
-		config=owCom(bl,[0x85],18)
-		#print(config)
-		dev.append(config[1:])
-		ddev=0
-		vm=0
-		if config[1]==0x08:
-			vm=1
-		#print("Test_configs")
-		i=0
-		for dv in devlist:
-			#print("c",dv[1][9:16])
-			#print("d",bl[0:7])
-			if dv[1][9:16]==bl[0:7]:
-				print("Double Device")
-				ddev=1
-				dv.append(dev[0])
-				dv.append(dev[1])
-				if vm==1:
-					voc_marker[i]=2
-			i=i+1
-		if ddev==0:
-			devlist.append(dev)
-			voc_marker.append(vm)
-		#print("devlist",devlist)
-	return devlist
-
-def getProperties(dev,voc):
-	pl=[]
-	if dev[0][0]==0x26:
-		pl=["Temperatur","Spannung","Luftfeuchte","Strom"]
-		if dev[1][0]!=0xFF:
-			pl=[]
-			for i in range(4):
-				name=getName(dev[1][i*2])
-				if len(name)!=0:
-					pl.append(name[0])
-			if voc!=0:
-				#R0,VS,Corr,cmode,RS,RSR0,VOC1,VOC2
-				pl.append("R0")
-				pl.append("VS")
-				pl.append("Corr")
-				pl.append("cmode")
-				pl.append("RS")
-				pl.append("RSR0")
-				pl.append("VOC1")
-				pl.append("VOC2")
-	if dev[0][0]==0x28:
-		pl=["Temperatur"]
-		if dev[1][0]!=0xFF:
-			pl=[]
-			for i in range(4):
-				name=getName(dev[1][i*2])
-				if len(name)!=0:
-					pl.append(name[0])
-	return pl
-
-def getValues(dev,voc):
-	pl=[]
-	#print(id2string(dev[0]),voc)
-	if dev[0][0]==0x26:
-		vnok=1
-		while (vnok):
-			sbl=owComStr(dev[0],"4E000F_RB4_R_P7044_R_P70B800_RBE00FFFFFFFFFFFFFFFFFF_R4E0000_RB4_R_P70B800_RBE00FFFFFFFFFFFFFFFFFF_RBE03FFFFFFFFFFFFFFFFFF")
-			#print(sbl)
-			sb=sbl[4]
-			VDD=(sb[5]+sb[6]*256)
-			sb=sbl[8]
-			VAD=(sb[5]+sb[6]*256)
-			Temp=(sb[3]+sb[4]*256)
-			curr=sb[7]+sb[8]*256
-			if (sb[8] & 0x80):
-				curr=-(curr&0x7FFF)
-			vals=[Temp,VDD,VAD,curr]
-			formellist=[6,8,7,8]
-			if dev[1][0]!=0xFF:
-				formellist=[]
-				for i in range(4):
-					if (dev[1][i*2+1])!=0:
-						formellist.append(dev[1][i*2+1])
-					else:
-						break
-			cvals=[]
-			for i in range(len(formellist)):
-				cvals.append(calculateValues(formellist[i],vals,i))
-			if (cvals[2]<=110):
-				vnok=0
-			else:
-				print(cvals)
-				vnok=0
-			if voc!=0:
-				#R0,VS,Corr,cmode,RS,RSR0,VOC1,VOC2
-				sb=sbl[9]
-				R0=(sb[2]+sb[3]*256)/100.0
-				VS=(sb[4]+sb[5]*256)/10000.0
-				Corr=(sb[7]+sb[8]*256)/1000.0
-				cmode=sb[6]
-				RS=(3/VS-1)*30
-				RSR0=(RS/R0)
-				VOC1=RSR0*Corr
-				VOC2=RSR0/Corr
-				cvals.append(R0)
-				cvals.append(VS)
-				cvals.append(Corr)
-				cvals.append(cmode)
-				cvals.append(RS)
-				cvals.append(RSR0)
-				cvals.append(VOC1)
-				cvals.append(VOC2)
-		return cvals
-	if dev[0][0]==0x28:
-		sbl=owComStr(dev[0],"44_R_PFF_PFF_PFF_PFFBEFFFFFFFFFFFFFFFFFF")
-		Temp=sbl[1][1]+sbl[1][2]*256
-		if (sbl[1][2] & 0x80):
-			Temp=-(Temp&0x7FFF)
-		if dev[1][0]!=0xFF:
-			return [calculateValues(dev[1][1],[Temp],0)]
-		else:
-			return [calculateValues(1,[Temp],0)]
-	return []
-
-
-
-
-def gp_makefile(name,i):
-	f=open("gpscript%i.dem" %(i),"w")
-	#f.write("set decimalsign ','\n")
-	f.write('set decimalsign locale\n')
-	f.write('set timefmt "%d.%m.%Y %H:%M:%S"\n')
-	f.write('set xdata time\n')
-	f.write('set datafile separator "\\t" \n')
-	f.write('set terminal png size 1024,600\n')
-	f.write('set format x "%d.%m\\n%H:%M"\n')
-	f.write("set output '%s'\n" % (name))
-	f.write("set grid ytics\n")
-	f.write("set terminal postscript landscape\n")
-	f.write('set object 1 rectangle from screen 0,0 to screen 1,1 fillcolor rgb"#FFFFFF" behind\n')
-	#set output 'Temperatur.ps'
-	return f
-
-
-def gnuplot():
-	rl=["Temperatur","Luftfeuchte","Druck","VOC","Beleuchtungsstaerke"]
-	rlf=[]
-	rls=[]
-	rllc=[]
-	for i in range(len(rl)):
-		rlf.append("") #begin of plotline
-		rls.append('') #plotline
-		rllc.append('')  #lineconfig
-	li=0
-	for c in gplist:
-		for i in range(len(rl)):
-			if c[0]==rl[i]:
-				li=li+1
-				cl=c[2].split(",")
-				rls[i]=rls[i]+" %s using 1:%i with linespoints ls %i title \"%s\" ," % (rlf[i],c[1],li,cl[0])
-				rllc[i]=rllc[i]+ "set style line %i %s\n" % (li,cl[1])
-				rlf[i]='""'
-	for i in range(len(rl)):
-		f=gp_makefile(rl[i]+".ps",i)
-		f.write(rllc[i])
-		f.write('plot "log22.txt" '+rls[i]+"\n")
-		f.write("set output '%s'\n" % (rl[i]+"_l.ps"))
-		f.write('plot "< tail -n 100 log22.txt" '+rls[i]+"\n")
-		f.close()
-		p = subprocess.Popen(["gnuplot","gpscript%i.dem" %(i)], shell=False, bufsize=14000, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
-		p.wait();
-		cmd="convert -size 2048x1600 -depth 8 %s.ps -rotate 90 -resize 1024x800 -depth 8 %s.png" %(rl[i],rl[i])
-		p = subprocess.Popen(cmd.split(" "), shell=False, bufsize=14000, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
-		p.wait();
-		cmd="convert -size 2048x1600 -depth 8 %s_l.ps -rotate 90 -resize 1024x800 -depth 8 %s_l.png" %(rl[i],rl[i])
-		print cmd.split(" ")
-		p = subprocess.Popen(cmd.split(" "), shell=False, bufsize=14000, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
-		p.wait();
-		shutil.copyfile(rl[i]+".png","/var/www/html/"+rl[i]+".png")
-		shutil.copyfile(rl[i]+"_l.png","/var/www/html/"+rl[i]+"_l.png")
-
-devlist=owList()
-print(voc_marker)
-tline1="\t"
-tline2="time\t"
-devdict={}
-devwholist=[]
-f=open("DEVLIST.txt","r")
-for l in f.readlines():
-	ls=l.split(" ")
-	if (len(ls)>1):
-		devdict[ls[0]]=l.replace("\n","")
-		devwholist.append(ls[0])
-
-i=0
-col=1
-
-
-devlist1=[]
-devlistn=[]
-voc_marker1=[]
-
-for d in devwholist:
-	i=0
-	print(d)
-	for dd in devlist:
-		if id2string(dd[0])==d:
-			print("->",id2string(dd[0]))
-			devlist1.append(dd)
-			devlist.remove(dd)
-			voc_marker1.append(voc_marker[i])
-			del voc_marker[i]
-			break
-		i=i+1
-for d in devlist:
-	devlist1.append(d)
-	
-devlist=devlist1
-voc_marker=voc_marker1
-
-
-print devlist
-
-print voc_marker
-
-
-
-for d in devlist:
-	print(d[0])
-	prop=getProperties(d,voc_marker[i])
-	if len(prop)>0:
-		tline1=tline1+id2string(d[0])
-	for p in prop:
-		tline2=tline2+p+"\t"
-		tline1=tline1+"\t"
-		col=col+1
-		dn=id2string(d[0])
-		if dn in devdict:
-			dn=devdict[dn]
-		gplist.append((p,col,dn))
-	if (len(d)>2):
-		print("->",d[2])
-		prop=getProperties(d[2:],voc_marker[i])
-		tline1=tline1+id2string(d[2])
-		for p in prop:
-			tline2=tline2+p+"\t"
-			tline1=tline1+"\t"
-			col=col+1
-			dn=id2string(d[2])
-			if dn in devdict:
-				dn=devdict[dn]
-			gplist.append((p,col,dn))
-	i=i+1
-
-#if os.path.exists("log22.txt"):
-#	lt = time.localtime()
-#	ts=time.strftime("%Y%m%d%H%M%S", lt)
-#	os.rename("log22.txt","log22_"+ts+".txt")
-
-f=open("log22h.txt","a")
-f.write(tline1+"\n")
-f.write(tline2+"\n")
-f.close()
-print(tline1)
-print(tline2)
-
-while (1):
-	lt = time.localtime()
-	vline=time.strftime("%d#%m#%Y %H:%M:%S\t", lt)
-	i=0
-	for d in devlist:
-		#print(d[0])
-		vals=getValues(d,voc_marker[i])
-		for v in vals:
-			vline=vline+"%0.5f\t" % (v)
-		if (len(d)>2):
-			vals=getValues(d[2:],voc_marker[i])
-			for v in vals:
-				vline=vline+"%0.5f\t" % (v)
-		i=i+1
-	print(vline)
-	f=open("log22.txt","a")
-	f.write(vline.replace('.',',').replace('#','.')+"\n")
-	#f.write(vline+"\n")
-	f.close()
-	gnuplot()
-	time.sleep(90)
-
-
-
-
-id=[0x26,0xA3,0xD9,0x84,0x00,0x16,0x05,0x67]
-print("VDD\tVAD\tTemp\tHum\tR0\tVS\tCorr\tcm\tRS\tRSR0\tVOC1\tVOC2");
-print(owComStr(id,"85FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"));
-#print(owComStr(id,"4E000F_RB4_R_P7044_R_P70B8_RBE00FFFFFFFFFFFFFFFFFF_R4E0000_RB4_R_P70BE00FFFFFFFFFFFFFFFFFF_RBE03FFFFFFFFFFFFFFFFFF"))
-
-while(0):
-	sbl=owComStr(id,"4E000F_RB4_R_P7044_R_P70B8_RBE00FFFFFFFFFFFFFFFFFF_R4E0000_RB4_R_P70BE00FFFFFFFFFFFFFFFFFF_RBE03FFFFFFFFFFFFFFFFFF")
-	#owCom(id,[0x4E,0x00,0x0F],0)
-	#owCom(id,[0xB4],0)
-	#time.sleep(0.1)
-	#owCom(id,[0x44],0)
-	#time.sleep(0.1)
-	#owCom(id,[0xB8],0)
-	#sb=owCom(id,[0xBE,0x00],11)
-	sb=sbl[4]
-	VDD=(sb[5]+sb[6]*256)/100.0
-	#owCom(id,[0x4E,0x00,0x00],0)
-	#owCom(id,[0xB4],0)
-	#time.sleep(0.1)
-	#owCom(id,[0xB8],0)
-	#sb=owCom(id,[0xBE,0x00],11)
-	sb=sbl[7]
-	VAD=(sb[5]+sb[6]*256)/100.0
-	Temp=(sb[3]+sb[4]*256)/256.0
-	#sb=owCom(id,[0xBE,0x03],11)
-	sb=sbl[8]
-	R0=(sb[2]+sb[3]*256)/100.0
-	VS=(sb[4]+sb[5]*256)/10000.0
-	Corr=(sb[7]+sb[8]*256)/1000.0
-	cmode=sb[6]
-	RS=(3/VS-1)*30
-	RSR0=(RS/R0)
-	VOC1=RSR0*Corr
-	VOC2=RSR0/Corr
-	Hum=(VAD/VDD-0.16)/0.0062
-	Hum=(Hum)/(1.0546-0.00216*(Temp))
-	f=open("log.txt","a")
-	print("%0.3f\t%0.3f\t%0.3f\t%0.3f\t%0.3f\t%0.3f\t%0.3f\t%i\t%0.3f\t%0.3f\t%0.3f\t%0.3f" %(VDD,VAD,Temp,Hum,R0,VS,Corr,cmode,RS,RSR0,VOC1,VOC2))
-	f.write("%0.3f\t%0.3f\t%0.3f\t%0.3f\t%0.3f\t%0.3f\t%0.3f\t%i\t%0.3f\t%0.3f\t%0.3f\t%0.3f\n" %(VDD,VAD,Temp,Hum,R0,VS,Corr,cmode,RS,RSR0,VOC1,VOC2))
-	f.close()
-	time.sleep(30)
-
-#cmd="owtools.exe usb1 DC 6705160084D9A326 BE00FFFFFFFFFFFFFFFFFFFF"
-#print(owCom([0x26,0xA3,0xD9,0x84,0x00,0x16,0x05,0x67],[0xBE,0x00],11))
-
-
-
diff --git a/stest/log_all1.py b/stest/log_all1.py
deleted file mode 100644
index 70b3e17..0000000
--- a/stest/log_all1.py
+++ /dev/null
@@ -1,341 +0,0 @@
-import sys
-import os
-import os.path
-import subprocess
-import io
-import time
-import datetime
-import math
-import shutil
-
-toolstr="/home/muto/owtools/src/owtools USB1 DC "
-devdict={}
-devwholist=[]
-f=open("DEVLIST.txt","r")
-for l in f.readlines():
-	ls=l.split(" ")
-	if (len(ls)>1):
-		devdict[ls[0]]=l.replace("\n","")
-		devwholist.append(ls[0])
-f.close()
-
-def id2string(id):
-	s=""
-	for i in range(8):
-		s=s+"%02X" %(id[7-i])
-	return s
-
-def string2id(s):
-	for i in range(8):
-		bl=[]
-		i2=14-i*2;
-		bl.append(int(s[i2:i2+2],16))
-	return bl
-
-
-def calculateValues(code, V, vn):
-	if code==1:
-		return V[vn] / 16.0; 
-	elif code==2:
-		return V[vn]/1.6; 
-	elif code==3:
-		return V[vn]*0.2 + 700; 
-	elif code==4:
-		return math.exp(V[vn] / 160.0); 
-	elif code==5:
-		return V[vn]*62.5 + 55000; 
-	elif code==6:
-		return V[vn] / 256.0; 
-	elif code==7:
-		if V[1]!=0:
-			return ((float(V[2]) / float(V[1]) - 0.16) / 0.0062) / (1.0546 - 0.00216*V[0]/256.0); 
-		else:
-			return 0
-	elif code==8:
-		return V[vn] / 100.0; 
-	elif code==9:
-		return V[vn] / 65535.0*5.1; 
-	elif code==10:
-		return V[vn] / 65535.0*2.55; 
-	elif code==11:
-		return V[vn] / 65535.0*1.1; 
-	elif code==12:
-		return V[vn] / 10.0; 
-	elif code==13:
-		return V[vn];  
-	elif code==14:
-		return (V[vn] - 32767.0) / 100.0;  
-	elif code==15:
-		return math.exp((V[vn]-32767.0)/1000.0); 
-	elif code==16:
-		return V[vn]/32.0; 
-	else:
-		return 0;
-
-def getName(code	):
-	if code==1:
-		return ["Temperatur","C"]
-	if code==2:
-		return ["Druck","hPa"]
-	if code==3:
-		return ["Beleuchtungsstaerke","lux"]
-	if code==4:
-		return ["Luftfeuchte","%%"]
-	if code==5:
-		return ["Konstante",""]
-	if code==6:
-		return ["Spannung","V"]
-	if code==7:
-		return ["Strom","mA"]
-	if code==8:
-		return ["VOC","ppm"]
-	if code==9:
-		return ["Counter",""]
-	return []
-
-
-def owCom(dev,send,rcount):
-	cmd=toolstr+id2string(dev)
-	#for i in range(8):
-	#	cmd=cmd+"%02X" %(dev[7-i])
-	cmd=cmd+" "
-	for b in send:
-		cmd=cmd+"%02X" % (b)
-	for i in range(rcount):
-		cmd=cmd+"FF"
-	#print(cmd.split(' '));
-	p = subprocess.Popen(cmd.split(' '), shell=False, bufsize=14000, stdin=subprocess.PIPE, stdout=subprocess.PIPE)
-	p.wait()
-	s=p.stdout.read().decode("utf-8")
-	l=s.split("\n");
-	#print(l[2])
-	bl=[]
-	for i in range(int(len(l[2])/2)):
-		i2=i*2;
-		bl.append(int(l[2][i2:i2+2],16))
-	return bl
-
-def owComStr(dev,sendstr):
-	cmd=toolstr+id2string(dev)
-	#for i in range(8):
-	#	cmd=cmd+"%02X" %(dev[7-i])
-	cmd=cmd+" "+sendstr
-	p = subprocess.Popen(cmd.split(' '), shell=False, bufsize=14000, stdin=subprocess.PIPE, stdout=subprocess.PIPE)
-	p.wait()
-	s=p.stdout.read().decode("utf-8")
-	#print(s);
-	ll=s.split("\n");
-	bll=[]
-	for l in ll[2:]:
-		bl=[]
-		for i in range(int(len(l)/2)):
-			i2=i*2;
-			bl.append(int(l[i2:i2+2],16))
-		bll.append(bl)
-	return bll
-
-def getValues(dev,voc):
-	pl=[]
-	#print(id2string(dev[0]),voc)
-	if dev[0][0]==0x26:
-		vnok=1
-		rc=0
-		while (vnok):
-			sbl=owComStr(dev[0],"4E000F_RB4_R_P7044_R_P70B800_RBE00FFFFFFFFFFFFFFFFFF_R4E0000_RB4_R_P70B800_RBE00FFFFFFFFFFFFFFFFFF_RBE03FFFFFFFFFFFFFFFFFF")
-			#print(sbl)
-			sb=sbl[4]
-			VDD=(sb[5]+sb[6]*256)
-			sb=sbl[8]
-			VAD=(sb[5]+sb[6]*256)
-			Temp=(sb[3]+sb[4]*256)
-			if (sb[4] & 0x80):
-				Temp-=0x10000
-			curr=sb[7]+sb[8]*256
-			if (sb[8] & 0x80):
-				curr-=0x10000
-			vals=[Temp,VDD,VAD,curr]
-			formellist=[6,8,7,8]
-			if dev[1][0]!=0xFF:
-				formellist=[]
-				for i in range(4):
-					if (dev[1][i*2+1])!=0:
-						formellist.append(dev[1][i*2+1])
-					else:
-						break
-			cvals=[]
-			for i in range(len(formellist)):
-				cvals.append(calculateValues(formellist[i],vals,i))
-			if (cvals[2]<=110):
-				vnok=0
-			else:
-				rc=rc+1
-				if (rc==3):
-					vnok=0
-					cvals[2]=100
-			if voc!=0:
-				#R0,VS,Corr,cmode,RS,RSR0,VOC1,VOC2
-				sb=sbl[9]
-				R0=(sb[2]+sb[3]*256)/100.0
-				VS=(sb[4]+sb[5]*256)/10000.0
-				Corr=(sb[7]+sb[8]*256)/1000.0
-				cmode=sb[6]
-				RS=(3/VS-1)*30
-				RSR0=(RS/R0)
-				VOC1=RSR0*Corr
-				VOC2=RSR0/Corr
-				cvals.append(R0)
-				cvals.append(VS)
-				cvals.append(Corr)
-				cvals.append(cmode)
-				cvals.append(RS)
-				cvals.append(RSR0)
-				cvals.append(VOC1)
-				cvals.append(VOC2)
-		return cvals
-	if dev[0][0]==0x28:
-		sbl=owComStr(dev[0],"44_R_PFF_PFF_PFF_PFFBEFFFFFFFFFFFFFFFFFF")
-		Temp=sbl[1][1]+sbl[1][2]*256
-		if (sbl[1][2] & 0x80):
-			Temp=-(Temp&0x7FFF)
-		if dev[1][0]!=0xFF:
-			return [calculateValues(dev[1][1],[Temp],0)]
-		else:
-			return [calculateValues(1,[Temp],0)]
-	return []
-
-	
-def owList(): 
-	cmd=toolstr[0:-3]
-	print(cmd)
-	p = subprocess.Popen(["./owtools","USB1"], shell=False, bufsize=14000, stdin=subprocess.PIPE, stdout=subprocess.PIPE)
-	p.wait()
-	s=p.stdout.read()
-	l=s.split("\n")
-	#print(l);
-	l=l[1:-1]
-	devlist=[]
-	ic=0
-	for d in l:
-		dev=[]
-		bl=[]
-		for i in range(8):
-			i2=14-i*2;
-			bl.append(int(d[i2:i2+2],16))
-		dev.append(bl)
-		#print(bl)
-		config=owCom(bl,[0x85],18)
-		#print(config)
-		if (config[1]==0xFF):
-			if (bl[0]==0x26):
-				config=[0,1,6,6,8,4,7,7,8,0]
-			if (bl[0]==0x28):
-				config=[0,1,1,0,0,0,0,0,0,0]
-		dev.append(config[1:])
-		bls=id2string(bl)
-		cs="%i: " %(ic)
-		ic=ic+1
-		cs=cs+bls+": "
-		if bls in devdict:
-			cs=cs+devdict[bls].split(",")[0].split(" ")[1]+" "
-		for i in range(4):
-			c=config[i*2+1]
-			if (c==0xFF):
-				cs=cs+"Noconfig "
-				config=[0,0,0,0,0,0,0,0,0,0]
-				break
-			if (c==0):
-				break
-			cs=cs+getName(c)[0]+" "
-		#voc=0
-		#if bls in devdict:
-		#	if "VOC" in devdict[bls]:
-		#		voc=1
-		#l=getValues([bl,config[1:]],voc)
-		#for v in l:
-		#	cs=cs+" %0.2f " %(v)
-		print(cs)
-		ddev=0
-		vm=0
-		if config[1]==0x08:
-			vm=1
-		#print("Test_configs")
-		i=0
-		for dv in devlist:
-			#print("c",dv[1][9:16])
-			#print("d",bl[0:7])
-			if dv[1][9:16]==bl[0:7]:
-				print("Double Device")
-				ddev=1
-				dv.append(dev[0])
-				dv.append(dev[1])
-				#if vm==1:
-					#voc_marker[i]=2
-			i=i+1
-		#if ddev==0:
-		devlist.append(dev)
-			#voc_marker.append(vm)
-		#print("devlist",devlist)
-	return devlist
-
-dl=owList()
-#for d in dl:
-#	print(d)
-
-while (1):
-	lt = time.localtime()
-	vline=time.strftime("%d#%m#%Y %H:%M:%S\t", lt)
-	n = datetime.datetime.now()
-	unix_timestamp = time.mktime(n.timetuple())# works if Python >= 3.3
-	for d in dl:
-		ds=id2string(d[0])
-		bezeichnung="not in List"
-		if ds in devdict:
-			bezeichnung=devdict[ds].split(",")[0].split(" ")[1]+" "
-		vnames=[]
-		for i in range(4):
-			c=d[1][i*2]
-			if (c==0):
-				break
-			name=getName(c)
-			if name!=[]:
-				vnames.append(name[0])
-		voc=0
-		if "VOC" in bezeichnung:
-			voc=1
-			vnames.append("R0")
-			vnames.append("VS")
-			vnames.append("Corr")
-			vnames.append("cmode")
-			vnames.append("RS")
-			vnames.append("RSR0")
-			vnames.append("VOC1")
-			vnames.append("VOC2")
-		#print(ds)
-		l=getValues([d[0],d[1]],voc)
-		s=vline+"%i" %(unix_timestamp)
-		for i in range(len(l)):
-			print("%s %s: %0.2f " %(bezeichnung,vnames[i],l[i]))
-			s=s+"\t%0.4f" % (l[i])
-		fname="log_%s.ow1" %(ds)
-		writeheader=1
-		if os.path.exists(fname):
-			writeheader=0
-		f=open(fname,"a")
-		if writeheader==1:
-			sh="time\tunixtime"
-			for i in range(len(l)):
-				sh=sh+"\t%s" % (vnames[i])
-			f.write(sh+"\n")
-		f.write(s.replace(".",",").replace("#",".")+"\n")
-		f.close()
-	#execfile("separate1.py")
-	os.system("python separate1.py")
-	print("--------------------")
-	n = datetime.datetime.now()
-	unix_timestamp1 = time.mktime(n.timetuple())# works if Python >= 3.3
-	d=unix_timestamp1-unix_timestamp
-	print (d)
-	print("--------------------")
-	time.sleep(120-d)
-	
-	
\ No newline at end of file
diff --git a/stest/main.cpp b/stest/main.cpp
deleted file mode 100644
index c1ca42f..0000000
--- a/stest/main.cpp
+++ /dev/null
@@ -1,184 +0,0 @@
-//============================================================================
-// Name        : owtools.cpp
-// Author      : 
-// Version     :
-// Copyright   : Your copyright notice
-// Description : Hello World in C++, Ansi-style
-//============================================================================
-
-#include <iostream>
-#include <queue>
-using namespace std;
-extern "C" {
-#include <ownet.h>
-}
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <stdint.h>
-
-
-#include <unistd.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
-
-
-
-unsigned char conf2(const char *s) {
-	unsigned char b = 0;
-	for (int i = 0; i < 2; i++) {
-		b = b * 16;
-		if ((s[i] >= '0') && (s[i] <= '9')) {
-			b += s[i] - '0';
-		} else
-		if ((s[i] >= 'A') && (s[i] <= 'F')) {
-			b += s[i] - 'A'+10;
-		} else
-		if ((s[i] >= 'a') && (s[i] <= 'f')) {
-			b += s[i] - 'a'+10;
-		}
-		
-	}
-	return b;
-}
-
-void strcpys(char *s, const char* d,bool up) {
-	if (strlen(d) > 7990) {
-		strncpy(s, d, 7990);
-		s[200] = 0;
-	}
-	else strcpy(s, d);
-	if (up) {
-		for (int i = 0; i<strlen(s); i++)
-			if ((s[i] >= 'a') && (s[i] <= 'z'))
-				s[i] += 'A' - 'a';
-	}
-}
-
-int main(int argc, char *argv[]) {
-	uchar SNum[8];
-	int rslt, cnt, i;
-	uchar send_block[256];
-	uchar send_cnt = 0;
-	int portnum;
-	char adapter[20];
-	int found = 0;
-	int rw = 0;
-	int err = 0;
-	char s[8000];
-	int adt = 0;
-	int mod = 0;
-	if (argc >= 2) {
-		strcpys(s, argv[1],true);
-		
-		
-		if (strncmp(s,"USB",3)==0) {adt = 6;}
-		if (strncmp(s, "COM", 3) == 0) { adt = 5; }
-		if (adt != 0) {
-			strcpy(s, argv[1] + 3);
-			sprintf(adapter, "DS2490-%s\0",s);
-			//sprintf(adapter, "{%s,%i}\0",s,adt);
-			printf("Open Port %s\n", argv[1]);
-			if ((portnum = owAcquireEx(adapter)) < 0) {
-				printf("ERROR \n", adt);
-			}
-			else mod = 1;
-
-		} 
-		if ((argc == 2) && (mod == 1)) mod = 2;
-		if (argc > 2) {
-			strcpys(s, argv[2],true);
-			if (strncmp(s, "DC", 2) == 0) {
-				if (argc > 3) {
-					if (strlen(argv[3])>=16)
-					for (int i = 0; i < 16; i += 2) {
-						SNum[7 - (i / 2)] = conf2(argv[3] + i);
-
-					}
-					printf("Select: %02X%02X%02X%02X%02X%02X%02X%02X\n", SNum[7], SNum[6], SNum[5], SNum[4], SNum[3], SNum[2], SNum[1], SNum[0]);
-					mod = 3;
-				}
-
-			}
-		}
-		if ((mod == 3) && (argc>4)) {
-			strcpys(s, argv[4], true);
-			mod = 4;
-		}
-	
-	}
-
-	if (mod == 2) {
-		rslt = owFirst(portnum, TRUE, FALSE);
-		cnt = 0;
-		while (rslt) {
-			cnt++;
-			owSerialNum(portnum, &SNum[0], TRUE);
-			printf("%02X%02X%02X%02X%02X%02X%02X%02X\n", SNum[7], SNum[6], SNum[5], SNum[4], SNum[3], SNum[2], SNum[1], SNum[0]);
-			//    			fprintf(ft,"%02X%02X%02X%02X%02X%02X%02X%02X\n",SNum[7],SNum[6],SNum[5],SNum[4],SNum[3],SNum[2],SNum[1],SNum[0]);
-/*			switch (SNum[0]) {
-
-
-				case 0x14: {
-					//TestDS2430(portnum,&SNum[0]);
-					//scanf("%i",&i);
-					//ResetDS2430(portnum,&SNum[0]);
-					//uchar id[]={0x14,0xF5 ,0xEA ,0x24 ,0x06 ,0x00 ,0x00 ,0x5E};
-					//SetIDDS2430(portnum,&SNum[0],id);
-					if (rw) WriteDS2430(portnum, &SNum[0]); else ReadDS2430(portnum, &SNum[0]);
-					//WriteDS2430(portnum,&SNum[0],"5E00000624EAF514.bin");
-					break;
-				}
-				case 0x23: {
-					//TestDS2433(portnum,&SNum[0]);
-					//TestDS2433_reset(portnum,&SNum[0]);
-					//scanf("%i",&i);
-					if (rw) WriteDS2433(portnum, &SNum[0]); else ReadDS2433(portnum, &SNum[0]);
-					break;
-				}
-				}*/
-			rslt = owNext(portnum, TRUE, FALSE);
-		}
-	}
-	if (mod == 4) {
-		owSerialNum(portnum, SNum, FALSE);
-		strcat(s, "_R");
-		int len = strlen(s);
-		int i = 0;
-		while (i < len) {
-			if (s[i] == '_') {
-				if (s[i + 1] == 'R') {
-					if (owAccess(portnum)) {
-						if (owBlock(portnum, FALSE, send_block, send_cnt)) {
-							for (int j = 0; j < send_cnt; j++) {
-								printf("%02X", send_block[j]);
-							}
-							printf("\n");
-						}
-						else printf("ERROR RESET\n");
-					}
-					else printf("ERROR SEND\n");
-					send_cnt = 0;
-				}
-				if (s[i + 1] == 'P') {
-					if (i + 2 < len) {
-						i += 2;
-						msDelay(conf2(s + i));
-						
-					}
-				}
-			}
-			else {
-				send_block[send_cnt++] = conf2(s + i);
-			}
-			i += 2;
-		
-			
-		}
-	}
-	if (mod>0) owRelease(portnum);
-	
-	return 0;
-}
diff --git a/stest/separate1.py b/stest/separate1.py
deleted file mode 100644
index b1c2871..0000000
--- a/stest/separate1.py
+++ /dev/null
@@ -1,103 +0,0 @@
-import sys
-import os
-import os.path
-import subprocess
-import io
-import time
-import math
-import shutil
-import datetime
-
-
-#Parameter:
-#a = 7.5, b = 237.3 fuer T >= 0
-#a = 7.6, b = 240.7 fuer T < 0 ueber Wasser (Taupunkt)
-#a = 9.5, b = 265.5 fuer T < 0 ueber Eis (Frostpunkt)
-a=7.5
-b=237.3
-Rs = 8314.3 #J/(kmol*K) (universelle Gaskonstante)
-mw = 18.016 #kg/kmol (Molekulargewicht des Wasserdampfes)
-
-def SDD(T):
-	return 6.1078 * 10**((a*T)/(b+T))
-	
-def AF1(r,T):
-	return r/100.0*SDD(T)/(T+273.15)*mw/Rs*10000
-
-def RF1(a,T):
-	return a*100/(SDD(T)/(T+273.15)*mw/Rs*10000)	
-#print(0.5*SDD(20)/(20+273.15)*mw/Rs*10000)
-
-def rdiff(r1,t1,t2):
-	return (r1)-RF1(AF1(r1,t1),t2)
-
-
-def calcDerivation(Name,Valuetype,Value,T):
-	return [0.5,0.5]
-
-
-devdict={}
-devwholist=[]
-f=open("DEVLIST.txt","r")
-for l in f.readlines():
-	ls=l.split(" ")
-	if (len(ls)>1):
-		devdict[ls[0]]=l.replace("\n","").split(",")[0].split(" ")[1]
-		devwholist.append(ls[0])
-f.close()
-
-sel_list=["Temperatur","Luftfeuchte","Beleuchtungsstaerke","R0","VOC","RS","Corr"]
-data=[]
-for s in sel_list:
-	data.append(["Time"])
-
-for ds in devwholist:   #fuer Jedes Geraet in DEVLIST.txt
-	fname="log_%s.ow1" %(ds)  #Sind Daten da?
-	if os.path.exists(fname):
-		f=open(fname,"r")  #Lesen
-		lines=f.readlines()
-		ti=lines[0][:-1].split("\t")  #Ueberschriften aufteilen
-		i=0
-		if ("Temperatur" in ti):
-			tempindex=ti.index("Temperatur")
-		for t in ti:   #fuer jedes Element in der Ueberschrift
-			if t in sel_list:  #schauen ob es Uebernommen werden soll
-				p=sel_list.index(t)  #schaue nach Nummer in der Datenbank
-				data[p][0]=data[p][0]+","+ds+" "+devdict[ds] #hinzufuegen der Ueberschrift in der Tabelle
-				if len(data[p])==1: #erstes Element, Time einfuegen und neue zeile anlegen
-					for l in lines[1:]:
-						l=l[:-1]
-						ll=l.split("\t")
-						la=ll[0].split(" ")
-						lb=la[0].split(".")
-						ts=lb[2]+"/"+lb[1]+"/"+lb[0]+" "+la[1]
-						data[p].append(ts)
-				j=1;
-				for l in lines[1:]:
-					#print(ll)
-					l=l[:-1] #\n wegmachen
-					ll=l.split("\t") #telen
-					fl=float(ll[i].replace(",","."))
-					if "VOC" in devdict[ds] or "Lum" in devdict[ds]:
-						if (t=="Temperatur"):
-							ltemp=fl
-							fl=fl-1
-						if (t=="Luftfeuchte"):
-							ltemp=float(ll[tempindex].replace(",","."))
-							fl=fl-rdiff(fl,ltemp,ltemp-1)
-					data[p][j]=data[p][j]+",%0.2f" % (fl)
-					j=j+1
-			i=i+1
-		f.close()		
-			 
-	
-#print data
-
-for i in range(len(sel_list)):
-	f=open("/var/www/html/"+sel_list[i]+".csv","w")
-	for l in data[i]:
-		f.write(l+"\n")
-	f.close()
-
-	
-
diff --git a/tools/owReadBMP.py b/tools/owReadBMP.py
new file mode 100644
index 0000000..00eac22
--- /dev/null
+++ b/tools/owReadBMP.py
@@ -0,0 +1,130 @@
+#!/usr/bin/python
+# Copyright (c) 2015, Tobias Mueller tm(at)tm3d.de
+# All rights reserved. 
+# 
+# Redistribution and use in source and binary forms, with or without 
+# modification, are permitted provided that the following conditions are 
+# met: 
+# 
+#  * Redistributions of source code must retain the above copyright 
+#    notice, this list of conditions and the following disclaimer. 
+#  * Redistributions in binary form must reproduce the above copyright 
+#    notice, this list of conditions and the following disclaimer in the 
+#    documentation and/or other materials provided with the 
+#    distribution. 
+#  * All advertising materials mentioning features or use of this 
+#    software must display the following acknowledgement: This product 
+#    includes software developed by tm3d.de and its contributors. 
+#  * Neither the name of tm3d.de nor the names of its contributors may 
+#    be used to endorse or promote products derived from this software 
+#    without specific prior written permission. 
+# 
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
+
+
+
+
+import time
+import subprocess
+import sys
+
+def owcom(dev,send,rc):
+	res=[]
+	f=open("/sys/bus/w1/devices/%s/rw" %(dev),"r+b",0)
+	f.write("".join(map(chr, send)))
+	if (rc!=0):
+		res=map(ord,f.read(rc))
+	f.close()
+	return res
+		
+
+def crc8(arr):
+	lscrc=0x0;
+	for v in arr:
+		bit=1;
+		while bit<256:
+			if (v&bit)==bit:
+				lb=1
+			else:
+				lb=0
+			if (lscrc&1)!=lb:
+				lscrc=(lscrc>>1)^0x8c 
+			else:
+				lscrc=(lscrc>>1)
+			bit=bit*2
+	return lscrc
+	
+def testnr(s):
+	for c in s.lower()[:]:
+		if not((c) in ['0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f','-']):
+			return False
+	return True
+ 
+def addid(id,val):
+	for i in range(7):
+		id[i+1]=id[i+1]+val
+		if id[i+1]>254:
+			id[i+1]=id[i+1]-254
+			val=1
+		else:
+			return id
+	return id
+#
+
+
+l=subprocess.check_output("ls /sys/bus/w1/devices/", shell=True)
+dc=0
+dl=[]
+for g in  (l.split("\n")):
+	if len(g)>2:
+		if testnr(g[0:2]):
+			if (g[0:2]=="26"):
+				dl.append(g)
+				dc=dc+1
+				print dc,") ",g
+if dc==0:
+	print "No 26 1-Wire Device found"
+	exit(0)
+n=int(raw_input("No. of Device (28-Device will get automatically): "))
+n=n-1
+if (n>dc-1)or(n<0):
+		exit(0)
+s=dl[n]
+config=owcom(s,[0x85],17)
+print(config)
+s2="%02x-%02x%02x%02x%02x%02x%02x" % (config[9],config[15],config[14],config[13],config[12],config[11],config[10])
+print("Second Device: %s" %( s2))
+f=open("/sys/bus/w1/devices/%s/w1_slave" %(s2),"rb",0)
+res=f.read().split(" ")
+f.close()
+Press=((int(res[0],16)+int(res[1],16)*256)/16.0*3.2+700)
+owcom(s,[0x4E,0x00,0x01],0)
+owcom(s,[0x44],0)
+time.sleep(1)
+owcom(s,[0xB4],0)
+time.sleep(1)
+
+p=owcom(s,[0xBE,0x00],10)
+print (p)
+T=((p[1]+p[2]*256)/256.0)
+if (config[5]==8):
+	RH=((p[3]+p[4]*256)/100.0)
+if (config[5]==7):
+	RH=(((p[3]+p[4]*256)/ 500.0 - 0.16) / 0.0062) / (1.0546 - 0.00216*T); 
+
+print("Temperatur: %f °C" %(T));
+print("Luftfeuchte: %f %%" %(RH));
+print("Druck (absolut): %f hPa" %(Press));
+h=float(raw_input("Höhe über Meerespiegel in m: "))
+P0=Press/((1-h/44330)**5.255)
+print("Druck (normalisiert): %f hPa" %(P0));
diff --git a/tools/owflash.py b/tools/owflash.py
new file mode 100644
index 0000000..0d37e84
--- /dev/null
+++ b/tools/owflash.py
@@ -0,0 +1,255 @@
+#!/usr/bin/python
+# Copyright (c) 2015, Tobias Mueller tm(at)tm3d.de
+# All rights reserved. 
+# 
+# Redistribution and use in source and binary forms, with or without 
+# modification, are permitted provided that the following conditions are 
+# met: 
+# 
+#  * Redistributions of source code must retain the above copyright 
+#    notice, this list of conditions and the following disclaimer. 
+#  * Redistributions in binary form must reproduce the above copyright 
+#    notice, this list of conditions and the following disclaimer in the 
+#    documentation and/or other materials provided with the 
+#    distribution. 
+#  * All advertising materials mentioning features or use of this 
+#    software must display the following acknowledgement: This product 
+#    includes software developed by tm3d.de and its contributors. 
+#  * Neither the name of tm3d.de nor the names of its contributors may 
+#    be used to endorse or promote products derived from this software 
+#    without specific prior written permission. 
+# 
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
+
+
+
+
+import time
+import subprocess
+import sys
+
+def owcom(dev,send,rc):
+	res=[]
+	f=open("/sys/bus/w1/devices/%s/rw" %(dev),"r+b",0)
+	f.write("".join(map(chr, send)))
+	if (rc!=0):
+		res=map(ord,f.read(rc))
+	f.close()
+	return res
+		
+
+def crc8(arr):
+	lscrc=0x0;
+	for v in arr:
+		bit=1;
+		while bit<256:
+			if (v&bit)==bit:
+				lb=1
+			else:
+				lb=0
+			if (lscrc&1)!=lb:
+				lscrc=(lscrc>>1)^0x8c 
+			else:
+				lscrc=(lscrc>>1)
+			bit=bit*2
+	return lscrc
+	
+def testnr(s):
+	for c in s.lower()[:]:
+		if not((c) in ['0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f','-']):
+			return False
+	return True
+ 
+def addid(id,val):
+	for i in range(7):
+		id[i+1]=id[i+1]+val
+		if id[i+1]>254:
+			id[i+1]=id[i+1]-254
+			val=1
+		else:
+			return id
+	return id
+#
+
+
+
+#start search
+f=open("/sys/bus/w1/devices/w1_bus_master1/w1_master_search","r+b",0)
+f.write("-1")
+f.close()	
+
+
+print "Open Hex File ...",
+fi=open(sys.argv[1],"r")
+data=[]
+for l in fi.readlines():
+	sys.stdout.write(".")
+	sys.stdout.flush()
+	bc=int(l[1:3],16)
+	fw=int(l[3:7],16)
+	ty=int(l[7:9],16)
+	chsm=bc+(fw>>8)+(fw&0xFF)+ty
+	for i in range(bc):
+		p=9+(i*2)
+		d=int(l[p:p+2],16)
+		chsm=(chsm+d)&0xFF
+		data.append(d)
+	chsm=(chsm+int(l[9+bc*2:11+bc*2],16))&0xFF
+	if (chsm!=0):
+		print "Error Checksum...."
+		exit()
+	#print bc,fw,ty,chsm
+fi.close()
+print
+
+l=subprocess.check_output("ls /sys/bus/w1/devices/", shell=True)
+dc=0
+dl=[]
+for g in  (l.split("\n")):
+	if len(g)>2:
+		if testnr(g[0:2]):
+			if (g[0:2]!="28"):
+				dl.append(g)
+				dc=dc+1
+				print dc,") ",g
+if dc==0:
+	print "No 1-Wire Device found"
+	exit(0)
+n=int(raw_input("No. of Device: "))
+n=n-1
+if (n>dc-1)or(n<0):
+		exit(0)
+s=dl[n]
+if (s!="a3-55aa55aa55aa"):
+	sys.stdout.write('Go to Flashmode....')
+	sys.stdout.flush()
+	owcom(s,[0x88],0)
+	owcom(s,[0x88],0)
+	owcom(s,[0x88],0)
+	for i in range (20):
+		l=subprocess.check_output("ls /sys/bus/w1/devices/", shell=True)
+		dc=0
+		dl=[]
+		sys.stdout.write(".")
+		sys.stdout.flush()
+		for g in  (l.split("\n")):
+			if (g[0:15]=="a3-55aa55aa55aa"):
+				break
+		if (g[0:15]!="a3-55aa55aa55aa"):
+			time.sleep(1)
+	if (g[0:15]=="a3-55aa55aa55aa"):
+		print "found"
+	else:
+		print "ERROR Enter Flashmode!" 
+		exit()
+	f=open("/sys/bus/w1/devices/w1_bus_master1/w1_master_remove","r+b",0)
+	f.write(s)
+	f.close()
+	time.sleep(5)
+
+#stop search
+print("Disable Device Search (Wait 15s)")
+f=open("/sys/bus/w1/devices/w1_bus_master1/w1_master_search","r+b",0)
+f.write("0")
+f.close()	
+time.sleep(15)
+
+s="a3-55aa55aa55aa"
+prog=data
+l=len(prog)
+if (l>7551):
+	print "Code to big  ... Max 7552 Byte (118 Pages)"
+	exit()
+pages= l/64
+for i in range(64-(l%64)):
+	#print i
+	prog.append(0xFF)
+pages= len(prog)/64
+if (pages>118):
+	print "Code to big  ... Max 7552 Byte (118 Pages)"
+	exit()
+
+
+print "Programm Page (of ", pages,")"
+	
+for i in range(pages):
+	sys.stdout.write("%i " % (i+1) )
+	sys.stdout.flush()
+
+	h=i*64;
+	hl=h&0xFF
+	hh=h>>8
+	#print hh, hl
+	mem=[hl,hh]+prog[h:h+64]
+	erroc=0
+	while (1):
+		owcom(s,[0x0F]+mem,0) 
+		rmem=owcom(s,[0xAA],66)
+		if (rmem!=mem):
+			print rmem
+			erroc=erroc+1
+			if erroc>5:
+				print "WRITING ERROR ... "
+				exit()
+			continue
+		owcom(s,[0x55],0)	
+		time.sleep(0.05)
+		owcom(s,[0xB8,hl,hh],0)
+		time.sleep(0.05)
+		rmem=owcom(s,[0xAA],66)
+		if (rmem!=mem):
+			print "error in flash"
+			print mem
+			print rmem
+			erroc=erroc+1
+			if erroc>5:
+				print "WRITING ERROR ... "
+				exit()
+			continue
+		#for v in rmem:
+		#	print "%02X " % (v),
+		break
+print "\nReset AVR"
+owcom(s,[0x89],0)
+time.sleep(1)
+f=open("/sys/bus/w1/devices/w1_bus_master1/w1_master_remove","r+b",0)
+f.write("a3-55aa55aa55aa")
+f.close()	
+
+print("Enable Device Search")
+f=open("/sys/bus/w1/devices/w1_bus_master1/w1_master_search","r+b",0)
+f.write("-1")
+f.close()	
+	
+	
+
+
+
+
+#mem=[0x00,0x2]
+#for i in range (64):
+#	mem.append(i)
+#owcom(s,[0x0F]+mem,0)
+#rmem=owcom(s,[0xAA],70)
+#print rmem
+#owcom(s,[0x55],0)
+#time.sleep(0.05)
+#owcom(s,[0xB8,0x00,0x02],0)
+#time.sleep(0.05)
+#rmem=owcom(s,[0xAA],70)
+#print rmem
+#for v in rmem:
+#	print "%02X " % (v)
+		
+
+		
diff --git a/tools/owflashtest.py b/tools/owflashtest.py
new file mode 100644
index 0000000..5e0b1a6
--- /dev/null
+++ b/tools/owflashtest.py
@@ -0,0 +1,241 @@
+#!/usr/bin/python
+# Copyright (c) 2015, Tobias Mueller tm(at)tm3d.de
+# All rights reserved. 
+# 
+# Redistribution and use in source and binary forms, with or without 
+# modification, are permitted provided that the following conditions are 
+# met: 
+# 
+#  * Redistributions of source code must retain the above copyright 
+#    notice, this list of conditions and the following disclaimer. 
+#  * Redistributions in binary form must reproduce the above copyright 
+#    notice, this list of conditions and the following disclaimer in the 
+#    documentation and/or other materials provided with the 
+#    distribution. 
+#  * All advertising materials mentioning features or use of this 
+#    software must display the following acknowledgement: This product 
+#    includes software developed by tm3d.de and its contributors. 
+#  * Neither the name of tm3d.de nor the names of its contributors may 
+#    be used to endorse or promote products derived from this software 
+#    without specific prior written permission. 
+# 
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
+
+
+
+
+import time
+import subprocess
+import sys
+
+def owcom(dev,send,rc):
+	res=[]
+	f=open("/sys/bus/w1/devices/%s/rw" %(dev),"r+b",0)
+	f.write("".join(map(chr, send)))
+	if (rc!=0):
+		res=map(ord,f.read(rc))
+	f.close()
+	return res
+		
+
+def crc8(arr):
+	lscrc=0x0;
+	for v in arr:
+		bit=1;
+		while bit<256:
+			if (v&bit)==bit:
+				lb=1
+			else:
+				lb=0
+			if (lscrc&1)!=lb:
+				lscrc=(lscrc>>1)^0x8c 
+			else:
+				lscrc=(lscrc>>1)
+			bit=bit*2
+	return lscrc
+	
+def testnr(s):
+	for c in s.lower()[:]:
+		if not((c) in ['0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f','-']):
+			return False
+	return True
+ 
+def addid(id,val):
+	for i in range(7):
+		id[i+1]=id[i+1]+val
+		if id[i+1]>254:
+			id[i+1]=id[i+1]-254
+			val=1
+		else:
+			return id
+	return id
+#
+
+
+
+#start search
+f=open("/sys/bus/w1/devices/w1_bus_master1/w1_master_search","r+b",0)
+f.write("-1")
+f.close()	
+
+
+print "Open Hex File ...",
+fi=open(sys.argv[1],"r")
+data=[]
+for l in fi.readlines():
+	sys.stdout.write(".")
+	sys.stdout.flush()
+	bc=int(l[1:3],16)
+	fw=int(l[3:7],16)
+	ty=int(l[7:9],16)
+	chsm=bc+(fw>>8)+(fw&0xFF)+ty
+	for i in range(bc):
+		p=9+(i*2)
+		d=int(l[p:p+2],16)
+		chsm=(chsm+d)&0xFF
+		data.append(d)
+	chsm=(chsm+int(l[9+bc*2:11+bc*2],16))&0xFF
+	if (chsm!=0):
+		print "Error Checksum...."
+		exit()
+	#print bc,fw,ty,chsm
+fi.close()
+print
+
+l=subprocess.check_output("ls /sys/bus/w1/devices/", shell=True)
+dc=0
+dl=[]
+for g in  (l.split("\n")):
+	if len(g)>2:
+		if testnr(g[0:2]):
+			if (g[0:2]!="28"):
+				dl.append(g)
+				dc=dc+1
+				print dc,") ",g
+if dc==0:
+	print "No 1-Wire Device found"
+	exit(0)
+n=int(raw_input("No. of Device: "))
+n=n-1
+if (n>dc-1)or(n<0):
+		exit(0)
+s=dl[n]
+if (s!="a3-55aa55aa55aa"):
+	sys.stdout.write('Go to Flashmode....')
+	sys.stdout.flush()
+	owcom(s,[0x88],0)
+	owcom(s,[0x88],0)
+	owcom(s,[0x88],0)
+	for i in range (20):
+		l=subprocess.check_output("ls /sys/bus/w1/devices/", shell=True)
+		dc=0
+		dl=[]
+		sys.stdout.write(".")
+		sys.stdout.flush()
+		for g in  (l.split("\n")):
+			if (g[0:15]=="a3-55aa55aa55aa"):
+				break
+		if (g[0:15]!="a3-55aa55aa55aa"):
+			time.sleep(1)
+	if (g[0:15]=="a3-55aa55aa55aa"):
+		print "found"
+	else:
+		print "ERROR Enter Flashmode!" 
+		exit()
+	f=open("/sys/bus/w1/devices/w1_bus_master1/w1_master_remove","r+b",0)
+	f.write(s)
+	f.close()
+	time.sleep(5)
+
+#stop search
+print("Disable Device Search (Wait 15s)")
+f=open("/sys/bus/w1/devices/w1_bus_master1/w1_master_search","r+b",0)
+f.write("0")
+f.close()	
+time.sleep(15)
+
+s="a3-55aa55aa55aa"
+prog=data
+l=len(prog)
+if (l>7551):
+	print "Code to big  ... Max 7552 Byte (118 Pages)"
+	exit()
+pages= l/64
+for i in range(64-(l%64)):
+	#print i
+	prog.append(0xFF)
+pages= len(prog)/64
+if (pages>118):
+	print "Code to big  ... Max 7552 Byte (118 Pages)"
+	exit()
+
+
+print "Programm Page (of ", pages,")"
+	
+for i in range(pages):
+	sys.stdout.write("%i " % (i+1) )
+	sys.stdout.flush()
+
+	h=i*64;
+	hl=h&0xFF
+	hh=h>>8
+	#print hh, hl
+	mem=[hl,hh]+prog[h:h+64]
+	erroc=0
+	while (1):
+		owcom(s,[0x0F]+mem,0) 
+		rmem=owcom(s,[0xAA],66)
+		if (rmem!=mem):
+			print rmem
+			erroc=erroc+1
+			if erroc>5:
+				print "WRITING ERROR ... "
+				exit()
+			continue
+		#for v in rmem:
+		#	print "%02X " % (v),
+		break
+print "\nReset AVR"
+owcom(s,[0x89],0)
+time.sleep(1)
+f=open("/sys/bus/w1/devices/w1_bus_master1/w1_master_remove","r+b",0)
+f.write("a3-55aa55aa55aa")
+f.close()	
+
+print("Enable Device Search")
+f=open("/sys/bus/w1/devices/w1_bus_master1/w1_master_search","r+b",0)
+f.write("-1")
+f.close()	
+	
+	
+
+
+
+
+#mem=[0x00,0x2]
+#for i in range (64):
+#	mem.append(i)
+#owcom(s,[0x0F]+mem,0)
+#rmem=owcom(s,[0xAA],70)
+#print rmem
+#owcom(s,[0x55],0)
+#time.sleep(0.05)
+#owcom(s,[0xB8,0x00,0x02],0)
+#time.sleep(0.05)
+#rmem=owcom(s,[0xAA],70)
+#print rmem
+#for v in rmem:
+#	print "%02X " % (v)
+		
+
+		
diff --git a/tools/readTempHum.py b/tools/readTempHum.py
new file mode 100644
index 0000000..d129db6
--- /dev/null
+++ b/tools/readTempHum.py
@@ -0,0 +1,125 @@
+#!/usr/bin/python
+# Copyright (c) 2015, Tobias Mueller tm(at)tm3d.de
+# All rights reserved. 
+# 
+# Redistribution and use in source and binary forms, with or without 
+# modification, are permitted provided that the following conditions are 
+# met: 
+# 
+#  * Redistributions of source code must retain the above copyright 
+#    notice, this list of conditions and the following disclaimer. 
+#  * Redistributions in binary form must reproduce the above copyright 
+#    notice, this list of conditions and the following disclaimer in the 
+#    documentation and/or other materials provided with the 
+#    distribution. 
+#  * All advertising materials mentioning features or use of this 
+#    software must display the following acknowledgement: This product 
+#    includes software developed by tm3d.de and its contributors. 
+#  * Neither the name of tm3d.de nor the names of its contributors may 
+#    be used to endorse or promote products derived from this software 
+#    without specific prior written permission. 
+# 
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
+
+
+
+
+import time
+import subprocess
+import sys
+
+def owcom(dev,send,rc):
+	res=[]
+	f=open("/sys/bus/w1/devices/%s/rw" %(dev),"r+b",0)
+	f.write("".join(map(chr, send)))
+	if (rc!=0):
+		res=map(ord,f.read(rc))
+	f.close()
+	return res
+		
+
+def crc8(arr):
+	lscrc=0x0;
+	for v in arr:
+		bit=1;
+		while bit<256:
+			if (v&bit)==bit:
+				lb=1
+			else:
+				lb=0
+			if (lscrc&1)!=lb:
+				lscrc=(lscrc>>1)^0x8c 
+			else:
+				lscrc=(lscrc>>1)
+			bit=bit*2
+	return lscrc
+	
+def testnr(s):
+	for c in s.lower()[:]:
+		if not((c) in ['0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f','-']):
+			return False
+	return True
+ 
+def addid(id,val):
+	for i in range(7):
+		id[i+1]=id[i+1]+val
+		if id[i+1]>254:
+			id[i+1]=id[i+1]-254
+			val=1
+		else:
+			return id
+	return id
+#
+
+def readDS18B20(s):
+	f=open("/sys/bus/w1/devices/%s/w1_slave" %(s),"rb",0)
+	res=f.read().split(" ")
+	f.close()
+	T=((int(res[0],16)+int(res[1],16)*256)/16.0)
+	print("Temperatur: %f °C" %(T));	
+
+def readDS2438(s):
+	owcom(s,[0x4E,0x00,0x01],0)
+	owcom(s,[0x44],0)
+	time.sleep(1)
+	owcom(s,[0xB4],0)
+	time.sleep(1)
+	owcom(s,[0xB8,0x00],0)
+	crc=1
+	while crc:
+		p=owcom(s,[0xBE,0x00],9)
+		crc=crc8(p)
+	#print (p)
+	T=((p[1]+p[2]*256)/256.0)
+	RH=(((p[3]+p[4]*256)/ 500.0 - 0.16) / 0.0062) / (1.0546 - 0.00216*T); 
+	print("Temperatur: %f °C" %(T));
+	print("Luftfeuchte: %f %%" %(RH));
+	
+
+
+l=subprocess.check_output("ls /sys/bus/w1/devices/", shell=True)
+dc=0
+dl=[]
+for g in  (l.split("\n")):
+	if len(g)>2:
+		if testnr(g[0:2]):
+			if (g[0:2]=="26"):
+				print dc,") ",g
+				readDS2438(g)
+				dl.append(g)
+				dc=dc+1
+			if (g[0:2]=="28"):
+				print dc,") ",g
+				readDS18B20(g)
+				dl.append(g)
+				dc=dc+1
diff --git a/tools_cmd/IB10E64.dll b/tools_cmd/IB10E64.dll
deleted file mode 100644
index 41580e1..0000000
Binary files a/tools_cmd/IB10E64.dll and /dev/null differ
diff --git a/tools_cmd/IB97E64.dll b/tools_cmd/IB97E64.dll
deleted file mode 100644
index db02450..0000000
Binary files a/tools_cmd/IB97E64.dll and /dev/null differ
diff --git a/tools_cmd/IB97U64.dll b/tools_cmd/IB97U64.dll
deleted file mode 100644
index 1a29cd7..0000000
Binary files a/tools_cmd/IB97U64.dll and /dev/null differ
diff --git a/tools_cmd/IBFS64.dll b/tools_cmd/IBFS64.dll
deleted file mode 100644
index d81a266..0000000
Binary files a/tools_cmd/IBFS64.dll and /dev/null differ
diff --git a/tools_cmd/IBUSB64.dll b/tools_cmd/IBUSB64.dll
deleted file mode 100644
index 9c1403c..0000000
Binary files a/tools_cmd/IBUSB64.dll and /dev/null differ
diff --git a/tools_cmd/ib90usb.dll b/tools_cmd/ib90usb.dll
deleted file mode 100644
index ca0f069..0000000
Binary files a/tools_cmd/ib90usb.dll and /dev/null differ
diff --git a/tools_cmd/ib97e32.dll b/tools_cmd/ib97e32.dll
deleted file mode 100644
index 6e6db4b..0000000
Binary files a/tools_cmd/ib97e32.dll and /dev/null differ
diff --git a/tools_cmd/ib97u32.dll b/tools_cmd/ib97u32.dll
deleted file mode 100644
index c08f1f4..0000000
Binary files a/tools_cmd/ib97u32.dll and /dev/null differ
diff --git a/tools_cmd/ibfs32.dll b/tools_cmd/ibfs32.dll
deleted file mode 100644
index bced541..0000000
Binary files a/tools_cmd/ibfs32.dll and /dev/null differ
diff --git a/tools_cmd/ibtmjava.dll b/tools_cmd/ibtmjava.dll
deleted file mode 100644
index c1a4d85..0000000
Binary files a/tools_cmd/ibtmjava.dll and /dev/null differ
diff --git a/tools_cmd/ibtmjava64.dll b/tools_cmd/ibtmjava64.dll
deleted file mode 100644
index be0c59d..0000000
Binary files a/tools_cmd/ibtmjava64.dll and /dev/null differ
diff --git a/tools_cmd/ibusb32.dll b/tools_cmd/ibusb32.dll
deleted file mode 100644
index 772fa8d..0000000
Binary files a/tools_cmd/ibusb32.dll and /dev/null differ
diff --git a/tools_cmd/owtools.sdf b/tools_cmd/owtools.sdf
deleted file mode 100644
index 367c2e9..0000000
Binary files a/tools_cmd/owtools.sdf and /dev/null differ
diff --git a/tools_cmd/owtools.sln b/tools_cmd/owtools.sln
deleted file mode 100644
index a00b8e7..0000000
--- a/tools_cmd/owtools.sln
+++ /dev/null
@@ -1,22 +0,0 @@
-
-Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio 2013
-VisualStudioVersion = 12.0.30501.0
-MinimumVisualStudioVersion = 10.0.40219.1
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "rwOW", "rwOW\rwOW.vcxproj", "{5D2435E4-D963-4533-AC3B-C4E0F2C251DB}"
-EndProject
-Global
-	GlobalSection(SolutionConfigurationPlatforms) = preSolution
-		Debug|Win32 = Debug|Win32
-		Release|Win32 = Release|Win32
-	EndGlobalSection
-	GlobalSection(ProjectConfigurationPlatforms) = postSolution
-		{5D2435E4-D963-4533-AC3B-C4E0F2C251DB}.Debug|Win32.ActiveCfg = Debug|Win32
-		{5D2435E4-D963-4533-AC3B-C4E0F2C251DB}.Debug|Win32.Build.0 = Debug|Win32
-		{5D2435E4-D963-4533-AC3B-C4E0F2C251DB}.Release|Win32.ActiveCfg = Release|Win32
-		{5D2435E4-D963-4533-AC3B-C4E0F2C251DB}.Release|Win32.Build.0 = Release|Win32
-	EndGlobalSection
-	GlobalSection(SolutionProperties) = preSolution
-		HideSolutionNode = FALSE
-	EndGlobalSection
-EndGlobal