Forum: Mikrocontroller und Digitale Elektronik Timer0-Problem


von Marc Schwarzbach (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

ich bin dabei, eine Ansteuerung für Servos zu bauen und will dazu alle 
25ms die Ausgaberoutine per Timer0 aufrufen.

Das Programm läuft auch, aber wenn ich mir das Signal auf dem Oszi 
anschaue, sieht man, dass es nicht kontinuierlich abgegeben wird, 
sondern nur in Blöcken von ca.5 und dann kommt eine Pause von mehreren 
10ms.

Ich kann im Code keinen Fehler finden, also befürchte ich, dass es was 
Hardwaremässiges ist.....

Vielen Dank für eure Hilfe

Marc

von Mike (Gast)


Lesenswert?

Hallo,

so genau habe ich das nicht nachgerechnet, aber ein delay Aufruf im 
Interrupt ist schon mal bedenklich, in der Zeit laufen dir weitere 
Timmer Int. auf. Die wollen auch noch abgearbeitet werden und die bremst 
du in der Delayschleife aus.

Entweder den Timer mit Capture Register benutzen oder ein weiteres 
Hilfsregister für den Int. das du innerhalb des 25 ms Zyklus die 0,5 - 2 
ms für den Servo erzeugst.

Oder gleich mit PWM das ist eleganter.

Gruß Mike

von Marc Schwarzbach (Gast)


Lesenswert?

Hallo Mike,

das mit der Delayschleife sollte eigentlich kein Problem sein, da sie 
nur 1ms dauert und der Timer erst nach 25ms wieder anspricht.
Das reti kommt also spätestens 2ms nach dem aufruf.

Was mich eigentlich wundert ist, dass der Interrupt manchmal aufgerufen 
wird und manchmal nicht... (obwohl sich ja nichts an den Randbedingungen 
ändert)

Gibt es dafür einen Grund im Quelltext??
Rufe ich den Timer falsch auf und da läuft ab und zu was über??

Das mit Capture-Register oder PWM hab ich bewusst nicht gemacht, da ich 
mehr als 1 Servo ansteuern will...

Gruss

Marc

von Oliver K. (Gast)


Lesenswert?

Hallo Marc,

ich kann auch keinen Fehler in Deinem Programm finden.

Ist der Prozessor mit dem richtigen Quartz versehen?

Grüße
Oliver

von Marc Schwarzbach (Gast)


Lesenswert?

Hallo Oliver,

der prozessor hat einen 4MHz Schwinger dran und läuft mit anderen 
Programmen Problemlos.

Welchen Wert hat der Timer eigentlich, nachdem er in den Interrupt 
reinläuft?? Ich bin davon ausgegangen, dass er einfach über die Null 
weiterzählt.

Gruss
Marc

von Oliver K. (Gast)


Lesenswert?

Hallo Marc,

Dein Reload-Wert stimmt auch. Habs grad nachgerechnet?!

Der Timer läuft immer rund. Das sollte nicht das Problem sein.

Am Besten im AVR-Studio simulieren. Haltepunkte setzen und die Zeiten + 
Pinsaugaben anschauen.

Grüße
Oliver

von Frankl (Gast)


Lesenswert?

Müssen die Servos nicht mit RPF von 50Hz = 20ms angsteuert werden ?

von Marc Schwarzbach (Gast)


Lesenswert?

Hallo Frank,

Die Servos sind, was die Wiederholrate angeht, recht genügsam...
Ich habe erst gar nicht gemerkt, dass ich grosse Lücken im Signal habe, 
als ich ein Servo dran hatte.

Nur wenn man dagegendrückt merkt man, dass es manchmal ruckt...

Man kann also sagen, je genauer ein Servo bei einer anliegenden Kraft 
die Position halten soll, umso höher muss die Frequenz sein.(da gibts 
aber wohl auch grenzen..)

Die 1-2ms müssen natürlich exakt stimmen.

MFG

Marc

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.