Morsetaste und Decoder    

           
Elektronik-Labor   Projekte   Microbit 



Das Projekt realisiert eine Morsetaste mit Decoder-Funktion. Als Morsetaste wird die Taste A verwendet. Man hat einen Mithörton aus dem Calliope-Lautsprecher. Zusätzlich werden die gemorsten Zeichen dekodiert und im Display angezeigt. Das hat sich als ideale Methode für die ersten Schritte zur Morsetelegrafie erwiesen.

Es  werden während der Zeichenerzeugung die Zeiten für Punkte, Striche und Pausen in Einheiten von 10 ms gemessen. Das Programm ist für 60 Zeichen pro Minute optimiert, also für Punktlängen von 100 ms, Strichlängen und 300 ms und Pausenlängen zwischen den Zeichen von 300 ms. Das Programm erlaubt jedoch gewisse Toleranzen in beiden Richtungen. Ein Zeichen ist beendet, wenn eine Pause von mindestens 200 ms auftritt. Ebenso wird ein Ton als Strich gewertet, wenn er mindestens 200 ms lang ist. Punkte und Striche werden zu einer Zahl zusammengefügt, die dann die Position in einem Zeichenstring ergibt. So wird das anzuzeigende Zeichen gefunden.

Das Programm funktioniert ohne Änderung am Calliope und am Microbit, wobei dann ein Lautsprecher an P1 angeschlossen werden muss. 

let T1 = 0
let T0 = 0
let C = 0
let T = ""
basic.forever(() => {
    C = 1
    T0 = 0
    while (T0 < 20) {
        T1 = 0
        T0 = T0 + 1
        basic.pause(10)
        T1 = 0
        while (input.buttonIsPressed(Button.A)) {
            music.ringTone(700)
            T0 = 0
            T1 = T1 + 1
            basic.pause(10)
        }
        music.ringTone(0)
        if (T1 > 5) {
            C = C * 2
        }
        if (T1 > 20) {
            C = C + 1
        }
    }
    if (C < 30) {
        basic.showString(T.charAt(C))
        basic.pause(100)
    }
})
T = "  ETIANMSURWDKGOHVFYLZPJBXCYZQ "


Morse-Funkgerät



Dieses Morsegerät mit Mithörton hilft beim Erlernen der Morse-Telegrafie. Als Morsetaste dient wahlweise die Taste A oder eine externe Taste an P1. Die erste Betätigung wählt die Taste aus. Hat man auf die Taste A gedrückt, ist nur noch diese Eingabe aktiv. Wenn man dagegen die externe Taste bedient hat, reagiert das Programm nicht mehr auf die Taste A.

Wenn eine ganze Gruppe zum Beispiel zur Vorbereitung auf den Amateurfunk Morsen lernen will, ist es hilfreich, wenn alles möglichst realistisch abläuft. Man wählt eine Frequenz und sendet einen allgemeinen Anruf, oder man antwortet auf eine rufende Station. Mehrere Stationen können gleichzeitig senden und empfangen, weil sie unterschiedliche Frequenzen verwenden.

In diesem Projekt werden zehn Kanäle verwendet, die als Funk-Gruppen umgeschaltet werden können. Dazu dient die Taste B. Der gerade aktive Kanal wird im LED-Display angezeigt. Zwei Stationen können nur dann in Verbindung treten, wenn sie auf den gleichen Kanal eingestellt sind. Auf einem der zehn Kanäle kann gleichzeitig auch der weiter unten beschriebene automatische Morsesender seine Fünfergruppen senden.



