Hexadezimal-Telegraphie

Elektronik-Labor  Projekte  Mikrocontroller  TLScript  




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.




Elektronik-Labor  Projekte  Mikrocontroller  TLScript