Zwei Lösungen:

Simpler VFO-Knopf für SDR-Programme


Features:

  • SDR-Knopf mit Drehencoder
  • mit Arduino Micro / Leonardo
  • ersetzt Mausrad
  • zwei Lösungen
  • mit und ohne Windows-Programm

Bild 1: Ein VFO-Knopf für PC-gestützte SDR-RX/TX bringt ein wenig Haptik in den Funkbetrieb.

Zwei Lösungen:

Simpler VFO-Knopf für SDR-Programme

Ein VFO-Knopf bringt verloren geglaubte Haptik in den durch Software dominierten Umgang mit auf PC basierenden SDR-Empfängern bzw. -Transceivern. Diese Lösung basiert auf einer kleinen Arduino-Platine, an die im Wesentlichen lediglich ein Drehencoder angeschlossen wird. Ein Programm für Windows erledigt das Weitere.

Seit einigen Jahren sind SDR-Empfänger und –Transceiver auf dem Markt, die zum Betrieb auf einen PC angewiesen sind. Zur Darstellung des Spektrums und der Bedienelemente wird der PC-Monitor verwendet und die Bedienung erfolgt mit PC-Maus und Tastatur. Was auf der Strecke bleibt, ist die Haptik eines realen Gerätes – beispielsweise den VFK-Drehknopf. Persönlich finde ich das HCJB-Pappradio, den RTL-DVBT-Stick und neuerdings das SDRplay RSP1 – allesamt PC-gestützte SDR-Empfänger – zwar als Bereicherung - ein echter Knopf zum Drehen über das Band vermisste ich dennoch.

Es gibt zwar Angebote zum Kauf, persönlich erscheinen die Preise aber überhöht und so habe ich mich daran gesetzt und ein kleines Projekt gestartet. Vorgabe war ein möglichst geringer Aufwand an Hardware, ein günstiger Preis der Bauteile, eine einfache Programmierung und die Nutzung auf den vorhandenen Windows-PCs. Es sollten alle gängigen SDR-Programme, die unter Windows üblicherweise genutzt werden, mit dem VFO-Drehknopf zusammen arbeiten.


Bild 2: Zwei Ausführungen von Drehencodern. Ein Drehencoder besitzt insgesamt fünf Pins, drei für die Drehrichtung und zwei für den integrierten Taster.

Lösung 1: So funktioniert’s

Herausgekommen ist zunächst dir folgende Lösung aus nur zwei käuflichen Bauteilern: Als Drehknopf (Bild 2) fungiert ein handelsüblicher, aus chinesischer Produktion stammender Drehencoder, auch Drehgeber, Inkrementaldrehgeber, Quadraturencoder oder Drehimpulsgeber genannt. Ein Drehencoder ähnelt einem Poti, lässt sich aber endlos – als ohne Anschlag – in beide Richtungen drehen. Er gibt bei jeder Drehbewegung zwei Rechecksignale aus, die mit einem Mikroprozessor – hier greife ich auf eine kleine Platine mit der Bezeichnung Arduino Micro zurück – interpretiert werden. Eine kleine Software im Arduino – man spricht auch von einem Sketch - schaut sich an, ob der Benutzer den Knopf nach rechts oder links dreht – oder die im Drehencoder integrierte Taste betätigt, also auf den Drehknopf drückt. Wenn der Knopf nach rechts gedreht wird, sendet das Programm im Arduino ein Pluszeichen per USB an eine virtuelle serielle Schnittstelle zum PC. Dreht der Anwender den Knopf aber nach links, so wird ein Minuszeichen und bei Druck auf den Drehknopf der Buchstaben „b“ (wie „button“) zum PC übertragen.


Bild 3: Das kleine Programm für Windows schickt Mausereignisse an andere Windows-Anwendungen, hier an HDSDR und empfängt in diesem Fall auf dem virtuellen COM-PORT 20.

