Einleitung

Was soll das Projekt bezwecken ?

  • Anregung zum Selbermachen
  • Nicht nur Lötübungen sondern auch Funktion selber gestalten
  • Erste Mikrocontroller-Aktivitäten, auch mit „echten“ HF-Anbindungen anfangen
  • Leute, die aus der Mikrocontroller-Maker-Ecke kommen, interessieren!
  • Zeigen dass auch im Amateurfunk mit wenig Aufwand interessante Dinge mit Mikrorechnern machen kann
  • Anregen mit modernen Chips und kleinen Mikrocontrollern auch im QRP-Bereich zu arbeiten (Strombedarf ca.70mA, davon 20mA für den optischen Drehgeber …)

Die Software stellt eine Experimental-Variante für Mikrocontroller-Einsteiger dar. Als Mikrorechner wurde die Arduino-Reihe und deren sehr einfache Entwicklungsumgebung gewählt. Die Idee ist, den Code an eigene Projekte anzupassen. Die Programmierung geschieht in C. Die Standardlibraries sind wie bei allen Mikrocontrollerprojekten der Welt an die Hardware angepasst.

Der Auslöser

Die Firma Silicon Labs hat einige sehr interessante Chips zur Erzeugung von einstellbaren Rechteckgeneratoren im Angebot. Diese Chips leiten fein einstellbare Frequenzen meist aus quarzgesteuerten Ghz-Takten ab. Ein Großteil der Anwendungszwecke ist die exakte Erzeugung von Takten für Festplatten, Netzwerke, HDTV-Video, DVD/Blueray und ähnliches.

Aktuell ist der Baustein Si5351 im Blickpunkt:

  • Frequenz: 2,5 – 200MHz
  • Ausgangsspannung: Rechtecksignale
  • Referenzfrequenz Quarz: 25-27MHz
  • Steuersignale: I²C-Bus
  • Ausgänge: 3-8 einzeln steuerbare Oszillatorausgänge
  • Statische Phasendifferenz einstellbar
  • Geringer Phasenjitter :< 70ps
  • Knackfreier Frequenzwechsel
  • Versorgungsspannung Core: 3,3V
  • Versorgungsspannung Ausgangstreiber: 1,8V, 2,5V, 3,3V
  • Sehr hohe Unterdrückung gegenüber Störungen auf der Versorgungsspannung
  • Geringer Stromverbrauch: < 35mA (3 Ausgänge)
  • Geringer Preis: ca. 1,00 – 2,50€

Abb. 1 - Blockbild SI5351A

Abb. 1 - Blockbild SI5351A

Die technischen Daten lassen sich von der Homepage von Silicon Labs als PDF-File herunterladen https://www.silabs.com/Support%20Documents/TechnicalDocs/Si5351-B.pdf

Ein Problem vieler Si-Bausteine ist ihre große Anzahl von zu initialisierenden Registern. Es sind beim Si8351 ca. 150 Register(!). Für einen Baustein zur Erzeugung fester Frequenzen ist das kein Problem. Die Firma Silicon Labs lieferte ein PC-Programm mit, das assistiert um eine Registerbelegung für feste Frequenzen zu finden.

Die Einstellung in feinen Frequenzschritten erfordert die ständige Uminitialisierung von vielen Registern, deren Verwendungsgrenzen sich über die Ausgangsfrequenz auch noch ändern. Es ist eine komplizierte Arbeit, einen solchen Algorithmus zu finden.

Da trifft es sich doch gut, daß einerseits die Hacker-/Maker-Szene mit Prototypen-Hardware und Software-Libraries unterstützt. So liefert z.B. Lady ADA ein Prototypenboard mit Si5351, 25MHZ-Quarzgenerator, Spannungsreglern und I2C-Pegelkonverter zum Preis von ca. 8,50€ (z.B. Fa. EXP-Tech) https://learn.adafruit.com/adafruit-si5351-clock-generator-breakout/overview

Abb. 2 - Breakout-Board

Abb. 2 - Breakout-Board, die 3 Clock-Ausgänge können mit SMA-Buchsen bestückt werden

Das Board kann mit 5V Betriebsspannung arbeiten, der I2C-Bus kann mit 3,3V oder 5V arbeiten. Damit kann man mit wenig Aufwand (z.B. mit einem Arduino-Board) loslegen. Da die gesamt HF-Erzeugung auf dem Board liegt, sind alle Anschlüsse entweder Gleichspannung oder langsame Schaltsignale (I2C bis 200kHz Rechteck) und damit tauglich für Experimente auf einem Steckbrett.

Damit es mit der Programmierung vorangeht, gibt es zwei Libraries im Internet:

Die Library von Adafruit ist weniger komplex, unterstützt die Programmierung einzelner Registerstrukturen. Dafür ist die Anwendung für VFOs jedoch immer noch komplex. Es wird ein Testprogramm mitgeliefert.

