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
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.
soll wohl eher heissen: if (i & 2) i ^= 1; das spart auch rechenzeit gegenüber meinem vorherigen vorschlag.
Cherkaoui Erratib wrote: > Habe ich das falsch verstanden Ja, die Bedingung: > if( PHASE_B ) > i ^= 3; Du hast ein unbedingtes i^=3 genommen, das geht natürlich nicht. Peter
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
peter: > if( PHASE_B ) > i ^= 3; >Du hast ein unbedingtes i^=3 genommen, das geht natürlich nicht. was ist damit gemeint? sorry ich habe wircklich nicht verstanden. kannst du bitte mit einem Beispiele erklären. cherkaoui
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; |
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.