ich arbeite gerade an etwas ähnlichem und gehe folgendermassen vor:
alle 20ms (timer-interrupt) werden alle servo ports eingeschalten. nach einer weiteren ms wird in eine blockierende funktion gesprungen, die die servo-pins wieder abschaltet, in etwa so (opcode):
je nach servo-anzahl wird die auflösung natürlich geringer, bei mehr als 12 Servos sollte man evtl. auf 2 funktionen aufsplitten, die abwechselnd alle 10ms aufgerufen werden.Code:for(i=0;i<255;i++) // schleife dauert max. 1ms { if(i>servoposition1)SERVOPORTn=0; else warte_solang_wie_wenn_bedingung_erfüllt(); if(i>servoposition2).. ... }
da die funktion zeitkritisch ist, schreibt man sie am besten in assembler. den rest der zeit (18-19ms) hat man für andere berechnungen frei.
gruesse von der katz







Zitieren

Lesezeichen