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?
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
:-)
Lokus Pokus schrieb:> ich möchte das ganze erst mal gerne zum laufen bringen, dann wird> kommentiert.
1. machst du es den Helfern damit nicht einfach
2. verlierst du damit (wie man sieht) selbst den Überblick
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.
An dem lags mal nicht. Hab die 0 auf 1 geändert.
Das würde dann aber bestimmt einen anderen Effekt verursachen. Bzw. Die
Tasten oder Encoderabfrage nicht ordentlich funktionieren.
Wenn ich den Encoder permanent bewege läuft der Timer ja.
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.