Forum: Mikrocontroller und Digitale Elektronik Manchester dekodieren


von Gregor B. (gregor54321)


Lesenswert?

Hallo Forum,
ich habe fast den ganzen heutigen Tag damit verbracht ManchesterCode zu 
dekodieren. Ich hab versucht mir mit Excel etwas zusammen zu bauen, was 
die Daten den LogikAnalysers zerlegen kann. Leider ist das über alle 
maßen kompliziert und umständlich. Außerdem war ich zu doof, den 
Dekoderalgorithmus ordentlich in "Wenn"-Klauseln zu implementieren. Hab 
jetzt keine Lust mehr.
Kennt jemand eine technische Möglichkeit (Programm, Applet im Internet), 
ManchesterCode zügig dekodieren zu lassen?

von Gast Posti (Gast)


Lesenswert?

Hi

Wenn ich
http://de.wikipedia.org/wiki/Manchester_Code
richtig verstehe, wird zu Beginn der Übertragung eine 'Präambel' 
übertragen.
Verstehe ich so, daß am Anfang immer das Gleiche übertragen wird, würde 
jetzt tippen, daß ein 0-1-0-1 Wechsel mehrfach wiederholt wird, damit 
der Empfänger sich auf Geschwindigkeit 'einstellen' kann.
Wenn bei fallender Takt-Flanke ebenfalls die Signal-Flanke fällt, wurde 
eine 1 übertragen, eird dagegen eine steigende Signal-Flanke erkannt, 
ist's eine 0.

Soweit mein Verständnis ... hab auch gelesen, daß der Manchester-Code 
recht einfach zu generieren/entschlüsseln sein soll.
An der Wortwahl erkennbar - noch nicht gemacht.

MfG

von Manchester (Gast)


Lesenswert?

dekodieren, iss gaaaaaaanz einfach.

Man nehme ein Monoflop das sowohl auf LH- und HL-Flanke triggert.
Dieses stellt man auf 75% Haltezeit ein.
Der Bitwert der auf der Leitung liegt wenn das Monoflop zurückfällt,
ist der den man haben will.

Die Präambel zum synchronisieren gibts nur genau 1 mal.
Mit der kann dann auch testen ob die Leitung vielleicht invertiert.
Bei HDLC z.B. 0x7E.
Wobei die Präambel selbstverständlich auch länger sein kann.

Was vor der Präambel kommt, ist Privatsache und kann alles mögliche 
sein.

von hans (Gast)


Lesenswert?

man gehe auf Foren, dort auf Suchen

Stichwort: +manchester

-> 263 Treffer

gruß hans

von Gregor B. (gregor54321)


Lesenswert?

Gast Posti wrote:
> Wenn bei fallender Takt-Flanke ebenfalls die Signal-Flanke fällt, wurde
> eine 1 übertragen, eird dagegen eine steigende Signal-Flanke erkannt,
> ist's eine 0.
Genau. Ausschlaggebend ist der Zeitpunkt des Taktsignals. Die oben 
genannte Regel gilt nämlich nur bei Zeitpunkt= T/2.  Um mehrere Nullen 
oder Einsen übertragen zu können, wird bei Zeitpunkt=T ein zu 
missachtender Flankenwechsel vollzogen.
Per Hand auch recht einfach zu machen, aber bei >7000 Bit/Flanken ist 
das doch recht mühselig und fehlerträchtig. Zumal ich ja den Takt nicht 
"sehen" kann. Muss also viel rum malen...
Unter 
http://www.cs.auckland.ac.nz/compsci314s2t/resources/Coding/index.html 
gibt es quasi die Gegenrichtung. Also die Erzeugung vom Manchester aus 
normalen Daten.

von Gregor B. (gregor54321)


Lesenswert?

> dekodieren, iss gaaaaaaanz einfach.
> Man nehme ein Monoflop

Ich brauche es nur einmal zum "reverse engineeren". Also was kleines für 
Excel oder so...

von Manchester (Gast)


Lesenswert?

> Ich brauche es nur einmal zum "reverse engineeren". Also was kleines für
> Excel oder so...

Das basteln eines nicht retriggerbaren Monoflops in Excel
ist eindeutig Dein Problem :-)

von Dieter R. (dieter_r)


Lesenswert?

Ich weiß, der Thread ist steinalt, aber war der beste Treffer bei meiner 
diesbezüglichen Suche. Leider auch ohne richtig zu helfen...

Ich habe eine Lösung für mein Problem gefunden, die sicher nicht 
jedermanns Geschmack ist, aber dem ein oder anderen Frickler (wie mich) 
vielleicht doch weiterhilft.
Ausgangslage war ein mit Arduino/CC1101 mitgeschnittener Datenstrom mit 
dem Format
1
944 1108 852 1084 880 576 400 572 420 1048
, der einfach in Excel importiert wurde.
Jetzt wusste ich, der erste Puls ist positiv, und die Pulslänge ist als 
Zahl codiert, Schwellwert H/L in etwa 750. In Manchester muss das also 
heißen:
1
11 00 11 00 11 0 1 0 1 00
 Diesen Code kann ich dann ganz einfach in den Online-Tools decodieren. 
Wie das aber bei 400 Werten machen?

Stehen die Werte ein Zeile "1", ab Spalte "B" berechne ich den Code in 
Zeile "2" über folgende Formel:
1
=WENN(B1="";"";WENN(ODER(A97="00";A97="0";A97="");WENN(B1>1500;"XXX";(WENN(B1>750;"11";"1")));WENN(B1>1500;"XXX";(WENN(B1>750;"00";"0")))))
Je nach Decodierer muss noch ein initiales "E" oder so zugefügt werden.

Eignet sich wirklich nur für zu Fuss-Übungen, aber manchmal braucht man 
eben das.

von Gregor B. (gregor54321)


Lesenswert?

Vor ein paar Jahren hätte mir das vielleicht weiter geholfen. Jetzt muss 
ich noch ein paar Jahre warten bis die Kinder aus dem Haus sind um 
wieder Zeit für "son Kram" zu haben.
Aber Danke, dass Du anderen mit Deiner Antwort weiter hilfst!
Grüße, Gregor

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.