Subversion Repositories Projects

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
282 grottenfli 1
 
2
 
3
#include <avr/io.h>
4
#include <util/delay.h>
5
#include <stdint.h>
6
#include <avr/interrupt.h>
7
 
8
void sleep_ms(uint16_t ms);
9
 
10
#define LED_WS                  PB2     // LED port 1
11
#define LED_BL                  PC1 // LED port 2
12
#define LED_BLITZRT             PC2 // LED port 3
13
#define LED_BLITZGN             PC3 // LED port 4
14
#define LED_PORT5               PC4 // LED port 5
15
#define LED_HINTENGN    PC5 // LED port 6
16
#define LED_HINTENRT    PD4 // LED port 7
17
#define LED_VORNEGN             PD5 // LED port 8
18
#define LED_UNTENGB             PD6 // LED port 9
19
#define LED_VORNERT             PD7     // LED port 10
20
#define LED_STATUS              PB0     // LED blau - on board
21
 
22
#define STATUS_OFF              PORTB |= (1<<LED_STATUS)        //Den Portpin auf high setzen
23
#define STATUS_ON               PORTB &= ~(1<<LED_STATUS)       //Den Portpin auf low setzen
24
#define STATUS_TOGGLE   PORTB ^= ~(1<<LED_STATUS)       //Den Portpin toggeln
25
 
26
#define WEISS_ON                PORTB |= (1<<LED_WS)            //Den Portpin auf high setzen
27
#define WEISS_OFF               PORTB &= ~(1<<LED_WS)           //Den Portpin auf low setzen
28
 
29
#define PORT5_ON                PORTC |= (1<<LED_PORT5)         //Den Portpin auf high setzen
30
#define PORT5_OFF               PORTC &= ~(1<<LED_PORT5)        //Den Portpin auf low setzen
31
 
32
#define BLITZGN_ON              PORTC |= (1<<LED_BLITZGN)       //Den Portpin auf high setzen
33
#define BLITZGN_OFF             PORTC &= ~(1<<LED_BLITZGN)      //Den Portpin auf low setzen
34
#define BLITZRT_ON              PORTC |= (1<<LED_BLITZRT)       //Den Portpin auf high setzen
35
#define BLITZRT_OFF             PORTC &= ~(1<<LED_BLITZRT)      //Den Portpin auf low setzen
36
#define BLAU_ON                 PORTC |= (1<<LED_BL)            //Den Portpin auf high setzen
37
#define BLAU_OFF                PORTC &= ~(1<<LED_BL)           //Den Portpin auf low setzen
38
#define GELB_ON                 PORTD |= (1<<LED_UNTENGB)       //Den Portpin auf high setzen
39
#define GELB_OFF                PORTD &= ~(1<<LED_UNTENGB)      //Den Portpin auf low setzen
40
#define VORNGN_ON               PORTD |= (1<<LED_VORNEGN)       //Den Portpin auf high setzen
41
#define VORNGN_OFF              PORTD &= ~(1<<LED_VORNEGN)      //Den Portpin auf low setzen
42
#define HINTENGN_ON             PORTC |= (1<<LED_HINTENGN)      //Den Portpin auf high setzen
43
#define HINTENGN_OFF    PORTC &= ~(1<<LED_HINTENGN)     //Den Portpin auf low setzen
44
#define VORNRT_ON               PORTD |= (1<<LED_VORNERT)       //Den Portpin auf high setzen
45
#define VORNRT_OFF              PORTD &= ~(1<<LED_VORNERT)      //Den Portpin auf low setzen
46
#define HINTENRT_ON             PORTD |= (1<<LED_HINTENRT)      //Den Portpin auf high setzen
47
#define HINTENRT_OFF    PORTD &= ~(1<<LED_HINTENRT)     //Den Portpin auf low setzen
48
 
49
 
50
#define FAST_ALLES_OFF          BLITZGN_OFF;BLITZRT_OFF;WEISS_OFF;BLAU_OFF;GELB_OFF;VORNGN_OFF;HINTENGN_OFF;VORNRT_OFF;HINTENRT_OFF;PORT5_OFF;STATUS_ON
51
#define FAST_ALLES_ON           BLITZGN_ON;BLITZRT_ON;WEISS_ON;BLAU_ON;GELB_ON;VORNGN_ON;HINTENGN_ON;VORNRT_ON;HINTENRT_ON;PORT5_ON;STATUS_OFF
52
 
53
 
54
 
55
#define F_CPU 1000000UL 
56
 
57
#ifndef F_CPU
58
#define F_CPU    1000000
59
#endif
60
 
61
 
62
volatile uint8_t mode = 0;
63
volatile uint8_t abbruch = 0;
64
 
65
 
66
ISR(INT1_vect)      
67
{
68
   // Interrupt Code 
69
        if (mode <= 3)
70
        {
71
        mode++;
72
        }
73
        else
74
        {
75
        mode = 0;
76
        }
77
        //                                              STATUS_TOGGLE; ausgeblendet
78
        abbruch = 1;
79
}
80
 
81
 
82
 
83
int main(void){
84
 
85
        // Pin B |7|6|5|4|3|2|1|0
86
    // Binär:|0|0|0|0|0|1|0|1 (b) => #05 (h)
87
        // Pin B0 und B2 als Ausgänge festlegen   
88
    DDRB = 0x05;
89
 
90
        // Pin C |7|6|5|4|3|2|1|0
91
    // Binär:|0|0|1|1|1|1|1|0 (b) => #3E (h)
92
        // Pin C1 bis C5 als Ausgänge festlegen   
93
    DDRC = 0x3E;
94
 
95
        // Pin D |7|6|5|4|3|2|1|0
96
    // Binär:|1|1|1|1|0|0|0|0 (b) => #F0 (h)
97
        DDRD = 0xF0;
98
        //Pullup für PD3 aktivieren
99
        PORTD |= (1 << PD3);
100
 
101
 
102
        //interrupt konfigurueren
103
        GIMSK = 1<<INT1;
104
        MCUCR = 1<<ISC10;
105
 
106
        FAST_ALLES_OFF;
107
        STATUS_OFF;
108
        sleep_ms(3000);
109
        STATUS_ON;
110
        sei();  //interrupts einschalten
111
 
112
 
113
        while(1){
114
 
115
 
116
                abbruch = 0;
117
                FAST_ALLES_ON;
118
                sleep_ms(200);
119
                FAST_ALLES_OFF;        
120
                sleep_ms(200);
121
 
122
        }
123
}
124
 
125
 
126
void sleep_ms(uint16_t ms){
127
        if (abbruch == 0)
128
                {
129
                while(ms)
130
                        {
131
                        if (abbruch != 0)
132
                                {
133
                                break;
134
                                }
135
                                else
136
                                {
137
                                ms--;
138
                                _delay_ms(1);
139
                                }
140
                        }
141
                }
142
}