Rev 310 | Rev 312 | Go to most recent revision | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 310 | Rev 311 | ||
---|---|---|---|
1 | /* |
1 | /* |
2 | * Blitzdings main.c |
2 | * Blitzdings main.c |
3 | * (c) pangu |
3 | * (c) pangu |
4 | */ |
4 | */ |
5 | 5 | ||
- | 6 | /******************************************************************/ |
|
- | 7 | /* WICHTIG: Fusebits in Ponyprog für 8MHz setzen: |
|
- | 8 | ||
- | 9 | Häkchen in Ponyprog: |
|
- | 10 | CKSEL3 gesetzt |
|
- | 11 | CKSEL2 nicht gesetzt |
|
- | 12 | CKSEL1 gesetzt |
|
- | 13 | CKSEL0 gesetzt |
|
- | 14 | ||
- | 15 | */ |
|
- | 16 | /******************************************************************/ |
|
6 | 17 | ||
7 | #include "main.h" |
18 | #include "main.h" |
8 | #include "timer.h" |
19 | #include "timer.h" |
9 | #include "lprg.h" |
20 | #include "lprg.h" |
10 | 21 | ||
11 | /* Strings zum definieren von Dauer-Ein Dauer-Aus */ |
22 | /* Strings zum definieren von Dauer-Ein Dauer-Aus */ |
12 | const char l_on[]="A"; |
23 | const char l_on[]="A"; |
13 | const char l_off[]="a"; |
24 | const char l_off[]="a"; |
14 | 25 | ||
15 | // Wait flags: |
26 | // Wait flags: |
16 | // . 10 ms |
27 | // . 10 ms |
17 | // : 20 ms |
28 | // : 20 ms |
18 | // ; 50 ms |
29 | // ; 50 ms |
19 | // I 100 ms |
30 | // I 100 ms |
20 | // N 200 ms |
31 | // N 200 ms |
21 | // M 300 ms |
32 | // M 300 ms |
22 | // V 500 ms |
33 | // V 500 ms |
23 | // S 1s |
34 | // S 1s |
24 | // LED: |
35 | // LED: |
25 | // A-an a-aus |
36 | // A-an a-aus |
26 | 37 | ||
27 | // Rot+Grün blitzen dreimal kurz, zeitlich leicht versetzt, alle 1,5s |
38 | // Rot+Grün blitzen dreimal kurz, zeitlich leicht versetzt, alle 1,5s |
28 | // 2 weisse und 2 blaue LEDs sind an und gehen alle 3s reihum kurz aus |
39 | // 2 weisse und 2 blaue LEDs sind an und gehen alle 3s reihum kurz aus |
29 | char *led_posflash[] = { |
40 | char *led_posflash[] = { |
30 | "A:aIA:aIA:aSV", // LED #1 rot |
41 | "A:aIA:aIA:aSV", // LED #1 rot |
31 | ".", // LED #2 |
42 | ".", // LED #2 |
32 | "NNaIASSNNN", // LED #3 blau |
43 | "NNaIASSNNN", // LED #3 blau |
33 | ".", // LED #4 |
44 | ".", // LED #4 |
34 | "NaIASSNNNN", // LED #5 weiss |
45 | "NaIASSNNNN", // LED #5 weiss |
35 | "NA:aIA:aIA:aMS", // LED #6 grün |
46 | "NA:aIA:aIA:aMS", // LED #6 grün |
36 | ".", // LED #7 |
47 | ".", // LED #7 |
37 | "aIASSNNNNN", // LED #8 weiss |
48 | "aIASSNNNNN", // LED #8 weiss |
38 | ".", // LED #9 |
49 | ".", // LED #9 |
39 | "NNNaIASSNN" // LED #10 blau |
50 | "NNNaIASSNN" // LED #10 blau |
40 | }; |
51 | }; |
41 | 52 | ||
42 | 53 | ||
43 | char *led_aus[] = { |
54 | char *led_aus[] = { |
44 | l_off, // LED #1 rot |
55 | l_off, // LED #1 rot |
45 | l_off, // LED #2 blau |
56 | l_off, // LED #2 blau |
46 | l_off, // LED #3 blau |
57 | l_off, // LED #3 blau |
47 | l_off, // LED #4 |
58 | l_off, // LED #4 |
48 | l_off, // LED #5 weiss |
59 | l_off, // LED #5 weiss |
49 | l_off, // LED #6 grün |
60 | l_off, // LED #6 grün |
50 | l_off, // LED #7 |
61 | l_off, // LED #7 |
51 | l_off, // LED #8 weiss |
62 | l_off, // LED #8 weiss |
52 | l_off, // LED #9 |
63 | l_off, // LED #9 |
53 | l_off // LED #10 |
64 | l_off // LED #10 |
54 | }; |
65 | }; |
55 | 66 | ||
56 | char *led_an[] = { |
67 | char *led_an[] = { |
57 | l_on, // LED #1 rot |
68 | l_on, // LED #1 rot |
58 | l_on, // LED #2 blau |
69 | l_on, // LED #2 blau |
59 | l_on, // LED #3 blau |
70 | l_on, // LED #3 blau |
60 | l_on, // LED #4 |
71 | l_on, // LED #4 |
61 | l_on, // LED #5 weiss |
72 | l_on, // LED #5 weiss |
62 | l_on, // LED #6 grün |
73 | l_on, // LED #6 grün |
63 | l_on, // LED #7 |
74 | l_on, // LED #7 |
64 | l_on, // LED #8 weiss |
75 | l_on, // LED #8 weiss |
65 | l_on, // LED #9 |
76 | l_on, // LED #9 |
66 | l_on // LED #10 |
77 | l_on // LED #10 |
67 | }; |
78 | }; |
68 | 79 | ||
69 | // alle LEDs toggeln synchron, 300ms Leucht/Aus-Dauer |
80 | // alle LEDs toggeln synchron, 300ms Leucht/Aus-Dauer |
70 | char *led_flash1[] = { |
81 | char *led_flash1[] = { |
71 | "aMAM", // LED #1 rot |
82 | "aMAM", // LED #1 rot |
72 | "aMAM", // LED #2 blau |
83 | "aMAM", // LED #2 blau |
73 | "aMAM", // LED #3 blau |
84 | "aMAM", // LED #3 blau |
74 | "aMAM", // LED #4 |
85 | "aMAM", // LED #4 |
75 | "aMAM", // LED #5 weiss |
86 | "aMAM", // LED #5 weiss |
76 | "aMAM", // LED #6 grün |
87 | "aMAM", // LED #6 grün |
77 | "aMAM", // LED #7 |
88 | "aMAM", // LED #7 |
78 | "aMAM", // LED #8 weiss |
89 | "aMAM", // LED #8 weiss |
79 | "aMAM", // LED #9 |
90 | "aMAM", // LED #9 |
80 | "aMAM" // LED #10 |
91 | "aMAM" // LED #10 |
81 | }; |
92 | }; |
82 | 93 | ||
83 | // alle LEDs toggeln mit verschiednen Zykluszeiten |
94 | // alle LEDs toggeln mit verschiednen Zykluszeiten |
84 | char *led_flash2[] = { |
95 | char *led_flash2[] = { |
85 | "a.A.", // LED #1 rot |
96 | "a.A.", // LED #1 rot |
86 | "a:A:", // LED #2 blau |
97 | "a:A:", // LED #2 blau |
87 | "a;A;", // LED #3 blau |
98 | "a;A;", // LED #3 blau |
88 | "aIAI", // LED #4 |
99 | "aIAI", // LED #4 |
89 | "aNAN", // LED #5 weiss |
100 | "aNAN", // LED #5 weiss |
90 | "aMAM", // LED #6 grün |
101 | "aMAM", // LED #6 grün |
91 | "aMIAMI", // LED #7 |
102 | "aMIAMI", // LED #7 |
92 | "aVAV", // LED #8 weiss |
103 | "aVAV", // LED #8 weiss |
93 | "aVIAVI", // LED #9 |
104 | "aVIAVI", // LED #9 |
94 | "aSAS" // LED #10 |
105 | "aSAS" // LED #10 |
95 | }; |
106 | }; |
96 | 107 | ||
97 | 108 | ||
98 | // Hier die zu verwendenden LichtProgramme einfach eintragen. |
109 | // Hier die zu verwendenden LichtProgramme einfach eintragen. |
99 | void *modes[]= { led_an, led_posflash, led_aus, led_flash1, led_flash2 }; |
110 | void *modes[]= { led_an, led_posflash, led_aus, led_flash1, led_flash2 }; |
100 | 111 | ||
101 | void nextMode() { |
112 | void nextMode() { |
102 | 113 | ||
103 | static int current = 0; |
114 | static int current = 0; |
104 | 115 | ||
105 | lprg_init(modes[current]); |
116 | lprg_init(modes[current]); |
106 | current = ++current % (sizeof(modes)/sizeof(void *)); |
117 | current = ++current % (sizeof(modes)/sizeof(void *)); |
107 | 118 | ||
108 | } |
119 | } |
109 | 120 | ||
110 | ISR(INT1_vect) |
121 | ISR(INT1_vect) |
111 | { |
122 | { |
112 | 123 | ||
113 | nextMode(); |
124 | nextMode(); |
114 | 125 | ||
115 | } |
126 | } |
116 | 127 | ||
117 | 128 | ||
118 | 129 | ||
119 | int main() { |
130 | int main() { |
120 | 131 | ||
121 | int tim10s, tim1s; |
132 | int tim10s, tim1s; |
122 | 133 | ||
123 | // Ports einstellen |
134 | // Ports einstellen |
124 | // Pin B |7|6|5|4|3|2|1|0 |
135 | // Pin B |7|6|5|4|3|2|1|0 |
125 | // Binär:|0|0|0|0|0|1|0|1 (b) => #05 (h) |
136 | // Binär:|0|0|0|0|0|1|0|1 (b) => #05 (h) |
126 | // Pin B0 und B2 als Ausgänge festlegen |
137 | // Pin B0 und B2 als Ausgänge festlegen |
127 | DDRB = 0x05; |
138 | DDRB = 0x05; |
128 | 139 | ||
129 | // Pin C |7|6|5|4|3|2|1|0 |
140 | // Pin C |7|6|5|4|3|2|1|0 |
130 | // Binär:|0|0|1|1|1|1|1|0 (b) => #3E (h) |
141 | // Binär:|0|0|1|1|1|1|1|0 (b) => #3E (h) |
131 | // Pin C1 bis C5 als Ausgänge festlegen |
142 | // Pin C1 bis C5 als Ausgänge festlegen |
132 | DDRC = 0x3E; |
143 | DDRC = 0x3E; |
133 | 144 | ||
134 | // Pin D |7|6|5|4|3|2|1|0 |
145 | // Pin D |7|6|5|4|3|2|1|0 |
135 | // Binär:|1|1|1|1|0|0|0|0 (b) => #F0 (h) |
146 | // Binär:|1|1|1|1|0|0|0|0 (b) => #F0 (h) |
136 | DDRD = 0xF0; |
147 | DDRD = 0xF0; |
137 | //Pullup für PD3 aktivieren |
148 | //Pullup für PD3 aktivieren |
138 | PORTD |= (1 << PD3); |
149 | PORTD |= (1 << PD3); |
139 | 150 | ||
140 | 151 | ||
141 | //interrupt konfigurueren |
152 | //interrupt konfigurueren |
142 | GIMSK = 1<<INT1; |
153 | GIMSK = 1<<INT1; |
143 | MCUCR = 1<<ISC10; |
154 | MCUCR = 1<<ISC10; |
144 | 155 | ||
145 | ALLES_OFF; |
156 | ALLES_OFF; |
146 | 157 | ||
147 | STATUS_ON; |
158 | STATUS_ON; |
148 | 159 | ||
149 | Timer_Init(); |
160 | Timer_Init(); |
150 | nextMode(); |
161 | nextMode(); |
151 | tim10s = SetDelay(10000); |
162 | tim10s = SetDelay(10000); |
152 | tim1s = SetDelay(1000); |
163 | tim1s = SetDelay(1000); |
153 | 164 | ||
154 | sei(); //interrupts einschalten |
165 | sei(); //interrupts einschalten |
155 | 166 | ||
156 | while (1) { |
167 | while (1) { |
157 | 168 | ||
158 | if(flag10ms) { // every 10ms |
169 | if(flag10ms) { // every 10ms |
159 | flag10ms = 0; |
170 | flag10ms = 0; |
160 | lprg_step(); // next step in light prog |
171 | lprg_step(); // next step in light prog |
161 | } |
172 | } |
162 | 173 | ||
163 | if(CheckDelay(tim10s)) { // alle 10 sec programm wechseln |
174 | if(CheckDelay(tim10s)) { // alle 10 sec programm wechseln |
164 | nextMode(); |
175 | nextMode(); |
165 | tim10s = SetDelay(10000); |
176 | tim10s = SetDelay(10000); |
166 | } |
177 | } |
167 | if(CheckDelay(tim1s)) { // alle 1 sec STatus-LED toggeln |
178 | if(CheckDelay(tim1s)) { // alle 1 sec STatus-LED toggeln |
168 | STATUS_TOGGLE; |
179 | STATUS_TOGGLE; |
169 | tim1s = SetDelay(1000); |
180 | tim1s = SetDelay(1000); |
170 | } |
181 | } |
171 | } |
182 | } |
172 | 183 | ||
173 | } |
184 | } |
174 | 185 | ||
175 | 186 | ||
176 | 187 | ||
177 | 188 | ||
178 | 189 | ||
179 | 190 |