let K = 0
input.onButtonPressed(Button.B, () => {
    K = K + 1
    if (K > 9) {
        K = 0
    }
    radio.setGroup(K)
    basic.showNumber(K)
})
basic.forever(() => {
    if (input.buttonIsPressed(Button.A)) {
        radio.sendNumber(1)
        music.ringTone(700)
        while (input.buttonIsPressed(Button.A)) {

        }
        radio.sendNumber(0)
        music.ringTone(0)
        while (!(input.buttonIsPressed(Button.A))) {
            basic.pause(10)
        }
    }
    if (input.pinIsPressed(TouchPin.P1)) {
        radio.sendNumber(1)
        music.ringTone(700)
        while (input.pinIsPressed(TouchPin.P1)) {
            basic.pause(10)
        }
        radio.sendNumber(0)
        music.ringTone(0)
        while (!(input.pinIsPressed(TouchPin.P1))) {
            basic.pause(10)
        }
    }
})
radio.onDataPacketReceived(({receivedNumber: D}) => {
    if (D == 1) {
        music.ringTone(700)
    } else {
        music.ringTone(0)
    }
})
radio.setGroup(0)
K = 0
basic.showNumber(0)


Siehe auch:  Morse-Telegraphie für den Sparrow


Fünfergruppen-Morse-Trainer



Dieses Projekt erzeugt die international üblichen Fünfergruppen zum Trainieren der Mithörgeschwindigkeit. Das Programm erzeugt jeweils fünf Buchstaben als Morsezeichen am Lautsprecher zum Hören und Mitschreiben. Als Hilfe werden die Zeichen auch im Display sichtbar.

Intern ist jedes Morsezeichen einer Binärzahl zugeordnet, wobei Nullen für Punkte und Einsen für Striche stehen. Ein A (kurz-lang) wird also 01. Aber damit die Zeichenlänge eindeutig ist, wird noch eine 1 als Startbit vorangestellt. Das A wird also nun zu 0000 0101. Um es in Töne umzusetzen, muss das Programm zuerst  von links nach rechts die erste Eins suchen. Dann ist klar dass die nachfolgende Null für einen Punkt steht und dass insgesamt nur noch ein Strick folgt.

Das Programm erzeugt Zufallszahlen von 0 bis 25. Die 0 steht für einen einzelnen Punkt, also für den Buchstaben E. Durch die Addition mit 2 wird das Startbit hinzugefügt. Alle Buchstaben des Alphabets haben eine maximale Länge von vier Punkten und Strichen. Und sie sind bis auch zwei Ausnahmen wie aufsteigende Zahlen angeordnet.

Für die Ausgabe an den Lautsprecher braucht man zwei Schleifen. Die erste sucht den Anfang des Zeichens, indem sie das Startbit auswertet. Die jeweilige Position des beobachteten Bits steht in J. Damit ist dann klar wie lang das Morsezeichen ist. Damit kann jede noch folgende Eins zu einem Strich und jede Null zu einem Punkt werden.

Die Dekodierung zur Anzeige des gemorsten Buchstabens erfordert nur eine Zeichenkette, die alle Buchstaben in der richtigen Reihenfolge enthält. Die Liste beginnt mit dem E (Zufallszahl  0, mit Startbit 2). Darauf folgt das T (ein Strich, Zufallszahl 1, mit Startbit 3) und so weiter. Am Ende muss nur das Zeichen an der entsprechenden Position aus der Zeichenkette T gelesen werden.

 



let D = 0
let J = 0
let C = 0
let T = ""
basic.forever(() => {
    for (let I = 0; I <= 4; I++) {
        C = Math.random(26)
        C = C + 2
        if (C == 19) {
            C = 27
        }
        if (C == 21) {
            C = 28
        }
        if (C == 25) {
            C = 29
        }
        J = 1
        D = C
        while (C < 128) {
            C = C * 2
            J = J + 1
        }
        while (J < 8) {
            C = C * 2
            C = C % 256
            radio.sendNumber(1)
            music.ringTone(700)
            if (C >= 128) {
                basic.pause(300)
            } else {
                basic.pause(100)
            }
            radio.sendNumber(0)
            music.ringTone(0)
            basic.pause(100)
            J = J + 1
        }
        basic.pause(300)
        basic.showString(T.charAt(D))
    }
    basic.pause(1500)
})
T = "  ETIANMSURWDKGOHVFYLZPJBXCYZQ"
radio.setGroup(0)



Elektronik-Labor   Projekte   Microbit