Frequenzanzeige
für einen
UKW-Empfänger
mit PIC16F628 und LCD-Display
zurück zu Projekte , PIC-Prozessoren
, Elektronik , Homepage
Frequenzanzeige für einen UKW-Empfänger
Die meinsten modernen UKW-Empfänger besitzen PLL-Tuner, die sich
in festen Schritten abstimmen lassen. Eine Digitalanzeige zeigt einen
Zahlenwert
an, der der anzustimmenden Frequenz entspricht.
Wenn man keinen PLL-Tuner hat (z.B. wenn einem das von der PLL
vorgegebene
Frequenzraster nicht genügt) benötigt eine digitale
Frequenzanzeige,
die auf einen Zählfrequenzmesser aufbaut.
- |
Frequenzbereich
|
0 MHz bis 135 MHz (2:1 Vorteiler)
0 MHz bis 280 MHz (4:1 Vorteiler)
|
- |
Auflösung |
128 Hz (2:1 Vorteiler)
256 Hz (4:1 Vorteiler)
|
- |
Genauigkeit |
unkal. 0,02% (20 kHz bei 100 MHz)
kalibriert 0,001% (1 kHz bei 100 MHz)
max. 0,0002% |
- |
Anzeige |
9 Stellen auf LCD |
-
|
ZF |
10,7 MHz |
|
|
Schaltung
Kernstück der Schaltung ist der preiswerte PIC16F628 (627,628A
...) und ein einzeiliges
LCD-Display. Da die Frequenzen des UKW-Bandes mit ca. 100 MHz für
den PIC16F628 doch etwas zu hoch sind, wird dem PIC ein schneller
2:1-Frequenzteiler
vorgeschaltet. Der Vorteiler lässt sich gerade noch mit schneller
TTL-Technik realisieren. Ein mit 5,5V betriebener 74F74 sollte die
Frequenz
noch verarbeiten können.
Die zu messende Frequenz LO wird am Mischer-Oszillator (local
oscillator)
des Empfängers abgegriffen.
Die Schaltung wurde primär für den PIC16F628 entworfen. Falls
aber jemand noch einen alen PIC16F84 einsetzen möchte, findet er
am Seitenende auch dafür das angepasste ASM- und HEX-File.
Theorie der Frequenzmessung
Ein Frequenzzähler zählt die während einer festen Zeit
eintreffenden Impulse, und zeigt diese an. Treffen z.B. innerhalb einer
Sekunde genau 100 Impulse ein, so beträgt die Eingangsfrequenz 100
Hz und der Messfehler 1 Hz.
Zählt man nur 1/2 Sekunde, so muss man das Zählergebnis
noch mit 2 multiplizieren. Die Messgenauigkeit verringert sich auf
2 Hz.
Zum Zählen bietet sich der Timer0
an. Dieser kann direkt oder über einen einstellbaren Vorteiler mit
dem Eingangspin RA4 verbunden werden. Die Messdauer kann durch eine
Programmschleife realisiert
werden. 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.
Deshalb muss 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 16F628 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.
Mit einem externen 4:1-Teiler ließen sich noch 280 MHz erreichen,
wobei die Auflösung noch 256 Hz betragen würde.
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, muss man den
Zählwert mit dem Vorteilerverhältnis und dem Reziprokwert der
Messzeit multiplizieren.
Beide Vorteiler zusammen (intern + extern) haben ein
Teilverhältnis
von 64:1. Die Messzeit beträgt 1/2 Sekunde, der Reziprokwert
der Messzeit ist also 2. Der Zählwert muss also mit 128
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
ist. Dabei kann die Zahl länger als 24 Bit werde, wir gehen
deshalb
auf 32-Bit über.
Subtraktion/Addition 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, muss also der ZF-Wert subtrhiert
(oder addiert) 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.
Beschreibung der gewählten Lösung
Verwendet wird ein PIC16F628, ein 10 MHz-Quarz und ein LCD-Display
am PortB. (Stromlaufplan ) Die Verwendung
eines
Quarzes anstelle eines Keramikresonators ist zwingend notwendig, da die
Resonatoren einen Frequenzfehler von ca. 0,5% aufweisen. Bei einem so
ungenauen
Frequenznormal wäre alles über 8-Bit Selbstbetrug. Ein Quarz
erreicht ohne besondere Maßnahmen dagegen eine Genauigkeit von
0,001%
unter termisch stabilen Bedingungen sogar 0,00005%.
- Die zu messende Frequenz wird durch einen externen 2:1 Teiler
halbiert
und dann mit TTL-Pegel an RA4 angelegt.
- Der Timer0-Vorteiler teilt die Frequenz noch einmal um 32.
- Mit diesem Vorteiler wird dann eine 24-Bit genaue Zählung
über
1/2 Sekunde durchgeführt.
- Der Zählwert wird mit dem Teilerverhältnis des externen
vorteilers multipliziert.
- Dass Ergebnis wird mit 2 (dem Reziprok der Zählzeit)
multipliziert.
- Von diesem Ergebnis wird ein zweiunddreißigstel der ZF
subtrahiert (10,7 MHz / 32 = 334375)
- Das 24-Bit Ergebnis wird Vorteilerwert (32) multipliziert.
- Die so erhaltene 32-Bit Frequenz wird in eine 8-stellige
Dezimalzahl gewandelt
- Die Dezimalzahl wird an das LCD ausgegeben.
- Anschließend erfolgt ein neuer Messzyklus.
Die Programmabarbeitung wird durch die Spannungspegel an den Pin RA0,
RA1 und RA2 beeinflusst. Damit ist eine Anpassung an die eigene
Hardware möglich. Normalerweise sind diese Pins mit Vdd (+5V) zu
verbinden.
RA0
Wird RA0 mit Vss verbunden, dann wird im Schritt 6 keine Subtraktion
der ZF/32 durchgeführt, sondern eine Addition. Das ist nötig,
falls im eigenen Empfänger die empfangene Frequenz um 10,7 MHz
über der LO-Frequenz liegt. Ob das der Fall ist, kann man durch
Probieren leicht herausbekommen.
RA1
Wird RA1 mit Vss verbunden, dann wird das Display als echtes
einzeiliges Display angesteuert. Die meisten 1x16-Displays sind intern
als zweizeilige Displays mit 8 Zeichen pro Zeile organisiert, und die
beiden Zeilen sind einfach mechanisch hintereinander als eine
Zeile angeordnet. solche Displays werden mit Vdd an RA1 korrekt
angesteuert. In seltenen Fällen gibt es aber auch echte
1x16-Displays. Sie werden mit RA1=Vss korrekt gesteuert.
RA2
Mit einem externen 2:1-Teiler lassen sich maxmal 145 MHz messen. Dabei
ist das die LO-Frequenz und nicht die Empfangsfrequenz. Mit etwas Pech
begrenzt das die anzeigbare Empfangsfrequenz auf etwa 135 MHz. Wenn das
nicht genügt, dann kann man einen externen 4:1-Teiler einsetzen.
Damit lassen sich weit über 200 MHz erreichen (wenn denn der
Teiler die Frequenz verkraften kann). Wer anstelle von 2:1 Teilern nur
4:1 Teiler bekommen kann, kann diese natürlich für den
gesamten Frequenzbereich einsetzen. Allerdings muss man der Software
mitteilen, was für ein Vorteiler im Einsatz ist, da dessen
Teilverhältnis ja wieder herausgerechnet werden muss. Dazu dient
RA2. Wer einen 2:1-Teiler hat, legt RA2 auf Vdd. Wer einen 4:1-Teiler
einsetzt, legt RA2 auf Vss.
Gedanken zur Genauigkeit
Eine neunstellige Anzeige der Frequenz ist eigentlich Augenwischerei.
Durch die Auflösung von nur 128 Hz sind die letzten beiden Stellen
der Anzeige ohne jeden Aussagewert. Besser wäre es, sie auf '00'
zu
setzen. Im Interesse einer möglichst guten Genauigkeit der
drittletzten
Stelle, sollte man die Frequenz auf ganze 100 Hz runden. Das erfolgt am
einfachsten, indem man zur errechneten Frequenz den Wert 50 addiert,
und
dann die beiden letzten Stellen mit '00' überschreibt.
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.
Test und Kalibrierung
Funktionstest
RA1 wird je nach verwendetem Displaytyp mit Vss (1x16-Display) oder
Vdd(2x16-Display) verbunden.
Im Weiteren gehe ich davon aus, dass RA0 und RA2 mit Vdd (+5V))
verbunden
sind. (Bei anderen Pegeln ergeben sich andere Ergebnisse, siehe
untenstehende Tabelle.)
Um die Funktionstüchtigkeit des fertig aufgebauten
Frequenzzählers
zu prüfen, trennt man den PIC-Frequenzeingang RA4 vom Vorteiler
und
verbindet ihn mit dem Taktausgang des PIC OSC2. Nun muss der
Frequenzzähler
exakt '9 300 000 Hz' (20 MHz - 10,7 MHz) anzeigen. Damit ist die
Funktionsfähigkeit
des Frequenzzählers (ohne Vorteiler) erwiesen. RA4 wird von OSC2
getrennt
und wieder mit dem Vorteiler verbunden. Zum Test des Vorteilers
benötigt
man eine Frequenz von 20 MHz (z.B. Quarzoszillator), die zur Messung
mit
dem Eingang des Vorteilers verbunden wird. Die gemessene Frequenz wird
um 10,7 MHz vermindert angezeigt (9 300 000 Hz). Die angezeigte
Frequenz
kann nun um 0,02% (4 kHz) vom Sollwert abweichen, solange der
Frequenzzähler
nicht kalibriert ist.
RA0
|
RA1
|
RA2
|
Formel:
|
input:
0
Hz = Vss
|
input:
10
MHz = OSC2
|
input:
20
MHz / Vorteiler
|
0
|
0 oder 1
|
0
|
LO/4 + 10,7
MHz
|
10 700 000 Hz
|
50 700 000 Hz
|
30 700 000 Hz
|
0
|
0 oder 1
|
1
|
LO/2 + 10,7
MHz |
10 700 000 Hz
|
30 700 000 Hz
|
30 700 000 Hz
|
1
|
0 oder 1
|
0
|
LO/4 - 10,7
MHz |
a84 267 296
Hz |
29 300 000 Hz
|
9 300 000 Hz |
1
|
0 oder 1
|
1
|
LO/2 - 10,7
MHz |
a84 267 296 Hz |
9 300 000 Hz |
9 300 000 Hz |
Wenn bei RA=1 am Eingang eine geringe Frequenz (z.B. 0 Hz) anliegt,
dann ist das Berechnungsergebnis negativ. Diese negativen Ergebnisse
werden nicht korrekt angezeigt, stattdessen bekommt man einen sinnlosen
Anzeigewert. Im Normalbetrieb sollte dieser Zustand aber nie auftreten,
deshalb wurde er in der software auch nicht "abgefangen".
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 Messfehler 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.
Wer einen 10 MHz-TCXO als Frequenzquelle sein Eigen nennt,
schließt diese an OSC1 (Pin 16 des 16F628) an, und lässt den
Quarz Q1 sowie C2 und C3 einfach weg.
Programmlisting
Beim Brennen des PIC bitte darauf achten, dass der Taktgenerator
des
PIC auf 'HS' eingestellt wird!
zurück zu Projekte
, PIC-Prozessoren , Elektronik
, Homepage
erstellt: 16.04.2002
letzte Änderung: 30.09.2012