CW - Amateurfunk-Station DK1IO

Direkt zum Seiteninhalt

Hauptmenü

CW

CW ist die älteste Funkbetriebsart und erfreut sich nach wie vor großer Beliebtheit. Gerade weil es nicht jeder kann, verleiht es dem Kundigen eine gewisse 'Exklusivität'. Wir sollten stolz darauf sein, dass der Amateurfunk der einzige Funkdienst ist, in dem die Morsetelegrafie weiterhin gepflegt wird.

CW mit dem PC

Nachdem der PC Einzug in die Shacks der Funkamateure gehalten hat, ist auch CW in den Fokus der Programmierer geraten. Es wurden Anwendungen zum automatischen Dekodieren von CW entwickelt. Welchen praktischen Nutzen solche Programme haben, vermag ich nicht zu beurteilen, da ich noch keines benutzt habe. Auf der Sendeseite aber habe ich Hand angelegt, und ein Progrämmchen zum automatischen Aussenden beliebiger Texte in CW entwickelt.
Genau wie in PSK erhöht das manuelle Geben ständig gleichbleibender Texte nicht die Authentizität. Und es entlastet den Operator doch etwas, wenn er z. B. die Stationsbeschreibung per Mausklick senden lässt und währenddessen noch einen Schluck Kaffee trinken kann.
Hezstück des Programms ist ein Teil, das gar nicht in dem Programm enthalten ist, nämlich eine Datenbanktabelle. Darin sind alle alfanumerischen Zeichen gespeichert, die das Morsealphabet kennt, der entsrechende ASCII-Wert sowie das Morsezeichen, bestehend aus Einsen und Nullen. Diese werden als Wert zum Setzen der Leitungen RTS und/oder DTR des Funkgeräte-CommPorts verwendet. Dadurch wird der Sender getastet.

Die Morsezeichentabelle

Zeichen    ASCII      MorseCode
            32        00
(           40        1110101110111010111
)           41        111010111011101
+           43        1011101011101
,           44        1110111010101110111
-           45        111010101010111
.           46        10111010111010111
/           47        1110101011101
0           48        1110111011101110111
1           49        10111011101110111
2           50        101011101110111
3           51        1010101110111
4           52        10101010111
5           53        101010101
6           54        11101010101
7           55        1110111010101
8           56        111011101110101
9           57        11101110111011101
=           61        1110101010111
?           63        101011101110101
@           64        10111011101011101
A           65        10111
B           66        111010101
C           67        11101011101
D           68        1110101
E           69        1
F           70        101011101
G           71        111011101
H           72        1010101
I           73        101
J           74        1011101110111
K           75        111010111
L           76        101110101
M           77        1110111
N           78        11101
O           79        11101110111
P           80        10111011101
Q           81        1110111010111
R           82        1011101
S           83        10101
T           84        111
U           85        1010111
V           86        101010111
W           87        101110111
X           88        11101010111
Y           89        1110101110111
Z           90        11101110101
Ä          196        10111010111
Ö          214        1110111011101
Ü          220        10101110111
*          223        101010111010111

Das Progrmm sieht so aus:

Procedure MorseAusg(TX$)
 Define int1, i, j, MorseCode$
 For i = 1 To Len(TX$)
   DatabaseQuery(iDB, "SELECT MorseCode FROM Tab_Morsezeichen WHERE Zeichen = '" + Mid(TX$, i, 1) + "'")
   FirstDatabaseRow(iDB)
   MorseCode$ = GetDatabaseString(iDB, 0) + "000"
   For j = 1 To Len(MorseCode$)
     SetSerialPortStatus(COM_K3, #PB_SerialPort_RTS, Val(Mid(MorseCode$, j, 1)))
     Select WindowEvent()
       Case #PB_Event_Menu
         If EventMenu() = 140
           bTX = ~ bTX
           Break 2
         EndIf
       Case #PB_Event_Gadget
         If EventGadget() = #Btn_Stop
           Break 2
         EndIf
     EndSelect
     Delay(iElLen)
   Next
 Next
 SetSerialPortStatus(COM_K3, #PB_SerialPort_RTS, 0) : bTXStop = #False : MorseAusgEnde()
 SetActiveGadget(GetGadgetData(#Fme_Log))
EndProcedure

An die Prozedur MorseAusg() wird der zu sendende Text als String übergeben und in TX$ gespeichert.
In einer
For...Next-Schleife wird für jedes Zeichen von TX$ der entsprechende Morsecode aus der Tabelle geholt und "000" (Zeichenabstand) angehängt.
Dann wird Zeichen für Zeichen des Morsecodes als Wert auf die Steuerleitung RTS gegeben und damit der Sender getastet.
Die Geschwindigkeit hängt ab von
Delay(iElLen). Mit Delay() wird die Programmausführung für die Anzahl der Millisekunden angehalten, die in iElLen gespeichert sind. Je kleiner dieser Wert ist, desto schneller ist die Morseausgabe.
Das ist alles. Einfach, aber wirkungsvoll.

Zurück zum Seiteninhalt | Zurück zum Hauptmenü