Butterfly-Morse-Dekoder

von Burkhard Kainka
 aus ELO 2008
Elektronik-Labor  Labortagebuch  ELO  Mikrocontrolle

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.

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"
'needtodimthisbyte
Dim_butterfly_digitAsByte
DimTextAsString*10
DimKeyAsByte
DimCAsByte
DimCode(255)AsByte
DimNAsInteger
DimTimepressedAsWord
DimTimenotpressedAsWord
DimCharactercodeAsByte
DeclareSubGetkey
DeclareSubGetkeytimes
DeclareSubGecharactercode
DeclareSubInitcode
ConfigPortb=32
Portb=&HF0'pullupsforjoystick
ConfigTimer1=Pwm,Prescale=8,Pwm=10,CompareAPwm=ClearDown
Pwm1a=0'nosound
Initcode'preparecodetable
Cls
Text="MORSE"
LcdText
Do
Gecharactercode
C=Code(charactercode)
Text=Text+Chr(c)
Text=Right(text,6)
Cls
LcdText
Loop
SubGetkey
Key=&HFF-Pinb
Key=KeyAnd&HD0
IfKey>0Then
Pwm1a=80
Else
Pwm1a=0
EndIf
EndSub
SubGetkeytimes
Timepressed=0
Timenotpressed=0
Do
Getkey
LoopUntilKey>0
Do
Waitms1
Timepressed=Timepressed+1
Getkey
LoopUntilKey=0
Do
Waitms1
Timenotpressed=Timenotpressed+1
Getkey
LoopUntilKey>0OrTimenotpressed>200
EndSub
SubGecharactercode
Charactercode=1
Do
Getkeytimes
Charactercode=Charactercode*2
IfTimepressed>150Then
Charactercode=Charactercode+1
EndIf
LoopUntilTimenotpressed>200
EndSub


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.