Was für dich funktionieren sollte wäre eine Servoimpuls Auswerteroutine.
In dieser Routine wird auf eine positive Flanke eines Signals gewartet.
Tritt diese auf wird auf den Abfall dieses Signals gewartet und die Zeit (Timer) gemessen.
Du lässt die Umschaltung "warten auf die negative Flanke weg" und hast deine Auswertung.

Was ebenso funktionieren sollte wäre eine Drehzahlmesser Routine.
Allerdings dann eine, die nicht mit einer fixen Torzeit, sondern mit der Erfassung der Umlaufzeit arbeitet (Das zu messende Signal arbeitet als Torzeitquelle).

Eine Ausnahme wäre, wenn deine Frequenzen sehr hoch wären.
Da würde die fix Torzeitmethode eine wesentlich geringere Belastung des Controllers bedeuten.
Ich hab so mit Assembler eine Routine hingekriegt die bis zu 13kHz fehlerfrei arbeitet (Läuft über INT0).
Wenn Du dein Signal als externe Taktquelle konfigurierst wären noch wesentlich höhere Frequenzen möglich.

In welchem Frequenzbereich bewegt sich denn dein Signal ?
3...4 kHz sollte so ein ATMEL AVR in der Periodendauermethode locker packen.

Periodendauermessung:
Wenn Du die Routine selber schreiben willst lässt Du den Timer 1 frei laufen und schliesst dein Signal an den ICP Pin an.
Bei jeder positivern Flanke wird ein Interrupt getriggert der das Input Capture Register (und eventuelle Überlaufregister) ausliest und die Werte der vorhergehenden Messung abzieht.
Das Ergebnis ist die Periodendauer deiner Eingabefrequenz.

Wenn Du den Controller mit 8MHz laufen lässt und den Prescaler auf 8 einstellst kriegst Du deine Timerwerte gleich in µs aus dem Timer raus - ist doch praktisch, oder.
Wenn es bei Dir um sehr niedrige Frequenzen geht kannst Du den Prescaler natürlich auch auf größere Teilerfaktoren einstellen.

Der Hauptaufand ist es die richtigen Bits in den Registern des Timers 1 einzustellen, die Interruptroutine selber ist Pipifax:
1.Register sichern
2.Das ICR auslesen.
3.Die Werte des vorherigen Interrupts abziehen.
4.Die aktuellen Werte in einem Puffer ablegen (für den nächsten Interrupt)
5.Den berechneten Zeitwert zur weiteren Verarbeitung zwischenspeichern.
6.Eventuell ein Flag setzen, das es neue Werte gibt (ich mach das immer so)
7.Die Register zurücksichern
8.Interrupt verlassen.

Der Rest der Verarbeitung passiert im Hauptprogramm, gesteuert durch das Flag aus der Interruptroutine.
Wenn Dir die 16Bit des Timers 1 nicht reichen, kannst Du noch einen Timer1Overflow Interrupt aktivieren, in dem Du ein, zwei, drei, weitere Register hochzählen lässt.

Ich würde für deine Anwendung mindestens einen ATMEGA8 einsetzen, da der sehr preisgünstig ist und trotzdem schon vollwertige Timer hat - im Gegensatz zur Tiny Serie.

Ich bastel zur Zeit an einer Telemetrieübertragung mit Drehzahlmesser.
Das Programm ist in "C" mit Codevision AVR geschrieben, die für Dich relevanten Programmteile sind in Assembler.
Ab einer bestimmten Drehzahl wird zwischen den beiden Meßmethoden umgeschaltet. Wenn Du magst kann ich Dir den Code als PN mal schicken.