Deine Anfrage ist irgendwie unklar.
Willst Du nun eine Frequenz messen, oder beim anliegen eines periodischen Signals eine Variable hochzählen, oder eine Kombination von beiden?
Grundsätzlich gibt es für die Frequenzmessung mehrere Methoden.
1. Eine wäre eine echte Frequenzmessung mit fester Torzeit.
Du gibst die unbekannte Frequenz auf den Takteingang eines Timers und konfigurierst einen 2ten Timer so, das er nach genau einer Sekunde einen Interrupt produziert. In diesem Interrupt wird der Zählerstand des ersten Timers ausgelesen und wieder auf 0 gesetzt für die nächste Messung und ist dann ein direktes Maß für die Frequenz.
Diese Methode eignet sich eher für hohe Frequenzen und ist relativ Jitterstabil.
2. Eine weitere wäre die Messung der Periodendauer.
Ein Timer läuft frei, lediglich Overflows müssen erkannt werden.
Das unbekannte Signal wird auf den Input Capture Pin des verwendeten Timers gelegt und der zugehörige Interrupt freigegeben.
In diesem Interrupt wird dann der Zählerstand des vorherigen Interrupt vom aktuellen Wert abgezogen und bildet dann ein Maß für die Periodendauer des Signals.
Diese Periodendauer muss dann unter Berücksichtigung der Timerfrequenz in eine Frequenz umgerechnet werden.
Die Umrechnung bitte nicht in der Interruptroutine machen, sondern im Hauptprogramm.
Diese Methode ist sehr gut für niedrige Frequenzen geeignet ( jede Periode produziert einen Interrupt ) und liefert sehr schnell neue Ergebnisse.
Nachteil der Methode ist, das immer nur eine Periode des Eingangssignals gemessen wird. Unregelmässige oder verjitterte Signale machen bei dieser Methode Probleme. Also mehrere Messungen samplen und einen Mittelwert daraus bilden.
Mir ist auch nich ganz klar was Du mit der LED meinst. Hast Du die LED als Fotodiode verwendet? Nimmst Du das Signal mit einer Fotodiode oder einem Fotowiderstand vom Licht der LED ab, oder gehst due einfach auf die Anschlusspins der LED ???
Ich denke auch, das Du das LED Signal, wo immer es auch herkommt über einen Schmitt Trigger in ein sauberes Rechtecksignal umformen musst.
Dann würde ich noch ein Flag anlegen "1kHz Signal vorhanden". Wenn ein 1kHz Signal detektiert wird geht diese Variable von 0 nach 1 und dein Zähler zählt eins weiter.
Wird kein 1kHz Signal detektiert geht die Variable wieder nach 0.
Lesezeichen