Forum: Mikrocontroller und Digitale Elektronik Manchester-Code


von marc (Gast)


Lesenswert?

Hallo ich suche ein Baustein oder einer möglichkeit um aus einem 
seriellen signal mit 2400 bound in ein Manchester-Code umzuwandeln.

von Εrnst B. (ernst)


Lesenswert?

Mehr input!
Was für ein Serielles Signal? "8N1" mit Start- und Stopbits? oder mit 
extra Takt auf den man eine PLL einrasten könnte?
Sind Verzögerungen erlaubt?

von Bernd R. (Firma: Promaxx.net) (bigwumpus)


Lesenswert?

Wozu immer diese Manchester-Code-Fragen ?
Funkübertragung ?

Das habe ich mit einfacher Software gelöst. Wichtig ist nur der häufige 
Bitwechsel. Aus jedem Bit erzeuge ich einfach 2. Aus 0 wird 01 aus 1 
wird 10. Damit gibt es genug Wechsel. Die Start- und Stopbits stören 
auch nicht so sehr.

von Alexandre Terentiev (Gast)


Lesenswert?

>Wozu immer diese Manchester-Code-Fragen

Nicht unbedingt Funk... Als kleines Beispiel: Profibus PA übertragung 
wird mit Manchester-Code gemacht. Also nicht immer die einfachste 
Antworten sind die richtigen...

von Bernd R. (Firma: Promaxx.net) (bigwumpus)


Lesenswert?

Manchester setzt jedes Bit in eine 2-Bit-Folge um.
Werden Bei Eurem Protokoll auch die Start- und Stopbits nach Manchester 
codiert ?
Man könnte dann ja ein einfaches Hardware-XOR einfügen, daß mit einem 
High-Low-Signal in der Frequenz des Schrittaktes versorgt wird, um den 
Manschester-Code zu erzeugen.

von Simon K. (simon) Benutzerseite


Lesenswert?

Bernd Rüter wrote:
> Manchester setzt jedes Bit in eine 2-Bit-Folge um.
Mehr oder weniger. Bei Manchester "Codierung" wird jedes Bit in eine 
Flanke übersetzt.

von hans (Gast)


Lesenswert?

Manchester ist tatsächlich eine XOR-Verknüpfung.
Daten und Clock werden dabei zusammen übertragen.
       1 0 1 0 0 1 0 1 1
Daten --__--____--__----
Clock -_-_-_-_-_-_-_-_-_
M     _--__--_-__--__-_-

Die Datenrate ist die Halbe Clockrate.
Durch den Wechsel wird eine Gleichspannung verhindert.

Es gibt auch gedrehten Manchester (!M)

Gruß Hans

von marc (Gast)


Lesenswert?

>Mehr input!

Also ich möchte die Daten aus einem Multimeter auswerten. Das Messgerät 
sendet 14 Byte es werde 8 Datenbits und ein Stopbit gesendet die 
Übertragungs rate ist 2400.

von marc (Gast)


Lesenswert?

Ich hätte da noch eine Frage wen mit einem Stopbit gearbeitet wird 
bedeutet das denn das nach 8bit immer eine " 1 " kommt oder wie kann ich 
mir das vorstellen.

von Falk B. (falk)


Lesenswert?

@hans (Gast)

>Manchester ist tatsächlich eine XOR-Verknüpfung.

Ein landläufiger Irrtum bzw. Vereinfachung.
Das klappt nämlich nur, wenn der Takt saubere 50% Tastverhältnis hat. 
Und wenn sich, vor allem bei höheren Datenraten, keine bösen 
Verzögerungen einschleichen, dann gibts bisweilen Glitches.
Sauber wird das nur, wenn man von vorn herein das mit dem doppelten Takt 
beteibt und die Manchesterdaten generiert.
Warum wohl hatten die 10 Mbit Ethernetkarten einen 20 MHz Quarz?!!

>Daten und Clock werden dabei zusammen übertragen.

Quasi.

