If not pissing away 3/4 of the encoder resolution is something worth doing here's a replacement routine that does 4x decoding. It might not be the most optimized or elegant way but is works. Surprisingly (to me) it seems to work fine up to around 8kHz which means it does 32000 counts per second when being fed "perfect" quadrature signals my function gen.
Code:' Added variables: Encoder VAR BYTE Old_Enc VAR BYTE Test VAR BYTE Dir VAR WORD ' Must be same size as Position variable '------------------------------------------------------------- '--------------Poll encoder and keep count ------------------- '-------------Alternative routine with 4x decoding------------ '------------------------------------------------------------- Encoder.0 = Ch_A Encoder.1 = Ch_B Test = Encoder ^ Old_Enc Dir = 0 If Test = 1 THEN If Old_Enc = 0 THEN Dir = 1 IF Old_Enc = 1 THEN DIR = -1 IF Old_Enc = 2 THEN Dir = -1 If Old_Enc = 3 Then Dir = 1 ENDIF IF Test = 2 THEN IF Old_Enc = 0 THEN DIR = -1 IF Old_Enc = 1 THEN Dir = 1 IF Old_Enc = 2 THEN Dir = 1 IF Old_Enc = 3 THEN Dir = -1 ENDIF Position = Position + Dir Old_Enc = Encoder




Bookmarks