#include <avr/wdt.h>\r
#include <avr/sleep.h>\r
#include <avr/pgmspace.h>\r
+#include "../common/I2C/TWI_Master.h"\r
\r
extern void OWINIT();\r
extern void EXTERN_SLEEP();\r
#error "Variable not correct"\r
#endif\r
\r
-extern uint8_t mode;\r
+extern volatile uint8_t mode;\r
extern uint8_t gcontrol;\r
extern uint8_t reset_indicator;\r
extern uint8_t alarmflag;\r
\r
\r
+\r
+#if defined(__AVR_ATtiny24__)||defined(__AVR_ATtiny44__) || defined(__AVR_ATtiny84__) || defined(__AVR_ATtiny24A__)||defined(__AVR_ATtiny44A__) || defined(__AVR_ATtiny84A__)\r
+ISR(WATCHDOG_vect) {\r
+ #else\r
+ ISR(WDT_vect) {\r
+ // mode=0;\r
+ #endif\r
+ //wdcounter++;\r
+ if (reset_indicator==1) reset_indicator++;\r
+ else if (reset_indicator==2) mode=0;\r
+ }\r
+\r
+\r
typedef union {\r
volatile uint8_t bytes[0x20];\r
struct {\r
volatile pack_t pack;\r
\r
\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
-\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
\r
int main(void){\r
pack.HD=0xFF;\r
pack.LD=0x00;\r
pack.VCCP=0;\r
+ MCUCR &=~(1<<PUD); //All Pins Pullup...\r
+ MCUCR |=(1<<BODS);\r
+ MCUSR=0;\r
\r
- PORTA=0xFF;\r
- PORTB=0xFF;\r
\r
- OWINIT();\r
\r
+ OWINIT();\r
+ DDRC=0xFF;\r
+ DDRB=0xFF;\r
+ DDRD=0xFF-(1<<PIND2);\r
+ PORTB=0xFF;\r
+ PORTC=0xFF;\r
+ PORTD=0xFF-(1<<PIND2);\r
+ PRR=0xCF;\r
+ \r
MCUCR &=~(1<<PUD); //All Pins Pullup...\r
- MCUCR |=(1<<BODS);\r
+ //MCUCR |=(1<<BODS);\r
//PORTA&=~((1<<PINA0)|(1<<PINA1)|(1<<PINA2)|(1<<PINA3));\r
\r
- ADCSRA=(1<<ADEN)|(1<ADPS0)|(1<<ADPS2);\r
+ //ADCSRA=(1<<ADEN)|(1<ADPS0)|(1<<ADPS2);\r
\r
\r
- \r
+ WDTCSR |= (1<<WDCE) |(1<<WDE); // Enable the WD Change Bit//| (1<<WDE)\r
+ WDTCSR = (1<<WDIE) | // Enable WDT Interrupt\r
+ (1<<WDP2) | (1<<WDP0); // Set Timeout to ~8 seconds\r
gcontrol=1;\r
ADCSRB|=(1<<ADLAR); \r
sei();\r
}\r
\r
uint8_t bb=1;\r
- for(uint8_t i=0;i<4;i++) {\r
+ for(volatile uint8_t i=0;i<4;i++) {\r
if (pack.bytes[8+i*2]&0x80) { //Chanel as output\r
if (pack.bytes[8+i*2]&0x40) {\r
- DDRA|=bb;\r
+ // AD_DDR|=bb;\r
} else {\r
- DDRA&=~bb;\r
+ cli();\r
+ // AD_DDR&=~bb;\r
+ sei();\r
}\r
} else {\r
- DDRA&=~bb;\r
+ cli();\r
+ // AD_DDR&=~bb;\r
+ sei();\r
}\r
bb=bb*2;\r
}\r
\r
+\r
+#if defined(__AVR_ATmega168__)||defined(__AVR_ATmega168A__) ||defined(__AVR_ATmega328__) ||defined(__AVR_ATmega328P__) ||defined(__AVR_ATmega328PB__) \r
+ if (((TIMSK0 & (1<<TOIE0))==0)&& (mode==0)){\r
+ //if ( mode==0){\r
+ SMCR|=(1<<SE)|(1<<SM1);\r
+ EICRA&=~(1<<ISC01);\r
+ } else {\r
+ SMCR|=(1<<SE);\r
+ SMCR&=~(1<<SM1);\r
+ }\r
+ asm("SLEEP");\r
+#else\r
+\r
#if defined(__AVR_ATtiny25__)||defined(__AVR_ATtiny45__) || defined(__AVR_ATtiny85__)\r
if (((TIMSK & (1<<TOIE0))==0)&& (mode==0))\r
#endif \r
-#if defined(__AVR_ATtiny24__)||defined(__AVR_ATtiny44__) || defined(__AVR_ATtiny84__) ||defined(__AVR_ATtiny24A__)||defined(__AVR_ATtiny44A__) || defined(__AVR_ATtiny84A__)\r
+#if defined(__AVR_ATtiny24__)||defined(__AVR_ATtiny44__) || defined(__AVR_ATtiny84__) ||defined(__AVR_ATtiny24A__)||defined(__AVR_ATtiny44A__) || defined(__AVR_ATtiny84A__) \r
if (((TIMSK0 & (1<<TOIE0))==0)&& (mode==0))\r
#endif\r
{\r
\r
MCUCR|=(1<<SE)|(1<<SM1);\r
+ MCUCR&=~(1<<SM0);\r
MCUCR&=~(1<<ISC01);\r
} else {\r
MCUCR|=(1<<SE);\r
MCUCR&=~(1<<SM1);\r
}\r
- // asm("SLEEP");\r
+ asm("SLEEP");\r
+#endif\r
}\r
\r
\r