>Die Datenrate ist die Halbe Clockrate.

Das ist auch wieder so ein halbgarer Satz.
Die Baudrate ist bei Manchester doppelt so hoch wie die Datenrate.

MFG
Falk


@ marc (Gast)

>Also ich möchte die Daten aus einem Multimeter auswerten. Das Messgerät
>sendet 14 Byte es werde 8 Datenbits und ein Stopbit gesendet die
>Übertragungs rate ist 2400.

Und was lässt dich gleuben, das hätte was mit Manchester zu tun? Das ist 
popeliges RS232.

http.//www.gidf.de

google rs232 messgerät

http://www.gerald-gradl.de/eprojects/multi/body_multi.html

MFG
Falk

von Falk B. (falk)


Lesenswert?

Siehe auch RS232

von marc (Gast)


Lesenswert?

>Und was lässt dich gleuben, das hätte was mit Manchester zu tun? Das ist
>popeliges RS232.

Ja und das möchte ich per Funk übertragen und dann auf einen MC geben.

von Falk B. (falk)


Lesenswert?

@marc (Gast)

>Ja und das möchte ich per Funk übertragen und dann auf einen MC geben.

Dann kauf dir ein Funkmodul mit RS232 Ein/Ausgang, das erledigt die 
(Manchester)kodierung allein.

MFG
Falk

von marc (Gast)


Lesenswert?

>>Dann kauf dir ein Funkmodul mit RS232 Ein/Ausgang, das erledigt die
>>(Manchester)kodierung allein.

Kannst du mir auch eine Internet seite sagen auf der es das gibt.

von Matthias L. (Gast)


Lesenswert?

>Kannst du mir auch eine Internet seite sagen auf der es das gibt.

Sowas hat zB das große blaue C

von ... .. (docean) Benutzerseite


Lesenswert?


von chris (Gast)


Lesenswert?

oder du kannst dir etwas mit einem uC schreiben, jedoch vergiss nicht 
das Prelude, Sync sowie checksum und eventuell Hamming oder einen 
anderen
Bitfehlercode.

Manchester encoding:

ushort manchester_encode(uchar c) {
 uchar msb,lsb;
  msb = (c & 0xAA) | ((~c & 0xAA)>>1);
  lsb = (c & 0x55) | ((~c & 0x55)<<1);
  return ((ushort)msb << 8) | lss;
}

Manchester decoding:

ushort manchester_decode(ushort mc) { // return -1 on error;
 uchar msb,lsb;
  msb = (uchar)(mc >> 8);
  if ( (msb & 0xAA) ^ ((~msb & 0x55) << 1) ) then return -1;
  msb &= 0xAA;
  lsb = (uchar)mc;
  if ( (lsb & 0x55) ^ ((~ls & 0xAA)>>1) ) then return -1;
  lsb &= 0x55;
  return msb | lsb;
}

von Hans H. (hanshein)


Lesenswert?

>> Manchester encoding:

Hallo Chris,

wenn ich den Code von Hand durchevaluiere, komme ich
auf eine "nicht standardkonforme Codierung":

>  msb = (c & 0xAA) | ((~c & 0xAA)>>1);
>  lsb = (c & 0x55) | ((~c & 0x55)<<1);
>  return ((ushort)msb << 8) | lsb; // lss corrected

Sei die Bitdarstellung von c

          c ::= (c7 c6 c5 c4 c3 c2 c1 c0)

und "/x" die Negation von x.

Also:

> msb = (c & 0xAA)

        (c7 0 c5 0 c3 0 c1 0)

> | ((~c & 0xAA)>>1);

     (/c7 0 /c5 0 /c3 0 /c1 0) >>1
    =(0 /c7 0 /c5 0 /c3 0 /c1)

-> msb = (c7 /c7 c5 /c5 c3 /c3 c1 /c1)

-x-x-x----------------------------

> lsb = (c & 0x55) |

        (0 c6 0 c4 0 c2 0 c0)

