Hi,
Beliebig, das ist ja das Problem. Es kann ganz schnell sein, aber theoretisch auch einen Takt pro Stunde...PS: Wie lange dauert so ein Zyklus dann (die Servos sind ja solange ohne Ansteuerung.)?
Kann ab und zu funktionieren, in den meisten Fällen werden allerdings die Servos wild umherzucken.Kann ich das PWM Signal innerhalb eines Modulationsintervalls einfach abbrechen(zum Empfangen der neuen Stellung und dann neu senden)
Das würde auf jeden Fall passieren...ändert das noch die Stellung, wenn der letzte Pulz zu kurz ist?
Bei mir ists im Moment so, dass der Empfang der I2C Befehle im Hauptprogramm passiert. Die Servoansteuerung erfolgt über Timerinterrupts im Hintergrund. Das heißt allerdings, dass die Timerinterrupts zu jedem beliebigen Zeitpunkt auftreten können und damit das schöne Timing vermasseln...Ein Problem besteht dann darin das vermutlich deine Servosteuerung kurz unterbrochen wird (während der I2C Übertragung). Inwieweit das deine Servosteuerung beeinflußt mußt du selbst wissen, mit der genauen Impulsgenerierung für die Servos hab ich mich nicht beschäftigt. Da kann Kjion sicher was zu sagen, denn er kennt das Problem. Er sperrt Interrupts während der Servo-Signalgenerierung soweit ich mich erinnere. Dadurch ist aber dann die volle I2C Geschwindigkeit nicht mehr möglich (es würden Takte verpaßt werden).
Ohne die Servoansteuerung funktionierts auch mit vollen Geschwindigkeit ( hab mir zum Testen mal ein kleines I2C Display gebastelt )
Von dem Code der Oben für die Servoansteuerung gepostet wurde hat übrigens noch ein paar größere Fehler:
Die Servos werden nur angesteuert wenn ein Signal empfangen wurde. Das heißt man muss ständig die Positionen neu senden wenn man das Servo irgendwie belasten will. Des weiteren kann man keine Befehle empfangen während die Servos angesteuert werden. Das heißt man muss nach dem Senden eines Befehls erst eine Pause von mindestens 22 ms einhalten...
Als Master ist das ja egal, da man da beliebig viel Zeit zum Senden hat. Ansonsten wird halt die Senderoutine kurz unterbrochen und der Interrupt abgearbeitet...Ach ja: Was passiert eigentlich, wenn während des Sendens mit Bascom-I2C-Befehl ein Interupt 'reinkommt?
MfG Kjion
Lesezeichen