Hi,
ich meinte, der Wert für den Servo, der der Funktion übergeben wird, ändert sich mit 1kHz, die Funktion selber ist so ausgelegt, 3 Servos anzusteuern. Zuerst wird der erste Servo mit dem Puls versorgt, dann der zweite und der dritte. Durch die Pulse der anderen Servos entsteht schon sowas wie eine Pause im Signal, die aber je nach Dauer der Pulse der anderen beiden Servos variabel ist. Deshalb habe ich noch 3 zusätzliche "Dummyservos" definiert, die ebenfalls angesteuert werden, und so die Pause verlängern.
Aber hier mal der Code:
Code:
$regfile = "m32def.dat" 'verwendeter Chip
$crystal = 16000000 'Taktfrequenz
$hwstack = 32 'HardwareStack
$swstack = 32 'SoftwareStack
$framesize = 32
'-----------------------------------------------------------------------'
'Timer initialisieren: '
'-----------------------------------------------------------------------'
Config Timer1 = Timer , Prescale = 8
On Timer1 Servo
Enable Timer1
Enable Interrupts
'-----------------------------------------------------------------------'
'Portdefinition: '
'-----------------------------------------------------------------------'
Config Porta.0 = Output
Servo1 Alias Porta.0
Config Porta.1 = Output
Servo2 Alias Porta.1
Config Porta.2 = Output
Servo3 Alias Porta.2
'-----------------------------------------------------------------------'
'Variblendefinition: '
'-----------------------------------------------------------------------'
Dim Servo(7) As Word 'Array für die Servowerte
Dim I As Byte 'Zählvariable
I = 1
Dim J As Word
Dim K As Byte
Dim Dummyservo As Byte
Const S = 5000
'-----------------------------------------------------------------------'
'Hauptprogramm: '
'-----------------------------------------------------------------------'
For J = 4 To 7
Servo(j) = S
Next
Gosub Enable_servos
Do
For J = 2500 To 3500
Servo(1) = J
'Servo(2) = 1500
'Servo(3) = 1500
Waitms 1
Next
Loop
Enable_servos:
Start Timer1
Return
Disable_servos:
Stop Timer1
Return
Servo:
Select Case I
Case 1 : Servo1 = 0
Case 2 : Servo2 = 0
Case 3 : Servo3 = 0
Case 4 : Dummyservo = 0
Case 5 : Dummyservo = 0
Case 6 : Dummyservo = 0
Case 7 : Dummyservo = 0
End Select
Incr I
If I = 7 Then I = 0
'-----------------------------------------------------------------------'
'Portpin des gewählten Servos wieder auf 1 setzen: '
'-----------------------------------------------------------------------'
Select Case I
Case 1 : Servo1 = 1
Case 2 : Servo2 = 1
Case 3 : Servo3 = 1
Case 4 : Dummyservo = 1
Case 5 : Dummyservo = 1
Case 6 : Dummyservo = 1
Case 7 : Dummyservo = 1
End Select
Timer1 = 65535 - Servo(i)
Return
Wie gesagt, dieses Programm funktioniert wunschgemäß, im IK Programm "verpackt" allerdings, produziert die Funktion nur noch Müll...
Viele Grüße
Lesezeichen