Hallo, Ich bin ehe ein Anfänger in dem Umgang mit µC. Ich möchte Leds mit verschiedenen Frequenzen steuern. Z.B eine mit 20Hz und andere zu gleicher Zeit mit 10Hz. Wie kann ich das mit GCC machen? Sobald ich zweite Led ansteure verändert sich die Blink-Frequenz der ersten Led, weil sie auf die erste warten muss. Wie kann ich das trennen? Z.B PORTB &= ~_BV(PB0); _delay_ms(50); PORTB |= _BV(PB0); _delay_ms(50); PORTB &= ~_BV(PB2); _delay_ms(100); PORTB |= _BV(PB2); _delay_ms(100);
Zum Beispiel in der Schleife nur ein delay von 10ms benutzen. Bei jedem fünften Durchlauf LED1 toggeln, bei jedem zehnten Durchlauf LED2. Und wenn nebenbei sonst noch was laufen soll, dann verschiebt man die Aktion in einen Timer-Interrupt, der regelmäßig aufgerufen wird.
... plus Timer verwenden statt delay. AVR-GCC-Tutorial/Die Timer und Zähler des AVR
Danke Uwe Ich versuch das so zu machen.
Siehe Multitasking
Solche grob gerasterten Zählarbeit mache ich gerne mit einem Countdown-Zähler:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | |
35 | |
36 | |
37 | |
38 | |
39 | |
In den Anwendungen hab ich eh einen 10ms-Interrupt aktiv für Taster entprellen, DCF77, etc. Für konkrete Implementierung und Für und Wider siehe Beitrag "Warten und Verzögern ohne zu Blockieren (avr/delay.h)" Von den Quellen muss nur countdown.h angepasst werden: dort werden benötigte countdown-Zähler eingetragen. Es gibt einträge für Countdown-Zähler im 10ms-, im 1 Sekunden- und im 1 Minuten-Raster countdown.c muss nicht angepasst werden.
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.