ich werds versuchen:
Pseudocode:
Code:
#define SERVO1_LOW PORTA&=~(1<<0)
...
#define SERVO8_LOW PORTA&=~(1<<7)
servozeiten[anzahlServos];
servozahl[anzahlServos];
servo_count = 9;
init(){
for(/*alle servos*/){
servozeiten[i] = 1,5ms; //natürlich musst du das in taktzyklen umrechnen
servozahl[i] = i;
}
}
main(){
init();
for(;;){/*tu was (zb Servos setzen)*/}
}
ISR(){
switch(servo_count){
case 0:
SERVO1_LOW;break;
case 1:
SERVO2_LOW;break;
....
case 9:
//sortieren von servozeiten und servozahl (dafür hast du 2^16 zyklen zeit, da der timer max 16bit hat)
//differenz zwischen servozeiten brechnen
//warten bis 20ms vorbei sind (bitte nicht mit delay_ms() sondern den timer so oft setzen und nichts tun bis die 20ms vorbei sind)
//Pins auf high setzen
}
//timer auf nächsten IR setzen
}
Ich hoffe ich hab nix vergessen
LG
Lesezeichen