Hallo zusammen, Vielleicht ist es auch sehr trivial, allerdings finde ich seit Stunden kein Ansatz. Im Beispiel Multitasking wird neben der UART-Lesung eine LED in unterschiedlichen Frequenzen zum Blinken gebracht. Wenn der Taster betätigt wird blinkt sie langsam, wenn er nicht betätigt wird blinkt sie schneller. In meinen Beispiel soll nun die LED für ~3sec aufleuchten wenn ich den Taster einmal betätige mittels Kooperatives Multitasking. Hier der Beispielcode:
1 | #define F_CPU 2000000
|
2 | #define LED PC1
|
3 | #define taster PB1
|
4 | |
5 | #include <avr/io.h> |
6 | #include <avr/delay.h> |
7 | #include <avr/interrupt.h> |
8 | |
9 | uint8_t taste_lesen(void) { |
10 | if (PINB & (1<<taster)) |
11 | return 1; |
12 | else
|
13 | return 0; |
14 | }
|
15 | |
16 | void led_blinken(uint8_t taste) { |
17 | if (taste) { |
18 | PORTC |= (1<<LED); |
19 | _delay_ms(3000); //hier ohne _delay_ms arbeiten ! |
20 | }
|
21 | else { |
22 | PORTC &= ~(1<<LED); |
23 | }
|
24 | }
|
25 | |
26 | int main(void) { |
27 | int8_t taste; |
28 | |
29 | DDRB &= ~(1<<taster); |
30 | DDRC |= (1<<LED); |
31 | |
32 | while (1) { |
33 | taste = taste_lesen(); |
34 | led_blinken(taste); |
35 | _delay_ms(1); // 1 ms warten |
36 | }
|
37 | }
|
Kann mir jemand dabei helfen wie man das macht? Vielen Dank