> ((~c & 0x55)<<1);

        (0 /c6 0 /c4 0 /c2 0 /c0) <<1
       =(/c6 0 /c4 0 /c2 0 /c0 0)
 lsb = (/c6 c6 /c4 c4 /c2 c2 /c0 c0)

returns: (c7 /c7 c5 /c5 c3 /c3 c1 /c1  /c6 c6 /c4 c4 /c2 c2 /c0 c0)

IMHO sollte der Ziel-Machesterrueckgabewert so aussehen:

(c7 /c7 c6 /c6 c5 /c5 c4 /c4  c3 /c3 c2 /c2 c1 /c1 c0 /c0)


Viele Gruesse,
Hans

von chris (Gast)


Lesenswert?

Stimmt, das Beispiel stammt ursprünglich aus einer 
Fernsteuerungsapplication, da ist die Bitfolge nicht so wichtig, mein 
fehler, für point2point würde es trotzdem gehen, was ich auch gemacht 
habe.

von Guido (Gast)


Lesenswert?

Hallo zusammen...

Ich wollt mal nachfragen, ob mir jmd weiterhelfen kann.
Mein Anliegen: Ich möchte mit Hilfe eines PIC's die Eingangssignale 
mittels  Assemblerssprache so verarbeiten, dass ich am Ausgang ein 
Manchester codiertes Signal erhalte(sowhl codieren als auch decodieren).
Mir sind die technischen Hintergründe und sonstges soweit klar, nur habe 
ich ein Problem mit dem genauen Ablauf,d.h. die Daten aus dem 
Register(8/16 Bit) jeweils einzeln in 2Bit umzuwandeln und diese dann 
weiter an den Ausgang zu geben, so dass ein serieller Datenstrom 
entsteht.

Ich hoffe, es kann mir jmd etwas dazu sagen.

Guido

von Falk B. (falk)


Lesenswert?

@ Guido (Gast)

>Mein Anliegen: Ich möchte mit Hilfe eines PIC's die Eingangssignale

http://www.apostroph.de/

>mittels  Assemblerssprache so verarbeiten, dass ich am Ausgang ein
>Manchester codiertes Signal erhalte(sowhl codieren als auch decodieren).

Ja was denn nun?

>Register(8/16 Bit) jeweils einzeln in 2Bit umzuwandeln und diese dann
>weiter an den Ausgang zu geben, so dass ein serieller Datenstrom
>entsteht.

Stichwort Bitmanipulstion und Schiebeoperation.

MfG
Falk

von Guido (Gast)


Lesenswert?

@Falk

Vielen Dank erstmal für die schnelle Antwort.

>Ja was denn nun?

War etwas unglücklich ausgedrückt von mir, meinte mit einen PIC will ich 
die Eingangssignale in den Manchester Code umwandeln und mit einem 
zweiten PIC das empfangene Machnester-Signal wieder decodieren.



Guido

von Falk B. (falk)


Lesenswert?

@ Guido (Gast)

>die Eingangssignale in den Manchester Code umwandeln und mit einem

Was für eine Eingangssignal?

Forum-Fragenformulierung

MFG
Falk

von Guido (Gast)


Lesenswert?

@frank


Das Eingangssignal besteht aus einer binären Information, die mittels 
Programm(im PIC gespeichert) in einen Machnester Code umgewandelt werden 
soll...


Guido

von Falk B. (falk)


Lesenswert?

@ Guido (Gast)

>@frank

Das bin zwar nicht ich, aber ich sag mal

>Das Eingangssignal besteht aus einer binären Information, die mittels
>Programm(im PIC gespeichert) in einen Machnester Code umgewandelt werden
>soll...

Na das ist doch fast zu einfach. Die Daten byteweise lesen, und für 
jedes Bit im Byte zwei Datenbits ausgeben.

Byteschleife
Byte lesen
Bitschleife
Bit #0 = 1?
wenn ja, 0 ausgeben, 1 Bitzeit warten, 1 ausgeben 1 Bitzeit warten
wenn nein, 1 ausgeben, 1 Bitzeit warten, 0 ausgeben 1 Bitzeit warten
Byte um 1 Bit nach rechts schieben
Ende Bitschleife
Ende Byteschleife

