Hi,

sodana, meine Routine:

Code:
$regfile = "m32def.dat"                                     'verwendeter Chip
$crystal = 16000000                                         'Taktfrequenz
$hwstack = 32                                               'HardwareStack
$swstack = 32                                               'SoftwareStack
$framesize = 64

Config Timer1 = Timer , Prescale = 1
On Timer1 Servo
Enable Timer1
Start Timer1


'-----------------------------------------------------------------------'
'Verwendete Ports:                                                      '
'-----------------------------------------------------------------------'

Config Porta.0 = Output
Config Porta.1 = Output
Config Porta.2 = Output

Servo1 Alias Porta.0
Servo2 Alias Porta.1
Servo3 Alias Porta.2


'-----------------------------------------------------------------------'
'Variablendefinition:                                                   '
'-----------------------------------------------------------------------'

Dim Servo(6) As Word                                        'Array der Pulsweiten für Servos
Dim Servo_ein(6) As Byte                                    '1 - Servo eingeschaltet; 0 - Servo ausgeschaltet
Dim I As Byte : I = 0                                       'Zählvariable
Dim J As Word : J = 1                                       'Zählvariable
Dim Verzoegerung As Word                                    'zum Einstellen der Refresh - Rate
Dim Verzoegerungsservo As Byte


'-----------------------------------------------------------------------'
'Hauptprogramm:                                                         '
'-----------------------------------------------------------------------'

For J = 1 To 6                                              'alle Servos inkl. Verzögerunsservos einschalten
   Servo_ein(j) = 1
Next

Verzoegerung = 60000

Servo(4) = Verzoegerung                                     'Verzögerungsservos einstellen
Servo(5) = Verzoegerung
Servo(6) = Verzoegerung


Enable Interrupts                                           'Servointerrupt aktivieren


Do
For J = 15000 To 35000 Step 10
Servo(1) = J
Servo(2) = J
Servo(3) = J
Waitus 1000
Next

For J = 35000 To 15000 Step -10
Servo(1) = J
Servo(2) = J
Servo(3) = J
Waitus 1000
Next


Loop



'-----------------------------------------------------------------------'
'Funktionen:                                                            '
'-----------------------------------------------------------------------'

Servo:

   Select Case I
   Case 1 : Servo1 = 0
   Case 2 : Servo2 = 0
   Case 3 : Servo3 = 0
   Case 4 : Verzoegerungsservo = 0
   Case 5 : Verzoegerungsservo = 0
   Case 6 : Verzoegerungsservo = 0
   End Select

   Incr I

   If I = 7 Then
   I = 0
   End If

   If Servo_ein(i) = 1 Then

      Select Case I
      Case 1 : Servo1 = 1
      Case 2 : Servo2 = 1
      Case 3 : Servo3 = 1
      Case 4 : Verzoegerungsservo = 1
      Case 5 : Verzoegerungsservo = 1
      Case 6 : Verzoegerungsservo = 1
      End Select

   End If

   Timer1 = 65535 - Servo(i)

Return

ich hab auch ein kurzes Video gemacht:

http://de.youtube.com/watch?v=diCrlAC4-3w

die Routine ist noch nicht das gelbe vom Ei, da es eine maximale Anzahl der Servos gibt, die angesteuert werden können. Wird diese Zahl überschritten, werden die (analogen) Servos kraftlos, da der Impuls nicht mehr alle 20 ms wiederholt werden kann. Da ich aber pro ATMega eh nur 3 Servos ansteuere, reichts für mich.


Viele Grüße
ikarus_177