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
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
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
Hallo Marc, ich kann auch keinen Fehler in Deinem Programm finden. Ist der Prozessor mit dem richtigen Quartz versehen? Grüße Oliver
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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.