Ein Windowsprogramm („Simpler VFO-Knopf - DL1DMW“) auf dem PC empfängt diese Zeichen und formt daraus sogenannte Ereignisse (engl.: events) für die Maus (Bild 3). Das Drehen des Knopfes wird durch die Software in eine Mausradbewegung nach oben, das Drehen nach links in eine Bewegung des Mausrades nach unten umgeformt. Der Tastendruck auf den Drehknopf wird zu einem Mausklick auf die linke Maustaste. SDR-Programme reagieren in der Regel auf Mausradbewegungen und verstellen die Empfangsfrequenz nach oben bzw. unten. Aber: Jedes Programm reagiert etwas individuell.

Beim Start des Windows-Programmes „Simpler VFO-Knopf - DL1DMW“ betrachtet es die auf dem PC bereits gestarteten Programme. Ist ein SDR-Programm dabei – es trägt in der Bezeichnung „SDR“ - so wird dieses zum Ziel der Mausereignisse. Das bedeutet: Wurde beispielsweise HDSDR gestartet und danach „Simpler VFO-Knopf - DL1DMW“, so wird letzteres die Mausereignisse (Mausrad drehen und Mausklick links) an HDSDR übermitteln. Das SDR-Programm wird auf diese Mausbewegungen und Klicks wie gewöhnlich reagieren – es „weiß“ nicht, dass diese nicht von der PC-Maus stammen, sondern von einer anderen Windows-Anwendung „untergeschoben“ wurden.

Beim Start des Windowsprogramms „Simpler VFO-Knopf - DL1DMW“ geschieht noch etwas: Es werden die vorhandenen COM-Schnittstellen ermittelt. Ist nur eine vorhanden, dann geht die Software davon aus, dass hier der angeschlossene Arduino angestöpselt ist und verbindet sich direkt mit ihm. Sind allerdings mehrere COM-Schnittstellen vorhanden, etwa auf einem alten Windows-XP-PC mit realen COM1 und COM2, dann ist der Benutzer nach jedem Start gefordert, die korrekte COM-Schnittstelle auszuwählen. Welche Nummer die COM-Schnittstelle besitzt, erfährt man in der Systemsteuerung im Geräte-Manager (bei Windows 7: Systemsteuerung -> Hardware und Sound -> Geräte-Manager -> Anschlüsse COM & LPT). Es sollte nach dem Programmstart zuerst das Programm und danach der Com-Port gewählt werden.

Soweit, so gut. Im täglichen Betrieb des VFO-Knopfes kam schnell der Wunsch auf, das neue Spielzeug auch für beliebige andere Programme nutzbar zu machen. Ein Beispiel ist eine lange Textdatei, die man beim Lesen nach oben bzw. unten rollen möchte. So wurde die Software erweitert um einen Button „Prozessliste aktualisieren“. Ein Beispiel: Das SDR-Programm wurde mit dem Drehknopf gesteuert. Nun möchte der Benutzer eine Textdatei bearbeiten. Er startet das Textverarbeitungsprogramm und lädt die Textdatei. Im Programm „Simpler VFO-Knopf - DL1DMW“ betätigt er nun den Button Prozessliste aktualisieren, daneben in der Listbox wird das Textverarbeitungsprogramm aufgelistet werden. Mit einem Klick auf die Zeile des Textprogramms bestimmt der Anwender, dass die Drehbewegung des VFO-Knopfes zum Textprogramm geleitet wird. Hin und wieder kommt es vor, dass die Prozessliste - die Liste der gestarteten Anwendungen - nicht vollständig ist. Dann bitte das gewünschte Programmfenster einmal anklicken, danach erneut auf Prozessliste aktualisieren klicken. Nun erscheint auch der gewünschte Prozess.

