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







Zitieren

Lesezeichen