mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Manchestercode Generierung auf einen MSP


Autor: Stephan Plaschke (steph0815)
Datum:

Bewertung
0 lesenswert
nicht 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.
//-----------------------------------------------------------
// Generate one byte in Manchester code
unsigned int generate_MANCHESTER(unsigned char rawbyte)
//-----------------------------------------------------------
{
  unsigned int manchester;
  unsigned char i;
  
  for (i=0; i<8; i=i+1)
  {
    if (rawbyte & 0x01)
    {
      manchester &= ~0x1000;
      manchester = manchester >> 1;
      manchester |= 0x1000;
      manchester = manchester >> 1;          
    }
    else 
    {
      manchester |= 0x1000;
      manchester = manchester >> 1;
      manchester &= ~0x1000;
      manchester = manchester >> 1;          
    }
    rawbyte = rawbyte >> 1;
  }
  return (manchester);
}
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

Autor: Berti (Gast)
Datum:

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

Autor: Stephan Plaschke (steph0815)
Datum:

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

Autor: Jörg X. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du hast da wohl noch mehr Fehler:
unsigned int generate_MANCHESTER(unsigned char rawbyte)
//-----------------------------------------------------------
{
  unsigned int manchester = 0;
  unsigned char i;
  
  for (i=0; i < 8; i++)
  {
    if (rawbyte & 0x01)
    {
      manchester |= 0x8000; // -->0b1000...
      manchester >>= 2; // weniger schreibarbeit ;)
    }
    else 
    {
      manchester |= 0x4000;// --> 0b0100...
      manchester >>= 2;
    }
    rawbyte = rawbyte >> 1;
  }
  return (manchester);
}
hth. Jörg

Autor: Stephan Plaschke (steph0815)
Datum:

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

Aber vielen Dank noch!

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.