Morsedecoder mit TLScript auf dem CH32V003

Dieses Projekt beschreibt die Entwicklung eines Morsedecoders auf der Basis von TLScript. Es gibt schon einige Beispiele für Programme mit automatisiertem Decoder oder sogar kommerzielle Geräte. Einen Decoder mit TLScript auf einem CH32V003 Mikrocontroller laufen zu lassen - das ist eine besondere Herausforderung. Es ist aber auch deshalb sinnvoll, da in der Testumgebung von TestLab sehr schnell Betriebsparameter geändert und getestet werden können ohne zeitaufwändige Kompilierung. Und das kann mit "low cost" Hardware - praktisch mit "Bordmitteln" - erfolgen.

Software und Programmerklärung:
Der Decoder basiert auf den Zeitmessungen der "dits" und "dahs" und der entsprechenden Pausen dazwischen. Im Programm wird nach gängigem Standard den "kurzen "dits" (symbolisch ".") eine 1 zugeordnet und den langen "dahs" (symbolisch "-") eine 0. Weil die Morsecodes unterschiedliche Bit-Länge haben, benötigt man zur 8-bit Datenverarbeitung eine Markierung von Beginn oder Ende. Im hier verwendeten Fall wird dem Code vorher eine 1 vorangestellt und nach vorne mit Nullen aufgefüllt. Wird z.B der Code ". - - ." detektiert (was dem Buchstaben P entspricht), so wird dieser Code mit der Binärzahl 00011001 dargestellt, oder der Code "- - . . ." (was der Zahl 7 entspricht) mit der Binärzahl 00100111. Diese Zahlen sind nun ein Index von einer neuen  Tabelle "morse_table[256]", die in der erweiterten Firmware "Firmware_TLScript42-CH32V003-M-Morse" eingearbeitet ist. Für den Zugriff auf diese Tabelle wurde ein neuer Befehl "CALL 249" eingefügt, der intern mit "a = morse_code[a];" Zugriff hat. Der detektierte Code zeigt mit dem Index auf das Tabellenelement mit dem entsprechenden ASCII-Code für die Textausgabe. Dieser wird wiederum mit dem Befehl "CALL 248" im Konsolenfenster ausgegeben. Hierzu ein Tipp => Mit z.B. dem Programm PUTTY als Textmonitor ist die Textausgabe noch besser zu verfolgen, da die Textausgabe kontinuierlich weitergeschrieben wird mit Zeilenumbruch. Übrigens kann mit Eingabe einer Zahl größer Null im Eingabefenster der Zeilenabstand getoggelt werden. Zusätzlich zur Monitorausgabe erfolgt mit dem Programm "Morsen_mit_Monitor_und_OLED" die Anzeige synchron auf einem OLED-Display unter Verwendung des "CALL 247"-Befehls, entsprechend der Beschreibung im Projekt "OLED mit I2C BitBang".
Aber auch ohne OLED-Display kann mit der früheren Firmware aus dem Projekt "ASCII-Ausgabe und HEX-Umwandlung" gearbeitet werden. Hierzu ist das TLScript-Programm "Morsen_mit_upload_MORSE_TABLE.tls" zu verwenden und es muss per Upload die Datei "MORSE_TABLE.dat" nachgeladen werden (auf Startseite "Load" Button und auf 2. Seite "[Dat]"-Befehl).

Hardware:
Der per Funk empfangene Morsecode wird als Tonsignal ausgegeben und ist meist nur sehr leise detektierbar. Auch Morsesignale au dem Computer (siehe unten zu "Testumgebungen") können genutzt werden, wobei die Tonausgabe mittels Audioausgang erfolgt - in meinem Fall mit nur kleinen analogen Spannungsoszillationen von ca. -0,5V bis + 0,5V (Spannung Ue). Zur digitalen Verarbeitung benötigt man also eine Verstärkerschaltung und eine Anhebung auf nur positive Werte (Spannung Uv). Zusätzlich ist die Glättung der Amplituden-Oszillationen notwendig (Spannung Ua). Die von mir verwendete Schaltung ist im Bild dargestellt ( siehe auch => Wikipedia,Verstärkerschaltung).

Signalverarbeitung:
Die Verarbeitung der geglätteten Signale erfolgt mit einem CH32V003 Mikrocontroller, auf dem die neu ergänzte Firmware "TLScript42-CH32-M-Morse" geladen ist. Die Signale haben nach der Glättung näherungsweise eine TTL-Form, sind aber noch zu schwach. Daher wird das Signal am AD0-Eingang (PD4) gelesen und ein Schwellwert von ca. 0.3V festgelegt (Analogwert 15 im Vergleich zu 255). Die Signale werden auch durch Digital-Ausgabe mittels PC7 auf einer LED optisch sichtbar gemacht.Optional kann an Port PC6 ain Beeper oder Buzzer angeschlossen werden damit der Ton zusätzlich hörbar wird.

Testumgebungen:
Die einfachste Testumgebung ist meines Erachtens ein spezielles freies Testprogramm "MorseCat 2.0". Die Einstellung von 30WPM (words per minute) sind ein guter Wert für die Testumgebung, 25 bis 35 WPM gehen aber auch. Eine Tonfrequenz von 700 Hz ist gut, kann aber aufgrund der Frequenzglättung auch beliebig höher sein, Durch das Glättungsglied ist die untere Frequenz auf 300Hz beschränkt. Im Editor kann freier Text eingegeben und danach das Morsen gestartet werden.
Weitere Möglichkeiten sind Webseiten. Hierbei sind YouTube-Beiträge zu empfehlen, z.B. => https://www.youtube.com/watch?v=-FrDPF9PIao. Und richtig gut sind die Seiten der Organisation WebSDR => http://websdr.org/. Hier wird auf Funk-Empfangsserver zugegriffen, die in Echtzeit an unterschiedlichen Orten der Welt Morse-Übertragungen hörbar machen. Mittels des vorgestellten kompletten Setups können so live weltweit Übertragungen mitverfolgt und gegebenenfalls über ein Monitor-Programm mitgeschnitten und gespeichert werden (Arduino-Monitor, PUTTY oder ähnliches).
WebSDR-Beispiele:
Northern UTAH => http://websdr1.sdrutah.org:8901/index1a.html
Washington DC => http://na5b.com:8901/
Niederlande => http://sdr.websdrmaasbree.nl:8902/  bei  7025 MHz

Schlussbemerkung:
Ich hatte all dies schon vor längerer Zeit für einen Arduino entwickelt, aber mit dem Testlab und dem CH32V003 hat es nochmal richtig Spaß gemacht und war eine tolle Herausforderung.
Ich wünsche viel Erfolg beim Ausprobieren.
