Hi Tryan, hallo Besserwessi,

Tryan, meine Bemerkung mit "Dumm ... BASCOM" ... war natürlich von mir dumm ausgedrückt. Ich meinte damit blos, dass ich von Bascom nix verstehe. Ich hoffe nur, dass Du nichts anderes rausgehört hast.

Die Frequenz von 1 Hz zu zählen mit den Takten des ICP kommt mir schwierig vor:
Zitat Zitat von RN-Wissen
Input Capture
... Die typische Anwendung ist die Messung von kurze Zeiten ...
und weiter
Zitat Zitat von RN-Wissen
Input Capture
... Etwas komplizierter wird es wenn die 16 Bit Auflösung nicht mehr ausreicht ... wesentliche Schwierigkeit ... Fall ... berücksichtigen, dass ein Überlauf Interrupt und der ICP Interrrupt fast gleichzeitig ausgelöst werden ...
Und dieses Nicht-Ausreichen bei etwas längeren Zeiten hatte mich abgeschreckt. Schliesslich zählst Du z.B. bei einem 4MHz-Quarz und einer Frequenz von 1 Hz bis 4 Millionen hoch . . . . . . Ich arbeite bevorzugt mit einem mega168 bei 20 MHz. Daher hatte ich mir für meine Zeitmessungen (in C) einen Timer geschrieben, der einen 50 µs-Interrupt auslöst und in der ISR eine Variable hochzählt. Die zeigt bei 20 000 eben genau eine Sekunde und kann bis über 60 000 gehen, da ich eine 16bit-unsigned-integer verwende. Ich kann also Zeiten bis über drei Sekunden ohne Überlaufprobleme messen. Diese Auflösung würde bei Deiner Einteilung der drei Größenordnungen 1 ... 1000 Hz doch reichen. Ich lese bei mir beim externen Interrupt die aktuelle Zeit aus. Du könntest so z.B. in der ISR des externen Interrupts die Variable in einen Wert für das Nicht-Interrupt-Modul sichern, danach die Zählvariable auf Null setzen und damit eine neue Zeitmessung starten. Im "Nicht-Interrupt-Modul" - also main oder einem Unterprogramm - wird dann der gesicherte Wert in eine Frequenz umgerechnet und die LED geschaltet. Sieh das bitte aber nur als Vorschlag, ich bin wirklich nicht firm im Frequenzmessen. (Anmerkung: der informative und praktische RN-Wissen-Abschnitt stammt ja von Besserwessi - ich habs nur gelesen ).