Hallo!
Ich möchte die Blinkzeit (delay-time) einer RGB-Led stufenlos verändern.
Bei Tastendruck wird alle 35ms ein Interrupt ausgelöst. In der ISR
erhöhe ich time solange ich die Taste 3 drücke und springe nach jeder
Erhöhung um 1ms wieder in die Routine (Taste == 1). Mit Taste 4 soll die
Zeit verringert werden (bis zu einem Zeitminimum von 10ms).
Mein Problem ist, dass sich sobald ich die Variable time in _delay_ms()
einfüge, der Programm- und Datenspeicher schlagartig erhöht.(siehe Bild)
Wie kann ich das lösen?
Hier der Codeausschnitt:
1 | while(1)
|
2 | {
|
3 | if (Taste == 1)
|
4 | {
|
5 | OCR1SA = valuetable[ 150 ]; // Blue
|
6 | _delay_ms(time);
|
7 | OCR0SA = valuetable[ 150 ]; // Red
|
8 | _delay_ms(time);
|
9 | }
|
10 | }
|
Hier die Interrupt-Service_Rpoutine:
1 | ISR(INT2_vect) // Int.2 on PB5
|
2 | {
|
3 | Payload_RX(0x61, 0x00); // Read FIFO payload
|
4 |
|
5 | Taste = SPDR; // and store value in Taste
|
6 |
|
7 | Flush_RX(); // clear RX-FIFO
|
8 |
|
9 | if (Taste == 3) // Speed ++
|
10 | {
|
11 | time++;
|
12 | Taste = 1;
|
13 | }
|
14 |
|
15 | else if (Taste == 4) // Speed --
|
16 | {
|
17 | while (time >= 10)
|
18 | time--;
|
19 | Taste = 1;
|
20 | }
|
21 | }
|