Da gibt es 2 Ansatzpunkte zur Optimierung:
1. für Count könnte man im wesentlichen eine 8 Bit Variable nutzen, un die lange Verzögerung nach den Servo Pulsen seperat machen, z.B. indem man die Interrupts seltener macht. Der Zugriff auf das Feld könnte ggf. auch noch etwas schneller gehen, wenn man einen Pointer benutzt. Ob das viel bringt weiss ich aber nicht. Wenn es unbedingt sein muss gäbe es noch Assembler - gerade für Software PWM ist da ein recht großer Geschwindigkeitsvorteil drin, vor allem wenn die IO Ports günstig liegen.
2. Man macht die Servo Pulse nicht alle gleichzeitig, sondern versetzt nacheinander. Die Verzögerung kann man dann über das Timerregister einstellen, nicht über das Zählen von Interrupts. Allerdings ist man damit auf etwa 10 Servos beschränkt. Die 2 verbleibenden Servos könnte man per Hardware PWM (16 Bit) ansteuern. Als etwa komplizierte Alternative kann man auch immer je 2 Pulse parallel bearbeiten, um rund 1 ms versetzt. Das ist aber nicht so ganz einfach.
Lesezeichen