erstellt 08.03.2020
Morsen
Jeder kennt eigentlich die schnell hintereinander kommenden Piep Töne die man mitunter im Radio meist auf Bänder unterhalb von 88 MHz hören kann oder konnte.
Dabei  handelt es sich um Morsezeichen.
Morsen kann man mit Töne, Elektromagnetische Wellen, oder auch per Licht, wie es die Funker auf Schiffen meistens noch beherrschen.
Morsen hat einen großen Vorteil gegenüber aller herkömmlichen und vor allen gegenüber der modernen Methoden der Datenübertragung.
Es benötigt sehr wenig Energie, und kann mit relativ primitiven Mittel hergestellt bzw. ausgeübt werden, ist allerdings ein sehr langsames Verfahren , wobei man sich darauf
beschränkt nur das aller Nötigste zu übertragen.
Da es sich bei der Übertragung oft um Töne handelt, müssen diese Töne erst übersetzt werden um sie allgemein verständlich zu machen.
 
Das Verfahren
Es gibt dabei zwei verschieden lange Töne, die sich sich in ihrer Frequenz aber nicht unterscheiden.
Diese Töne hat man mit den zwei folgenden Namen belegt um sie auch Verbal unterscheiden zu können, in "Dit" und in "Dah".
Der Ton "Dit" gibt dabei die Basis Länge an nachdem sich der andere Ton , nämlich "Dah" und auch die Pause zwischen jeden Zeichen relativ danach richtet.
Nehmen wir beispielsweise einen "Dit" Basislänge mit 50 ms an, so ergibt der Ton "Dah" eine Länge von 3 mal "Dit" also 150ms.
Die Pause zwischen jeden der einzelnen Zeichen beträgt ein "Dit" also 50ms.
Die Pause zwischen einzelne Wörter ist festgelegt auf 7 "Dit" also 7 *50ms= 350ms


SOS
S
O
S
.

.

.

-

-

-

.

.

.
Dit
Pause
Dit
Pause
Dit
Zeichenlücke
Dah
Pause
Dah
Pause
Dah
Zeichenlücke
Dit
Pause
Dit
Pause
Dit
Zeichenlücke
50ms
50ms 50ms 50ms 50ms 150ms
150ms
50ms
150ms
50ms
150ms
150ms
50ms
50ms
50ms
50ms
50ms
150ms

Der Text " Hallo Welt" sieht dann folgendermaßen aus:

Der Morsecode
Das Morsealphabet besteht aus 54 Zeichen, wobei jedes Zeichen eine anderen Code hat und aus unterschiedlich viele Impulse bestehen kann.
Die Impulse bestehen aus Punkte oder (und) Striche, wobei der Strich dreimal so lang wie ein Punkt ist.
Nach jedem Wort kommt ein sieben Dit lange Pause
Der Morse Weltmeister schafft 160 Zeichen in der Minute, das sind 2,6 Zeichen in der Sekunde.
( 2,6 Zeichen = 1000ms)
( 1 Zeichen = ca 380ms)
 
Das kürzeste Zeichen ist das "E" mit gerade mal einen Punkt, und eines der längste Zeichen die "?" mit 6 Striche
Betrachten wir einmal das längste Zeichen
Wenn ein Zeichen ca 380ms ist dann ergibt sich daraus eine Leerzeichen von  380/16 = ca 23 ms
Daraus ergibt sich ein
Leerzeichen
Punkt
Strich
20ms
20ms
60ms
Das aber ist die Geschwindigkeit eines Morse Meister.
Stecken wir das Ziel nicht so hoch und fangen mit einer Geschwindigkeit von 50ms für ein Dit an.
A
. -
1
. - - - -
B
- . . .
2
. . - - -
C
- . - .
3
. . . - -
D
- . .
4
. . . . -
E
.
5
 . . . . .
F
. . - .
6
- . . . .
G

7
- - . . .
H
. . . .
8
- - - . .
I
..
9
- - - - .
J
. - - -
0
- - - - -
K
- . -


L
. - . .


M
- -


N
- .


O
- - -


P
. - - .


Q
- - . -


R
. - .


S
. . .


T
-


U
. . -


V
. . . -


W
. - - . . .


X
- . . -


