Digitales Signal - Frequenz im MHz Bereich ermitteln

uwefed:
Bei 16 Mhz Takt sind 1,5MHz gerade mal 10,6 Taktzyklen.
Mit einem C-Programm hast Du keine Chanche diese Frequenz zu messen.

Sehe ich auch so. Und selbst in Assembler dürfte das sportlich sein.

Klassisch hat man das früher mit Schaltkreisgräbern so gemacht:

Ein Zeitgeber hat das Zeitfenster für die Zählung definiert, z. Bsp. eine Sekunde. In diesem Zeitfenster wurden die Impulse von einer Zählerkette gezählt. Danach ausgegeben, Zähler auf Null und alles wieder von vorn.

Weil Zählerbausteine auch nicht beliebig schnell zählen können hat man davor einen Vorteiler gepackt, der den Zählimpuls durch einen bestimmten Wert runtergeteilt hat.

So in der Art würde ich das heute auch machen:

  • Vorteiler um zählbare Impulsfolgen zu erhalten.
  • Das Zeitfenster über einen Timer. Wird der Timerinterrupt ausgelöst --> Wert anzeigen und zurück auf Null.
  • Den Zählimpuls selbst würde ich über eine Interruptroutine zählen: Der Impuls löst den Interrupt aus, in der Routine wird der Zählwert um 1 erhöht.

Die Interruptroutine muss sehr kurz und schnell sein, damit sie sicher fertig ist bevor der nächste Zählimpuls kommt. Das ist das was Uwe mit den 10,6 Takten meinte.

Andererseits darf der Zählinterrupt auch nicht so oft ausgelöst werden das die anderen Routinen garnicht mehr zum Zug kommen.