1

Frequenzzähler für einen Spektrumanalyzer	Ralph Berres , Dieter Barth
Einführung
Ältere Spektrumanalyzer, welche noch keinen Mikroprozessor zur Bedienung verwenden, haben in der Regel eine Frequenzanzeige , welche einfach die Abstimmspannung des ersten Oszillators mit Hilfe eine Digitalvoltmetermoduls anzeigen.  ( Abbildung1). 
Die angezeigte Frequenz hatte bei meinen Spektrumanalyzer bis zu 7MHz Abweichung von der tatsächlichen Frequenz.  
Dieter (ein Freund von mir aus Bonn ) ist wegen eines Frequenzzählers für den Swob5  auf mich aufmerksam geworden. Ich erzählte ihm das Dilemma, und es entstand der Entschluss einen Frequenzzähler für meinen Spektrumanalyzer Taketa Riken TR4111  zu entwickeln.
Folgende Anforderungen soll das Modul erfüllen.
1.	Es soll dort reinpassen, wo vorher das DVM Modul gesessen hat.
2.	Es soll die Frequenz sämtlicher Oszillatoren, die wichtig sind, erfassen.
3.	Er soll die Frequenz je nach Schalterstellung am Bildanfang oder Bildmitte messen.
4.	Er soll anzeigen, ob eine interne Referenzfrequenz oder eine externe Referenzfrequenz anliegt. Weiter soll er anzeigen, ob der Quarzofen noch kalt ist oder schon warm.
5.	Die Auflösung und damit die Torzeit soll sich dem Span anpassen, Sie soll 100KHz bis 100Hz betragen.
6.	Es soll eine Möglichkeit besitzen, eine eventuelle Abweichung der letzten ZF von seinen Sollwert als Kalibrierkonstante zu erfassen, abzuspeichern und zukünftig zu berücksichtgen.
7.	Die Stellung der beiden Potis Frequenz Grob und Frequenz fein sollen zusätzlich mit einen 12Bit AD-Wandler erfasst werden, um bei Betätigung der Potis eine Frequenzänderung vorauszusagen, bis eine neue Messung erfolgt ist. Das ist besonders bei den kleinen Spans von Vorteil, wenn ein Scandurchlauf bis zur 100 Sekunden dauert, und solange keine echte Frequenzmessung erfolgen kann.
8.	Das Display soll den vorhandenen Ausschnitt der alten Anzeige optimal ausfüllen.
Zunächst waren wir der Meinung, das die Sache ganz einfach mit einen Atmega16 und ein wenig externe Hardware lösbar ist. 
Dieter wollte außer der kompletten Software auch die Platinenlayouts mit der Software Eagle erstellen, ich sollte dafür die Entwicklung der Schaltungen übernehmen.
Als erstes habe ich dann mit Hilfe von Lochrasterplatten einen 1:1 Aufbau gemacht, welches Dieter benötigt, um die Leiterplatten zu designen. Es sollte ja schließlich genau in meinen Spektrumanalyzer reinpassen.  ( Bild 2  Bild3 ).
					
						2
Vorversuche

