hallo, ich hatte gestern mal alles mögliche auskommentiert und dabei
festgestellt, das der teil wo die led an- und ausgeht scheinbar dafür
verantwortlich ist. je mehr blinkgedöns, umso schneller schmiert der
atmel ab.
1 | void delay_1ms(u16 i)
|
2 | {
|
3 | do {
|
4 | _delay_ms(1);
|
5 | } while(--i);
|
6 | }
|
7 |
|
8 |
|
9 |
|
10 | int main( void )
|
11 | {
|
12 | u8 relais = 0;
|
13 | u8 ssw = 0;
|
14 |
|
15 | // eingäge definieren
|
16 | DDRA = 0b00000000;
|
17 |
|
18 | // ausgänge definieren
|
19 | DDRC = 0b11111111;
|
20 | DDRD |= (1 << DDD4) | (1 << DDD7);
|
21 |
|
22 |
|
23 | init_uart0( (u16)(XTAL / BAUD / 16 - 0.5) );
|
24 | sei();
|
25 | delay_1ms(300);
|
26 |
|
27 | while(1) {
|
28 |
|
29 | PORTC |= (1 << PC2);
|
30 | delay_1ms(300);
|
31 | PORTC &= ~(1 << PC2);
|
32 |
|
33 | switch(ssw) {
|
34 |
|
35 | // init
|
36 | case 0:
|
37 | uputs0("Init\n\r");
|
38 |
|
39 | relais_off();
|
40 | led_red_on();
|
41 | led_green_off();
|
42 |
|
43 | ssw = 1;
|
44 | break;
|
45 |
|
46 | // warte auf taster
|
47 | case 1:
|
48 | PORTC |= (1 << PC1);
|
49 | delay_1ms(300);
|
50 | PORTC &= ~(1 << PC1);
|
51 |
|
52 | if ((PINA & (1 << PINA0)) == 1) {
|
53 | if(relais == 0) {
|
54 | relais = 1;
|
55 | ssw = 2;
|
56 | } else {
|
57 | relais = 0;
|
58 | ssw = 3;
|
59 | }
|
60 | }
|
61 |
|
62 | while((PINA & (1 << PINA0)) == 1) {
|
63 |
|
64 | }
|
65 |
|
66 | break;
|
67 |
|
68 | // relais aus -> relais an
|
69 | case 2:
|
70 | relais_on();
|
71 | led_red_off();
|
72 | led_green_on();
|
73 |
|
74 | ssw = 1;
|
75 | break;
|
76 |
|
77 | // relais an -> relais aus
|
78 | case 3:
|
79 | relais_off();
|
80 | led_red_on();
|
81 | led_green_off();
|
82 |
|
83 | ssw = 1;
|
84 | break;
|
85 | }
|
86 |
|
87 | // rs-232 test
|
88 | if(ukbhit0()) {
|
89 | uputchar0(ugetchar0());
|
90 | uputchar0('\n');
|
91 | uputchar0('\r');
|
92 | }
|
93 | }
|
94 | }
|