Subversion Repositories Projects

Rev

Rev 311 | Rev 341 | Go to most recent revision | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

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