Liste der Anhänge anzeigen (Anzahl: 1)
Das ist ein ziemlich typisches Phänomen, was darauf zurückzuführen ist, dass die Anzahl der gemessenen Taktzyklen immer um den Wert 1 hin- und hergeht - und zwar auch dann, wenn der zu messende Impuls exakt auf die Nanosekunde konstant bleibt. Und das liegt letzten Endes daran, dass der Interrupt nicht dann ausgelöst wird, wenn sich der Pegel des zu messenden Signals ändert, sondern genau betrachtet erst mit der ersten steigende Flanke des Controller-Taktes nach dem Pegelwechsel des INT-Eingangs. Ich glaube ich male mal ein Bild und erkläre es damit:
Das Gemälde soll sieben Taktzyklen darstellen sowie einen Impuls, der die Länge von 4,5 Taktzyklen hat. Angenommen der Controller fragt seine Eingangspins immer bei der steigenden Taktflanke ab, wird er beim Impuls A eine Änderung zu Beginn der Taktimpulse 2 und 6 registrieren. Beginnt der gleiche Impuls einen halben Systemtakt später, wird der LH-Übergang zwar immer noch zu Beginn des Taktimpulses 2 erkannt, der HL-Übergang aber erst mit dem Taktimpuls 7 - er ist also scheinbar länger. Das ganze ist also darauf zurückzuführen, dass die Flanken des zu messenden Impulses und des Taktimpulses nicht synchronisiert sind. Bestimmt gibt´s in der Expertensprache auch einen schlagkräftigen Fachbegriff für dieses Phänomen - aber ich kann´s nur so erklären.
Wenn Du einen Controller mit ´ner UART-Schnittstelle hättest, könntest Du Dir nach jedem Servoimpuls die gemessene Länge ausdrucken lassen und würdest sehen, dass sie auch beim stabilsten Impuls immer um 1 variiert. Das macht sich natürlich nicht bemerkbar, wenn die gemessenen Werte weit weg von Deiner Entscheidungsgröße sind. Aber wenn sie genau auf der Grenze liegen, wird der Port halt im schnellen Wechsel ein- und ausgeschaltet.
Abhilfe kann hier eine Art "Software-Hysterese" schaffen: Wenn die gemessene Impulslänge den Grenzwert in eine bestimmte Richtung überschritten hat, wird der Grenzwert einmalig (!) um den Wert 1 oder 2 in die Gegenrichtung verschoben, und auf dem Rückweg wieder zurück. Das lässt sich relativ einfach programmieren :-)
Kleiner Nachtrag: Wenn er zu messende Impuls exakt ein ganzzahliges Vielfaches des Taktimpulses ist, tritt dieses Phänomen natürlich nicht auf - aber dann sind der zu messende Impuls und der Taktimpuls ja auch synchronisiert...
Anhang 31447