On 6/11/2013 1:16 PM, Manu Abraham wrote: > On Tue, Jun 11, 2013 at 10:27 PM, Manu Abraham w= rote: >> On Tue, Jun 11, 2013 at 9:09 PM, Joe Wronski wrote: >>> Since the enc_tab[] only contains -1,0,+1, the only explanation I can >>> think of would be that you are actually getting 4x the number of >>> interrupts that you think you are. Have you tried setting breakpoints >>> in the interrupt or print_error_code() func to step through the code? >>> Also, what happens when the count goes over 9 or less than 0? You only >>> have 10 digits to print 16 possible values, and count is unsigned. >> Right, array returns 1, -1 or 0 only. Interrupt is fired 4 times for RBI= F, >> PORTB change Interrupt. >> >> The display can show 0-9, so after a reset/powerup, it starts with 0. :-= ) >> >> I guess, I understand what's happening. > Ditched the array, looking directly at the mechanical states. > Retained the small debouncing counter, It feels better turning the knob w= ith > this debouncing in there. > > Simplified the code to look thus: http://goo.gl/sjrlF > > Thanks to all the people, who helped to helped to shoot this bug down. :-= ) > Hope the code snippet will be useful to someone, trodding this path again= .. > > > Thanks, > > Manu I don't know why I started following this, maybe because I had done some=20 rotary encoder code before (and promptly forgot how it worked). The new way better, because you're only using 1of the 2 encoder bits. I think you're throwing away either resolution or state information by=20 ignoring the value of ENC_B. But, I suppose ENC_B contributes an interrupt, so it's not as thought=20 it's not there at all. Joe W --=20 http://www.piclist.com/techref/piclist PIC/SX FAQ & list archive View/change your membership options at http://mailman.mit.edu/mailman/listinfo/piclist .