Man könnte alle 2/256ms einen Zähler hochzählen und ihn mit den gewünschten Positionen der Servos vergleichen. Ist der Zähler kleiner als die Servoposition, wird der Ausgang für den Servo geschaltet, ansonsten halt nicht.
Als Pseudocode
Code:
servo0 = 100
servo1 = 200
solange(1) {
solange (zähler<2ms) {
erhöhe zähler um 1
wenn zähler < servo0 dann aktiviere ausgang servo0 sonst deaktiviere ausgang servo0
wenn zähler < servo1 dann aktiviere ausgang servo1 sonst deaktiviere ausgang servo1
}
deaktiviere alle ausgänge für 18ms
starte von vorn;
}
Statt die Ausgänge hintereinander zu setzen ist es natürlich auch möglich, die Bits in einem Byte entsprechend der gesetzten Ausgänge zu ändern und das Byte an den Port zu schicken.
Damit wäre der Controller vermutlich etwas überlastet oder? Wenn man keine Auflösung von 256 Schritten benötigt, könnte man die Auflösung auch kleiner wählen und hätte zwischen den einzelnen Zählervergleichen mehr Zeit für andere Dinge.
Lesezeichen