Morse-Telegraphie für den Sparrow       

Elektronik-Labor  Projekte  AVR                  




Video: http://youtu.be/S4KdWWvDOEM

Zwar hat sich die binäre Telegraphie bei der Eingabe von Zahlen bewährt, aber wenn es um Textzeichen geht, hat die Morse-Telegraphie weiterhin ihre Bedeutung. Und da der Sparrow gleich auch sein eigener Hochfrequenzsender ist, ist diese Art der Datenübertragung eine praktische Sache. Das grundlegende Verfahren der Zeichenerkennung und -Kodierung wurde bereits mit anderen AVR-Controllern vorgestellt:  Morsedecoder


Der Sparrow-Morse-Sputnik

Das  Programm erzeugt ein mit ca. 1 kHz moduliertes HF-Signal bei ca. 520 kHz. Wie beim ersten Sparrow-Sputnik kann das Signal auch auf Oberwellen bei ca. 1 MHz und bei 1,5 MHz gehört werden.  Das Morsesignal hat eine Geschwindigkeit von etwa 60 BpM. Es werden zufällige Fünfergruppen erzeugt, wie man sie gern beim Üben verwendet. Der Sparrow wird dazu einfach auf ein Mittelwellenradio gelegt und koppelt dann induktiv auf die Ferritantenne. Es werden alle gesetzlichen Grenzwerte für die induktive Übertragung eingehalten, und die Nachbarn hören nichts davon.

Download: Sparrow_Morse-Sputnik.zip
Direkt laden: http://tiny.systems/categorie/cheepit/MorseSputnik.html

'Sparrow_Morsen_Sputnik.bas

$regfile = "attiny13.dat"
$crystal = 9600000
$hwstack = 8
$swstack = 4
$framesize = 4

Led1 Alias Portb.1
Led2 Alias Portb.3
S1 Alias Pinb.0
S2 Alias Pinb.2
Config Portb = &B000011010

Dim D As Byte
Dim T As Byte
Dim B As Byte
Dim C As Byte
Dim N As Byte
Dim M As Byte
Dim I As Byte
Dim J As Byte

Clkpr = 128 '9,6 MHz
Clkpr = 0
Clkpr = 0

Declare Sub Receivemorse
Declare Sub Sendmorse

Do
For I = 1 To 5 'Zufällige Fünfergruppen A...Z
C = Rnd(24)
C = C + 2
If C = 19 Then C = 27
If C = 21 Then C = 28
Sendmorse
Waitms 300
Next I
Waitms 1500
Loop

Sub Receivemorse
C = 0
Do
Do
Loop Until S1 = 0
T = 0
Do
For M = 1 To 10
For N = 1 To 250 'ca. 520 kHz
Led1 = 1
Led1 = 0
Next N
Waitms 1 'ca 1 kHz AM
Next M
T = T + 1
Loop Until S1 = 1
Waitms 10
If T > 15 Then
C = C + B
End If
Shift B , Left
T = 0
Do
Waitms 10
T = T + 1
Loop Until S1 = 0 Or T > 25
Loop Until T > 25
End Sub

Sub Sendmorse
J = 1
Do
Shift C , Left
B = C And 128
J = J + 1
Loop Until B = 128
Do
Shift C , Left
J = J + 1
B = C And 128
If B = 128 Then
For T = 1 To 240
For N = 1 To 250 'ca. 520 kHz
Led1 = 1
Led1 = 0
Next N
Waitms 1 'ca 1 kHz AM
Next T
Else
For T = 1 To 80
For N = 1 To 250 'ca. 520 kHz
Led1 = 1
Led1 = 0
Next N
Waitms 1 'ca 1 kHz AM
Next T
End If
Waitms 100
Loop Until J = 8
End Sub


Sparrow-Morse-Memory

Da möchte man sich etwas notieren, aber der Bleistift ist abgebrochen. Dann bleibt nur der Sparrow, was sonst. Die Notiz wird einfach hineingemorst und kann nach einem Reset wieder abgerufen werden. Auch hier geht es wieder um echte Morsezeichen (nicht um Zahlen im binären Telegraphie-Code). Aber trotzdem sucht man die Morsezeichentabelle im Programm vergeblich. Eigentlich kann der Sparrow gar nicht morsen, er merkt sich einfach nur Punkte und Striche sowie Zeichenpausen, und die gibt er dann wieder. Mit einer Ausnahme, er kennt das Ende-Zeichen .-.-. und setzt dann eine 255 in das EEPROM. So weiß er im Abspielmodus, dass die Nachricht an ihr Ende gekommen ist.

