www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Gray Code in Binär Code umwandeln


Autor: Daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

würde gerne einen 4 Bit Gray Code in einen Binär Code umwandeln. Ich 
habe den Code über eine Gray-Code Scheibe in meinen Controler eingelesen 
und in einer 8 Bit Char Variable abgespeichert. Die oberen 4 Bit habe 
ich ausmaskiert und würde nun gerne die 4 Bit Gray über einen 
Algorythmus in 4 Bit binär umwandeln. Kann mir vielleicht jamand helfen?
Vielen Dank im Voraus.

Gruß, DAni

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Woran hapert es genau?

Autor: Daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich würde die umwandlung gerne mit einem allgorythmus machen. Ich könnte 
den binärwert auch über einen swich case zuweisen das will ich aber 
nicht.

das habe ich gefunden: Binärcode X1 --> Graycode: X4 = ((X1*2) XOR X1) / 
2

ich muss das wahrscheinlich nach x1 auflösen. hab aber hier auch schon 
probleme.

oder gibts vielleicht auch was einfacheres?

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mal dir dochmal nebeneinander deinen 4-Bit Binärcode und den Graycode 
auf. Vielleicht kann man da schon alles erkennen.

Autor: Marius Wensing (mw1987)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nimm doch einfach nen Lookup-Table. Bei 4 Bit sind das nur 16 Einträge. 
Also 16 Byte belegter Flash-Speicher. Effizienter gehts wahrscheinlich 
nicht.
unsigned char gray2bin[16] = { ... }

Dekodierung geht dann einfach über
binaer = gray2bin[gray]
.

MfG
Marius

Autor: Jochen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,
Here the a 32 Bit and a 4 Bit variant. The 4 Bit variant needs only one 
CPU cycle more than a table based approach.

Jochen

static uint32_t
GrayDecodeU32(uint32_t to_decode) {
        uint32_t result = to_decode ^ (to_decode >> 16);
        result ^= result >> 8;
        result ^= result >> 4;
        result ^= result >> 2;
        result ^= result >> 1;
        return result;
}

uint8_t
GrayDecodeU4(uint8_t t) {
         t = t ^ (t >> 2);
         return t ^ (t >> 1);
}

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.