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
Lesezeichen