Der PWM Wert ist 0 wenn TCCR1A auf 0 gesetzt wird.
Sobald in den PWM Variablen im Programm was anderes als 0 drinsteht, wird TCCR1A wieder auf den normalen Wert gesetzt (natürlich mit Verzögerung wegen Software Timer).
Das macht also keinen Unterschied!
Das bei Dir das Programm so seltsam reagiert wenn TCCR1A auf 0 gesetzt ist, liegt evtl. daran, dass der Overflow Interrupt dann etwas anders auftritt. Der wird ja nicht deaktiviert (weil er in der RP6Lib nicht genutzt wird).
TCCR1A auf 0 setzen trennt den Timer von den I/O Ports ab und der Timer wird in den
(EDIT: Natürlich nicht normal Modus sondern einer der anderen ich hatte vergessen das WGM13 ja im TCCR1B gesetzt ist)
konfiguriert.
Da in der RP6Lib diese Interruptvektoren nicht genutzt werden und auch nie geplant war diese jemals zu nutzen, hatte das da natürlich keine Relevanz.
EDIT:
Der Timer0 ist ja unabhängig vom Timer1, da TCCR1A zu setzten wirkt sich auf Timer0 natürlich nicht aus der läuft ungestört weiter. Wenn Du aber im Timer1 Interrupt das TCCR1A Register setzt wirkt sich das wohl anders aus.
Der Regler kann den Sollwert nur soweit senken wenn die Regelabweichung stark genug wird.
Der Stellwert sollte eigentlich nicht bis auf 0 runter gehen, aber da das Fahrzeug eine recht große Masse hat und auch erstmal abgebremst werden will wenn es gerade kurz beschleunigt hatte (plus Verzögerung wegen langsamer Änderung der PWM)... funktioniert im Fahrbetrieb aber gut genug. Kann man aber durchaus nochmal genauer untersuchen und optimieren.
Wenn das bei *Deinem* Programm aber auch nur einmal kurz auftritt kommt alles durcheinander wegen der Verzögerung / Änderung der Timereinstellung die dann dazwischen funkt.
Aber egal, einfach so anpassen wie Du schon gesagt hast dann sollte es laufen.
MfG,
SlyD
Lesezeichen