PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Morsecode in Binärform - Decoder



lava
18.01.2010, 20:29
Hallo :)

soo, ich wollte mit meinem Mega8 eine Led in einem bestimmten Morsecode abwechselnd kurz und lang leuchten lassen.
Der Morsecode soll im Binärcode gespeichert werden.
zB.:
Code = "01101010100110" ' frei erfunden ;)
So, wie bekomme ich es jetzt hin, dass er den Binär-Code durch geht und dann mit einer If von 0 und 1 unterscheidet?
Das Problem ist ja nur ihn dazu zu bringen, immer eine "Zahl" von der ganzen Zahlenreihe zu nehmen und diese als nächstes zu verarbeiten! Dann die benutzte raus zu nehmen und die nächste aus der ganzen Zahlenreihe zu nehmen. Und wenn nichts mehr da ist, aus der Schleife raus.

So ungefähr meine ich es:
For x = 1 to *anzahldermorsezeichen/binärzahlen*
y = *aktuelle binär-zahl*
if y = 0 then
print "kurz"
else
print "lang"
end if
Next

So ungefähr... aber keine Ahnung wie ich das wirklich realisieren soll!

Hoffentlich kann mir jemand helfen.

Gruß Chris

Jaecko
18.01.2010, 20:42
Ich seh da noch ein anderes Problem:
Wie Unterscheidest du bei deinem Beispiel bei den ersten 6 Zeichen "011010", welche der folgenden Möglichkeiten es ist:
ETTETE, ANN, WR, ETTAE, ATETE, PN, AC, könnte alles sein. Da fehlt noch irgendwie die Pause zwischen den einzelnen Zeichen.

lava
18.01.2010, 21:41
Hmm, deswegen soll er ja die ganze Zeichenfolge Zeichen für Zeichen nach der Reihe auseinander nehmen und jedes Zeichen auswerten.
Kurz ist "0" und lang ist "1".
Bei 011010 wäre es:
Kurz, lang, lang, kurz, lang, kurz

Also soll er bei dem Beispiel zuerst die 0 links aus der Zeichenfolge rausnehmen und eine Led einmal kurz aufleuchten lassen. Dann das nächste Zeichen (1), bei dem er die Led etwas länger leuchten lässt. usw.

Dirk
18.01.2010, 21:49
Hallo Chris,

wenn man die Morsezeichen binär abspeichern will, geht das z.B. sehr platzsparend mit 16-bit Werten:


0x077D, // 0b0000011101111101 @
0x000D, // 0b0000000000001101 A
0x0057, // 0b0000000001010111 B
0x0077, // 0b0000000001110111 C
0x0017, // 0b0000000000010111 D
0x0001, // 0b0000000000000001 E
0x0075, // 0b0000000001110101 F
0x001F, // 0b0000000000011111 G

Dabei stehen je 2 Bits für ein Dit/Dah des Morsecodes:
"01" bedeutet ein Dit (Punkt) und "11" ein Dah (Strich). Trifft der Encoder auf "00", ist das Zeichen zuende.
Zum Senden von Morsecode wertet man immer die 2 untersten Bits aus, schiebt dann den Wert um 2 Bits nach rechts, usw.

Gruß Dirk

StefanHambur
21.01.2010, 22:52
www.elo-web.de/elo/mikrocontroller-und-programmierung/bascom-avr/morse-bake

PICture
22.01.2010, 02:32
Hallo!

Ich weiss leider nicht was eigentlich das Ziel ist. Es ist aber ein grosser Unterschied zwischen einzelnen Impulsen und bei einer Kommunukation benutztem Morsecode, wo auch definierte Abstände zwischen einelnen "Impulsen" genau definiert sind.

Sorry, aber in bisherigen Beiträgen sehe ich leider keinen Zusammenhang zwischen der Sequenzen von "0" und "1" und dem eigentlichem Morsecode.

MfG

huzzel
22.01.2010, 14:55
Kommt zwar aus einer anderen Ecke (aus der ich komme ;)), aber da hat sich schon mal einer Gedanken gemacht. http://reaktivlicht.de/kochbuch_alt.pdf Punkt 4.10.
Funktioniert 1a

Dirk
22.01.2010, 21:43
@PICture:

Sorry, aber in bisherigen Beiträgen sehe ich leider keinen Zusammenhang zwischen der Sequenzen von "0" und "1" und dem eigentlichem Morsecode.
Wenn du (auch) meinen Post vom 18.1. meinst:
Mit dieser Art der Abspeicherung der Morsezeichen läuft bei mir prima ein Morse-Encoder (also Sender) und ein Morse-Decoder (Empfänger) bis 750 CpM.

Also:
Meine Nullen/Einsen stellen den Morsecode dar. Die Pausen zwischen Dits/dahs, Zeichen und Worten sind definiert und brauchen daher nicht in einer Morse-Tabelle gespeichert zu werden.

Gruß Dirk

PICture
23.01.2010, 06:03
Hallo!

@ Dirk

Sorry, ich bezweifle es nicht, wahrscheilich war aber deine sparliche Erklärung vom 18.1 für mich nicht ganz klar.

MfG