<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<div class="moz-cite-prefix">For a good HW model of how to debounce
switches, take a look at:</div>
<div class="moz-cite-prefix"><br>
</div>
<div class="moz-cite-prefix"><a class="moz-txt-link-freetext" href="https://www.onsemi.com/pdf/datasheet/mc14490-d.pdf">https://www.onsemi.com/pdf/datasheet/mc14490-d.pdf</a></div>
<div class="moz-cite-prefix"><br>
</div>
<div class="moz-cite-prefix">That's how I originally crafted my
polling digital debouncer code.</div>
<div class="moz-cite-prefix"><br>
</div>
<div class="moz-cite-prefix">JJS<br>
</div>
<div class="moz-cite-prefix"><br>
</div>
<div class="moz-cite-prefix">On 8/6/2021 11:05 AM, John Speth via
Synth-diy wrote:<br>
</div>
<blockquote type="cite"
cite="mid:858f0e4d-4080-f076-03c8-a27d78869eba@yahoo.com">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<div class="moz-cite-prefix">I have substantial experience with
the application but not in a musical context. My extensive
trials and errors has convinced me of the following:</div>
<div class="moz-cite-prefix"><br>
</div>
<div class="moz-cite-prefix">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.<br>
</div>
<div class="moz-cite-prefix"><br>
</div>
<div class="moz-cite-prefix">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.</div>
<div class="moz-cite-prefix"><br>
</div>
<div class="moz-cite-prefix">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.</div>
<div class="moz-cite-prefix"><br>
</div>
<div class="moz-cite-prefix">* --- 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.</div>
<div class="moz-cite-prefix"><br>
</div>
<div class="moz-cite-prefix">JJS<br>
</div>
<div class="moz-cite-prefix"><br>
</div>
<div class="moz-cite-prefix">On 8/6/2021 8:46 AM, Jean-Pierre
Desrochers wrote:<br>
</div>
<blockquote type="cite"
cite="mid:000601d78ada$49b21470$dd163d50$@oricom.ca">
<meta http-equiv="Content-Type" content="text/html;
charset=UTF-8">
<meta name="Generator" content="Microsoft Word 14 (filtered
medium)">
<style>@font-face
{font-family:Calibri;
panose-1:2 15 5 2 2 2 4 3 2 4;}p.MsoNormal, li.MsoNormal, div.MsoNormal
{margin:0cm;
margin-bottom:.0001pt;
font-size:12.0pt;
font-family:"Times New Roman","serif";}a:link, span.MsoHyperlink
{mso-style-priority:99;
color:blue;
text-decoration:underline;}a:visited, span.MsoHyperlinkFollowed
{mso-style-priority:99;
color:purple;
text-decoration:underline;}p.MsoPlainText, li.MsoPlainText, div.MsoPlainText
{mso-style-priority:99;
mso-style-link:"Texte brut Car";
margin:0cm;
margin-bottom:.0001pt;
font-size:11.0pt;
font-family:"Calibri","sans-serif";
mso-fareast-language:EN-US;}span.EmailStyle17
{mso-style-type:personal;
font-family:"Calibri","sans-serif";
color:#1F497D;}span.TextebrutCar
{mso-style-name:"Texte brut Car";
mso-style-priority:99;
mso-style-link:"Texte brut";
font-family:"Calibri","sans-serif";}.MsoChpDefault
{mso-style-type:export-only;
font-family:"Calibri","sans-serif";
mso-fareast-language:EN-US;}div.WordSection1
{page:WordSection1;}</style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
<div class="WordSection1">
<p class="MsoPlainText">Hi everybody.<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText"><span lang="EN-CA">I’m doing some
tests on a rotary encoder and a PIC16F1783.<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-CA">A standard Bourns
encoder like <a
href="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"
moz-do-not-send="true">THIS</a> .<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-CA">Connected using 2 x
10k pullups with 0.01uf caps to ground<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-CA">to PORTB of the
micro. Interrupt calls (falling edges) used on encoder
pins A & B.<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-CA">I struggled so far
to get clean increments/decrements out of it.<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-CA">Many missing counts
occur..<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-CA">I tried many source
codes on the web with no luck..<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-CA">Is there anybody
who’d have worked on this in the past<br>
and have a working c code ?<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-CA">No ARDIUNO please.<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-CA">Thanks !<o:p></o:p></span></p>
</div>
<br>
</blockquote>
<br>
<fieldset class="mimeAttachmentHeader"></fieldset>
<pre class="moz-quote-pre" wrap="">_______________________________________________
Synth-diy mailing list
<a class="moz-txt-link-abbreviated" href="mailto:Synth-diy@synth-diy.org">Synth-diy@synth-diy.org</a>
<a class="moz-txt-link-freetext" href="http://synth-diy.org/mailman/listinfo/synth-diy">http://synth-diy.org/mailman/listinfo/synth-diy</a>
Selling or trading? Use <a class="moz-txt-link-abbreviated" href="mailto:marketplace@synth-diy.org">marketplace@synth-diy.org</a>
</pre>
</blockquote>
<p><br>
</p>
</body>
</html>