Die Frequenz in deiner Brust liegt zwischen 1Hz und 3Hz. Falls nicht, schau besser mal bei Dr. Zook vorbei

Kennst du die Minimalzahl der Pulse?

prinzipiell mal so:
  • Über externen Takt lässt du Timer1 hochzählen und startest Timer2 über externen INT. Im INT wird der INT deaktiviert.
  • Wenn die Minimalzahl der Bursts erreicht ist, lässt du einen OutCompare1 triggern. In der ISR schaust du dir möglichst schnell den Wert von Timer 2 an und berechnest die Frequenz oder merkst die relevanten Daten. Timer1 wird angehalten.
  • In der zweiten Phase lässt du die restlichen Bursts verstreichen und schaltest in der Tod-Phase wieder alles scharf


Wenn die Anzahl der Bursts immer gleich ist, wird's einfacher.

Du musst genau wissen, welche asm-Befehle ausgeführt werden, um das wieder rauszurechnen. Oder deine Ungenauigkeit wird so groß, daß du mit dem Ergebnis nix anfangen kannst.

Wenn du die untere Frequenz kennst, könntest du auch alles messen und die untere wieder rausrechnen?

Mit grösseren AVRs geht evtl auch folgendes: ein Timer zählt die Pulse über externen Takt und ein anderer merkt immer den Zählerstand via InputCapture. Das InputCapture überschreibt bei jedem Peak den ICRx-Wert, aber das stört nicht. Du brauchst ja nur den letzten. In der Todphase hast du massig Zeit, den zu lesen.

Abwandlungen gibt es da bestimmt mannigfaltig...

Ich hoffe mal, du hast nen AVR, auf dem genug Bandbreite frei ist bzw der während dessen sonst nix machen muss und auf mindestens 8MHz rennt?

Wie du siehst, braucht mein Vorschlag massig Resourcen (mehrere Pins, InputCapture, 2 Timer, externen INT, OutputCompare, Wissen über die ausgeführten asm-Instruktionen/Latenzen)