Die Messung der Frequenz über die ICP Funktion geht auch noch bei relativ hohen Frequenzen (bis über 100 kHz) mit mehr Auflösung als durch Zählen
Was zu beweisen wäre.
bei 100kHz hast Du genau 160 Takte, bevor der nächste ICP Interrupt auftritt.
Allein die Registersicherung verschluckt davon schon mal ca. 70 Takte, wenn man sie nicht abschaltet.
Dazwischen ist aus den ermittelten Werten die Frequenz zu berechnen.
Ich habs schon mit einem ATMEGA 32 Controller probiert.
Ab ca. 13kHz geht es los, das das Display rumzickt, weil das Display Timing nicht mehr stimmt. Ab 2 kHz ist die Zählerei genauer als die ICP Methode.
Gut, man könnte den ICP Interrupt sperren, bis alle dazugehörigen Aufgaben erledigt sind und erst dann wieder eine neue Messung starten, aber richtig toll find ich das nicht.
Das ICP Verfahren ist ab dem Zeitpunkt nicht mehr genauer, als die Zählmethode, wenn ein Wert höher oder niedriger des Counters mehr als einen Wert in der Torzeit überschreitet.
Wenn man mehrere Perioden zur Messung heranzieht wird das zwar etwas besser, aber irgendwann ist da auch Schluß.
Wo dieser Punkt liegt ist abhängig von der Torzeit der Messung und dem Prescaler des "ICP Timers".

Aber gut, hier gehts um einen Frequenzgenerator und nicht um einen Frequenzzähler.
Ich würde aber trotzdem eine Lösung mit einem speziellen DDS Chip vorziehen.
Guck mal bei ELV unter der Baubeschreibung für den DDS 130 Funktionsgenerator.
Das Teil könnte größtenteils übernommen werden. Lediglich den Controllerteil würd ich austauschen und der Filter ist lt. Simulation auch etwas wellig.

Ein Kollege und Ich basteln zur Zeit an einem Funktionsgenerator mit AD9834 ( DDS Chip ) , AD5620 ( D/A Wandler = Amplitudenmodulation ), AD8000 ( Ausgangsverstärker ) und nem ATMEGA 644 Controller rum.

Es ist dran gedacht Dreieck, Sinus und Rechtecksignale ( TTL Pegel ) zu erzeugen inklusive Wobbeln.
Das Teil soll AM, FM, und PPM Modulation beherrschen.
Ausserdem wird eine USB Schnittstelle reinkommen, mit der man die Parameter einstellen und die Modulatoren bedienen kann.

Die maximale Trägerfrequenz wird so zwischen 20 und 30MHz betragen.
Nach unten möchten wir bis 1Hz kommen.

Zur Zeit existieren nur mal die ersten Schaltpläne, mal gucken, was daraus wird.