[sdiy] Need goog working rotary encoder in C code..
John Speth
johnspeth at yahoo.com
Fri Aug 6 20:05:48 CEST 2021
I have substantial experience with the application but not in a musical
context. My extensive trials and errors has convinced me of the following:
1. You'll need to know when inputs change state, not just when the
signals go low. Consider rising and falling edge interrupts on both
inputs. You can detect rotation direction using this strategy.
2. There WILL be bouncing so plan for it. Contact type switches will
bounce more than optical switches. Contact type switches will degrade
over time.
3. Interrupts vs polling: Interrupts are great but they have a hidden
hazard in that they can flood and overwhelm some MCUs (YMMV of course).
A capacitor can help alleviate the problem but it's better to find a
non-cap solution. I've found polling is better. I use a digital
integration method (*) and a fast polling interval. That works so well,
I automatically go to that design solution for most applications.
* --- A digital integration method uses a counter that counts up and
down and outputs a state change signal when a count threshold is
reached. Increment the counter while the input is high and decrement the
counter when the input is low. Reset the count when the output state
changes. Adjust the polling interval for speed and accuracy. As a frame
of reference, I use a 5 msec polling interval for keyboard debouncing.
You'll probably want a faster interval if your encoder can be turned
fast. I'll warn you that there can be a surprisingly large number of
lines of code for such a simple task like digital debouncing.
JJS
On 8/6/2021 8:46 AM, Jean-Pierre Desrochers wrote:
>
> Hi everybody.
>
> I’m doing some tests on a rotary encoder and a PIC16F1783.
>
> A standard Bourns encoder like THIS
> <https://www.google.ca/url?sa=t&rct=j&q=&esrc=s&source=web&cd=&ved=2ahUKEwjyoqDF3JzyAhUmhOAKHf3lAzoQFnoECAoQAw&url=https%3A%2F%2Fwww.bourns.com%2FPDFs%2Fpec11l.pdf&usg=AOvVaw2RyieyzPnujiOTS7LBcbpw>
> .
>
> Connected using 2 x 10k pullups with 0.01uf caps to ground
>
> to PORTB of the micro. Interrupt calls (falling edges) used on encoder
> pins A & B.
>
> I struggled so far to get clean increments/decrements out of it.
>
> Many missing counts occur..
>
> I tried many source codes on the web with no luck..
>
> Is there anybody who’d have worked on this in the past
> and have a working c code ?
>
> No ARDIUNO please.
>
> Thanks !
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://synth-diy.org/pipermail/synth-diy/attachments/20210806/8fd2e4c6/attachment.htm>
More information about the Synth-diy
mailing list