Kann man Zahlen mit der Morsetaste
oder einem kleinen Taster eingeben? Mit dem Programm HexCW geht das.
Allerdings wird hier nicht der bekannte Mose-Code verwendet, sondern
ein Bit-orientierter, leicht erlernbarer Code. Ganz einfach, ein kurzer
Tastendruck ist ein Nullbit, eine langer ist ein Bit Eins. Eine Hexzahl
wie 0xA5 kann man sich als Binärzahl vorstellen: 1010 0101. Damit hat
man den Eingabe-Code. Einsen dauern länger als 200 ms, Nullen sind
kürzer. Bei einer üblichen Morsegeschwindigkeit von 60 BpM hat ein
Punkt eine Länge von 100 ms, ein Strich dauert 300 ms. Passt also
genau. Aber ca. 40 Bpm bis 90 BpM passt auch noch. Und man darf auch
das ganze Byte in zwei Gruppen teilen und dazwischen eine etwas längere
Pause einfügen. Etwas Übung reicht, die Ergebnisse sind an den acht
LEDs ablesbar.
Rem HexCW
0x09FF Pdir = 255
0x0208 B = 8
0x21FA Call L250:
L1:
0x0307 C = 7
L2:
0x190A Delay ms = 10
0x3E00 A = AD2
0x0280 B = 128
0x2304 If A>B Jmp L2:
0x3900 A = D
0x3100 A = A Shl 1
0x3800 D = A
0x19C8 Delay ms = 200
0x3E00 A = AD2
0x2314 If A>B Jmp L3:
0x3900 A = D
0x2800 A = A + 1
0x3800 D = A
L4:
0x190A Delay ms = 10
0x3E00 A = AD2
0x2411 If A<B JMP L4:
L3:
0x2504 C*Jmp L2:
0x3900 A = D
0x4500 Pout = A
0x4200 Print A
0x0400 D = 0
0x19FA Delay ms = 250
0x2003 Jmp L1:
Die Taste wird hier mit AD2 abgefragt. Weil der Eingang hochohmig ist,
wird ein Pullup-Widerstand gebraucht. Nur beim CH32V003 gibt es dafür
eine Software-Lösung. Verwendet wird die Spezialfunktion zur Messung
von Widerständen (B = 8, Call 250). Sie verwendet einen Spannungsteiler
mit internem Pullup, der nach der Messung stehen bleibt. Weil kein
Messobjekt angeschlossen ist, wird ein Überlauf angezeigt (-1 R). Alle
Anzeigen danach sind Ergebnisse der Telegraphie-Eingaben. Für alle
anderen TLScript-Controller muss dieser Aufruf entfernt werden, und
stattdessen muss ein externer Pullup eingebaut werden, z.B. ein
Widerstand mit 10 kOhm gegen VDD.
Die Dekodierung läuft in acht Durchgängen für die acht Bits in der
C-Zählschleife. In einer ersten Abfrageschleife wird gewartet, bis die
Spannung an AD2 unter 128 sinkt, die Taste also gedrückt wird. Dann
wird das Ergebnisbyte in D um eine Stelle nach links verschoben und 200
ms gewartet. Falls die Taste dann schon wieder geöffnet ist, war es ein
Punkt, und das Programm springt nach L3. Wenn sie noch geschlossen ist,
war es ein Strich. Dann wird zum Ergebnis in D eine 1 hinzugefügt, wo
vorher durch das Linksschieben einen 0 stand. Danach muss dann
aber noch in der L4-Schleife gewartet werden, bis die Taste wieder
geöffnet wird. Damit ist ein Bit empfangen, und die C-Schleife geht in
den nächsten Durchgang. Wenn alle acht Bits angekommen sind, wird das
Ergebni in D an den Port ausgegeben und mit Print angezeigt.
Dieser Code ist leicht erlernbar, weil die Umformung von Hex-Zahlen in
Binärzahlen ja sowieso dauernd im Kopf gelöst wird. Wer morsen kann,
wird manchmal an Morsetext erinnert. Das häufig gehörte CQ klingt
genauso wie die Zahl 0xAD (=173) -.-. --.-. Man könnte die ganze
Sache natürlich auch mit echten Morsezeichen machen, aber die
Übertragung würde länger dauern. Ziffern bestehen im Morsecode aus fünf
Elementen. Besonders krass ist der der Unterschied bei der Null: -----
im Morsecode gegen .... in Hex-Telegraphie.
Was man nun damit macht, ist jedem selbst überlassen. Mit den Ausgängen
kann man ja beliebige Dinge steuern. Ein Grund für diese Entwicklung
war, dass ein vorbereitender Test für eine weitere Möglichkeit einer
Tastenprogrammierbaren Steuerung durchgeführt werden sollte.