Ist der Drehknopf nicht am PC angeschlossen, kann man ihn auch simulieren: Schalten Sie die Simulation ein (Sim VFO Knopf EIN) und bestimmen die Drehrichtung mit Sim Mausrad hoch oder Sim Mausrad herunter. Das Programm wird jede Sekunde ein Mausereignis produzieren. Anschließend beenden Sie die Simulation mit einem Mausklick auf Sim VFO Knopf AUS. Das ist praktisch, um die Wirkung eines Mausevents auf ein Programm zu testen, auch wenn der Drehknopf nicht parat ist. „Simpler VFO-Knopf - DL1DMW“ wurde mit dem Visual Studio 2010 in C# geschrieben und benötigt .NET 3.5. Diese .NET-Version sollte bereits auf 98% der Windows-PC installiert sein, andernfalls sollte man es von Microsoft kostenlos aus dem Internet laden und installieren.

Die Maus auf dem SDR-Programm

Das SDR-Programm – z. B. SDRUno, HDSDR, SDR-J, SDR#, SDR-Radio, um einige zu nennen – reagiert wie erwähnt auf Mausbewegungen mit Verstellen der Empfangsfrequenz. Dabei ist die Position der Maus, abhängig vom SDR-Programm, entscheidend: Ruht der Mauszeiger undefiniert auf dem Fenster, z.B. dem Wasserfall, schalten die meisten SDR-Programme auf eine kleine Schrittweite zur Frequenzvariation um, andere betätigen damit die Zoom-Funktion der Wasserfalldarstellung. Positioniert man die Maus auf eine Ziffer der Frequenzanzeige, so entspricht die Schrittweite der Frequenzänderung bei allen getesteten SDR-Programmen der Stelle der Frequenzanzeige. Beispiel: Ruht die Maus auf der Kilohertzstelle der Frequenzanzeige, wird das Drehen des Mausrades - oder nun auch das Drehen des VFO-Knopfes - die Frequenz um jeweils ein Kilohertz nach oben oder unten verändern.

Während bei SDRUno V 1.1 im RX-Fenster bei einem Dreh am Knopf die Frequenzanzeige verschwindet, lässt sich die Anzeige im SP1-Fenster gut verstellen, allerdings nur dann, wenn die Maus auf eine der Ziffern ruht. In Cubic-SDR kann man die Frequenz verstellen, sofern die Maus auf der Frequenzanzeige ruht. Falls sich der Mauszeiger auf der Wasserfallanzeige befindet, ist es möglich, mit dem Drehknopf die Spreizung des Spektrums (Zoom) zu regulieren. HDSDR reagiert auf Mausradbewegungen wie folgt: Ruiht die Maus auf einer grafischen Anzeige, also Spektrum oder Wasserfall, erfolgt die Frequenzveränderung in kleinen Schritten.

Zum Betrieb eines SDR-RX/TX mit dem VFO-Drehknopf sind folgende kleine Schritte auszuführen - die Reihenfolge beim Start:


Bild 4: Weniger geht nicht: Verdrahtungsplan für Drehencoder und Arduino-Platine.

Aufbau und Verdrahtung

Die Schaltung – siehe Verdrahtungsplan (Bild 4) - basiert auf den Arduino Micro, das erspart einige fummelige Lötarbeit. Soll der Lötkolben gänzlich kalt bleiben, erfolgt der Aufbau durch Aufstecken von Arduino und Drehencoder auf ein Breadboard (Bild 5). Besser und für die Zukunft geeigneter ist die Montage auf eine Lochrasterplatine (siehe Bild 1 Aufmacherfoto). Bei nur fünf Drähten zwischen Arduino und Drehencoder sollte das nicht schwer fallen. Stabilität bringt der Einbau in ein flaches, geeignetes Gehäuse. Am besten eines aus Metall oder aus Kunststoff mit Metallisierung. Ein Metallgehäuse ist etwas schwerer, rutscht nicht so leicht auf der Arbeitsfläche und – wichtig - hält Hochfrequenz fern. Mit einem ansprechenden Gehäuse und der Größe und Form des Drehknopfes (Potentiometerknopf mit 6mm Achsdurchmesser) erzielt man möglicherweise optische Wow-Effekte! Das könnte eine kleine LED unterhalb des Drehknopfes sein, sodass das Gebilde bei Dunkelheit optisch etwas hermacht.

