Hi,
schaut euch doch mal die Hilfe der IDE genauer an...
Du benötigst keinen extra Controller für die Servos, es gibt bei der
CC Pro einen Servo Befehl damit kannst du problemlos 18 Servos ansteuern!
Code:
// Ansteuerung von 3 Servos und beenden nach 10 Sek.
void main(void)
{
byte servo_var[30]; // Servo interne Variablen
// Max. 10 Servos, 20ms Intervall, Timer 3
Servo_Init(10, 1, servo_var, 1);
Servo_Set(7, 2000); // Servo Portbit 7 2000µs
Servo_Set(6, 1800); // Servo Portbit 6 1800µs
Servo_Set(5, 1600); // Servo Portbit 5 1600µs
AbsDelay(5000);
Servo_Set(7, 1000); // Servo Portbit 7 1000µs
AbsDelay(5000);
Servo_Set(7, 0); // alle Servos aus
Servo_Set(6, 0);
Servo_Set(5, 0);
}
void Servo_Init(byte servo_cnt, byte servo_interval, byte ramaddr[], byte timer);
Sub Servo_Init(servo_cnt As Byte, servo_interval As Byte, ByRef ramaddr As Byte, timer As Byte)
Beschreibung
Initialisiert die Servoroutinen. Der Parameter servo_cnt gibt an wieviele Servos gleichzeitig betrieben werden. Die Periodenlänge (10 oder 20ms) wird mit servo_interval gesetzt, der Parameter timer bestimmt, welcher 16-Bit Timer eingesetzt wird. Timer 3 steht allerdings nur bei dem Mega128 zur Verfügung. Der Anwender muß den Servoroutinen Speicher zur Verfügung stellen. Die Größe beträgt servo_cnt * 3. Möchte man also 10 Servos betreiben, so sollte man ein byte Array von 30 Bytes reservieren.
Für die Servoansteuerung wird ein 16-Bit Timer benötigt. Dies ist entweder Timer 1 oder Timer 3 (bei Mega12. Wird der Timer abgeschaltet oder für andere Timerfunktionen genutzt, so wird die Servoansteuerung nicht arbeiten.
Parameter
servo_cnt Anzahl der möglichen Servos (maximal 20)
servo_interval Periodenlänge (0=10ms, 1=20ms)
ramaddr Adresse des Speicherblocks
timer Für die Servosteuerung benutzter 16-Bit Timer (0=Timer 1, 1=Timer 3 nur Mega12
Syntax
void Servo_Set(byte portbit, word pos);
Sub Serial_Init(portbit As Byte, pos As Word)
Beschreibung
Setzt die Pulslänge zur Steuerung des Servoarms. Der Ausgangsport wird über den portbit Parameter angegeben. (Für die Abbildung zwischen Portbits und den Pins des Atmel Mega Chips siehe Pinzuordnung von M32 und M12.
Alle Pulslängen der gestellten Servos dürfen als Summe nicht die Periodenlänge (servo_interval Parameter) überschreiten, da sonst ein erratisches Verhalten auftritt. Man kann daher z.B. 8 Servos auf 2500µs Pulslänge bei einer Periodenlänge von 20ms setzen. Zur Sicherheit sollte man allerdings ein wenig unter der Periodenlänge bleiben.
Parameter
portbit Bitnummer des Ports (siehe Tabelle)
pos Pulslänge zur Steuerung des Servoarms in µsec (500 - 2500)
Um eine schöne Liniare Bewegung zu erreichen, kannst du die Routinen von einer 10mS Timer Routine aus refreshen...
Grüße
Lesezeichen