Kannst Du mir bitte erklären, wieso Du weißt, dass drei Timer für diese Aufgabe zu wenig sind ? ? ?
Schau Dir doch bitte da oben an, wie ich meine Lösung für 10 Servos gemacht habe. Auf einem (E I N E M) Timer, bei dem ich beide Output Compare Units von Timer1 benutze. Eine als Takt für den sequentiellen Servopuls und einen für die tatsächliche Pulslänge in dem gerade aktuellen Pulsabschnitt. Ausrüstung: mega328/20 MHz, clk/64 => 312 500 Hz, OCR1A = 6250 => alle 20 ms ein Interrupt. Das geht bei mir mit 10 mal OCR1A = 800. Ergibt 25,6 ms - hab ich schon erfolgreich getestet. Nutzbar sind bei mir Pulse - gesteuert durch OCR1B zwischen 780 und 120, dann gehts bis in die Anschläge. Die Pulse werden in der ISR der Output Compare Unit A gestartet. Für einen 90° Schwenk brauche ich bei meinen Servos und der genannten Controllereinstellung ziemlich genau ne OCR1B-Differenz von 300. Oberer OCR1B-Wert bei einem 90°-Schenk wären also 120+300, mindestens 420. WENN ich zwölf Servos bräuchte, dürfte ich also 1/12tel als Takt nehmen . Andersrum - der 90°-Schwenk würde nicht mal an die Grenze der Funktion meiner Servos gehen.
Viele Servos kommen ohne Störung mit mehr als 20 ms Periodenzeit aus, dies ist ein allgemein verbreitetes Statement. Nachteil: ich habe es eben NICHT an allen, sogar nur an gaaanz wenigen Servos getestet. Die eben genannte Controllereinstellung macht eine Periodendauer von satten 25 ms. Wie gesagt, bei mir läufts.
Ich meine eben, dass bei Deinen zwei Timern schon einer zuviel beschäftigt wird.
Nachträge: wenn Dir die 300 Ticks für 90° eine zu grobe Auflösung bieten, kannst Du auch bei 20 MHz mit clk/8 fahren - dann wird für OCR1A 50000 fällig - gibt auch 20 ms. Für OCR1B gäbs dann wieder das Zwölftel *ggg*, und diese Auflösung kann wohl kein handelsübliche Modellbauservo bieten.
Ach so, ich hoffe Dir ist klar, dass dies alles auch für den m168 gilt. Für andere Quarze musst Du eben selber rechnen.
Lesezeichen