Forum: Mikrocontroller und Digitale Elektronik Timer verhält sich eigenartig


von Philipp L. (viech)


Angehängte Dateien:

Lesenswert?

Hallo,

ich habe Timer1 für die Ansteuerung eines Servos verwendet:
Fast PWM
TOP = 20.000 (20ms)
OC1A zwischen 1.000 und 2.000 für Servo links/rechts

Das ganze funktioniert auch einwandfrei

Jetzt möchte ich den Timer0 für Zeitabhängige Eingriffe in Timer1 
verwenden.
Normal Mode
Prescaler = 1024

Wenn ich zum Test bei Überlauf von Timer0 einen Ausgang Toggle, 
funktiert sowohl die Servoansteuerung als auch der blinkende Ausgang 
einwandfrei.

Sobald ich jedoch (zum Test) "X=1500" in die ISR einbaue, wackelt der 
Servo zwischen 1500 und 2000 hin und her.
Weiterhin blinkt die getoggelte LED nicht mehr 100% gleichmäßig.

Fragen:
1: X scheint zwischenzeitlich wieder auf 2000 gesetzt zu werden, warum ?
2: Warum hat X=1500 auswirkungen auf den Timer0 selbst (Ausgang blinkt 
nicht mehr gleichmäßig) ?

von S. Landolt (Gast)


Lesenswert?

Um welchen Controller handelt es sich?
Wo ist die ISR für den Timer1-Overflow?

von Einer K. (Gast)


Lesenswert?

S. Landolt schrieb:
> Wo ist die ISR für den Timer1-Overflow?

Sehr aufmerksam!

von Philipp L. (viech)


Lesenswert?

Es ist ein Tiny24

Es gibt keine ISR für Timer1, der läuft einfach vor sich hin und ändert 
hardwaremäßig den OC1A Ausgang.

Wenn ich in der ISR für Timer 0 nur ein char (Y) auf 1 setzte und X dann 
in der main ändere, blinkt der Testausgang wieder einwandfrei.
Jedoch wackelt der servo weiterhin hin und her.
Irgendwo speichert er den alten Wert...

if (Y == 1)
{
X = 1500;
Y = 0;
}

von S. Landolt (Gast)


Lesenswert?

> Es gibt keine ISR für Timer1

Weshalb wird der Interrupt dann freigegeben?

> TIMSK1 = (1 <<TOIE1);

von S. Landolt (Gast)


Lesenswert?

PS:
Timer1 läuft im Fast-PWM-Modus, bei Erreichen von ICR1 wird der 
Interrupt ausgelöst und das Programm springt ... wohin?

von Philipp L. (viech)


Lesenswert?

Nach der Lösung habe ich gesucht :-)

Danke !

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.