@sebi87
Ein fertiges Programm hab ich leider nicht in petto.
Im Prinzip geht es darum einen Timer, vorzugsweise den Timer 1 mit der zu messenden Frequenz zu takten. Ich würde das ohne Vorteiler machen.
Im Overflow Interrupt des Timers 1 wird dann eine Variable hochgezählt, die dann auch Messungen über 65536 Hz zulässt und somit als High Word dient.
Ein anderer Timer z.B. dient als Torzeitquelle für z.B. 1sek. Der wird mit der prozessoreigenen Taktquelle gesteuert.
Nach einer Sekunde, also wenn der Torzeittimer zugeschlagen hat wird der Zähler + Überlaufzähler ausgelesen, in eine Variable geschoben und der Timer 1 für die nächste Messung wieder auf 0 gesetzt. Diesen Programmteil würde ich auch in einem Interrupt anlegen.
Man hat jetzt das Low und High Word der gemessenen Frequenz direkt in Hertz und kann das Ergebnis in der Hauptroutine des Programms weiter verarbeiten.
Das stimmt schon, hier geht es aber um 2 MHz und da wird es mit ICP schon sehr ungenau und schwierig.Für etwas niedrigere Frequenzen, bis etwa 300 kHz, geht die Freqwunzmessung sehr gut über die ICP funktion.
Ausserdem wir ja so bei jedem Takt der Frequenz ein Interrupt ausgelöst und blockier so den Controller.







Zitieren
Lesezeichen