MFg
Falk

von Guido (Gast)


Lesenswert?

@falk (sorry, wenn ich den falschen Namen geschrieben hatte)


Also von dem Programm her ist es, wie du schon sagst, nicht so 
schwer.Ich habe nur bei der Ausführung ein paar Bedenken, d.h. wenn ich 
aus dem Informationsbyts ein Bit herausfiltere und es in 2 Byte 
umwandle, sollen diese beiden Bits ausgegeben werden. Aber so wie ich es 
bisher kennen gelernt habe, kann ich nicht nur 2 Bits allein ausgeben 
sondern 16 Bits (z.B. FFh).
Ich habe ja schon überlegt, dass im ersten Ausgabebyte alle Bits Null 
gesetzt werden und im zweiten Ausgabebyte alle Bits eins gesetzt werden, 
oder umgekehrt(je nachdem, ob eine binäre 1 oder 0 mittels Manchester 
Code dargestellt werden sollen). Somit hätte man ja auch die 2 Bits, 
halt nur in einer etwas verlängert sozusagen (hoffe, man kann meine 
Gedanken nachvollziehen). Desweiteren noch ein kleines gedankliches 
Problem. Wenn das erste Bit in den Manchester Code umgesetzt und 
ausgegeben wird, wird das nächste Bit in den Manchester Code umgesetzt. 
Bevor das zweite umgesetzte Bit ausgegeben wird , vergeht etwas Zeit . 
Wäre diese Zeit störend beim decodieren?


MFG

Guido

von Falk B. (falk)


Lesenswert?

@ Guido (Gast)

>Also von dem Programm her ist es, wie du schon sagst, nicht so
>schwer.

Dafür tust du dich scheinbar umso schwerer.

>Ich habe nur bei der Ausführung ein paar Bedenken, d.h. wenn ich
>aus dem Informationsbyts ein Bit herausfiltere und es in 2 Byte
>umwandle,

2 Byte? Du meinst 2 Bit, oder?

> sollen diese beiden Bits ausgegeben werden.

Ja.

> Aber so wie ich es
>bisher kennen gelernt habe, kann ich nicht nur 2 Bits allein ausgeben
>sondern 16 Bits (z.B. FFh).

Was hast du denn kennengelernt? Man kann ein Bit problemlos auf ein 
IO-Pin ausgeben, siehe AVR-Tutorial: IO-Grundlagen.

>Ich habe ja schon überlegt, dass im ersten Ausgabebyte alle Bits Null
>gesetzt werden und im zweiten Ausgabebyte alle Bits eins gesetzt werden,
>oder umgekehrt(je nachdem, ob eine binäre 1 oder 0 mittels Manchester
>Code dargestellt werden sollen).

Kann man machen.

> Somit hätte man ja auch die 2 Bits,
>halt nur in einer etwas verlängert sozusagen (hoffe, man kann meine
>Gedanken nachvollziehen).

Es ist ziemlich schwer.

>Problem. Wenn das erste Bit in den Manchester Code umgesetzt und
>ausgegeben wird, wird das nächste Bit in den Manchester Code umgesetzt.

ja.

>Bevor das zweite umgesetzte Bit ausgegeben wird , vergeht etwas Zeit .
>Wäre diese Zeit störend beim decodieren?

Alles relativ. Wenn dein Bit 1s lang ist, und da ein paar Dutzend 
Mikrosekunden fehlen, spielt das keine Rolle. UNd gerade Manchester ist 
SEHR robust gegenüber Bitzeittolerenzen, wenn der Empfänger was taugt. 
Aber der fällt nciht vom Himmel.

Ich glaube du solltest dich erstmal mit einer UART-Übertragung befassen, 
dann vielleicht Soft-UART. Dir fehlen einige Grundlagen.

MFG
Falk

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.