Drehimpusgeber auswerten

OP #1189512
Hallo;

Ich bin Anfänger bei dem Breich Mikrocontroller. Ich möchte eine Frage 
im Bezug auf das Thema Drehgeber erklären lassen.

in diesem Links ist eine Erklärung zum Dannerger code:

Beitrag "Re: Drehgeber auslesen"

aber ich habe nicht diesen Abschnitt verstanden :

<<<<<
Einfacher ist jedoch eine Umwandlung des Gray-Code nach Binär, wie sie
in diesem 2.Programmbeispiel erfolgt:

Gray-Code   Binär-Code
00          00 (0)     o.k.
01          01 (1)     o.k.
11          10 (2)     ändern
10          11 (3)     ändern

Wie man sieht, muß man also nur das niederwertige Bit umdrehen, sobald
das höherwertige Bit gesetzt ist.

Diese Anweisung:
  if( PHASE_B )
    i ^= 3;
setzt das höherwertige Bit und invertiert das niederwertige, fertig ist
die Codeumwandlung
>>>>>>>

der Bfehl schon klar  i^=3 heißt  i= i^3
aber wenn ich das ausprobiere kriege ich nicht den Binäre-Code.

Z.B:
    Gray-Code (i)    Binäre-Code( i= i^3 )
       00               00^11= 11
       01               01^11= 10
       11               11^11= 00
       10               10^11= 01

Die Ergebnisse stimmen nicht mit der oben gennanten Tabelle überein. 
Habe ich das falsch verstanden oder gibt einen Trick drin?

Für ihre Hilfe wäre ich dankbar
Gast
Nö, verstehe ich auch nicht ganz was das soll.
Versuche es mal damit:

i = i ^ ( (i&2) >>1 )

das dreht das untere bit um, sobald das 2. bit gesetzt ist.
Du musst die komplette Vorgeschichte von i berücksichtigen.

i beginnt mit 0
Wenn PHASE_A gesetzt ist, wird i zu 1

An dieser Stelle ist i entweder 0 oder 1

Wenn dann noch PHASE_B gesetzt ist, kommt der 'magische' Ausdruck zum 
Zug


Die Umsetztabelle sieht also, über den kompletten Code gesehen, so aus

  PHASE_B    PHASE_A      Ergebnis
    0           0           00
    0           1           01
    1           1           10
    1           0           11


Der 'Gray Code' steckt in den beiden 'Bits' PHASE_A und PHASE_B
Cherkaoui Erratib wrote:

> sorry ich habe wircklich nicht verstanden. kannst du bitte mit einem
> Beispiele erklären.

Welchen Teil meiner Erklärung verstehst du nicht?
i enthält keinen Gray-Code. i ist einfach nur eine Zwischenvariable und 
sonst nichts. Der Gray-Code steckt in PHASE_A und PHASE_B

Anderes Beispiel:
Die Umrechnung von Farenheit nach Celsius lautet
   C = 9/5 * F + 32

Was du jetzt machst ist, du greifst dir aus dieser Formel den Teil 9/5 * 
F heraus, tabellierst das für ein paar Werte und wunderst dich, warum 
die Werte nicht stimmen. So wie du für die Umrechnung F->C die komplette 
Formel benutzen musst, so musst du auch aus dem 'Gray-Code' 
PHASE_A/PHASE_B die komplette Vorschrift zur Umwandlung nach Binär 
benutzen. Und diese komplette Umwandlung lautet nun mal
1
  i = 0
2
  if( PHASE_A )
3
    i = 1;
4
  if( PHASE_B )
5
    i ^= 3;

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.