<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>