Y
- . - -


Z
- - . .






Bedienung
Mit einen Drehgeber erfolgt die Texteingabe , es muss nach jeder Eingabe eines Zeichen die Tastfunktion des Drehgeber als Bestätigung gedrückt werden.
Nach Eingabe des letzten Zeichen, wird mit dem weißen Taster der gesamte  Text gespeichert.
Anschließend wird der Code akustisch wieder gegeben, und alle paar Sekunden wiederholt.
Funktion
Mit dem Drehgeber wir eine Zahl zwischen 1 und 35 ausgewählt, dann wird jeder Zahl einen Buchstaben zugeordnet und der Buchstabe angezeigt.
Beim drücken des Drehregler Taster wird das ausgewählte Zeichen in einer Variable gespeichert und das nächste ausgewählte Zeichen hinzugefügt.
Nachdem der gesamte Text in der Variablen verfügbar ist. kann mit der " LEN " Anweisung jedes einzelne Zeichen aus der Variablen ausgelesen werden,
 und Zeichen für Zeichen als Code ausgegeben werden.
Morse Alphabet
Das Morsealphabet besteht aus 54 Zeichen, wobei jedes Zeichen eine anderen Code hat und aus unterschiedlich viele Impulse bestehen kann.
Die Impulse bestehen aus Punkte oder (und) Striche, wobei der Strich dreimal so lang wie ein Punkt ist.
Nach jedem Wort kommt ein sieben Dit lange Pause
Der Morse Weltmeister schafft 160 Zeichen in der Minute, das sind 2,6 Zeichen in der Sekunde.
( 2,6 Zeichen = 1000ms)
( 1 Zeichen = ca 380ms)
 
Das kürzeste Zeichen ist das "E" mit gerade mal einen Punkt, und eines der längste Zeichen die "?" mit 6 Striche
Betrachten wir einmal das längste Zeichen
Wenn ein Zeichen ca 380ms ist dann ergibt sich daraus eine Leerzeichen von  380/16 = ca 23 ms
Daraus ergibt sich ein
Leerzeichen
Punkt
Strich
20ms
20ms
60ms
Das aber ist die Geschwindigkeit eines Morse Meister.
Stecken wir das Ziel nicht so hoch und fangen mit einer Geschwindigkeit von 50ms für ein Dit an.

 

Programm
$regfile "m8def.dat"
Definiert den Atmega als Atmega8
$crystal = 1000000   
Gibt die Quarzfrequenz  in Herz
$hwstack = 32        
32 Hardware reservierte Speicher Default Wert
$swstack = 10           
Software reservierter Speicher Default Wert
Config Lcd = 16 * 2 Konfiguration fürs Display
Config Lcdpin = Pin , Db4 = Portb.5 , Db5 = Portb.4 , Db6 = Portb.3 , Db7 = Portb.2 , Rs = Portd.1 , E = Portd.0 Zuweisung der Display Anschlüsse

Definieren der Ein /Ausgänge
Ddrb.0 = 1  
Led gelb rechte Led auf der Platine
Ddrd.5 = 1  
Led gelb linke Led auf der Platine
Ddrd.6 = 1 Led Rot mittlere Led
Ddrd.7 = 0 Taster
Tastfunktion des Drehgeber
Portd.2 = 1   
Pull Up der Interrupt 0 setzten
Portd.3 = 1 
Pull Up der Interrupt 1 setzten
Portd.4 = 1  
Pull Down für Drehgeber Taster
Portd.7 = 1 
Pull Down für Taster weiß
Interrupts
Gicr = &B11000000
Interrupt 0 und 1 einschalten
Sreg.7 = 1      
Interrupts Global freigeben
On Int0 Kanal_a Zuweisen des Routine Namen

On Int1 Kanal_b Zuweisen des Routine Namen
Mcucr = &B00001010    
Interrupts sollen auf H/L Flanke reagieren
Gicr = &B11000000
Interrupt 0 und 1 einschalten
Einschaltmeldung
Cls

Locate 1 , 1

Lcd "Drehgeber"

Locate 2 , 1

Lcd "2020"

Wait 1

Leds Testen
Portb.0 = 1

Waitms 500

Portd.5 = 1

Waitms 500

Portd.6 = 1

