Passenden Code gibt es im RN-Wissen unter Servoansteuerung.
Passenden Code gibt es im RN-Wissen unter Servoansteuerung.
Also haltet ihr die Hardwaremethode nicht vorteilhaft? Dann mache ich es einfach so wie immer? :
Code: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 = 6 Then Timer1 = 40000 '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
Gruß
MiniMax
Wenn man mit der Ansteuerfrequenz höher gehen kann, wie im Kommentar oben im Code angedeutet, kann man ggf. auch mit 8 Bit PWM noch brauchbare Ergebnisse (z.B. 40 Stufen) bekommen.
Bei dem Basic Code hätte man dann zur Not noch die Möglichkeit für die Servos inline ASM zu nutzen - das bringt gegenüber Bascom schon ein merkliche Beschleunigung und weniger Speicherbedarf (Interrupts sind nicht gerade die Stärke des Bascom Compilers). Hat man für die Servos einen ganzen Port reserviert, kann man auch den Basic-Code noch kürzer machen (array Zugriff statt der if then else Konstruktion) .
Mhmm Ok also fasse ich zusammen:
1. Servoansteuerung wie gehabt mit 16 bit Timer & Interrupts
2. Bei mehr Geschwindigkeitsbedarf ASM inline nehmen
Ich werde das dann erstmal aufs Board bringen und dann Testen ob und in wie weit mir der Interrupt dazwischen funkt.
Vielen Dank an euch alle
Gruß
MiniMax
Bei der Softwarelösung braucht man nicht unbedingt einen 16 Bit timer, das geht auch mit einem 8 Bit Timer nicht so viel schlechter. Mehr als etwa 50-100 Schritte könnte die meisten Servos mechanisch nicht Auflösen, und dafür reicht auch ein 8 Bit Timer, denn hier muss der Timer nur die Pulslänge auflösen, nicht die ganze Periode - für die Wartezeit am Ende kann man wenn nötig den Vorteiler umstellen.
Lesezeichen