Ich würde für diese Aufgabe den ICP Interrupt nutzen.
Zuerst wird das sensing auf steigende Flanke gestellt.
Wenn die dann kommt wird das ICP Timer register ausgelesen und das Sensing auf fallende Flanke umgestellt.
Tritt die dann auf wird das ICP Register wiederum ausgelesen un der vorherige Wert abgezogen.
Das Sensing muss dann für den nächsten Impuls wieder auf steigende Flanke umgestellt werden.
Bei 8MHz Taktfrequenz und einen Prescaler von 8 kriegst Du damit einen Auflösung von 1µS.
Du müsstest dann allerdings einen 16Bit Timer nehmen, weil der Zählerstand ja immer über 255 liegt.
Die ermittelte Impulslänge kann dann in einer Variable abgespeichert werden. Ich würde dann noch ein Flag ( Bit Variable ) setzen, damit dieser neue Wert im Hauptprogramm bekannt gemacht wird und verarbeitet werden kann.
Das System läuft gut und scheinbar im Hintergrund, da alle zeitkritischen Operationen im Interrupt stattfinden, also Laufzeiten im Hauptprogramm keinen Einfluss auf die Impulsauswertung haben.
Lesezeichen