Waitms 500

Portb.0 = 0

Portd.5 = 0

Portd.6 = 0

Variable definieren
Dim Drehgeber As Byte

Dim Text As String * 10

Dim Textmenge As String * 10

Dim Textlaenge As Byte
Hier wird die Anzahl der Zeichen abgelegt die als Text abgelegt sind
Programm
Do

Cls

If Pind.4 = 0 Then Gosub Textsumme  
Taster vom Drehgeber abfragen
If Drehgeber = 1 Then Text = "A"
'------------- Texteingabe in
' Variable "Textmenge" speichern

If Drehgeber = 2 Then Text = "B"

If Drehgeber = 3 Then Text = "C"

If Drehgeber = 4 Then Text = "D"

If Drehgeber = 5 Then Text = "E"

If Drehgeber = 6 Then Text = "F"

If Drehgeber = 7 Then Text = "G"

If Drehgeber = 8 Then Text = "H"

If Drehgeber = 9 Then Text = "I"

If Drehgeber = 10 Then Text = "J"

If Drehgeber = 11 Then Text = "K"

If Drehgeber = 12 Then Text = "L"

If Drehgeber = 13 Then Text = "M"

If Drehgeber = 14 Then Text = "N"

If Drehgeber = 15 Then Text = "O"

If Drehgeber = 16 Then Text = "P"

If Drehgeber = 17 Then Text = "Q"

If Drehgeber = 18 Then Text = "R"

If Drehgeber = 19 Then Text = "S"

If Drehgeber = 20 Then Text = "T"

If Drehgeber = 21 Then Text = "U"

If Drehgeber = 22 Then Text = "V"

If Drehgeber = 23 Then Text = "W"

If Drehgeber = 24 Then Text = "X"

If Drehgeber = 25 Then Text = "Y"

If Drehgeber = 26 Then Text = "Z"

If Drehgeber = 27 Then Text = "1"

If Drehgeber = 28 Then Text = "2"

If Drehgeber = 29 Then Text = "3"

If Drehgeber = 30 Then Text = "4"

If Drehgeber = 31 Then Text = "5"

If Drehgeber = 32 Then Text = "6"

If Drehgeber = 33 Then Text = "7"

If Drehgeber = 34 Then Text = "8"

If Drehgeber = 35 Then Text = "9"

If Drehgeber = 36 Then Text = "0"

Textlaenge = Len(textmenge)  Hier werden aus der String Variable Textmenge die Anzahl der Zeichen ausgelesen und in einer Byte Varioablen abgelegt
Toggle Portd.6                ' Betriebsanzeige rot

Waitms 30

Locate 1 , 1                  ' Textausgabe

Lcd "A->Z"

Locate 1 , 10

Lcd Drehgeber

Locate 1 , 13


Lcd Textlaenge zeigt die Anzahl der Zeichen an, die zuvor als Text abgespeichert wurden
Locate 2 , 1                  'Lcd Text

Lcd Text

Locate 2 , 7

Lcd Textmenge

Waitms 100

Loop

Return



Interrupt Routine 0
Kanal_a: Beim links drehen kommt erst kanal a
If Pind.2 = 0 And Pind.3 = 1 Then Waitms 6


If Pind.2 = 0 And Pind.3 = 1 Then Drehgeber = Drehgeber - 1

'Drehgeber = Drehgeber + 1

Portd.5 = 1

Waitms 8

Portd.5 = 0

Return

Interrupt Routine 1
Kanal_b: beim rechts drehen kommt erst kanal b
If Pind.2 = 1 And Pind.3 = 0 Then Waitms 6


If Pind.2 = 1 And Pind.3 = 0 Then Drehgeber = Drehgeber + 1

'Drehgeber = Drehgeber - 1

Portb.0 = 1

Waitms 8

Portb.0 = 0

Return

Routine um den Text zusammen zu führen
Textsumme: '---------------Rotine Text zusammen führen------------------------------------
Portd.6 = 1 
Rote led an
Portd.5 = 1 
gelbe led an
Waitms 1000

Portd.6 = 0                  
' rote led aus
Portd.5 = 0    
gelbe led aus
Textmenge = Textmenge + Text

Return






Aktualsisiert 13.04.2020