Die erste Idee war ein Geradeauszähler mit Hilfe von einen LS7060 als Hardwarezähler  aufzubauen.
Der LS7060 ist ein kompletter 32 Bit Zähler welches das Ergebnis als 4 mal 8bit breite Wörter nacheinander auslesen kann. Der Chip geht locker bis 20MHz und hat sich bei Dieter schon öfters bewährt.
Während der Messung wird der Sweep angehalten.
Erster Versuch:
Es sollte ein Geradeauszähler werden.
Die Torzeiten wollten wir mit dem internen Zählers des Atmega16 erzeugen.
Die Hardware war schnell auf einen Steckbrett aufgebaut und nach etlichen Programmierversuchen in Atmelbasic stellte sich immer wieder heraus, das die gezählten Ergebnisse unstabil und mehr oder weniger zufällig waren. Irgendwie waren die Torzeiten die der Prozessor mit Hilfe seiner internen Zähler erzeugt hatten nicht stabil. 
Zweiter Versuch:
Um die ungenauen Torzeitprobleme zu umgehen sollte jetzt ein Reziprogzähler mit 2 LS7060 Bausteine verwirklicht werden.
Hier stellte sich irgendwann heraus das man die Stabilität der Anzeige nur mit Hilfe von Fließkomma erreichen konnten. Bei 20 Messungen/ Sekunde stellte sich das als Problem heraus, außerdem verhaspelten wir uns immer mit den Interups, welche die Messung auslösen sollten. Trotz unzähliger Versuche kamen wir nicht weiter.
Dritter Versuch:
Da  die Ablaufsteuerung mit dem Prozessor nicht zu bewerkstelligen war , haben wir uns jetzt entschlossen die Ablaufsteuerung, welches die Torzeit und die Speicher sowie Resetimpulse erzeugt
Hardwaremäßig aufbauen. Das Steckbrett wurde immer voller.
Diesmal wurde es wieder ein Geradeauszähler, weil bei den hohen Frequenzen ein Reziprogzähler keinen wirklichen Vorteil mehr bietet, sondern nur unnötigen zusätzlichen Hardwareaufwand.
Das war der erste Aufbau, welche zuverlässige Messergebnisse liefert, wenn auch zunächst erst mit einen Zähler.
Vierter Versuch : 
Es sollten erster und dritter Oszillator nacheinander gemessen werden und mit einen Multiplexer ausgewählt werden.  Es gab Probleme mit Übersprechen und vor allem der Kurzzeitstabilität der 
						3

beiden Oszillatoren bei der Messung nacheinander. Vor allem die langsamen Messbereiche bei kleinen Spans wurden zum Problem weil der Sweep jetzt doppelt so lange angehalten werden muss.
						
Fünfter Versuch:
Statt die Oszillatoren nacheinander zu messen haben wir jetzt zwei Zähler aufgebaut, welche gemeinsam gestartet und wieder gestoppt wurden. Die Ergebnisse der beiden Zähler wurden nacheinander eingesammelt und miteinander verrechnet.  Es wurden also wieder zwei LS7060 Zählerbausteine verwendet.
Es war der erste Versuch der auf dem Brettaufbau verlässliche und stabile Messergebnisse erzeugte.
Jedoch nur auf dem Brettaufbau.  Bisher wurden die Frequenzen aus zwei mit der gleichen Referenzfrequenz synchronisierten DDS synthesizer erzeugt die auch der Frequenzzähler selbst
benutzt.  Nach dem die echten herunter geteilte Frequenzen der Lokaloszillatoren des Spektrumanalyzers benutz wurden, stellte sich heraus, das die beiden festen Lokaloszillatoren des Spektrumanalyzers nicht langzeitstabil genug waren. Man hatte also immer einen Fehler von mehreren hundert Hertz in der Anzeige , welche nach jeden Einschalten des Spektrumanalyzers etwas anders war.  So war das nicht zu verwenden.
Sechster Versuch:
Wir haben uns entschlossen  vier Frequenzzähler aufzubauen. Für jeden Oszillator einen eigenen.
Wegen der vielen benötigten Ports war jetzt ein Atmega64 notwendig.
Jetzt waren auch aus dem Spektrumanalyzer stabile und reproduzierbare Ergebnisse zu gewinnen.
Doch stellte sich bald heraus, das die letzte ZF nicht genau 3,3MHz betrug, dessen Mittenfrequenz lag um etwa 333 Hz daneben.
Siebter Versuch:
Eine Kalbrierfunktion ist implementiert worden, welche die Abweichung der ZF feststellt, und als Korrekturwert in einen Eprom abspeichert.
Dieter hatte zwischenzeitig die Leiterplatten entworfen, und bei einen chinesischen Hersteller in Auftrag gegeben.  Alle 6 Leiterplatten  doppelseitig  durchkontaktiert.
Bild 4 Bild 5
Hiermit war der Part für Dieter zunächst beendet.
Um die Implementierung der Abfrage der beiden Frequenzeinstellpotentiometer habe ich mich gekümmert.
						4
Mittlerweile sieht der Steckbrettaufbau so aus. Bild6 Bild 7

