Zum Zählen bietet sich der Timer0 an. Dieser kann direkt oder über einen einstellbaren Vorteiler mit dem Eingangspin RA4 verbunden werden. Die feste Messdauer wird durch eine Programmschleife realisiert. Für eine Messzeit 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.
Der 2. LO des R-250 liefert aber bis zu 3,5 MHz. Deshalb muss der
interne Vorteiler des Timer0 auf ein Teilverhältnis
von 2:1 eingestellt werden. Damit sind am Pin RA4 theoretisch
Frequenzen
von bis zu 5 MHz (2 x 2,5 MHz) zulässig. Die Auflösung der
Frequenzmessung verschlechtert sich dadurch um den Faktor 2.
Der Frequenzzähler zählt also Frequenzen bis zu 5 MHz mit einer Auflösung von 4 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 des 2.LO aus dem Zählwert
Um die Eingangsfrequenz der Schaltung zu erhalten, muss man den
Zählwert mit dem Vorteilerverhältnis und dem Reziprokwert der
Messzeit multiplizieren.
Der Vorteiler hat ein Teilverhältnis
von 2:1. Die Messzeit beträgt 1/2 Sekunde, der Reziprokwert
der Messzeit ist also 2. Der Zählwert muss also mit 4
multiplziert werden. Dies lässt 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".
Addition der
zweiten Zwischenfrequenz und der Frequenz des 1.LO
Die gemessene Frequenz ist nicht die Empfangsfrequenz des
Empfängers,
sondern die Frequenz seine zweiten Mischeroszillators. Diese liegt je
nach Band einen festen Wert neben der Empfangsfrequenz.
Um die wirkliche Frequenz zu erhalten, muss also dieser Wert addiert
werden.
Dieser Offset ist für jedes der 12 Frequenzbänder anders. Je
nach Bandnummer (an RA0..RA3) wird deshalb ein anderer Offset auf den
gemessenen Frequenzwert aufaddiert. Dabei
kann die Zahl länger als 24 Bit werden, hier verwende ich 32 Bit.
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 am LCD anzeigen.
Band |
RA3..0 |
Frequenzbereich |
1. LO-Quarz |
2. ZF |
Offset |
Auflösung |
Test |
0x0 |
0 .. 20 MHz |
- |
- |
0 |
16 Hz |
1 |
0x1 |
1,5 .. 3,5 MHz |
kein | 215 kHz |
-215 kHz |
4 Hz |
2 |
0x2 |
3,5 .. 5,5 MHz | 2 MHz | 215 kHz | 1,785 MHz | 4 Hz |
3 |
0x3 |
5,5 .. 7,5 MHz | 4 MHz | 215 kHz | 3,785 MHz | 4 Hz |
4 |
0x4 |
7,5 .. 9,5 MHz | 6 MHz | 215 kHz | 5,785 MHz | 4 Hz |
5 |
0x5 |
9,5 .. 11,5 MHz | 8 MHz | 215 kHz | 7,785 MHz | 4 Hz |
6 |
0x6 |
11,5 .. 13,5 MHz | 10 MHz | 215 kHz | 9,785 MHz | 4 Hz |
7 |
0x7 |
13,5 .. 15,5 MHz | 12 MHz |
215 kHz | 11,785 MHz |
4 Hz |
8 |
0x8 |
15,5 .. 17,5 MHz | 14 MHz | 215 kHz | 13,785 MHz | 4 Hz |
9 |
0x9 |
17,5 .. 19,5 MHz | 16 MHz | 215 kHz | 15,785 MHz | 4 Hz |
10 |
0xA |
19,5 .. 21,5 MHz | 18 MHz | 215 kHz | 17,785 MHz | 4 Hz |
11 |
0xB |
21,5 .. 23,5 MHz | 20 MHz | 215 kHz | 19,785 MHz | 4 Hz |
12 |
0xC |
23,5 .. 25,5 MHz | 22 MHz | 215 kHz | 21,785 MHz | 4 Hz |
Theorie
der
Frequenzmessung für den PIC12F629
Der 16F629 muss ermitteln
welche der 12 möglichen Quarzfrequenzen (0, 2, 4, 6, ... 22 MHz)
gerade aktiv ist. Dazu ist keine genaue Messung nötig. Als
PIC-Takt genügt der interne 4 MHz Oszillator.
Das Messverfahren entspricht grundsätzlich dem Messverfahren des PIC16F648. Es wird am Pin GP2 mit einem 256:1-Vorteiler über einen Zeitraum von 1280 us gezählt. Dadurch wird die Frequenz des Quarzes mit einer Auflösung von 200 kHz bestimmt. Daraus wird die Bandnummer ermittelt und an den Pins GP0,1,4,5 als 4-Bit-Binärzahl ausgegeben:
Zählwert |
0..4 |
5..14 |
15..24 |
25..34 |
35..44 |
45..54 |
55..64 |
65..74 |
75..84 |
85..94 |
95..104 |
105..114 |
Bandnummer |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
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. 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.Beim R-250 kann sie auf bis zu 1 kHz verringert werden.
Die Fehler in der Auflösung oder Rundungsfehler in der Berechnung sind dagegen vernachlässigbar (< 10 Hz).
Kalibrierung
Ohne
Kalibrierung erreicht der Zähler eine Genauigkeit von ca
0,01% (1 kHz bei 10 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
um etwa 0,01% zu klein. Als Trimmkondensator dient C1, oder es wird ein
30pF-Keramik-Trimmkondensator
(nicht im Stromlaufplan enthalten) parallel
zum Quarz
angeschlossen,
und
auf ca. 20 pF eingestellt.
Das Pin GP3 des PIC12F629 wird von Vdd getrennt und mit Vss verbunden, um in den Testmode zu gelangen. Der LO2-Eingang des Frequenzzählers wird nun im Testmode an eine Referenzfrequenzquelle (wenn man den eine findet) von maximal 19 MHz angeschlossen und durch Verstellen des Trimm-Kondensators die angezeigte Frequenz der Referenzfrequenz angeglichen. Der zulässige Anzeigefehler ist 100 Hz (bei einer Eingangsfrequenz von 10 MHz). Danach sollte der Messfehler im gesamten Frequenzbereich auf 0,001% reduziert sein (100 Hz bei 10 MHz). Höhere Genauigkeiten lassen sich nur noch mit einem Thermostat erreichen, der den Quarz auf einer konstanten Temperatur hält, nötig ist das aber nicht.
Abschließend wird das Pin GP3 des PIC12F629 wieder von Vss getrennt und mit Vdd verbunden.
erstellt: 09.02.2010
letzte Änderung: 24.02.2010