Willkommen im Forum,
Ich würde einen PCINT (Pin Change Interrupt) verwenden. In der ISR prüfst du ob der Pegel high oder low ist und je nachdem setzt du den timer auf 0 oder ließt den Zählerstand aus.

Als Pseudocode:

Code:
ISR (PCINT)
{
Wenn PIN == high
{
TCNT = 0
}
Sonst
{
Zähler = TCNT
}
Im main wertest du die Variable Zähler aus und reagierst dementsprechend. Zum Thema Timer, je nach Genauigkeit, die du haben willst, nimmst du einen 8 oder 16 bit Timer, der 8 bit zählt von 0 bis 255 und fängt wieder bei 0 an, der 16 bit Timer zählt bis 65535. Wie er zählt hangt von der Taktquelle und dem Prescaler ab. Die Frequenz mit der der Zähler um 1 weitererzählt ist Takt/Prescaler. Bei 8MHz und Prescaler von 1024 ergibt sich eine Frequenz f von ca. 7813Hz, mit der der Zähler weitererzählt (ca. Alle 128us). Du musst jetzt beachten das der Timer nicht überläuft bzw darauf achten und reagieren, aber auch das ein sinnvoller Zähler wert herauskommt

Mfg Hannes