Die Anschlüsse des Drehgebers sind mit den Eingängen INT0, INT1 und INT2 des Arduino Micro verbunden. INT2 ist für den Button zuständig. Die dazugehörigen Arduino-Bezeichnungen lauten D2, D3 und D4. Es muss nicht zwingend ein Arduino Micro sein: jeder Arduino, der über die drei genannten Interrupteingänge verfügt, ist prinzipiell geeignet. Die Wahl fiel auf den Arduino Micro aufgrund seines geringen Formfaktors.

…und für den UNO

Damit der Sketch auf den weit verbreiteten Arduino UNO / NANO und Duemilanove lauffähig wird, wurde das Micro-Sketch auf die Controller ATMega328 und ATMega168 angepasst und mit einem Arduino Duemilanove und NANO getestet. Da beim 328 bzw. 168 kein INT2 zur Verfügung steht, wird der Taster im Polling-Verfahren am Arduino Pin 4 abgefragt. So bleibt die Verdrahtung dieselbe. Belegt sind beim UNO bzw. Duemilanove die Arduino-Pins 2, 3, 4 und GND. Das Prellen des Schalters wird mit einem Delay von 200 ms erkauft. Sollte ihr Taster des Drehencoders stärker prellen, so ist die Zeit im Sketch zu erhöhen. Das ist aber kaum zu erwarten. Man könnte jedoch den Wert etwas nach unten anpassen - hier ist etwas experimentieren angesagt. In der Praxis stellt man bei 200ms keine Verzögerung fest.


Bild 5: Erster Aufbau auf einem Breadboard.

Auf einem NANO-Klon (ein Nachbau des Arduino NANO) trat der Effekt auf, dass der Prozessor keine Daten sendete. Grund: Der Bootloader. Nach dem Einstecken des USB-Kabels sorgte der Bootloader für einige Sekunden Blinken an einer LED. Startet man das Windows-Programm zu früh, empfängt es nichts. Langsames Zählen bis sechs und nachfolgendes Starten des Programms zeigte stets Erfolg. Dieser spezielle Bootloader benötigt also etwas mehr Zeit als das Arduino-Original.


Bild 6: Zur Kompilierung des Sketches schließt man die Arduino-Platine an den PC an, stellt COM-PORT und das Arduino-Board ein…


Bild 7: … dann den Sketch laden und auf Upload drücken. Der Sketch wird kompiliert und auf die Arduino-Platine übertragen.

Arduino Sketch kompilieren

Für alle, die bisher noch nicht mit Arduino gearbeitet haben: Während das Windows-Programm gebrauchsfertig auf der Heft-DVD vorliegt, muss der Sketch für den jeweiligen Arduino kompiliert werden, um es danach auf den Mikrocontroller zu übertragen. Zur Programmierung wurde die Arduino IDE 1.81/1.8.2 benutzt. Im Menü Tools stellt man zuerst den COM-Port und das genutzte Board ein (Bild 6). Anschließend wird mit dem Button Upload den Sketch kompiliert und auf den Arduino übertragen (Bild 7). Dann kann es losgehen.


Bild 8: Sollten die Kontakte des Drehencoders zu sehr prellen, empfiehlt sich ein RC-Filter.

Lösung zwei: Die Arduino-Zweitmaus

Statt dieser Lösung mit dem (Um-)Weg über das Windows-Programm sind andere denkbar und wurden bereits begangen: Der Umbau einer Mausplatine mit Anlöten eines Drehencoders oder die Programmierung eines Prozessors als HID-Gerät, dass sich als zweite Maus am PC anmeldet. In beiden Lösungen wirkt die Drehbewegung des Knopfes dann auf die jeweils aktive Windows-Anwendung und ist nicht steuerbar. Das muss kein Nachteil sein, diese letztgenannte Variante soll kurz beschrieben werden.

