Forum: Mikrocontroller und Digitale Elektronik Manchestercode Generierung auf einen MSP


von Stephan P. (steph0815)


Lesenswert?

So ich versuche eine Funkstrecke aufzubauen und benötige dazu das 
jeweilige Byte in Manchestercodierung. Das ganze habe ich auch 
verstanden nur spinnt mein Code etwas rum.
1
//-----------------------------------------------------------
2
// Generate one byte in Manchester code
3
unsigned int generate_MANCHESTER(unsigned char rawbyte)
4
//-----------------------------------------------------------
5
{
6
  unsigned int manchester;
7
  unsigned char i;
8
  
9
  for (i=0; i<8; i=i+1)
10
  {
11
    if (rawbyte & 0x01)
12
    {
13
      manchester &= ~0x1000;
14
      manchester = manchester >> 1;
15
      manchester |= 0x1000;
16
      manchester = manchester >> 1;          
17
    }
18
    else 
19
    {
20
      manchester |= 0x1000;
21
      manchester = manchester >> 1;
22
      manchester &= ~0x1000;
23
      manchester = manchester >> 1;          
24
    }
25
    rawbyte = rawbyte >> 1;
26
  }
27
  return (manchester);
28
}
Wenn ich jetzt ein 0xFF uebergebe, erhalte ich nur ein 0xaaa und nicht 
ein 0xaaaa. Meines achtens nach, schiebt er 4 mal eine 0 zu viel. Ich 
verstehe aber nicht wie das zu stande kommen kann.
Ich benutzte einen MSP430x1232 und Eclipse3.1 + MSPGCC (aktuelle und 
Version und auch schon die vom Mai 2006)
Vielleicht weiss hier ja eine Rat

Mfg
Stephan

von Berti (Gast)


Lesenswert?

zuerst fällt mir auf das die variable manchaster nicht initialisiert 
wird...

von Stephan P. (steph0815)


Lesenswert?

Arghs init war nicht das Problem. Wenn man das hoechstwertige Bit setzen 
will eollte man auch |= 0x8000 schreiben! Dumm, Dumm aber Freitag kein 
wunder :)

von Jörg X. (Gast)


Lesenswert?

Du hast da wohl noch mehr Fehler:
1
unsigned int generate_MANCHESTER(unsigned char rawbyte)
2
//-----------------------------------------------------------
3
{
4
  unsigned int manchester = 0;
5
  unsigned char i;
6
  
7
  for (i=0; i < 8; i++)
8
  {
9
    if (rawbyte & 0x01)
10
    {
11
      manchester |= 0x8000; // -->0b1000...
12
      manchester >>= 2; // weniger schreibarbeit ;)
13
    }
14
    else 
15
    {
16
      manchester |= 0x4000;// --> 0b0100...
17
      manchester >>= 2;
18
    }
19
    rawbyte = rawbyte >> 1;
20
  }
21
  return (manchester);
22
}
hth. Jörg

von Stephan P. (steph0815)


Lesenswert?

Ja danke da bin ich nach meinen Post auch noch drauf gekommen :) ist 
halt nicht leicht am Freitag.

Aber vielen Dank noch!

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.