VFO-Steuerung des FA-NWT mit einem ATmega
Erstellt: DL6GL, 29.01.2014, letzte Änderung 05.04.2022
Update Firmware V1.02 (25.03.2022): Pollingfrequenz für Encoder erhöht.
Was tun mit einem Netzwerktester FA-NWT, wenn innerhalb eines unachtsamen Augenblicks die Messeingänge zerschossen wurden, der VFO aber überlebt hat? Ein Reparaturversuch ginge, Erfolg offen, vielleicht war doch noch mehr gehimmelt. Da ein Messsender ohne Strippen umstecken und ohne PC eine sinnvolle Bereicherung wäre, sollte wenigstens der VFO des NWT wieder zu Ehren kommen. Außer der Frequenz gibt es hier ja nichts anzuzeigen. Das sollte ein AVR-Microcontroller auch schaffen.
DL4JAL hat glücklicherweise in [1] unter http://www.dl4jal.eu/linnwt4_doc.pdf [2] die Protokolle zwischen PC und PIC im FA-NWT offengelegt. Herzlichen Dank dafür, Andreas! Damit sollte der NWT auch mit einem AVR anzusteuern sein.
1 Schaltung
Da nur wenig Peripherie gebraucht wird, aber mehr als 8 kB Flash, wurde ein ATMega168 eingesetzt (16 kB Flash, 28 Pins in der DPIP-, 32 Pins in TQFP- Bauform). Die Bedienung erfolgt mit einem Drehencoder und drei Tastern. Zur Anzeige ist ein 16x2-LCD vorgesehen.
In einem gemeinsamen Gehäuse untergebracht, ist eine RS232- oder USB-Verbindung zwischen dem ATmega und dem NWT unnötig. Der direkte Ausgang zum PIC des NWT ist also der TXD-Pin des ATmega. Empfangen wird vom NWT nichts, der RXD-Pin hat daher nichts zu tun. Für eine saubere Baudratengenerierung sorgt der 14,7456 MHz Quarz. Der PIC im NWT verlangt als Protokoll 57.600 Baud, 8 Bits, 1 Stoppbit, keine Parität (8N1).
2 Software
Das Protokoll zur VFO-Steuerung ist in [2] unter Ziffer 6.1.3 beschrieben. Es ist ein insgesamt 11 Bytes langer Befehl an den PIC zu senden:
Byte 1 | Byte 2 | Bytes 3...11 (9 Bytes) |
8F (hex) | f | Frequenz in Hz mit führenden Nullen |
Beispiel 3,625123 MHz | ||
8F | f | 003625123 |
Tab. 1: Protokoll zur Frequenzeinstellung.
Das war noch die leichtere Übung. Nun soll der DDS-Chip (Direct Digital Synthesis) im NWT auch noch auf die tatsächliche Taktfrequenz kalibriert werden können, damit auch die Frequenz raus kommt, die eingegeben wurde. Die Taktfrequenz liegt in der Gegend von 400 MHz. Unter Ziffer 6.1.5 in [2] ist das Protokoll dargelegt. Es ist ein insgesamt 14 Bytes langer Befehl an den PIC zu senden.
Die Kalibrierungskonstante ist 2^64 / Taktfrequenz,
ergibt für 400 MHz (ohne Nachkommastellen): 46.116.860.184.
Diese muss als Hex-Code an den PIC im NWT übertragen werden.
Byte 1 | Byte 2 | Bytes 3...12 (10 Bytes) | Bytes 13 und 14 |
8F (hex) | e | Hex-String mit führenden Nullen | 00 |
Beispiel 400 MHz, Kalibrierungskonstante 46.116.860.184 | |||
8F | e | 0ABCC77118 | 00 |
Tab. 2: Protokoll zur DDS-Clock-Kalibrierung.
Geht das überhaupt mit BASCOM? Die Zahlen übersteigen das maximale Festkommaformat in BASCOM, DWord (4 Bytes unsigned Integer, 2^32 – 1 = 4.294.967.294). Nächster und letzter Rettungsanker in BASCOM wäre das 8 Byte-Gleitkommaformat Double. Die BASCOM-Funktion "Hex" kann damit aber nichts anfangen. Daher musste die Konversion der Kalibrierungskonstante in Hex mit dem Restwertverfahren [4] zu Fuß vorgenommen werden. Mit ein wenig Code-Fummelei geht das tatsächlich auch mit Double. Fast hätte ich mich mit C anfreunden müssen.
Das Restwertverfahren dividiert sukzessive die Dezimalzahl durch 16. Aus dem Rest der Division ergibt sich die HEX-Zahl 0...9, A...F, etwa so mit Excel berechnet für die o.a. Kalibrierungskonstante:
Tab. 3: Beispiel Dezimal nach Hex-Konvertierung mit Excel.
Beispiel erste Zeile:
(a) 46.116.860.184 / 16 = 2.882.303.761,50
(b) Davon Ganzzahl = 2.882.303.761
(c) Diese multipliziert mit 16 = 46.116.860.176
(d) Rest (a) – (c) = 46.116.860.184 - 46.116.860.176= 8 (dez) = 8 (hex)
Nächste Zeile weiter mit Ganzzahl 2.882.303.761 aus (b)
und so fort, solange (a) > 0. Ergibt hier 9 Schritte.
Die letzte Zeile wurde noch angehängt, da der Hex-String 10 Bytes lang sein soll.
Das Ergebnis wird rückwärts, in der Tabelle von unten nach oben, zusammengesetzt zu 0ABCC77118.
Die Excel-Funktion "DEZINHEX" kommt freundlicherweise zu dem gleichen Ergebnis.
Diese Logik wurde in BASCOM 1:1 nachgebildet.
3 Hardware
3.1 Modifikation am FA-NWT
Um den USB-Betrieb weiterhin zu erhalten, bietet sich ein Oder-Tor mit Dioden nach dem Vorschlag in [3] an:
Abb. 2: Modifikation am FA-NWT zur Zuführung des Steuerprotokolls.
Das lässt sich auf einer kleinen Zusatzplatine, die über Stiftleisten in die Fassung des 18F876-PIC gesteckt wird, ohne ernste Eingriffe in den NWT einfach bewerkstelligen.
Abb. 3: Zusatzplatine (von oben, Leiter + Bestückungsseite).
Die Stiftleiste (Stifte passend zum Sockel des PIC auf der NWT-Platine!) wird von der Rückseite durchgesteckt und auf der Leiterseite verlötet. Der neue IC-Sockel für den PIC (DIL28 mit Doppel-Federkontakten) wird anschließend mit rechtwinklig nach außen gebogenen Anschlussstiften auf die Lötpads aufgelötet. Die Aussparung links oben schafft Platz zum benachbarten TC7660. Der PIC wird dem Sockel im NWT entnommen und in den aufgelöteten neuen Sockel gesteckt. Mit den Stiftleisten wird die Zusatzplatine in den nun leeren PIC-Sockel im NWT verfrachtet.
Allerdings spielt der FT232 nicht ganz mit. Ist das USB-Kabel vom PC zum NWT gesteckt, liegt an Pin1 (TXD) des FT232 +5V an. Soweit so gut. Auch wenn anschließend das USB-Kabel entfernt wird, bleibt das so. Wenn allerdings der NWT ohne USB-Kabel angeschaltet wird, liegt Pin1 (TXD) des FT232 auf Nullpotenzial, zumindest bei meinem NWT. Dann zieht die Diode D1 die Spannung an Pin 18 des PIC auf nahezu 0V, so dass die Steuerung vom ATmega über Diode D2 wirkungslos wird. Ein Jumper löste das Problem, womit das Dioden-Oder-Tor wiederum überflüssig geworden ist.
3.2 Zusamenbau
Die drei Komponenten - FA-NWT, Steuerungsplatine mit LCD sowie Netzteil – finden in einem TEKO AUS22-Gehäuse (z.B. reichelt.de) so gerade noch Platz. Das Netzteil beliefert den NWT und die Steuerung mit ca. 11 V unstabilisiert.
Abb. 4: Schaltung Netzteil.
Als Display wurde das TC1692A-09 von Pollin.de eingesetzt. Außenabmessungen und Pin-Belegung entsprechen dem LCD 162C von reichelt.de, der Displayrahmen ist aber geringfügig anders positioniert. Wegen des knappen Platzes im Gehäuse sind die Anschlüsse für ISP und RXD/TXD mit Kabeln, nicht mit Stiftleisten herausgeführt.
Abb. 5: Innenansicht mit geöffnetem FA-NWT.
4 Funktionen und Bedienung
Mit dem Brennen der Firmware wird auch das EEPROM mit Standardwerten beschrieben:
- Minimalfrequenz: 10 Hz
- Maximalfrequenz: 160 MHz
- DDS-Taktfrequenz: 400 MHz.
Die Software bietet zwei Betriebsebenen:
(1) Normaler VFO-Betrieb,
(2) Setup DDS-Clock, Minimal- und Maximalfrequenz des VFO.
4.1 VFO-Betrieb
Mit dem Einschalten wird die im Setup eingestellte Minimalfrequenz angezeigt. Die Frequenzschrittweite ist 1 Hz. Die Frequenz wird mit dem Drehencoder eingestellt.
Mit Druck auf den Encoderknopf lässt sich die Frequenzschrittweite auswählen. Es stehen die Schritte
1 – 10 – 100 Hz , 1 – 10 – 100 kHz und 1 – 10 MHz zur Verfügung. Diese werden mit dem Encoder ausgewählt. Ein nochmaliger Druck kehrt zur Frequenzanzeige zurück.
4.2 Setup
Die Setup-Ebene wird mit einem langen (ca. 1 sec.) Druck auf den Mode-Taster erreicht. Weitertasten zu den einzelnen Setup-Einstellungen mit kurzem Druck auf den Mode-Taster.
Die Bedienung ist in allen Fällen gleich: In der zweiten Displayzeile wird die jeweilige Frequenz in Hertz angezeigt. Zunächst steht der Cursor an der ersten Stelle von links gesehen, also z.B. bei 400.000.000 Hz auf der 4, bei 5 Hz auf der 5. Mit den Right-/Left-Tastern kann er auf die zu ändernde Ziffer verschoben werden. Die Tausender-Trennzeichen werden übersprungen. Ändern der Ziffer (0...9) mit dem Drehencoder. Zum Abspeichern der Änderung im EEPROM wird der Right-Taster lange (ca. 1 sec.) gedrückt. Die vollzogene Speicherung wird im Display, zweite Zeile ganz rechts, mit einem "S" quittiert.
- Setup 1: DDS clock freq.
Der DDS-Taktgenerator schwingt auf einer Frequenz in der Gegend von 400 MHz. Mit dem Brennen der Firmware wird 400 MHz als Standardwert im EEPROM gespeichert. Die tatsächliche Frequenz muss so eingestellt werden, dass der VFO auch die angezeigte Frequenz erzeugt. Änderung der Frequenz wie oben beschrieben.
Langer Druck auf den Right-Taster: Abspeichern im EEPROM und Übertragen an den NWT-PIC.
Die erzeugte VFO-Frequenz hat sich nun verändert, messbar mit einem Frequenzzähler oder z.B. auf Schwebungsnull mit WWV auf 10 MHz mit einem RX.
Die Korrektur liegt im ppm-Bereich. Bei mir ergab sich z.B. 399.997.880 Hz, das sind etwa 5 ppm Abweichung von 400 MHz.
Steht ein kalibrierter Frequenzzähler mit 1 Hz Auflösung zur Verfügung, lässt sich die Korrektur berechnen:
Die gemessene relative Abweichung der gemessenen Frequenz f-Ist von der Sollfrequenz f-Soll, z.B. 10 MHz, betrage Δf = f-Ist / f-Soll.
Mit diesem Δf ist die momentane Taktfrequenz, z.B. 400 MHz, zu multiplizieren. Das Ergebnis ist die tatsächliche Taktfrequenz.
Ansonsten sind Versuch und Irrtum angesagt, bis es passt.
Es empfiehlt sich, die so ermittelte und in den PIC geschriebene Taktfrequenz zu notieren. Sie wird nicht im PIC gespeichert, so dass sie wieder ausgelesen werden könnte.
Kurzer Druck auf den Mode-Taster: Zu Setup 2.
- Setup 2: Min. VFO freq.
Einstellen der Minimalfrequenz. Soll die Frequenz um eine Zehnerpotenz erhöht werden, z.B. von 1 auf 10 Hz, den Cursor entsprechend mit dem Left-Taster auf die noch leere Stelle schieben und mit dem Encoder die gewünschte Ziffer eingeben. Reduzierung der Stellen: linke Ziffern als führende Nullen auf "0" setzen.
Langer Druck auf den Right-Taster: Abspeichern im EEPROM.
Kurzer Druck auf den Mode-Taster: Zu Setup 3.
- Setup 3: Max. VFO freq.
Sinngemäß für die einstellbare Maximalfrequenz wie Setup 2.
Langer Druck auf den Right-Taster: Abspeichern im EEPROM.
Kurzer Druck auf den Mode-Taster: Zurück zum VFO-Betrieb.
Referenzen
[1] http://www.dl4jal.eu/
[2] http://www.dl4jal.eu/linnwt4_doc.pdf
[3] http://www.qrpforum.de/index.php?page=Thread&threadID=6783
[4] http://de.wikipedia.org/wiki/Hexadezimalsystem
Download
Das hakelige Verhalten des Encoders hat mich nun doch so genervt, dass ich die Pollingfrequenz von 72 auf 120Hz erhöht habe (Neue Verion 1.02). Daneben gibt es eine weitere Version (...step1...) für andere Encoder als den verwendeten ALPS STEC11B, die Zwischenschaltstufen aufweisen.
Excel sample decimal to hex conversion