Die Library von Milldrum/Myers ist unflexibler und voluminöser, jedoch optimal auf VFO-Betrieb ausgelegt! Nach einigen wenigen Zeilen zur Initialisierung wird einer Library-Funktion der gewünschte Frequenzwert als Long-Integer-Zahl übergeben und nach Aufruf erfolgt die Einstellung am Baustein. Einziges Problem ist das Format der Long-Integer-Zahl: Es werden 8 Byte erwartet. Arduinos C arbeitet aber auf den kleinen AT-Mega-Prozessoren nur mit 4 Bytes. Der Trick ist die Verwendung des nicht dokumentierten Zahlentyps Long Long, der nun 8 Byte hat.

Abb. 2 - Experimentalaufbau der Schaltung

Abb. 3 - Experimentalaufbau der Schaltung, da HF-Signale ausschliesslich auf dem Breakoutboad mit dem Si5351 vorkommen, ist diese Aufbauweise für alle niederfrequenten Signale erlaubt

Abb. 2 - Schaltplan der Versuchsschaltung

Abb. 4 - Schaltplan der Versuchsschaltung

Die Schaltung wurde für folgende Funktionen ausgelegt:

  • Frequenzeingabe über Encoder
  • Frequenzsignalerzeugung über die SMA-Ausgänge (SW: nur SMA-0 aktiv)
  • Erfassung der Batteriespannung
  • Erfassung eines Spannungspegels (S-Meter o.ä.)
  • Einstellung des Frequenz-Inkrements über Taster (Schritte vorgebbar)
  • Speicherung der aktuellen Konfiguration als Start-Konfiguration über Taster (Frequenz + Inkrement-Schritte)
  • Anzeige der aktuellen Frequenz, akt. Frequenz Inkrement, Pegelwert, Zustand EEPROM-Pegelwert

Einzelheiten Hardware

Der Si5351 wird über einen I2C-Bus vom Mikrocontroller gesteuert. Der I2C-Bus kann auch noch für andere Bausteine verwendet werden. Der Encoder ist elektrisch prellfrei und wird über 2 Interrupteingänge ausgewertet. Es werden alle Flanken ausgewertet. Mechanische Encoder benötigen eine andere Beschaltung und Auswertung! Die aktuell vom Si5351 eingestellte Frequenz wird über das Display ausgegeben. Es wird eine 4bit-Parallelschnittstelle mit Steuersignalen verwendet. Es ist eine Pegelanzeigen über Analog-Eingang vorgesehen, ein Experimentieren mit Blockgrafiken ist möglich (Set benutzerprogrammierbarer Symbolcharakter in der Anzeige).

Einzelheiten Mechanik

Es wurden sowohl mechanische als auch optoelektronische Encoder getestet. Die mechanischen Decoder wurden erfolgreich mit Hilfe eines D-Flip-Flops und einer Auswertung nur einer Flankenrichtung entprellt (andere Auflösung der Auswertung). Verblüffender weise traten bei beiden Encodern noch „Prellungen“ auf! Diese wurden durch die Rastmechanik ausgelöst. Beim Loslassen des Knopfes nach mehreren Impulsen trat häufig nochmal ein Puls auch in der entgegengesetzten Richtung auf! Nach vielen Messungen der nicht entprellten Kontakte gegen die erkannten Pulse mittels Speicher-Oszilloskop kam heraus, daß es sich um „mechanische Prellungen“ handelte. Die Rastmechanik drehte den Knopf auch nach momentenfreiem Loslassen des Knopfes im Stillstand nochmal etwas zurück. Dies trat bei beiden Encodertypen mit unterschiedlicher Häufigkeit auf. Behebung: entweder Abbremsung z.B. durch Filzscheibe zwischen Knopf und Gehäuse oder Drehknopf mit ausreichender Massenträgheit verwenden.

Einzelheiten Software

Die Software stellt eine Experimental-Variante für Mikrocontroller-Einsteiger dar. Die Idee ist, den Code an eigene Projekte anzupassen. Die Programmierung geschieht in C. Typen, Konstrukte, Zeiger etc. stammen von GNU-C. Einige Definitionen sind den geringen Ressourcen der kleinen Prozessoren angepasst. Die Standardlibraries sind wie bei allen Mikrocontrollerprojekten der Welt an die Hardware angepasst.

Das Programm enthält typische Anwendungen, die erweitert werden können, schwierige Konstrukte (z.B. mit Zeigeroperationen zum EEPROM-Zugriff) sind im Programm fertig und müssen z.B. nur in ihren Grenzen verändert werden.

Entwicklungsumgebung / Arduino

