Hallo,

das eine Problem habe ich gelöst, da tut sich schon das nächste größere auf ... dieser Versuch die 12 Servos zu steuern hat sich als problematisch erwiesen. Zur Übersicht nochmal eine Zusammenfassung des Ablaufs:

Nach jeder erfolgreichen Servoansteuerung (also 20 ms) werden die neuen Positionen berechnet (Dauer ca 4 ms). Dann werden die Einschaltzeiten nach der Dauer sortiert, die Differenzen berechnet und in einem Array abgespeichert (1 ms).
Jetzt beginnt der Zyklus, der 20 ms Timer aktiviert alle Ausgänge für die Servos und den 2. Timer mit der kürztesten Servozeit. Wenn dann der 2. Timer auslöst wird der 1. Ausgang der Sortierreihenfolge auf Aus gesetzt und es wird die nächste Differenzwartezeit für diesen Timer gesetzt. Und der nächste Servo wird abgeschaltet ... usw usw...

Dummerweise benötigt der Vergleich im Timer 2, welcher Servo als nächstes ausgeschaltet werden muss, ganze 15 µs - also verzögert sich der 2. Timer jedesmal um diese Zeit. Bei 12 Servos macht das dann ca 180 µs. Bedenkt man jetzt die Impulszeit für die Servos von 1-2 ms so sind das minimal 9% Abweichung des Drehwinkels der letzten Servos.

Als Mikrocontroller verwende ich den genannten Atmega168 mit einem 16-Bit Timer und zwei 8-Bit Timern und einer Taktung von 16 MHz.

Nun Suche ich nach einem alternativen Lösungsweg, wie ich es schaffen kann die Servos sauber (ohne Abweichung) anzusteuern und trotzdem nebenbei noch Berechnungen auszuführen. Ich möchte keine komplette Lösung, aber vielleicht hätte jemand einen Denkanstoß, wie ich das lösen könnte?
Ich weis, dass 3 Timer eigentlich zu wenig für diese Aufgabe ist, aber trotzdem würde ich es gerne schaffen, den Roboter endlich mal fertigzustellen!

Gruß Erik