Zum Einsatz kommt ein Arduino Leonardo (oder kompatibel – wie der der Arduino Micro), auf jeden Fall mit ATMega32u4-Prozessor an Board. Der Drehencoder wird dieses Mal an den Pins A2/A3/GND angeschlossen. Das kurze Skript sieht so aus und wurde mit der Arduino-IDE 1.8.2 erstellt und hört auf den Namen leonardo_scroll_mouse.ino:

// Arduino Leonardo oder Clone
// Drehencoder an A2, A3 und GND (3 Kabel)
// RotaryEncoder von https://github.com/mathertel/RotaryEncoder
// und http://www.mathertel.de/Arduino/RotaryEncoderLibrary.aspx

#include <Mouse.h>
#include <RotaryEncoder.h>
RotaryEncoder encoder(A2, A3);

static int pos = 0;
signed char wheel;

void setup() {
  ;
  //Serial.begin(9600);
  //while (!Serial) {
  //  ; }// wait for serial port to connect. Needed for native USB port only
  //Serial.println("Basic NoInterrupts Test:");
  Mouse.begin();
}

void loop()
{
  encoder.tick();
  int newPos = encoder.getPosition();
  if (pos != newPos)
  {
    //Serial.println(newPos);

    if(newPos > pos)
    {
      wheel = 1;
    }
    else
    {
      wheel = -1;
    }
    Mouse.move(0,0, wheel);
    pos = newPos;
    //Mouse.end();
  }
}

So wenig Aufwand! Das Windows-Programm entfällt. Nachteil: Der Drucktaster des Drehencoders wird im Listing ignoriert, das lässt sich noch erweitern (eine kleine Programmieraufgabe für den Leser? Das ist sehr einfach, denn es ist nur ein Taster abzufragen). Die hier verwendete Library RotaryEncoder wird von Matthias Hertel unter der im Listing angegebenen Internetadresse zur Verfügung gestellt. Die Library Mouse sorgt dafür, dass sich das Programm gegenüber dem PC wie eine zweite Maus benimmt. Über den Parameter wheel wird das Scrollen der Maus gesteuert. Wer im SerialMonitor der Arduino-IDE zuschauen möchte, wie das Programm arbeitet, entfernt im Listung die Kommentare in Setup() und in der Loop() vor Serial.println(newPos). Das kleine Programm arbeitet gut und zuverlässig und wirkt auf alle Windows-Programme, jeweils auf das Fenster, das gerade den Fokus besitzt, also das Programm, das gerade aktiv ist und Benutzereingaben erwartet.

Fazit

Aufbau und Programmierung waren eine nette Nachmittagsspielerei, nun bevölkert ein neues Eingabegerät den Stationstisch. Kritiker mögen einwenden, dass das Mausrad ebenso die Aufgabe des VFO-Knopfes übernehmen kann, schließlich sei es einerlei, wo man dreht. Die Kritik kommt nicht zu unrecht, dennoch stellt sich ein etwas anderes „Drehgefühl“ ein, insbesondere beim Drehen über die Amateurfunkbänder. Im Hinblick auf andere Anwendungen, z. B. beim Schneiden von Audio- oder Videodateien erschließen sich den Benutzer eventuell völlig neue Anwendungsfelder.

Mehr Fotos und Screenshots gibt es zum Download Es sind drei Sketche für Arduino Micro/Leonardo und UNO/NANO/Duemilanove sowie das Windows-Programm inkl. C#-Sourcecode zu finden. Alles unterliegt der GNU Public License (GPL) und ist frei verwendbar. Der Sourcecode in C# ist zudem gut kommentiert und sollte selbsterklärend sein.

Literatur/Verweise:
[1] Info zu Drehencoder: https://www.mikrocontroller.net/articles/Drehgeber
[2] Homepages Arduino: https://arduino.cc
[3] Info zu Arduino, Download der Arduino-IDE: https://www.arduino.cc/en/software
[4] RotaryEncoder-Lib von https://github.com/mathertel/RotaryEncoder


Download von Dateien zu diesem Projekt

Bilder, Verdrahtungsplan und Arduino-Sketche sowie das Windows-Programm stehen zum Download bereit. Und hier geht es zum Download.



sh2018