Hi, ich kämpfe gerade mit dem folgenden Code in c für den Attiny45. Beim Betätigen eines Pull-up-Tasters soll die Led für zwei Sekunden leuchten. Sie leuchtet auch, sowohl beim Drücken als auch bei stark verzögertem Loslassen (durch fehlendes Debouncing), aber sie lässt sich zwischen Drücken und leuchten gut 1/2 Sekunde Zeit... Könnt ihr mir meinen Fehler zeigen?
1 | #define F_CPU 8000000UL
|
2 | |
3 | #include <avr/io.h> |
4 | #include <avr/interrupt.h> |
5 | #include <util/delay.h> |
6 | |
7 | |
8 | |
9 | |
10 | int warten = 1; |
11 | |
12 | |
13 | int main(void) |
14 | {
|
15 | DDRB = (1 << PORTB1) | (0 << PORTB2); |
16 | MCUCR = (1 << ISC01) | (1 << ISC00); |
17 | GIMSK = (1 << INT0); |
18 | |
19 | while (1) |
20 | {
|
21 | sei(); |
22 | if (warten == 0) |
23 | {
|
24 | cli(); |
25 | _delay_ms(2000); |
26 | PORTB &= ~(1 << PORTB1); |
27 | }
|
28 | }
|
29 | }
|
30 | |
31 | ISR(INT0_vect) |
32 | {
|
33 | PORTB |= (1 << PORTB1); |
34 | warten = 0; |
35 | }
|