Mein Gedanke war....
Der Servopin (High oder Low) wird verändert wenn OVF1 ausgelöst wird. Also der Timer1 überläuft. Der Timer1 wird ja z.B. mit ca. 62535 vorgeladen. Bei einen Teiler von 8 schafft der Controller die fehlenden 3000 Schritte bis 65535 in gut und gerne 1,5ms was Mittelstellung am Servo bedeutet. Wenn jetzt z.B. bei 65534 irgendein andere Interrupt ausgelöst wird, wird das OVF1 Bit ignoriert da erst mal der andere Interrupt ausgelöst wird. Der Timer1 läuft trotzdem über und zählt weil er kein neuen Wert zugewiesen bekommen hat von 0 bis 65535 hoch. Was dann ca. 32ms pause am Servo Pin bedeutet. Selbst wenn er im laufenden Programm mit 62535 wieder vorgeladen wird fehlt den Servopin immer noch ein Schritt was dann ja die doppelte Signalzeit bedeutet. Also 3ms was für das Servo so oder so ein Vollausschlag bedeutet. Ich errinere mich an das Oszi-Bild von Nils. Da war deutlich eine zweite Flanke zu sehen. Zudem laufen im Standard Tricopter Programm insgesamt 3 Interrupts.
Aus anderen Projekten hab ich das Phänomen schon öfters beobachtet vor allem wenn man viel in einen Interrupt abarbeitet oder es um Zeit kritischen Sachen geht.
Gruß
Matthias
Lesezeichen