extern uint8_t reset_indicator;\r
\r
\r
-volatile uint8_t wdcounter;\r
+\r
\r
\r
\r
volatile counters_t counters;\r
\r
volatile uint8_t istat;\r
-\r
+volatile uint8_t changefromeeprom;\r
#define PCINT_VECTOR PCINT0_vect\r
#define PIN_REG PINA\r
#define PIN_DDR DDRA\r
if (((PIN_REG&PIN_CH1)==0)&&((istat&PIN_CH1)==PIN_CH1)) { counters.c32[1]++; LPORT_CH2|=LPIN_CH2;}\r
if (((PIN_REG&PIN_CH2)==0)&&((istat&PIN_CH2)==PIN_CH2)) { counters.c32[2]++; LPORT_CH2|=LPIN_CH2;}\r
if (((PIN_REG&PIN_CH3)==0)&&((istat&PIN_CH3)==PIN_CH3)) { counters.c32[3]++; LPORT_CH2|=LPIN_CH2;}\r
-\r
- if (((PORT_EE&PIN_EE)==0)&&((istat&PIN_EE)==PIN_EE)) {\r
+ changefromeeprom=1;\r
+/* if (((PORT_EE&PIN_EE)==0)&&((istat&PIN_EE)==PIN_EE)) {\r
\r
_delay_ms(50);\r
if (((PORT_EE&PIN_EE)==0)) {\r
\r
}\r
GIFR|=(1<<PCIF0);\r
- }\r
+ }*/\r
if ((((PINA&(1<<PINA6)))==0)&&((istat&(1<<PINA6))==(1<<PINA6))) {\r
_delay_ms(100);\r
if (((PINA&(1<<PINA6)))==0) {\r
\r
}\r
\r
-\r
+ISR(ANA_COMP_vect) {\r
+ if (changefromeeprom==0) return;\r
+ if ((ACSR&(1<<ACO))!=0) {\r
+ _delay_ms(5);\r
+ if ((ACSR&(1<<ACO))!=0) {\r
+ CLKPR=0x80;//Switch to 4 MHz\r
+ CLKPR=01;\r
+ \r
+ PORTB|=(1<<PINB1);\r
+ EEARH=0;\r
+ for(uint8_t i=0;i<16;i++) {\r
+ uint8_t addr=i^0x0C;\r
+ while(EECR & (1<<EEPE));\r
+ EECR = (0<<EEPM1)|(0<<EEPM0);\r
+ EEARL = i;\r
+ EEDR = counters.c8[addr];\r
+ EECR |= (1<<EEMPE);\r
+ EECR |= (1<<EEPE);\r
+ }\r
+ changefromeeprom=0;\r
+ PORTB&=~(1<<PINB1);\r
+ CLKPR=0x80;\r
+ CLKPR=0;\r
+ GIFR|=(1<<INTF0);\r
+ }\r
+ }\r
+ \r
+}\r
int main(void){\r
PRR|=(1<<PRUSI)|(1<<PRADC); //Switch off usi and adc for save Power\r
OWINIT();\r
EECR |= (1<<EERE);\r
counters.c8[addr]=EEDR;\r
}\r
+ changefromeeprom=0; //Daten neu eingelesen\r
for (uint8_t i=0;i<4;i++) {\r
- if (counters.c32[i]==0xFFFFFFFF) counters.c32[i]=0;\r
+ if (counters.c32[i]==0xFFFFFFFF) {\r
+ counters.c32[i]=0;\r
+ changefromeeprom=1; //Daten geaendert\r
+ }\r
//counters.c32[i]=0;\r
}\r
\r
- \r
+ DIDR0|=(1<<ADC0D); // Disable Digital input AD0\r
+ ACSR&=~(1<<ACD); //Enable Comperator\r
+ ADCSRB|=(1<<ACME); // Set other negative input\r
+ ADCSRA&=~(1<<ADEN); //Disable A/D for change the negetive comperator input\r
+ ADMUX&=~((1<<MUX0)|(1<<MUX1)|(1<<MUX2)|(1<<MUX3)|(1<<MUX4)|(1<<MUX5)); //Set do ADC0\r
+ ACSR|=(1<<ACIE)|(1<<ACIS1)|(1<<ACIS0)|(1<<ACBG); //Enabble comperator interrupt Rising edge....(1<<ACIS0)\r
+ \r
sei();\r
while(1) {\r
if (LPORT_CH2&LPIN_CH2) {\r
_delay_ms(50);\r
LPORT_CH2&=~LPIN_CH2;\r
}\r
- //Test if timer active and no sleep then Idle else Power Down\r
- if (TEST_TIMER&&(mode==0)) {\r
- MCUCR|=(1<<SE)|(1<<SM1); //Power Down, only low level on 1-Wire and pin change on PCINT wakes up\r
- MCUCR&=~(1<<ISC01);\r
- } else {\r
- MCUCR|=(1<<SE);\r
- MCUCR&=~(1<<SM1); \r
- }\r
+ MCUCR|=(1<<SE);\r
+ MCUCR&=~(1<<SM1);\r
asm("SLEEP");\r
+ \r
}\r
}
\ No newline at end of file