www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Manchester-Code


Autor: marc (Gast)
Datum:

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

Autor: Εrnst B✶ (ernst)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Bernd Rüter (Firma: Promaxx.net) (bigwumpus)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Alexandre Terentiev (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Bernd Rüter (Firma: Promaxx.net) (bigwumpus)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: hans (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: marc (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: marc (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Siehe auch RS232

Autor: marc (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: marc (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Matthias Lipinsky (lippy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Kannst du mir auch eine Internet seite sagen auf der es das gibt.

Sowas hat zB das große blaue C

Autor: ... ... (docean) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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;
}

Autor: Hans Hein (hanshein)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Guido (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Guido (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Guido (Gast)

>die Eingangssignale in den Manchester Code umwandeln und mit einem

Was für eine Eingangssignal?

Forum-Fragenformulierung

MFG
Falk

Autor: Guido (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@frank


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


Guido

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Guido (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.