Die Arduino Arbeitsumgebung (IDE Integrated Development Environment) ist eine sehr einfache Einrichtung. Man kann alle Funktionen in einer halben Stunde erlernen. Einige Freiheitsgrade, die professionelle C-Programmierer nutzen, sind hier zugunsten einer einfachen Bedienbarkeit und Struktur nicht realisiert. Die IDE kann kostenfrei von www.arduino.org heruntergeladen werden. Die Entwicklungsumgebung kann auf Beschriftung in Deutsch eingestellt werden. Es existiert eine hervorragende Hilfe/Referenz-Funktion, die als eingebautes Handbuch zum ständigen Suchen und Verstehen verwendet werden kann (allerdings in englisch). Es gibt zahlreiche Bibliotheken mit vielen Funktionen zu beliebigen Themen seitens der Arduino-Organisation, aber auch bei Suchen im Internet. Ein einfaches C-Buch auf dem Knie ist natürlich trotzdem hilfreich (z.B. www.c-howto.de, im Netz,als PDF oder als gedrucktes Buch)

Als Hardware bieten sich Platinen an, die mit 2,54mm Steckleisten ausgestattet sind (Arduino Nano / Micro). Diese lassen sich einfach auf Lochkarten oder Platinen integrieren. Die Preise für die kleinen Hardwareboards sind durch den internationalen Nachbau sehr günstig.

Die Programmierung des Mikrocontrollers geschieht über ein USB-Kabel und eine passende Treibersoftware. Man kann also auch eingebaut im Gerät immer mal wieder nachprogrammieren, wenn man den USB-Anschluss nicht verbaut hat.

Oszillator Si5351

Dank der schon erwähnten Bibliotheken kann der Oszillator problemlos initialisiert und gesteuert werden.

Display

Es wurde ein LCD-Display mit 16×2-Charactern verwendet. Diese Displays sind derzeit preisgünstig und im allgemeinen gut bei Sonnenlicht abzulesen. Mit dem gleichen Displaycontroller gibt es z.B. aber auch noch 4-zeilige Anzeigen. Auch kontrastreiche OLED-Displays in diesen Größen sind schon günstig erhältlich. Die Software erlaubt den Betrieb mit Hitachi HD44780 oder kompatiblen Controllern.

Funktionen

Dieses Projekt hat Grundfunktionen, die für eine Frequenzeinstellung für alle Sorten Empfänger und Sender im KW-Bereich nutzen lassen:

  • Frequenzbereich : gesamter KW-Bereich
  • Digitale Frequenzeinstellung auf 1Hz genau
  • Schrittweite der Einstellung wählbar
  • Grundeinstellung beim Einschalten kann über EEPROM gespeichert werden
  • Tasteneingänge zur Bedienung
  • Anzeigefunktion für analoge Eingangsgrößen mit einzeln gesteuerten 18 Strichen auf 6 Zeichen

Abb. 2 - Anzeigefunktionen

Abb. 5 - Anzeigefunktionen

Software-Struktur

Die Software läuft nach Start durch Reset in einer Dauerschleife. Sie muss alle Ein- und Ausgabefunktionen so schnell bedienen, dass der Bediener keine störende Verzögerung merkt. Die schnellen asynchronen Signale des Drehgebers müssen allerdings schneller erfasst werden. Dazu werden 2 Interrupteingänge des Prozessors genutzt.

Die Software läuft so ab, dass alle Module durchlaufen und meist nur den Teil, der gerade in diesem Durchlauf zu erledigen ist, ausführen und möglichst schnell zum nächsten Module weiterlaufen. Das ist typisch für Echtzeitsteuerungen. Daher müssen bei Neueinstieg eines Moduls die vorherigen internen Daten noch zugreifbar sein und die Ergebnisse für die nächsten Module zwischengespeichert werden. Daraus ergibt sich häufig die Notwendigkeit Variablenspeicher global zugänglich zu machen.

Abb. 2 - Struktur

Abb. 6 - Struktur

Die Software wurde in verschiedene Funktionsmodule aufgeteilt, die hierarchisch aufgebaut sind.

Für jedes Modul ist eine genaue Beschreibung und ein Struktogramm verfügbar.(z.B. https://de.wikipedia.org/wiki/Nassi-Shneiderman-Diagramm ) Zusammen mit den Kommentarzeilen im Code sollte man sich zurechtfinden können, um eigene Erweiterungen einzubauen.

Abb. 2 - Hierarchie

Abb. 7 - Hierarchie

Ideen für Erweiterungen

  • Mehrere wählbare Frequenzbereiche anstelle einer Grundkonfiguration
  • Ein HW-Eingang mit dem man eine einstellbare Frequenzdifferenz beim Empfang auslöst (CW-Tonhöhe …)
  • Pegeldarstellung 3 mal mit verschieden Beschriftungen nutzen: Batteriespannung, S-Meter, SWR
  • Frequenz-Inkrement mit 2 Tasten +/- bedienen
  • Frequenz-Inkrement in 1-2-5-10-Schritten automatisch entsprechen Bedieneraktionen verstellen
  • ZF-Frequenzablage beim Empfang einstellen

Files

werden zum Download bereitgestellt.

Autor: Axel Schultze,DK4AQ, dk4aq(at)t-online.de