hallo,
hat soweit funktioniert auch wenn ich die eigentlichen servowerte durch annäherung herausbekommen habe.

habe nur ein problem und zwar nutze ich die mg995 servos. nur kann ich diesem um max. 180grad bewegen. alle werte die drüber gehen würden fährt der Servos nur bis zu den 180grad werten normal an danach nur sehr langsam .. esseiden ich wähle einen extrem hohen wert dann schläg der servo aber mit voller geschwindigkeit an den endanschlag dieses sollte ja vermieden werden. weis da jemadn eine lösung?

code sieht nun so aus:
Code:
$regfile = "m8def.dat"
$crystal = 3686400
$baud = 19200
$framesize = 64
$swstack = 64
$hwstack = 64
Config Timer1 = Timer , Prescale = 1                        'timer für Servos
Enable Timer1
Timer1 = 56320
Config Portb = Output
Portb.0 = 0                                                 'hier hängt servo1
Portb.1 = 0                                                 'hier hängt servo2
Portb.2 = 0                                                 'hier hängt servo3
Portb.3 = 0                                                 'hier hängt servo4

On Timer1 Servoirq                                          'servo

Enable Interrupts

Dim Kanal As Byte
Dim Servo(4) As Word                                        'links: 63200, mitte 60000, rechts 56800
Do
Servo(1) = 63200                                            'mitte
Servo(2) = 60000
Servo(3) = 56800
Servo(4) = 60000
Wait 1
Servo(1) = 60000                                            'mitte
Servo(2) = 56800
Servo(3) = 63200
Servo(4) = 60000
Wait 1
Servo(1) = 56800                                            'mitte
Servo(2) = 63200
Servo(3) = 60000
Servo(4) = 60000
Wait 1

Loop

Servoirq:
If Kanal = 0 Then
   If Portb.0 = 0 Then                                      'wenn port low
      Timer1 = Servo(1)                                     'dann timer auf entsprechende verzögerung
      Portb.0 = 1                                           'und port anschalten
   Else                                                     'das hier passiert erst bei dem darauf folgenden interrupt
      Portb.0 = 0                                           'dann port wieder ausschalten
      Incr Kanal                                            'und den nächsten kanal bearbeiten
   End If
End If
If Kanal = 1 Then
   If Portb.1 = 0 Then
      Timer1 = Servo(2)
      Portb.1 = 1
   Else
      Portb.1 = 0
      Incr Kanal
   End If
End If
If Kanal = 2 Then
   If Portb.2 = 0 Then
      Timer1 = Servo(3)
      Portb.2 = 1
   Else
      Portb.2 = 0
      Incr Kanal
   End If
End If
If Kanal = 3 Then
   If Portb.3 = 0 Then
      Timer1 = Servo(4)
      Portb.3 = 1
   Else
      Portb.3 = 0
      Incr Kanal
   End If
End If

If Kanal = 4 Then
  Timer1 = 21300                                            '54016  eine pause von ca. 12ms bis zum nächsten interrupt. Bei guten Servos oder Brushlessreglern kann man hier bis auf 65530 gehen ==> ansteuerfrequenz von ~ 200Hz
  Kanal = 0
End If
Return
End