Butterfly-Morse-Dekoder
Von Burkhard Kainka
Literatur: Lernpaket Mikrocontroller

Es hat ein paar Jahre gedauert bis ich Morsezeichen (CW) mit der erforderlichen Geschwindigkeit von 60 Bpm für die damalige Amateurfunklizenz lesen konnte. Schließlich bekam ich den gewünschten Schein und das Rufzeichen DK7JD.
CW wird heute immer noch verwendet. Aber das Training ist immer noch ein harter Job. Was man also braucht ist ein kleiner Helfer. Die beste Art Morsen zu lernen scheint es zu sein, einfach auf der Taste zu hauen und einen Morsedekoder mitlesen zu lassen. Man braucht also eine Morsetaste, einen Tongeber und ein Display. Das Butterfly-Starterkit von Atmel hat all dies an Bord, sogar eine kleine Taste.
Ganzen Artikel lesen...
Für die Software habe ich BASCOM verwendet. Dieser Basic-Compiler wurde von Mark Alberts von MCS Electronics in Holland entwickelt. Eine freie Demoversion kann man bei www.mcselec.com bekommen. Die Codegröße ist zwar begrenzt, reicht aber für dieses Projekt. Dem Programm liegt ein spezieller LCD-Treiber für Butterfly bei, der Rest ist nicht mehr schwierig.
Töne kann man mit dem Piezo-Schallwandler auf der Platine als PWM-Signal erzeugen. Jedes PWM-Verhältnis über Null erzeugt einen Ton, der hier im Unterprogramm Getkey eingeschaltet wird, solange man auf die Taste drückt. Fertig ist der Mithörton. Tatsächlich werden die Anschlüsse PB4, PB6 und PB7 ausgewertet. Also kann man den kleinen Joystick drücken, oder hoch- bzw. herunterziehen, ganz nach Geschmack. Außerdem kann eine externe Morsetaste am Anschluss PB4 angeschlossen werden.
$lib

"lcd_butterfly.lbx"
'need

to

dim

this

byte
Dim

_butterfly_digit

As

Byte
Dim

Text

As

String

*

10
Dim

Key

As

Byte
Dim

C

As

Byte
Dim

Code(255)

As

Byte
Dim

N

As

Integer
Dim

Timepressed

As

Word
Dim

Timenotpressed

As

Word
Dim

Charactercode

As

Byte
Declare

Sub

Getkey
Declare

Sub

Getkeytimes
Declare

Sub

Gecharactercode
Declare

Sub

Initcode


Config

Portb

=

32
Portb

=

&HF0


'pullups

for

joystick
Config

Timer1

=

Pwm

,

Prescale

=

8

,

Pwm

=

10

,

Compare

A

Pwm

=

Clear

Down
Pwm1a

=

0


'no

sound
Initcode



'prepare

code

table
Cls
Text

=

"MORSE

"
Lcd

Text
Do

Gecharactercode

C

=

Code(charactercode)

Text

=

Text

+

Chr(c)

Text

=

Right(text

,

6)

Cls

Lcd

Text
Loop
Sub

Getkey

Key

=

&HFF

-

Pinb

Key

=

Key

And

&HD0

If

Key

>

0

Then

Pwm1a

=

80

Else

Pwm1a

=

0

End

If
End

Sub
Sub

Getkeytimes

Timepressed

=

0

Timenotpressed

=

0

Do

Getkey

Loop

Until

Key

>

0

Do

Waitms

1

Timepressed

=

Timepressed

+

1

Getkey

Loop

Until

Key

=

0

Do

Waitms

1

Timenotpressed

=

Timenotpressed

+

1

Getkey

Loop

Until

Key

>

0

Or

Timenotpressed

>

200
End

Sub
Sub

Gecharactercode

Charactercode

=

1

Do

Getkeytimes

Charactercode

=

Charactercode

*

2

If

Timepressed

>

150

Then


Charactercode

=

Charactercode

+

1

End

If

Loop

Until

Timenotpressed

>

200
End

Sub
Download Morsen.zip (4 KB)
Morsezeichen bestehen aus Punkten und Strichen. Bei der Standard-Geschwindigkeit 60 Zeichen pro Minute (60 BPM) bruchi ein Punkt 100 ms, ein Strich 300 ms. Pausen zwischen Punkten und Strichen dauern 100 ms, Pausen zwischen Zeichen 300 ms. Die Sub Getkeytimes mist die Zeiten. Dann fügt Getcharactercode die zeichen zu einem Byte zusammen. Jedes zeichen beginnt mit dem Code 1 = 00000001b. Die Eins ganz rechts dient als Startbit. Wenn man nur einen Punkt gibt und dann eine pause lässt, wird rechts ein Nullbit eingefügt, was 00000010b ergibt. Dieses Zeichen steht für E. Entsprechend führt ein einzelner Strich zum Code 00000011b, was ein T bedeutet. Die Codes stehen also für Morsezeichen, wobei Nullen Punkte und Einsen Striche meinen und die linke Eins nur den Anfang markiert. Ein K (Strich, Punkt, Strich) erzeugt den Code 00001101b. Eine Code-Tabelle wird verwendet um für jedes Zeichen den zugehörigen ASCII-Code zu finden. Jedes neues zeichen wird rechts ins Display geschrieben. Der Text läuft nach links, so dass man immer die letzten sechs zeichen sehen kann.
Die größte Pause zwischen Punkten und Strichen innerhalb eines Zeichens beträgt 150 ms. Man kann also etwas langsamer mit ca. 40 BPM anfangen und die Geschwindigkeit bis ca. 90 BPM steigern. Der Decoder arbeitet bei sauberer Gebeweise mit einem genauen Punkt/Pausenverhältnis von 3 in einem Geschwindigkeitsbereich von 1 zu 3.
Also gutes Üben, und bis dann mal auf Kurzwelle!
DK7JD
Eine Rückmeldung von Gerd, DF9iV:
Mit solch einer Taste aus einem Radiogeschäft für (damals!) 4,50 DM habe ich 1980 (mit 40 Jahren) ganz allein für mich (kannte keinen Funkamateur) Telegrafie gelernt - nur mit Geben von Morsezeichen! Ich finde es sehr spannend, dass du auch sagst, man kann morsen lernen nur mit Geben.

Lernen Sie die ganze Vielfalt vom Franzis Buch- und Softwareverlag kennen