1 | #define F_CPU 4000000 // Frequenz = 8 MHz
|
2 |
|
3 | #define Abschaltzeit 600
|
4 |
|
5 | #define key_SOS PD3 // Taste SOS
|
6 | #define key_ON PD2 // Taste ON
|
7 | #define key_UP PD1 // Taste UP
|
8 | #define key_DOWN PD0 // Taste Down
|
9 |
|
10 | #define XPE_1_an PORTB |= (1<<PB0) // HighPowerLED 1 an
|
11 | #define XPE_2_an PORTB |= (1<<PB1) // HighPowerLED 2 an
|
12 | #define XPE_3_an PORTB |= (1<<PB2) // HighPowerLED 3 an
|
13 | #define XPE_4_an PORTB |= (1<<PB3) // HighPowerLED 4 an
|
14 |
|
15 | #define XPE_1_aus PORTB &= ~(1<<PB0) // HighPowerLED 1 aus
|
16 | #define XPE_2_aus PORTB &= ~(1<<PB1) // HighPowerLED 2 aus
|
17 | #define XPE_3_aus PORTB &= ~(1<<PB2) // HighPowerLED 3 aus
|
18 | #define XPE_4_aus PORTB &= ~(1<<PB3) // HighPowerLED 4 aus
|
19 |
|
20 | #define Alarm_an PORTB |= (1<<PB4) // Summer an
|
21 | #define Alarm_aus PORTB &= ~(1<<PB4) // Summer aus
|
22 |
|
23 |
|
24 | #include <avr/io.h> // Library für die I/O (Ports & Pins)
|
25 | #include <avr/wdt.h> // Library für den Watchdog
|
26 | #include <avr/sleep.h> // Library für den Schlaf Modus
|
27 | #include <avr/interrupt.h> // Library für die Interrupts
|
28 | #include <util/delay.h> // Library für Delay
|
29 | #include <stdint.h> // Benötigt Library für Uint16_t Werte
|
30 |
|
31 |
|
32 | volatile char Helligkeit; // Variable für die Helligkeit aller HighPowerLED´s
|
33 | volatile uint16_t Auto_Off;
|
34 |
|
35 |
|
36 | void SOS();
|
37 |
|
38 | int main(void)
|
39 | {
|
40 |
|
41 |
|
42 | OCR0A = 0x4D; // Legt den Wert des Überlaufes fest
|
43 | TCCR0A = 0x02; // Clear Timer on Compare Match (CTC) Modus
|
44 | TIFR |= 0x01; // Clear Interrupt Flag
|
45 | TIMSK = 0x01; // TC0 compare match A interrupt enable
|
46 | TCCR0B = 0x05; // Prescaler auf 1024 setzen (F_CPU/1024)
|
47 | GIMSK |= (1<<INT0); // Interrupt "INT0" aktivieren
|
48 | MCUCR |= (1<<ISC01);// auf fallende Flanke an "INT0" reagieren
|
49 | sei(); // Interrupts global aktivieren
|
50 |
|
51 | while(1)
|
52 | {
|
53 |
|
54 |
|
55 |
|
56 | if (Auto_Off == Abschaltzeit) // Ist Auto_Off = 60000, dann schlafen!
|
57 |
|
58 | {
|
59 | XPE_1_aus;
|
60 | XPE_2_aus;
|
61 | XPE_3_aus;
|
62 | XPE_4_aus;
|
63 | set_sleep_mode(SLEEP_MODE_IDLE);
|
64 | sleep_mode();
|
65 | }
|
66 |
|
67 |
|
68 |
|
69 | }// Ende While
|
70 |
|
71 | }// Ende Main
|
72 |
|
73 |
|
74 | ISR(TIMER0_COMPA_vect) // Sorgt dafür das die Akkus / Batterien geschont werden! (Abschaltung nach ca. 10 min.)
|
75 |
|
76 | {
|
77 | Auto_Off = Auto_Off+1; // Jede 10ms Auto_Off um 1 erhöhen!
|
78 | }
|
79 |
|
80 |
|
81 | ISR(INT0_vect)
|
82 |
|
83 | {
|
84 | Auto_Off =0;
|
85 | static char LED_Status; // Wertet den Status der LED´s aus (AN / AUS ?)
|
86 |
|
87 |
|
88 | if (LED_Status == 1)
|
89 | {
|
90 | XPE_1_aus;
|
91 | XPE_2_aus;
|
92 | XPE_3_aus;
|
93 | XPE_4_aus;
|
94 | LED_Status =0;
|
95 | }
|
96 | else
|
97 |
|
98 | {
|
99 | XPE_1_an;
|
100 | XPE_2_an;
|
101 | XPE_3_an;
|
102 | XPE_4_an;
|
103 | LED_Status =1;
|
104 | }
|
105 |
|
106 |
|
107 |
|
108 | }
|