2 Timer parallel laufen lassen

OP #3318469
Lesenswert?

In meinem Programm habe ich 2 Timer definiert.
.) Einmal wird abgefragt ob ein Drehencoder gedreht bzw. eine taste lang 
oder kurz gedrückt wird.
.) Und beim zweiten läuft eine Schleife die mittels PWM eine LED zum 
pulsieren bringen soll.

Das ganze funktioniert jedoch nur soweit, dass die LED nur dann 
pulsiert, wenn der Drehencoder bewegt wird (gedreht wird). Läuft der 
Timer der den Encoder auf 0 zurücksetzt ab, hört auch die LED zum 
pulsieren auf.

Kann mir da jemand einen Tipp geben wo der Fehler ist?
Angehängte Dateien:
Gast #3318538
Lesenswert?

Kommentare sind nicht nur für andere, sondern auch für dich. Zur 
Entwicklung und dann auch für später. Schreib die Kommentare gleich, das 
erleichtert vieles. Später schreiben ist so wie die Silvester-Vorsätze 
:-)
Gast #3318817
Lesenswert?

1
const uint8_t led_wert[32] PROGMEM    =
2
{
3
    0, 1, 2, 2, 2, 3, 3, 4, 5, 6, 7, 8, 10, 11, 13, 16, 19, 23,
4
    27, 32, 38, 45, 54, 64, 76, 91, 108, 128, 152, 181, 215, 255
5
};

Im ISR:
1
OCR1A = pgm_read_word (& led_wert[led_helligkeit]);

OCR1A kann zu 0 werden und damit wird der Interrupt andauernd 
hintereinander aufgerufen ohne dass Zeit für andere Sachen bleibt. Oder 
du hast irgendeine andere Endlosschleife in deinen anderen Funktionen.
#3318929
Lesenswert?

Lokus Pokus schrieb:

> Das ganze funktioniert jedoch nur soweit, dass die LED nur dann
> pulsiert, wenn der Drehencoder bewegt wird (gedreht wird). Läuft der
> Timer der den Encoder auf 0 zurücksetzt ab, hört auch die LED zum
> pulsieren auf.

Logisch.
Ist der Timer abgelaufen, wird timeCount zu 0

In deiner Hauptschleife steht aber
1
    if (timeCount == 0)
2
    {
3
      nSelect = 0;
4
      encoder = 0;                      // Nach Zeit zurück zum Ausgangswert
5
      led_dimmer (ledwert);
6
    }

wenn timeCount gleich 0 ist, wird led_dimmer aufgerufen. led_dimmer 
seinerseits weist aber der PWM einen konstanten Wert zu. Damit kann sich 
dein Timer 0 abmühen so viel er will, laufend neue PWM Werte vorzugeben. 
Beim nächsten Durchlauf durch die Hauptschleife macht der Aufruf von 
led_dimmer alles wieder zunichte.

Edit: zu spät.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren