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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.