Für eine Spezial-Anwendung mussten die Display-Anzeigen incl. dem S-Meter und dem Busy-Flag
vom YAESU FT-8800 ausgelesen und in ein "lesbares" ASCII Protokoll umgewandelt werden.
Dafür benutze ich wie immer einen 16F84A PIC Microcontroller. Damit alles in 1k Speicher
passt, mussten einige Tricks genutzt werden um z.B. die Umrechnung der Einzel-Segmente
in ASCII-Zeichen Speicher-Sparend vorzunehmen.
Die Daten bekommen wir aus der Verbindung zwischen Display und Transceiver.
Die 6polige Buchse am Funkgerät ist wie folgt belegt:
Für unseren Fall sind nur GND und TXD interessant. Hier wird mit dem
Protokoll der RS232 gefahren, allerdings nur mit TTL-Leveln.
Die Datenrate beträgt 19200 Baud, 8n1.
Zur Umsetzung Richtung PC benötigt man nun noch einen TTL zu
RS232-Wandler z.B. mit MAX232 o.ä. um folgende Logik zu
erreichen : +5V TTL=> -15V RS232, 0V TTL => +15V RS232.
Der Schaltplan ist schnell gemalt, da ist nicht viel dran. Der PIC läuft mit
10 MHz um genug Zeit für die Dekodierung der 19200 Baud zu haben.
Ablauf in der Software :
Zuerst sucht sich der PIC eine Lücke im Protokoll und liest dann 32 Bytes ein. Der Rest
bis zum Frameende (42 Bytes ingesamt) bleibt ungenutzt.
Die ersten 16 Bytes werden dann nach folgenden Informationen untersucht :
S-Meter // Busy-Flag // MHz-Punkt // kHz-Punkt // 5kHz-Anzeige
Die Informationen werden dann in einem Register zwischengespeichert.
Nun werden alle einzelnen Segmente (pro Segment 3 Byte) aus dem Frame ausgeschnitten und entsprechend
der Abfolge M C N H G A K B F E Q J D in jeweils 2 Byte (MSB und LSB) abgespeichert.
Damit liegen nun die ersten 12 Bytes im Speicher, die die ersten 6 Zeichen des Displays
darstellen.
Nun kommt der aufwendigste Teil. Aus den 2 Bytes muss die Information gewonnen werden,
welches Zeichen gerade angezeigt wird und wie der dazugehörige ASCII-Code lautet.
Dazu wird im MSB die Unterscheidung unternommen ob es eine einfache Abfrage,
eine Doppel-Abfrage oder eine Tabelle wird.
In den entsprechenden Unterprogrammen wird dann das LSB weiterverarbeitet und
der ASCII-Code gewonnen.
Folgende Tabelle ist im PIC abgelegt (zeigt auch gleich, welche Zeichen überhaupt
angezeigt werden können!):
Tabelle Display-Segmente Dekodierung
Sind die ASCII-Codes gewonnen wird zunächst der String für das linke Display
ausgeben nach folgendem Muster :
[Stelle1] [Stelle2] [Stelle3] +
[MHz-Punkt*] +
[Stelle4] [Stelle5] [Stelle6] +
[kHz-Punkt*] [5kHz*] +
[SPACE] + [S] + [0..9] +
[! fuer Busy]
*falls nötig
Das ganze wird dann noch für die rechte Display Seite wiederholt und mit CR+LF abgeschlossen.
Dargestellt werden also alle 6 Stellen mit Buchstaben und Zahlen, korrekte MHz und kHz Punkte sowie
die 5kHz Stelle. Dazu wird noch das S-Meter ausgelesen und angezeigt ob die Rauschsperre
gerade geöffnet ist oder nicht.
Anbei ein Beispiel einer Display-Anzeige mit Zeichen links und Zahlen rechts :
Source-Code und HEX-File gibts hier :
Der PIC ist zu ca. 80% ausgelastet, hier ist also noch Platz für Erweiterungen.
Allerdings wurden die 8 Stack-Level komplett ausgereizt, also Vorsicht beim
"einziehen" von weiteren CALL // RETURN Ebenen.