Hallo ich suche ein Baustein oder einer möglichkeit um aus einem seriellen signal mit 2400 bound in ein Manchester-Code umzuwandeln.
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?
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.
>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...
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.
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.
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
>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.
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.
@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
>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.
@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
>>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.
>Kannst du mir auch eine Internet seite sagen auf der es das gibt.
Sowas hat zB das große blaue C
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; }
>> 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
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.
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
@ 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
@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
@ Guido (Gast) >die Eingangssignale in den Manchester Code umwandeln und mit einem Was für eine Eingangssignal? Forum-Fragenformulierung MFG Falk
@frank Das Eingangssignal besteht aus einer binären Information, die mittels Programm(im PIC gespeichert) in einen Machnester Code umgewandelt werden soll... Guido
@ 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
@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
@ 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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.