+#ifndef OWSLAVE_TOOLS_H\r
+#define OWSLAVE_TOOLS_H\r
+\r
+#if defined(__AVR_ATtiny44__) || defined(__AVR_ATtiny84__) || defined(__AVR_ATtiny24A__)||defined(__AVR_ATtiny44A__) || defined(__AVR_ATtiny84A__)\r
+#define OWST_INIT_ALL_OFF \\r
+ PRR|=(1<<PRUSI)|(1<<PRADC); /*Switch off usi and adc for save Power*/\\r
+ ACSR|=(1<<ACD); /*Disable Comparator*/\\r
+ ADCSRB|=(1<<ACME); /*Disable Analog multiplexer*/\\r
+ PORTB|=~(1<<PINB2)|(1<<PORTB0); /*Make PullUp an all Pins but not OW_PIN*/\\r
+ /*Schalter kann gegen Masse sein und zieht dann immer Strom*/ \\r
+ DDRB|=(1<<PORTB0); /*Als Ausgang und 0*/\\r
+ PORTA|=0xFF;\r
+\r
+#define OWST_INIT_ADC_ON \\r
+PRR|=(1<<PRUSI); /*Switch off usi and adc for save Power*/\\r
+ACSR|=(1<<ACD); /*Disable Comparator*/\\r
+PORTB=~((1<<PINB2)|(1<<PORTB0)); /*Make PullUp an all Pins but not OW_PIN*/\\r
+/*Schalter kann gegen Masse sein und zieht dann immer Strom*/ \\r
+DDRB|=(1<<PORTB0); /*Als Ausgang und 0*/\\r
+PORTA|=0xFF; \r
+\r
+#define OWST_INIT_USI_ON \\r
+PRR|=(1<<PRADC); /*Switch off usi and adc for save Power*/\\r
+ACSR|=(1<<ACD); /*Disable Comparator*/\\r
+ADCSRB|=(1<<ACME); /*Disable Analog multiplexer*/\\r
+PORTB|=~(1<<PINB2)|(1<<PORTB0); /*Make PullUp an all Pins but not OW_PIN*/\\r
+/*Schalter kann gegen Masse sein und zieht dann immer Strom*/ \\r
+DDRB|=(1<<PORTB0); /*Als Ausgang und 0*/\\r
+PORTA|=0xFF;\r
+\r
+#define OWST_INIT_ALL_ON \\r
+PORTB|=~(1<<PINB2)|(1<<PORTB0); /*Make PullUp an all Pins but not OW_PIN*/\\r
+/*Schalter kann gegen Masse sein und zieht dann immer Strom*/ \\r
+DDRB|=(1<<PORTB0); /*Als Ausgang und 0*/\\r
+PORTA|=0xFF;\r
+\r
+ \r
+#define OWST_EN_PULLUP MCUCR &=~(1<<PUD); /*All Pins Pullup...*/\r
+\r
+#define OWST_WDT_ISR \\r
+uint8_t wdcounter=0;\\r
+ISR(WATCHDOG_vect) {/* #else ISR(WDT_vect) { #endif*/\\r
+ wdcounter++;\\r
+ if (reset_indicator==1) reset_indicator++;\\r
+ else if (reset_indicator==2) mode=0;\\r
+}\r
+\r
+#define OWST_WDR_CONFIG8\\r
+ WDTCSR |= ((1<<WDCE) ); /* Enable the WD Change Bit//| (1<<WDE)*/\\r
+ WDTCSR |= (1<<WDIE) | /* Enable WDT Interrupt*/\\r
+ (1<<WDP3) | (1<<WDP0); /*Set Timeout to ~8 seconds*/\r
+\r
+#define OWST_WDR_CONFIG4\\r
+ WDTCSR |= ((1<<WDCE) ); /* Enable the WD Change Bit//| (1<<WDE)*/\\r
+ WDTCSR |= (1<<WDIE) | /* Enable WDT Interrupt*/\\r
+ (1<<WDP3) ; /*Set Timeout to ~2 seconds*/\r
+\r
+#define OWST_WDR_CONFIG2\\r
+ WDTCSR |= ((1<<WDCE) ); /* Enable the WD Change Bit//| (1<<WDE)*/\\r
+ WDTCSR |= (1<<WDIE) | /* Enable WDT Interrupt*/\\r
+ (1<<WDP2) | (1<<WDP1)| (1<<WDP0); /*Set Timeout to ~1 seconds*/\r
+\r
+#define OWST_WDR_CONFIG1\\r
+ WDTCSR |= ((1<<WDCE) ); /* Enable the WD Change Bit//| (1<<WDE)*/\\r
+ WDTCSR |= (1<<WDIE) | /* Enable WDT Interrupt*/\\r
+ (1<<WDP2) | (1<<WDP1); /*Set Timeout to ~1 seconds*/\r
+\r
+\r
+#define OWST_TESTSW \\r
+ int testSW(void) {\\r
+ uint8_t r;\\r
+ DDRB&=~(1<<PORTB0); /*Eingang*/\\r
+ __asm__ __volatile__ ("nop");\\r
+ PORTB|=(1<<PORTB0); /*Pullup*/\\r
+ __asm__ __volatile__ ("nop");\\r
+ __asm__ __volatile__ ("nop");\\r
+ __asm__ __volatile__ ("nop");\\r
+ __asm__ __volatile__ ("nop");\\r
+ __asm__ __volatile__ ("nop");\\r
+ r=PINB&(1<<PORTB0);\\r
+ __asm__ __volatile__ ("nop");\\r
+ PORTB&=~(1<<PORTB0);\\r
+ __asm__ __volatile__ ("nop");\\r
+ DDRB|=(1<<PORTB0); /*Eingang*/\\r
+ return (r==0);\\r
+ }\\r
+\r
+#define OWST_EXTERN_VARS\r
+extern uint8_t mode;\\r
+extern uint8_t gcontrol;\\r
+extern uint8_t reset_indicator;\\r
+extern uint8_t alarmflag; \\r
+extern void OWINIT(void);\\r
+extern void EXTERN_SLEEP(void);\\r
+\r
+\r
+\r
+#define OWST_MAIN_END \\r
+ if (((TIMSK0 & (1<<TOIE0))==0)&& (mode==0)) {\\r
+ MCUCR|=(1<<SE)|(1<<SM1);\\r
+ MCUCR&=~(1<<ISC01);\\r
+ } else {\\r
+ MCUCR|=(1<<SE);\\r
+ MCUCR&=~(1<<SM1);\\r
+ }\\r
+ asm("SLEEP");\r
+\r
+#endif\r
+\r
+//********************** AD_WANDLER ********************************\r
+//******************************************************************\r
+//clock fuer ADC 50kHz - 200kHz 8M / 128 = 62500 = 4M/64 erste Messng 25 = 0,4ms / zweite Messung 13 rund 0,21ms\r
+#ifdef __4MHZ__\r
+#define OWST_INIT_ADC \\r
+ADCSRA = (1<<ADEN)|(1<<ADPS2)|(1<<ADPS1);\r
+#else\r
+#define OWST_INIT_ADC \\r
+ADCSRA = (1<<ADEN)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0);\r
+#endif\r
+\r
+#define OWST_ADC_CONF ADCSRA|=(1<<ADSC); while ((ADCSRA&(1<<ADSC)));\r
+\r
+#define OWST_ADCREF_VCC 0\r
+#define OWST_ADCREF_AREF (1<<REFS0)\r
+#define OWST_ADCREF_INT ((1<<REFS0)|(1<<REFS1))\r
+\r
+#define OWST_ADCIN_PA0 0\r
+#define OWST_ADCIN_PA1 1\r
+#define OWST_ADCIN_PA2 2\r
+#define OWST_ADCIN_PA3 3\r
+#define OWST_ADCIN_PA4 4\r
+#define OWST_ADCIN_PA5 5\r
+#define OWST_ADCIN_PA6 6\r
+#define OWST_ADCIN_PA7 7\r
+\r
+\r
+#if defined(__AVR_ATtiny44__) || defined(__AVR_ATtiny84__) || defined(__AVR_ATtiny24A__)||defined(__AVR_ATtiny44A__) || defined(__AVR_ATtiny84A__)\r
+#define OWST_ADCIN_REFINT 0b0100001\r
+#endif\r
+#if defined(__AVR_ATmega168__)||defined(__AVR_ATmega168A__) ||defined(__AVR_ATmega328__) ||defined(__AVR_ATmega328P__) ||defined(__AVR_ATmega328PB__)\r
+#define OWST_ADCIN_REFINT 0b00001110\r
+#endif\r
+#if defined(__AVR_ATtiny24__)||defined(__AVR_ATtiny44__) || defined(__AVR_ATtiny84__)||defined(__AVR_ATtiny24A__)||defined(__AVR_ATtiny44A__) || defined(__AVR_ATtiny84A__)\r
+#define AD_PORT PORTA\r
+#define AD_DDR DDRA\r
+#endif\r
+\r
+#if defined(__AVR_ATmega168__)||defined(__AVR_ATmega168A__) ||defined(__AVR_ATmega328__) ||defined(__AVR_ATmega328P__) ||defined(__AVR_ATmega328PB__)\r
+#define AD_PORT PORTC\r
+#define AD_DDR DDRC\r
+#endif\r
+\r
+#define OWST_ADC_CONF16_FUNC \\r
+uint16_t owst_ADC_run() {/*14,5ms*/\\r
+ uint16_t r=0;\\r
+ for(uint8_t i=0;i<64;i++) { OWST_ADC_CONF r+=ADC; }\\r
+ return r;\\r
+} \\r
+double owst_ADC_runf() {/*16,5ms*/\\r
+ double r=0;\\r
+ for(uint8_t i=0;i<64;i++) { OWST_ADC_CONF r+=ADC; }\\r
+ r*=0.9993;\\r
+ return r;\\r
+}\r
+\r
+#define OWST_ADC_CONF16_OSS_FUNC \\r
+uint16_t owst_ADC_OSS_run() {/*896ms*/\\r
+ uint32_t r=0;\\r
+ for(uint16_t i=0;i<4096;i++) {\\r
+ OWST_ADC_CONF \\r
+ r+=ADC;\\r
+ }\\r
+ return r>>6;\\r
+} \\r
+double owst_ADC_OSS_runf() {/*964ms*/\\r
+ double r=0;\\r
+ for(uint16_t i=0;i<4096;i++) {\\r
+ OWST_ADC_CONF \\r
+ r+=ADC;\\r
+ }\\r
+ r+=5150;\\r
+ r*=0.9993;\\r
+ return r/64.0;\\r
+} \r
+\r
+\r
+#endif
\ No newline at end of file