<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><meta http-equiv=Content-Type content="text/html; charset=utf-8"><meta name=Generator content="Microsoft Word 14 (filtered medium)"><style><!--
/* Font Definitions */
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Tahoma;
        panose-1:2 11 6 4 3 5 4 4 2 4;}
@font-face
        {font-family:Verdana;
        panose-1:2 11 6 4 3 5 4 4 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        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
        {mso-style-priority:99;
        mso-margin-top-alt:auto;
        margin-right:0in;
        mso-margin-bottom-alt:auto;
        margin-left:0in;
        font-size:12.0pt;
        font-family:"Times New Roman","serif";}
span.postbody
        {mso-style-name:postbody;}
span.EmailStyle19
        {mso-style-type:personal-reply;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
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]--></head><body lang=EN-US link=blue vlink=purple><div class=WordSection1><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>I used this method for optical thumbwheels in 1979 on the Tektronix 4100 series of graphic terminals.  The thumbwheels were read by the 8048 keyboard scanner and the resolution and acceleration were great.  We used film and optical sensors, but I don’t remember the resolution.  It was determined by the physical size and the light pipes at the time.<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>Dave<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p> </o:p></span></p><div style='border:none;border-left:solid blue 1.5pt;padding:0in 0in 0in 4.0pt'><div><div style='border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0in 0in 0in'><p class=MsoNormal><b><span style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'>From:</span></b><span style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'> Synth-diy [mailto:synth-diy-bounces@synth-diy.org] <b>On Behalf Of </b>paula@synth.net<br><b>Sent:</b> Friday, June 09, 2017 3:48 AM<br><b>To:</b> Julian Schmidt<br><b>Cc:</b> synth-diy@synth-diy.org<br><b>Subject:</b> Re: [sdiy] Question how to improve rotary encoder feel<o:p></o:p></span></p></div></div><p class=MsoNormal><o:p> </o:p></p><p><span style='font-size:10.0pt;font-family:"Verdana","sans-serif"'>Julian,<o:p></o:p></span></p><p><span style='font-size:10.0pt;font-family:"Verdana","sans-serif"'>I spent a great deal of time with rotary encoders and getting them to feel right.<o:p></o:p></span></p><p><span style='font-size:10.0pt;font-family:"Verdana","sans-serif"'>There's a few tricks you can use;<o:p></o:p></span></p><p><span style='font-size:10.0pt;font-family:"Verdana","sans-serif"'>let's assume you have two inputs; A and B<o:p></o:p></span></p><p><span style='font-size:10.0pt;font-family:"Verdana","sans-serif"'>use input A to trigger an interrupt that detects both rising and falling edges.<o:p></o:p></span></p><p><span style='font-size:10.0pt;font-family:"Verdana","sans-serif"'> <o:p></o:p></span></p><p><span style='font-size:10.0pt;font-family:"Verdana","sans-serif"'>when an interrupt happens you read both A and B.<o:p></o:p></span></p><p><span style='font-size:10.0pt;font-family:"Verdana","sans-serif"'>If the levels match you're going one way<o:p></o:p></span></p><p><span style='font-size:10.0pt;font-family:"Verdana","sans-serif"'>if they don't you're going the other<o:p></o:p></span></p><p><span style='font-size:10.0pt;font-family:"Verdana","sans-serif"'>This gives you double edge detection, so effectively 48pulses per full turn.<o:p></o:p></span></p><p><span style='font-size:10.0pt;font-family:"Verdana","sans-serif"'> <o:p></o:p></span></p><p><span style='font-size:10.0pt;font-family:"Verdana","sans-serif"'>On top of that you can add acceleration, so if you move it quick, instead of incrementing/decrementing by 1 you inc/dec by say 3. then as you slow down it drops to 2 and to 1.<o:p></o:p></span></p><p><span style='font-size:10.0pt;font-family:"Verdana","sans-serif"'> <o:p></o:p></span></p><p><span style='font-size:10.0pt;font-family:"Verdana","sans-serif"'>snags;<o:p></o:p></span></p><p><span style='font-size:10.0pt;font-family:"Verdana","sans-serif"'>you'll need to debounce the output of the encoders, you can do this in software and/or hardware (I use a combination of both).<o:p></o:p></span></p><p><span style='font-size:10.0pt;font-family:"Verdana","sans-serif"'>If you use the acceleration you'll need to do some interpolation such that when you're jumping by a value of three, you actually send a number of 1s at a proportional rate, so you don't get stepping.<o:p></o:p></span></p><p><span style='font-size:10.0pt;font-family:"Verdana","sans-serif"'> <o:p></o:p></span></p><p><span style='font-size:10.0pt;font-family:"Verdana","sans-serif"'>The other trick,<o:p></o:p></span></p><p><span style='font-size:10.0pt;font-family:"Verdana","sans-serif"'>use potentiometers which are endless ;)<o:p></o:p></span></p><p><span style='font-size:10.0pt;font-family:"Verdana","sans-serif"'> <o:p></o:p></span></p><p><span style='font-size:10.0pt;font-family:"Verdana","sans-serif"'> <o:p></o:p></span></p><p><span style='font-size:10.0pt;font-family:"Verdana","sans-serif"'> <o:p></o:p></span></p><p><span style='font-size:10.0pt;font-family:"Verdana","sans-serif"'>Paula<o:p></o:p></span></p><p><span style='font-size:10.0pt;font-family:"Verdana","sans-serif"'> <o:p></o:p></span></p><p><span style='font-size:10.0pt;font-family:"Verdana","sans-serif"'> <o:p></o:p></span></p><p><span style='font-size:10.0pt;font-family:"Verdana","sans-serif"'>On 2017-06-09 12:30, Julian Schmidt wrote:<o:p></o:p></span></p><blockquote style='border:none;border-left:solid #1010FF 1.5pt;padding:0in 0in 0in 5.0pt;margin-left:0in;margin-right:0in'><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Verdana","sans-serif"'>Hello All,<br><br>I have a current idea that could vastly benefit from using encoders instead of pots.<br>My only gripe is that I never had an encoder where I liked the feel. With the standard 24PPR encoders you have to make way too many turns to get to a higher value.<br>Rotationspeed based value speedups made the feeling even worse on the machines I tried. Also a lot of people complain about encoders on synths for the same reason.<br>Best solution so far is something like on the midibox or AN1X where you push the encoder for fine resolution.<br><br>The only one people seem to like are the Nord ones with the LED rings. I never had a nord machine in my hands, but Forum research suggests that they somehow managed to line up the LED movement on the ring with the encoder travel. So if you turn the encoder half a rotation, the value LED is at half, too.<br><br>Any idea how they've done this? looking up the specs it seems like they are using Bourns <span class=postbody>ECW1D-C24-SE0049L encoders (<a href="http://electro-music.com/forum/topic-50251.html">http://electro-music.com/forum/topic-50251.html</a>). </span><br><span class=postbody>49L is not specified in the datasheet, but my guess would be 48L => 48PPR which would still be too little resolution to even bring a 7 bit value up to full range in one revolution.</span><br><span class=postbody>Is the front panel resolution just reduced and interpolated on the nords? </span><br><br><span class=postbody>So if anybody has some hints how to give an encoder a more potentiometer like feeling I'm all ears. Especially if we talk 12 bit instead of 7 bit parameter resolution.</span><br><br><span class=postbody>For practical reasons encoders would be great for layered UIs to share a set of controls between multiple LFOs or preset saving. LED rings are sexy as hell, too. But whenever I use encoders for something other than menu diving and editing settings I wish for a pot in my hands ;)</span><br><br><span class=postbody>Cheers,</span><br><span class=postbody>Julian</span><br><br><o:p></o:p></span></p><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Courier New"'>_______________________________________________<br>Synth-diy mailing list<br><a href="mailto:Synth-diy@synth-diy.org">Synth-diy@synth-diy.org</a><br><a href="http://synth-diy.org/mailman/listinfo/synth-diy">http://synth-diy.org/mailman/listinfo/synth-diy</a><o:p></o:p></span></p></div></blockquote><p><span style='font-size:10.0pt;font-family:"Verdana","sans-serif"'> <o:p></o:p></span></p><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Verdana","sans-serif"'> <o:p></o:p></span></p></div></div></div></body></html>