|
![]() |
Zum Zählen bietet sich der Timer0 an. Dieser kann direkt oder über einen einstellbaren Vorteiler mit dem Eingangspin RA4 verbunden werden. Da der PIC16F84 aber nur einen Timer hat, muß die feste Meßdauer durch eine Programmschleife realisiert werden. Für eine Meßzeit von 1/2 Sekunde benötigt man eine Warteschleife mit 1.250.000 Takten auf einem 10 MHz PIC.
Der Timer0 darf höchstens mit 1/4 der PIC-Frequenz getaktet werden
- bei einer PIC-Frequenz von 10 MHz sind also nur 2,5 MHz zulässig.
Deshalb muß der interne Vorteiler des Timer0 auf ein Teilverhältnis
von 32:1 eingestellt werden. Damit sind am Pin RA4 theoretisch Frequenzen
von bis zu 80 MHz (32 x 2,5 MHz) zulässig. Die Auflösung der
Frequenzmessung verschlechtert sich dadurch um den Faktor 32. Ein Blick
in das Datenblatt des 16F84 ergibt, dass unter diesen Bedingungen die Frequenz
an RA4 maximal 72,7 MHz betragen darf, um die Funktion des Timer0 zu gewärleisten.
Ein zusätzlicher externer 2:1-Frequenzteiler erweitert den Eingangsfrequenzbereich
der Schaltung schließlich auf maximal 145 MHz, verschlechtert die
Frequenzauflösung aber noch einmal um den Faktor 2.
Der Frequenzzähler zählt also Frequenzen bis zu 145 MHz mit einer Auflösung von 128 Hz.
24-Bit-Zähler
die Erweiterung des 8 Bit breiten Timer0 auf einen 24-Bit-Software-Timer
ist im Projekt '50-MHz-Frequenzzähler
' beschrieben..
Berechnung der Frequenz aus dem Zählwert
Um die Eingangsfrequenz der Schaltung zu erhalten, muß man den
Zählwert mit dem Vorteilerverhältnis und dem Reziprokwert der
Meßzeit multiplizieren.
Beide Vorteiler zusammen (intern + extern) haben ein Teilverhältnis
von 64:1. Die Meßzeit beträgt 1/2 Sekunde, der Reziprokwert
der Meßzeit ist also 2. Der Zählwert muß also mit 128
multiplziert werden. Dies läßt sich durch wiederholte Multiplikation
mit 2 erreichen, und diese Multiplikation ist lediglich eine Verschiebung
der Bits im Zählergebnis um jeweils eine Stelle nach links.
Deshalb ist die Frequenzberechnung mit ein paar 'RLF' Befehlen zu erschlagen ist. Dabei kann die Zahl länger als 24 Bit werde, wir gehen deshalb auf 32-Bit über.
Subtraktion der Zwischenfrequenz.
Die gemessene Frequenz ist nicht die Empfangsfrequenz des Empfängers,
sondern die Frequenz seine Mischeroszillators. Diese liegt um den Wert
der ZF über (oder in einigen empfängern unter) der Empfangsfrequenz.
Um die wirkliche Frequenz zu erhalten, muß also der ZF-Wert subtrhiert
werden. Die ZF beträgt 10,7 MHz.
Umrechnung der Frequenz in eine Dezimalzahl
Leider ist das Rechenergebnis eine Binärzahl, mit der wir im täglichen
Leben kaum umgehen können. Deshalb steht nun noch die Umwandlung in
eine Dezimalzahl an. Das würde man normalerweise durch wiederholte
Division durch 10 erledigen, aber eine vollwertige 32-Bit-Divisionsroutine
wäre ein zu großer Aufwand. Ich zerlege die Zahl durch Subtraktion
und Division in ihre Zehnerpotenzen.
Ausgabe der Zahl
Das fertige Ergebnis kann man nun mit LCD anzeigen.
Die Genauigkeit der Anzeige hängt natürlich von der Genauigkeit der ZF des Empfängers ab. Die 10,7 MHz sind ein Sollwert. Der wirkliche Wert hängt vom verwendeten ZF-Filter ab, und ist Fertigungstoleranzen unterworfen. Wer seine Filterfrequenz genau kennt, kann das im Programm berücksichtigen.
Natürlich driftet die ZF-Filter-Frequenz auch je nach Temperatur ein wenig.
Letztendlich sollte es aber genügen, wenn die Anzeigetoleranz deutlich kleiner als die Bandbreite der ZF-Filter ist. In einem Einfachsuper dürfte dieser Wert wenigstens 50 kHz betragen, womit sich jede weitere Diskusion um 'wenige hundert Herz' erübrigt. Im Doppelsuper kann man die Bandbreite der 2. ZF natürlich sehr schmal auslegen, einige hundert Hertz sollten es aber dennoch sein, Ansonsten macht es keinen Sinn, Funksignale zu modulieren.
Ein vernachlässigbarer Fehler entsteht durch meine Subtraktion der ZF. Da 1/128-tel der ZF kein ganzzahliger Wert ist (83593,75), ich aber nur mit ganzzahligen Werten rechne (83594), ist meine Frequenzanzeige mit einem konstanten Fehler von -32 Hz behaftet. Das ist wohl wirklich egal.
Kalibrierung
Ohne Kalibrierung erreicht der Zähler eine Genauigkeit von ca
0,01% (10 kHz bei 100 MHz). Die Frequenzabweichungen werden durch eine
Abweichung der Quarzfrequenz von den gewünschten 10 MHz verursacht.
Die meisten Quarze schwingen etwa 1 kHz zu schnell (meiner Erfahrung nach,
aber Ausnahmen wird es immer geben), und müssen mit einem Trimmkondensator
abgeglichen werden. Ohne Abgleich wäre der angezeigte Frequenzwert
etwa 0,01% zu klein. Als Trimmkondensator wird ein 30pF-Keramik-Trimmkondensator
(nicht im Stromlaufplan enthalten) parallel zum Quarz angeschlossen, und
auf ca. 20 pF eingestellt. Der Frequenzzähler wird nun an eine Referenzfrequenzquelle
(wenn man den eine findet) angeschlossen und durch Verstellen des Trimm-Kondensators
die angezeigte Frequenz der Referenzfrequenz angeglichen. Der zulässige
Anzeigefehler ist 1 kHz (bei einer Eingangsfrequenz von 100 MHz). Danach
sollte der Meßfehler im gesamten Frequenzbereich auf 0,001% reduziert
sein (1 kHz bei 100 MHz). Höhere Genauigkeiten lassen sich nur noch
mit einem Termostat erreichen, der den Quarz auf einer konstanten Temperatur
hält.
erstellt: 16.04.2002
letzte Änderung: 12.01.2004