Gast
#2504590
Hi, ich beschäftige mich gerade mit diesem: http://www.mikrocontroller.net/articles/Drehgeber Artikel. Habe hier einen mechanischen Drehencoder (EC11E15244BY Pollin damals 240339 von ALPS) an einem Atmel und Display in betrieb. Ich nutze zur Zeit die einfache Variante ohne Tabelle. Beitrag "Re: Drehgeber auslesen" Der Drehencoder läuft richtig wenn man die Ausgabe durch 2 teilt. Nun würde ich gern in einer Richtung drehend Variable x hochzählen und in der anderen Variable y und ich frage mich wie ich das am einfachsten machen kann. Dabei bin ich auf folgende Lösung gekommen: void encode (void) { static char last = 0x02; char act = 0; if( PHASE_A ) act = 0x01; if( PHASE_B ) act ^= 0x03; // convert gray to binary act -= last; // difference act - last if( act & 0x01 ) // bit 0 = value (1) { if((act & 0x02) && (last & 0x02)) { enc_cnt_x(); } if(((act^2) & 0x02) && ((last^1) & 0x01)) { enc_cnt_y(); } last += act; // store new as next last } } Ich frage mich ob das noch einfacher geht. Gray Code ist klar, die Umwandlung auch. Irgendwie ist dieser kleine Codeschnipsel faszinierend. Dennoch habe ich noch nicht zu 100% verstanden wie die Funktion sich selbst nach jeder Änderung zu sperren scheint, also wie das zustande kommt. M.