1 #ifndef OWSLAVE_TOOLS_H
\r
2 #define OWSLAVE_TOOLS_H
\r
4 #if defined(__AVR_ATtiny44__) || defined(__AVR_ATtiny84__) || defined(__AVR_ATtiny24A__)||defined(__AVR_ATtiny44A__) || defined(__AVR_ATtiny84A__)
\r
5 #define OWST_INIT_ALL_OFF \
\r
6 PRR|=(1<<PRUSI)|(1<<PRADC); /*Switch off usi and adc for save Power*/\
\r
7 ACSR|=(1<<ACD); /*Disable Comparator*/\
\r
8 ADCSRB|=(1<<ACME); /*Disable Analog multiplexer*/\
\r
9 PORTB|=~(1<<PINB2)|(1<<PORTB0); /*Make PullUp an all Pins but not OW_PIN*/\
\r
10 /*Schalter kann gegen Masse sein und zieht dann immer Strom*/ \
\r
11 DDRB|=(1<<PORTB0); /*Als Ausgang und 0*/\
\r
14 #define OWST_INIT_ADC_ON \
\r
15 PRR|=(1<<PRUSI); /*Switch off usi and adc for save Power*/\
\r
16 ACSR|=(1<<ACD); /*Disable Comparator*/\
\r
17 PORTB=~((1<<PINB2)|(1<<PORTB0)); /*Make PullUp an all Pins but not OW_PIN*/\
\r
18 /*Schalter kann gegen Masse sein und zieht dann immer Strom*/ \
\r
19 DDRB|=(1<<PORTB0); /*Als Ausgang und 0*/\
\r
22 #define OWST_INIT_USI_ON \
\r
23 PRR|=(1<<PRADC); /*Switch off usi and adc for save Power*/\
\r
24 ACSR|=(1<<ACD); /*Disable Comparator*/\
\r
25 ADCSRB|=(1<<ACME); /*Disable Analog multiplexer*/\
\r
26 PORTB|=~(1<<PINB2)|(1<<PORTB0); /*Make PullUp an all Pins but not OW_PIN*/\
\r
27 /*Schalter kann gegen Masse sein und zieht dann immer Strom*/ \
\r
28 DDRB|=(1<<PORTB0); /*Als Ausgang und 0*/\
\r
31 #define OWST_INIT_ALL_ON \
\r
32 PORTB|=~(1<<PINB2)|(1<<PORTB0); /*Make PullUp an all Pins but not OW_PIN*/\
\r
33 /*Schalter kann gegen Masse sein und zieht dann immer Strom*/ \
\r
34 DDRB|=(1<<PORTB0); /*Als Ausgang und 0*/\
\r
38 #define OWST_EN_PULLUP MCUCR &=~(1<<PUD); /*All Pins Pullup...*/
\r
40 #define OWST_WDT_ISR \
\r
41 uint8_t wdcounter=0;\
\r
42 ISR(WATCHDOG_vect) {/* #else ISR(WDT_vect) { #endif*/\
\r
44 if (reset_indicator==1) reset_indicator++;\
\r
45 else if (reset_indicator==2) mode=0;\
\r
48 #define OWST_WDR_CONFIG8\
\r
49 WDTCSR |= ((1<<WDCE) ); /* Enable the WD Change Bit//| (1<<WDE)*/\
\r
50 WDTCSR |= (1<<WDIE) | /* Enable WDT Interrupt*/\
\r
51 (1<<WDP3) | (1<<WDP0); /*Set Timeout to ~8 seconds*/
\r
53 #define OWST_WDR_CONFIG4\
\r
54 WDTCSR |= ((1<<WDCE) ); /* Enable the WD Change Bit//| (1<<WDE)*/\
\r
55 WDTCSR |= (1<<WDIE) | /* Enable WDT Interrupt*/\
\r
56 (1<<WDP3) ; /*Set Timeout to ~2 seconds*/
\r
58 #define OWST_WDR_CONFIG2\
\r
59 WDTCSR |= ((1<<WDCE) ); /* Enable the WD Change Bit//| (1<<WDE)*/\
\r
60 WDTCSR |= (1<<WDIE) | /* Enable WDT Interrupt*/\
\r
61 (1<<WDP2) | (1<<WDP1)| (1<<WDP0); /*Set Timeout to ~1 seconds*/
\r
63 #define OWST_WDR_CONFIG1\
\r
64 WDTCSR |= ((1<<WDCE) ); /* Enable the WD Change Bit//| (1<<WDE)*/\
\r
65 WDTCSR |= (1<<WDIE) | /* Enable WDT Interrupt*/\
\r
66 (1<<WDP2) | (1<<WDP1); /*Set Timeout to ~1 seconds*/
\r
69 #define OWST_TESTSW \
\r
72 DDRB&=~(1<<PORTB0); /*Eingang*/\
\r
73 __asm__ __volatile__ ("nop");\
\r
74 PORTB|=(1<<PORTB0); /*Pullup*/\
\r
75 __asm__ __volatile__ ("nop");\
\r
76 __asm__ __volatile__ ("nop");\
\r
77 __asm__ __volatile__ ("nop");\
\r
78 __asm__ __volatile__ ("nop");\
\r
79 __asm__ __volatile__ ("nop");\
\r
80 r=PINB&(1<<PORTB0);\
\r
81 __asm__ __volatile__ ("nop");\
\r
82 PORTB&=~(1<<PORTB0);\
\r
83 __asm__ __volatile__ ("nop");\
\r
84 DDRB|=(1<<PORTB0); /*Eingang*/\
\r
88 #define OWST_EXTERN_VARS
\r
89 extern uint8_t mode;\
\r
90 extern uint8_t gcontrol;\
\r
91 extern uint8_t reset_indicator;\
\r
92 extern uint8_t alarmflag; \
\r
93 extern void OWINIT(void);\
\r
94 extern void EXTERN_SLEEP(void);\
\r
98 #define OWST_MAIN_END \
\r
99 if (((TIMSK0 & (1<<TOIE0))==0)&& (mode==0)) {\
\r
100 MCUCR|=(1<<SE)|(1<<SM1);\
\r
101 MCUCR&=~(1<<ISC01);\
\r
110 //********************** AD_WANDLER ********************************
\r
111 //******************************************************************
\r
112 //clock fuer ADC 50kHz - 200kHz 8M / 128 = 62500 = 4M/64 erste Messng 25 = 0,4ms / zweite Messung 13 rund 0,21ms
\r
114 #define OWST_INIT_ADC \
\r
115 ADCSRA = (1<<ADEN)|(1<<ADPS2)|(1<<ADPS1);
\r
117 #define OWST_INIT_ADC \
\r
118 ADCSRA = (1<<ADEN)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0);
\r
121 #define OWST_ADC_CONF ADCSRA|=(1<<ADSC); while ((ADCSRA&(1<<ADSC)));
\r
123 #define OWST_ADCREF_VCC 0
\r
124 #define OWST_ADCREF_AREF (1<<REFS0)
\r
125 #define OWST_ADCREF_INT ((1<<REFS0)|(1<<REFS1))
\r
127 #define OWST_ADCIN_PA0 0
\r
128 #define OWST_ADCIN_PA1 1
\r
129 #define OWST_ADCIN_PA2 2
\r
130 #define OWST_ADCIN_PA3 3
\r
131 #define OWST_ADCIN_PA4 4
\r
132 #define OWST_ADCIN_PA5 5
\r
133 #define OWST_ADCIN_PA6 6
\r
134 #define OWST_ADCIN_PA7 7
\r
137 #if defined(__AVR_ATtiny44__) || defined(__AVR_ATtiny84__) || defined(__AVR_ATtiny24A__)||defined(__AVR_ATtiny44A__) || defined(__AVR_ATtiny84A__)
\r
138 #define OWST_ADCIN_REFINT 0b0100001
\r
140 #if defined(__AVR_ATmega168__)||defined(__AVR_ATmega168A__) ||defined(__AVR_ATmega328__) ||defined(__AVR_ATmega328P__) ||defined(__AVR_ATmega328PB__)
\r
141 #define OWST_ADCIN_REFINT 0b00001110
\r
143 #if defined(__AVR_ATtiny24__)||defined(__AVR_ATtiny44__) || defined(__AVR_ATtiny84__)||defined(__AVR_ATtiny24A__)||defined(__AVR_ATtiny44A__) || defined(__AVR_ATtiny84A__)
\r
144 #define AD_PORT PORTA
\r
145 #define AD_DDR DDRA
\r
148 #if defined(__AVR_ATmega168__)||defined(__AVR_ATmega168A__) ||defined(__AVR_ATmega328__) ||defined(__AVR_ATmega328P__) ||defined(__AVR_ATmega328PB__)
\r
149 #define AD_PORT PORTC
\r
150 #define AD_DDR DDRC
\r
153 #define OWST_ADC_CONF16_FUNC \
\r
154 uint16_t owst_ADC_run() {/*14,5ms*/\
\r
156 for(uint8_t i=0;i<64;i++) { OWST_ADC_CONF r+=ADC; }\
\r
159 double owst_ADC_runf() {/*16,5ms*/\
\r
161 for(uint8_t i=0;i<64;i++) { OWST_ADC_CONF r+=ADC; }\
\r
166 #define OWST_ADC_CONF16_OSS_FUNC \
\r
167 uint16_t owst_ADC_OSS_run() {/*896ms*/\
\r
169 for(uint16_t i=0;i<4096;i++) {\
\r
175 double owst_ADC_OSS_runf() {/*964ms*/\
\r
177 for(uint16_t i=0;i<4096;i++) {\
\r