Ach ja, ich wollte noch ne kleine Frage dazu stellen:

Warum holst du dir für deine ganzen Servos dann nich nen Mega32 extra, das kostet dich mit Grundschaltung bei Reichel 5-7€ und du kannst mit diesem delayCycles(); (sofern es das da auch gibt) die Servos alle zusammen ansteuern, also halt eine Funktion schreiben, bei der das mit einer blockierenden Delayfunktion auch geht(etwas viel schreibarbeit, aber doch machbar)

etwas komfortabler geht es natürlich mit nicht-blockierenden Delayfunktionen, danach Suche ich aber selber grade...

Wenn ich nix finde oder mal lust zum proggen hab mach ich dir nen entwurf zu o.g. funktion für delayCycles();


man muss dabei vermutlich aber die Werte von Servo1 bis ServoX per Parameter übergeben denke ich, das ist zwar auch wieder ein bisschen was zum schreiben, aber wenns nicht gleich 100 sind geht das schon

Wenn ihr so eine nicht-blockierende Delayfunktion in der Standard AVR-Lib findet, dann bitte unbedingt mitteilen, damit geht das alles viel einfacher, man liest einfach Variablen Servo1 bis ServoX aus und stellt in eine while-Schleife lauter if-Bedingungen mit if(delayvar==Servo1){<Servoleitung auf low>}
und am Anfang jedes mal die delayvar einlesen...


Kurze Zusatzfrage: Kann man bestimmen, wie lange eine Schleife in ms braucht, 1x durchzulaufen?
das wäre dann am einfachsten, wenn das geht

man kalibriert einmal am Anfang im Programm nach der Zeit, die die Schleife braucht und dann in der endlosschleife gibt es eine Variable, die sich bei jedem Durchlauf um 1 erhöht

Mit bestimmen meine ich in diesem Fall, ob das eine Rolle spielt, ob eine if-Bedingung mit Port-auf-low-setzen ausgeführt wird oder nur abgefragt und die Bedingung false ist

Code:
void task_Servos()
{
<Delay>  //hier genau 1 Sekunde Delay für unteren Anschlag
task_0Grad();
task_1Grad();
task_2Grad();
task_3Grad();
task_4Grad();
task_5Grad();
task_6Grad();
:
:
:
:
task_180Grad();
}

void task_0Grad()
if(Servo1==0)
{//Servoleitung auf Low
}
if(Servo2==0)
{//Servoleitung auf Low
}
:
:
:
if(ServoX==0)
{//Servoleitung auf Low
}

}

void task_1Grad()
{
<Delay>  //hier lange genug für ein weiteres Grad warten
if(Servo1==1)
{//Servoleitung auf Low
}
if(Servo2==1)
{//Servoleitung auf Low
}
:
:
:
if(ServoX==1)
{//Servoleitung auf Low
}

}

void task_2Grad()
{
<Delay>  //hier lange genug für ein weiteres Grad warten
if(Servo1==2)
{//Servoleitung auf Low
}
if(Servo2==2)
{//Servoleitung auf Low
}
:
:
:
if(ServoX==2)
{//Servoleitung auf Low
}

}

usw.


Naja, da könnte man dann unabhängig von der Anzahl der Timer belibig viele Servos ansteuern, vorausgesetzt man hat genug Pins und aber auch Servos


MfG Pr0gm4n

EDIT: Wenn ich mich jetz nicht recht irre, dann muss man glaube ich aufpassen, dass man am Anfang alle task-Funktionen als Prototypen anführt, damit das keinen Fehler ausgibt (Prototyp der Funktion printf(Parameter) ist: printf(Parameter); das man einfach ganz oben unter dem "Include" aufruft)