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
Stromlaufplan - anklicken zum vergrößern


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%.
  1. Die zu messende Frequenz wird durch einen externen 2:1 Teiler halbiert und dann mit TTL-Pegel an RA4 angelegt.
  2. Der Timer0-Vorteiler teilt die Frequenz noch einmal um 32.
  3. Mit diesem Vorteiler wird dann eine 24-Bit genaue Zählung über 1/2 Sekunde durchgeführt.
  4. Der Zählwert wird mit dem Teilerverhältnis des externen vorteilers multipliziert.
  5. Dass Ergebnis wird mit 2 (dem Reziprok der Zählzeit) multipliziert.
  6. Von diesem Ergebnis wird ein zweiunddreißigstel der ZF subtrahiert (10,7 MHz / 32 = 334375)
  7. Das 24-Bit Ergebnis wird Vorteilerwert (32) multipliziert.
  8. Die so erhaltene 32-Bit Frequenz wird in eine 8-stellige Dezimalzahl gewandelt
  9. Die Dezimalzahl wird an das LCD ausgegeben.
     
  10. 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