Beschreibung der Baugruppen
Der Zähler besteht im wesentlichen aus sechs Leiterplatten für den eigentlichen Zähler, der Referenzfrequenzoszillatorbaugruppe, sowie 4 Frequenzteilerbaugruppen.
Frequenzteiler
Diese haben die Aufgabe die Frequenz des ersten. Oszillators 2-4 GHz durch 256 zu teilen, die des zweiten Oszillators 1,52GHz durch 128 zu teilen , die des dritten Oszillators 504-506MHz durch 64 zu teilen und die des vierten Oszillators 33.3MHz durch 2 zu teilen. Alle Frequenzteiler haben als Ausgang einen dreipolige Stiftleiste, 
welche an die Zählerbaugruppe Platine 3 TTL die geteilte Frequenz als TTL Pegel abgibt und die 5Volt Versorgungsspannung für den Teiler bekommt.
Die beiden ersten Teiler sind mit einen UPB1505 bestückt, dessen Teilerverhältnis durch eine Lötbrücke einstellbar ist. Bild 6 Bild 7 Bild 8 Bild 9 wobei der erste Teiler im Bild noch eine von mir mit dem Dremel gefräßte Platine war. Diese habe ich einfach beibehalten.
Der dritte Teiler ist mit einen U264 oder ähnliches bestückt Bild 10 Bild 11 Bild 12
Der vierte Teiler ist mit einen 74AC74 TTL Teiler versehen. Bild 13 Bild 14 Bild 15
Referenzoszillator
Diese Baugruppe habe ich auf Lochraster aufgebaut und beinhaltet auf der unteren Platine den eigentlichen
10 MHz Quarzofenoszillator einen TTL Monoflop 74LS123 und ein Umschaltrelais welches zwischen externen 10MHz Takt und internen Quarzofentakt umschaltet. Liegt ein externer Takt an so triggert der Monoflop und betätigt das Relais, und gibt ein TTL-Signal an die Mikroprozessorbaugruppe weiter, welches dann in der Anzeige ext erscheinen lässt
 Die obere Platine verstärkt das externe Signal auf TTL Pegel und steuert damit auch den Takteingang des Monoflops. Die gesamte Baugruppe ist über eine 5polige Stiftleiste und ein vieradrig abgeschirmtes Kabel mit der Zählerbaugruppe Platine  4 verbunden. Bild 16 Bild 17

Mikrocontrollerbaugruppe
Diese besteht aus einer Busplatine und 4 Platinen welche auf die Busplatine aufgesteckt werden.
Auf die vorderste Platine ist noch die Displayplatine Huckepack draufgesteckt. Bild 18 19
Es gibt folgende Platinen
Platine 1	Displayplatine,  Sie steckt Huckepack von Vorne auf die Platine 2.
Platine 2 	Zähler und Ablaufsteuerung, Die Busplatine steckt von hinten auf die Platine 2
						5

Platine 3	Mikrocontroller und Torzeitauswahl Entgegennahme der Signale Span1-5 Bereich 1-3
		Scanstopsignal  externer Programmieranschluss und externe Schalter bzw Taster
		An der seitlichen Steckerleiste.
Platine 4	Detektierung des Quarzofenstromes, Triggerimpulserzeugung aus der Ablenksägezahnspannung, Umschaltung des Triggerpunktes auf der X-Achse Mitte oder Links
		Erzeugung der Refernzspannungen für Triggerpunktgenerator und AD-Wandler
	Abschalten der Betriebspannung des 2 Oszillators in Messbereich 1,5-3,5 GHz und 2,5-4,5GHz.
	Entgegennahme der vier Oszillatorsignale und des Referenzoszillatorsignales Sägezahnsignales und Schaltersignales Center an der rechten Seite der Platine.
Weiterleitung an die entsprechende Baugruppen. Das war wegen der vielen benötigten seitlichen Anschlüsse notwendig.
Platine 5	Analogbaugruppe   Hier sitzt der Analog Digitalwandler mit seinen Operationsvertärker an den Eingängen zur Abfrage der beiden Potentiometer Frequenz grob und Frequenz fein.
	An den seitlichen Anschlüssen wird die Beiden Potispannungen sowie die Betriebsspannungen zugeführt.
Platine 3-5 	haben den Anschluss zur Busplatine auf der unteren Seite.
Platine 6	ist die Busplatine. Sie enthält außer den Steckerleisten keine Bauteile.

Beschreibung  Programmablauf

Das Programm besteht aus einen Hauptprogramm und einer ganzen Reihe Unterprogramme, sowie zwei Hardware-Interuptprogramme. Bild Ablaufdiagramm