Der Sparrow gibt alles wieder, mit allen  Sonderzeichen, die man vielleicht gerade erst erfunden hat, und mit allen Fehlern, die man eventuell gemorst hat. Das Programm eignet sich daher auch zum Üben. Am Anfang braucht es vielleicht mehrere Versuche, bis die Notiz richtig drin ist. Aber nach einiger Zeit geht es immer besser. Dann kann man natürlich auch einen Standard-CQ-Ruf einspeichern und damit einen Sender steuern. Oder einfach auf Mittelwelle abhören, denn auch dieses Programm bildet wie der Sputnik einen kleinen AM-Sender. Wer mehr auf NF steht kann aber auch einen Lautsprecher mit 1-k-Vorwiderstand an B1 anschließen.


Download (update 22.12.14):  Sparrow_Morse-Memory.zip
Direkt laden: http://tiny.systems/categorie/cheepit/MorseMemory.html
'Sparrow_Morse_Memory.bas

$regfile = "attiny13.dat"
$crystal = 9600000
$hwstack = 8
$swstack = 4
$framesize = 4

Led1 Alias Portb.1
Led2 Alias Portb.3
S1 Alias Pinb.0
S2 Alias Pinb.2
Config Portb = &B000011010

Dim D As Byte
Dim T As Byte
Dim B As Byte
Dim C As Byte
Dim N As Byte
Dim M As Byte
Dim I As Byte
Dim J As Byte
Dim A As Byte

Clkpr = 128 '9,6 MHz
Clkpr = 0
Clkpr = 0

Declare Sub Receivemorse
Declare Sub Sendmorse

Do
A = 0
Do
Readeeprom C , A
If C < 255 Then Sendmorse
A = A + 1
Waitms 300
Loop Until C = 255
A = 0
Do
T = 0
Do
Waitms 10
T = T + 1
If T > 30 Then T = 30
Loop Until S1 = 0
If T = 30 Then
D = 1
Writeeeprom D , A
A = A + 1
End If
Receivemorse
D = C
Writeeeprom D , A
A = A + 1
If C = &B00101010 Then
D = 255
Writeeeprom D , A
End If
Loop Until D = 255
Loop

Sub Receivemorse
C = 1
Do
Shift C , Left
Do
Loop Until S1 = 0
T = 0
Do
For M = 1 To 10
For N = 1 To 250 'ca. 520 kHz
Led1 = 1
Led1 = 0
Next N
Waitms 1
Next M
T = T + 1
Loop Until S1 = 1
' Pwm0b = 0
Waitms 10
If T > 15 Then
C = C + 1
End If
Shift B , Left
T = 0
Do
Waitms 10
T = T + 1
Loop Until S1 = 0 Or T > 25
Loop Until T > 25
End Sub


Sub Sendmorse
If C = 1 Then
Waitms 300
Else
J = 1
Do
Shift C , Left
B = C And 128
J = J + 1
Loop Until B = 128
Do
Shift C , Left
J = J + 1
B = C And 128
If B = 128 Then
For T = 1 To 240
For N = 1 To 250 'ca. 520 kHz
Led1 = 1
Led1 = 0
Next N
Waitms 1 'ca 1 kHz AM
Next T
Else
For T = 1 To 80
For N = 1 To 250 'ca. 520 kHz
Led1 = 1
Led1 = 0
Next N
Waitms 1 'ca 1 kHz AM
Next T
End If
Waitms 100
Loop Until J = 8
End If
End Sub

22.12.14: Erweiterung um eine Löschtaste S2

Holger Fritzsch schrieb: Ich finde das Morse-Memory genial. Darum werde ich  einen ATTINY, nur dafür, in  ein kleines Gerät bauen. Das ist die einzige Annehmlichkeit meines Pflichtarmeedienstes, dass ich als ehemaliger Oberfunker noch gut morsen kann. Darum meine Frage, kann man nicht eine Funktion, (S2) ist noch frei, zum Löschen des letzten Zeichens implementieren?

Gute Idee, das Programm wurde nun so erweitert, dass bei einem kurzen Druck auf S2 der Adresszeiger um Eins verkleinert wird. Wenn man sich also vermorst hat, kann das letzte Zeichen gelöscht werden.

Ausschnitt aus dem erweiterten Programm:

  A = 0
Do
T = 0
Do
Waitms 10
T = T + 1
If T > 30 Then T = 30
'Löschen
If S2 = 0 Then
Do
Waitms 100
Loop Until S2 = 1 'Ein Zeichen löschen
A = A - 1
Waitms 100
End If
'Loschen Ende
Loop Until S1 = 0
If T = 30 Then
D = 1
Writeeeprom D , A
A = A + 1
End If
Receivemorse
D = C
Writeeeprom D , A
A = A + 1
If C = &B00101010 Then
D = 255
Writeeeprom D , A
End If
Loop Until D = 255


Elektronik-Labor  Projekte  AVR