tag:blogger.com,1999:blog-80447843530676860262024-03-13T13:10:37.902+00:00m0xpd's 'Shack Nasties'A series of random and irregular jottings, documenting matters of interest (to me) in the sphere of amateur radio and beyond.m0xpdhttp://www.blogger.com/profile/13241728975907453128noreply@blogger.comBlogger365125tag:blogger.com,1999:blog-8044784353067686026.post-76938514345021642752023-08-05T14:17:00.001+01:002023-08-05T14:39:01.638+01:00Sample and Hold<p> I have had a Sample and Hold for a long time...</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgdv0lN6iJIt9-hoE9hY4fNxdJLgH6d2FtkU9bx3wP74puFezEBtI2JF3mx5rejqPh-AFbR5yBPlOler9lbz1R7mLsJ2ENyOT6uq8SYuoihZXrlocFtCGhoef-tjLulh8wIXgBTalu73n52eyUPcXbGNeUdcq2uHXOZLx5Vc91B9D4I3mNsbpT4X1DvCHbr/s752/Fig1.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="752" data-original-width="565" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgdv0lN6iJIt9-hoE9hY4fNxdJLgH6d2FtkU9bx3wP74puFezEBtI2JF3mx5rejqPh-AFbR5yBPlOler9lbz1R7mLsJ2ENyOT6uq8SYuoihZXrlocFtCGhoef-tjLulh8wIXgBTalu73n52eyUPcXbGNeUdcq2uHXOZLx5Vc91B9D4I3mNsbpT4X1DvCHbr/s320/Fig1.png" width="240" /></a></div><br /><p>It is, as you see above, a homemade module, built around five years ago to the <a href="http://musicfromouterspace.com/index.php?MAINTAB=SYNTHDIY&PROJARG=OLDIESBUTGOODIES/CONTROLLERS/sampleandhold.html&VPW=1629&VPH=753">design</a> published by the late, great Ray Wilson of '<a href="http://musicfromouterspace.com/">Music from Outer Space</a>'. </p><p>I decided - for reasons I'll explain in a moment - that I need a new Sample & Hold. </p><p>There are a number of reasons why you might want a Sample and Hold ('S&H') in a synthesiser, of which the two most common seem to be:</p><p><span> </span>1) the generation of random sequences by sampling noise (or some other varying signal)</p><p> <span> </span>and</p><p><span> </span>2) "bitcrushing"</p><p>The generation of random sequences is a nice problem, which we'll look at first, by a practical example:</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj2ZMlY-iuhvcVCvy15p5FVNFApiHmA17G8CIcrUIcrGLOJvT9cEHjkIwowWL7Xi7hiZkTP9RRZXLGMDx5MJQunUaP6RMF6Ko9jbmKnFWI8m7V_mJJVj4SA-CohEZ2xNM_viMnS7NchZqqbGqmO9b9YX5hqOt1ccxmG8uW_i9AvwHU8K2uX_4R4YnxJuCLm/s1075/Fig4.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="618" data-original-width="1075" height="230" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj2ZMlY-iuhvcVCvy15p5FVNFApiHmA17G8CIcrUIcrGLOJvT9cEHjkIwowWL7Xi7hiZkTP9RRZXLGMDx5MJQunUaP6RMF6Ko9jbmKnFWI8m7V_mJJVj4SA-CohEZ2xNM_viMnS7NchZqqbGqmO9b9YX5hqOt1ccxmG8uW_i9AvwHU8K2uX_4R4YnxJuCLm/w400-h230/Fig4.png" width="400" /></a></div><div class="separator" style="clear: both; text-align: justify;"><br /></div><div class="separator" style="clear: both; text-align: justify;">In the oscilloscope screen grab above, you see some random noise, ranging from 0 to 5V (on the channel 3 trace in magenta) and samples of that noise, captured (sampled) at a regular rate and held between these sampling points (seen on the channel 4 trace in light blue). These values constitute a random sequence.</div><div class="separator" style="clear: both; text-align: justify;"><br /></div><div class="separator" style="clear: both; text-align: justify;">"<a href="https://en.wikipedia.org/wiki/Bitcrusher">Bitcrushing</a>" is an audio effect that produces distortion by reducing the resolution or bandwidth of a signal. </div><div class="separator" style="clear: both; text-align: justify;"><br /></div><div class="separator" style="clear: both; text-align: justify;">The name might imply that the technique works only by reducing the resolution of amplitude quantisation (i.e. the number of bits used to represent the instantaneous amplitude of the signal). However, as the definition above confirms, the effect actually speaks of the overall bit rate, so sample rate is involved as well. A sample and hold alone can't implement <a href="https://en.wikipedia.org/wiki/Bitcrusher#Resolution_reduction">resolution reduction</a> but it certainly can demonstrate <a href="https://en.wikipedia.org/wiki/Bitcrusher#Sample_rate_reduction">sample rate reduction</a>, as we shall now see:</div><div class="separator" style="clear: both; text-align: justify;"><span face="sans-serif" style="background-color: white; color: #202122; font-size: 14px; text-align: left;"><br /></span></div><div class="separator" style="clear: both; text-align: justify;"><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjwUFAipVAniAF4O5tgDmUuAIWoAHGYIpe2urMQKzU6O2ZXvb99ns3rk8KwVQZaG5O3ziJpj467FLbrxPB8XIQUNT6dft5DrqtELuJ1QlwsK8KsyUqyYl_GHqN1N54Z0rdPWeLFwoVZDu_TlUVMheKC9-3gly3Q4wN-Xy9WBVjwu70JZOrERKO5erY3a6CT/s1333/Fig2.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="787" data-original-width="1333" height="236" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjwUFAipVAniAF4O5tgDmUuAIWoAHGYIpe2urMQKzU6O2ZXvb99ns3rk8KwVQZaG5O3ziJpj467FLbrxPB8XIQUNT6dft5DrqtELuJ1QlwsK8KsyUqyYl_GHqN1N54Z0rdPWeLFwoVZDu_TlUVMheKC9-3gly3Q4wN-Xy9WBVjwu70JZOrERKO5erY3a6CT/w400-h236/Fig2.png" width="400" /></a></div><br /><span face="sans-serif" style="background-color: white; color: #202122; font-size: 14px; text-align: left;"><br /></span></div><div class="separator" style="clear: both; text-align: justify;">In the oscilloscope screen grabs above, you see a triangular wave, again ranging from 0 to 5V (on the channel 3 traces in magenta) and samples of that triangular wave, captured (sampled) at a regular rate and held between the sampling points (seen on the channel 4 traces in light blue). Various cases are shown, indexed by the yellow integers.</div><div class="separator" style="clear: both; text-align: justify;"><br /></div><div class="separator" style="clear: both; text-align: justify;">In case 1 the sample rate is so high that you can hardly see discrete 'samples'; channels 3 and 4 pretty much overlay each other.</div><div class="separator" style="clear: both; text-align: justify;"><br /></div><div class="separator" style="clear: both; text-align: justify;">In case 2, the individual 'samples' are just becoming visible and there is a clear step-wise sequence in channel 4.</div><div class="separator" style="clear: both; text-align: justify;"><br /></div><div class="separator" style="clear: both; text-align: justify;">By case 3 (where there are approximately 11 samples per period of the triangle), the steps are clearly visible, but there is enough information retained to be confident that the underlying signal is a triangular wave.</div><div class="separator" style="clear: both; text-align: justify;"><br /></div><div class="separator" style="clear: both; text-align: justify;">By case 4 (where there are now only around 6 samples per period of the triangular wave) the blatant step-wise nature of the signal is such that you have now insufficient information to reconstruct the triangular wave (as opposed - for example - to supposing it to be equally possible that it was a sine-wave of the same frequency). The sampling has lost the early harmonics of the triangle wave.</div><div class="separator" style="clear: both; text-align: justify;"><br /></div><div class="separator" style="clear: both; text-align: justify;">You could take this further, of course - right up to cases where you start to push Shannon's limit for the fundamental of the triangle wave itself.</div><div class="separator" style="clear: both; text-align: justify;"><br /></div><div class="separator" style="clear: both; text-align: justify;"><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjG2wDNbMGEvM9tEZ7qyy4xAJzMTgP8-fx8KtOipoPvMSyM_S8l223UkyBOidR6R0TsI-6ZPMy1YX-hY6pOzexGXFy4MuMdQYm0KOC1m41FQaxzZ7RmiUCpIuD2SqUYaIbl-tEuTCGXjpxaYdpSZ8VDwtUxzW9wjy1z-5XZW-wtVdnijkl8OWuvZWBJ08hb/s1002/Fig3.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="583" data-original-width="1002" height="186" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjG2wDNbMGEvM9tEZ7qyy4xAJzMTgP8-fx8KtOipoPvMSyM_S8l223UkyBOidR6R0TsI-6ZPMy1YX-hY6pOzexGXFy4MuMdQYm0KOC1m41FQaxzZ7RmiUCpIuD2SqUYaIbl-tEuTCGXjpxaYdpSZ8VDwtUxzW9wjy1z-5XZW-wtVdnijkl8OWuvZWBJ08hb/s320/Fig3.png" width="320" /></a></div><br /> </div>In case 5 above, we're still not at the Nyquist rate (we still have around 3 samples per period), but there's nothing of the original signal left, except its fundamental frequency.<p></p><p>The Sample and Hold system certainly has bitcrushed the nice triangular signal of case 1 by the time it gets to case 5, whatever you take bitcrushing to mean!</p><p>There's another reason I like using sample and hold devices, different from the two "standard" examples above. It is to extract notes from sequences. To extract - if you will - a sub-set from a set. </p><p>Here's the example:</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjfQX_0TZbA0NnVkQxy16icWGHh40u2a7fm1wcU5DCH9odWLNq8oFQE55xDFD3CBjSKEgDtscY0XDjYszU2weLrGQnKIGwCASmZtH9ukw-fxBD6PUUJ1bX7fOZ1J6UzcVGmlIo5xLoeJkwuLkPNNyVh0DLITGzueCjMyBRwUiLwpoQrz_M20Ht_OMiAv4fo/s1044/Fig5.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="596" data-original-width="1044" height="229" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjfQX_0TZbA0NnVkQxy16icWGHh40u2a7fm1wcU5DCH9odWLNq8oFQE55xDFD3CBjSKEgDtscY0XDjYszU2weLrGQnKIGwCASmZtH9ukw-fxBD6PUUJ1bX7fOZ1J6UzcVGmlIo5xLoeJkwuLkPNNyVh0DLITGzueCjMyBRwUiLwpoQrz_M20Ht_OMiAv4fo/w400-h229/Fig5.png" width="400" /></a></div><br /><p><span style="text-align: justify;">In the oscilloscope screen grab above, you see part of a pitch sequence coming from one of my sequencers, (and so ranging between 0 and 5V, seen on the channel 3 trace in magenta) and samples of that signal, captured (sampled) at a regular rate and held between these sampling points (seen on the channel 4 trace in light blue). These channel 4 values are individual 'notes' from the channel 3 pitch sequence, selected at the times the sample and hold is triggered.</span> In this case, channel 4 is sampling one in four of the 'notes' on channel 3.</p><p>I like to use these notes as "pedal notes" or notes for bass voices to play whilst other voices play the faster sequence (in a higher octave). It is an easy way to build harmony.</p><p>I have been using my old MFOS S&H module to do this for many years, but was irritated by two of its "features".</p><p>Firstly, it has front panel adjustments which allow you to apply gain and offset to the sampling process. These are controlled by the two knobs closest to the array of sockets (see the photo at the head of this post). To use the device in my "pick a note out of a sequence" application, it is critical that the sample and hold has exactly unit gain and no offset. </p><p>But every time I plugged something it, I couldn't help touch the knobs that displaced both these settings. This meant that every time I used it I had to re-set, costing time and irritation! </p><p>Also - to be honest - my MFOS sample and hold module does suffer a little 'droop' in its hold phase, as charge on the hold capacitor leaks away over time. </p><p>So - my plan was to address these issues in a new unit, with NO FRONT PANEL ADJUSTMENT for gain or offset, and better hold performance.</p><p>I started off with a re-spin of Ray's MFOS unit, which uses a C-MOS 4066 analog switch to switch charge onto the hold capacitor. I had a prototype of this new circuit working pretty quickly and quite well enough to "go to production", but my attention was caught by the simplicity of Moritz Klein's S&H. This design, which features both in <a href="https://www.youtube.com/watch?v=kIJqzkRe4do">Moritz' YouTube video</a> and in the <a href="https://www.ericasynths.lv/shop/diy-kits-1/edu-diy-noisesh/">Erica Synths ".edu" module</a>, uses a FET to switch charge. I felt I ought to give this approach a whirl too.</p><p>As readers already know, I am a big fan of Moritz Klein, having used his <a href="https://www.youtube.com/watch?v=QBatvo8bCa4">VCO core</a> in the <a href="https://github.com/m0xpd/SubHarmonics">SubHarmonics</a> module and identifying his important pedagogy in synth DIY. Moritz is explicit in calling out the limitations of the FET in this application, but he surprised me by saying:</p><p>“If you want to sample a tuned sequence for your VCO for example, you’d absolutely need precision, <span> </span>otherwise it would sound way out of tune. But that’s a very specific and, frankly, not that practical use case, at least from my perspective.” <br /><span> </span><span> </span><span> </span><span> </span>(M Klein, Designing a sample and hold circuit from scratch, 16:31) </p><p>So - Moritz thinks that my application is a very specific and not that practical use-case, which would absolutely need precision!</p><p>Hearing that, I felt it was OK to give up on the FET (which at that point I had working as well as the analog multiplexer) and look elsewhere. I needed to look no further than Eddy Bergman's site, where a <a href="https://www.eddybergman.com/2023/03/revisedsampleandhold.html">recent post</a> described a sample and hold derived from a design by <a href="https://www.schmitzbits.de/sah.html">Rene Schmitz</a>. These used the LF398 device - an application-specific S&H chip.</p><p>The LF398 sounded way too expensive for somebody like me - a cheapskate who had been messing around with CD4066s and J113s. But I took a look on our favourite auction site and found some LF398s for about £1 each. I set one up in the same breadboard I'd been using with the analog switch and the JFET and suddenly everything got a lot easier!</p><p>So - a new sample and hold module is born...</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEih2eZ8xAON42AS6CbY7E2u9n9g6EELZS9eyPVWGD8U7f5Z106rprxFIViXPE0NDzw0jZ9VS8QqMo_88o6mHS7ctBgjKVOQ6Vd88CPgfOOpj8hb_PL9_2PvfGYqMWaz0ZkaV5aUP3bmEsVo2wmPHKcnVFIG4_BQ7MTZKpEuJ_wa8rrMPr8SfAORaLL4f75S/s779/Fig6.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="779" data-original-width="294" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEih2eZ8xAON42AS6CbY7E2u9n9g6EELZS9eyPVWGD8U7f5Z106rprxFIViXPE0NDzw0jZ9VS8QqMo_88o6mHS7ctBgjKVOQ6Vd88CPgfOOpj8hb_PL9_2PvfGYqMWaz0ZkaV5aUP3bmEsVo2wmPHKcnVFIG4_BQ7MTZKpEuJ_wa8rrMPr8SfAORaLL4f75S/w151-h400/Fig6.png" width="151" /></a></div><div><br /></div>You can get all the design information on my <a href="https://github.com/m0xpd/sample-and-hold">github</a>. And you can tell it works, because all the examples I showed above were generated by this new S&H module. <div><br /></div><div>I need never worry about knocking knobs again!</div><div>73</div><div>m0xpd<br /><div><br /></div><div><br /><p><br /></p><p><br /></p></div></div>m0xpdhttp://www.blogger.com/profile/13241728975907453128noreply@blogger.com0tag:blogger.com,1999:blog-8044784353067686026.post-87613374759592646932023-06-18T08:00:00.005+01:002023-06-18T17:49:36.502+01:00encore!<p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEg9Fa-3ULW55OphaDS0Na4EBst1kU9u8R9_lh3NwEOmgGWdP0BxcHyyD6nxOcZowTQyny1ZYAaE6hxv_dBb8qpHfcxUhhu4BOoWVo9O_ThZMEXzq3rKKhBfsCeWmidRUbbH6fiSsJU-MUR5W9ZCU0CIN5tnWMeKBZ6aau8IS-OzCeQR4YAqvdMZeAbJxQ" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="4032" data-original-width="3024" height="400" src="https://blogger.googleusercontent.com/img/a/AVvXsEg9Fa-3ULW55OphaDS0Na4EBst1kU9u8R9_lh3NwEOmgGWdP0BxcHyyD6nxOcZowTQyny1ZYAaE6hxv_dBb8qpHfcxUhhu4BOoWVo9O_ThZMEXzq3rKKhBfsCeWmidRUbbH6fiSsJU-MUR5W9ZCU0CIN5tnWMeKBZ6aau8IS-OzCeQR4YAqvdMZeAbJxQ=w300-h400" width="300" /></a></div><br /><p></p><p>Some weeks ago I noticed a flurry of discussion of the <a href="http://www.princeton.com.tw/LinkClick.aspx?fileticket=XG0VYKi9QxE%3d&tabid=341&portalid=0&mid=828&language=en-US">PT2399</a> device on various Facebook groups of which I'm a member. The PT2399 is marketed as an 'Echo Processor', offering the ability to generate a delayed version of an audio signal and - thereby - to form the core of a simple echo effect. </p><p>What is most interesting about the device (which is available in a 16-pin DIP) to me and millions of others who dabble in audio all over the world is its price - you can have them for around fifty cents retail if you shop around.</p><p>You won't be surprised to hear that - in consequence of the ridiculous price - there are myriad delay and effects units available based on this device. Some are for guitar and many more are now available for voice applications (type 'PT2399' into ebay and you'll be offered complete 'reverb' systems for less than the price of a pint of beer). The recent discussion I mentioned above was on synth groups - where PT2399's are used for delay/echo applications too.</p><p>So - I got me some samples of the PT2399 and started playing with them. </p><p>I liked what I heard to such an extent that I made a new module, pictured above. </p><p>I have called it encore! not in a vulgar outburst of self-congratulation. Rather in a play on the French word, the meanings of which include '<i>more, again,</i>' etc.. Appropriate, I think, to the repetition central to 'echo'.</p><p>My module is rather different to the simple 'reverb' systems you can buy on ebay (I hope). </p><p>For a start, I've added additional low-pass filtering to the input (2nd order) and to the output (4th order) of the system to restrict the bandwidth and thereby hide some of the noise inherent to the 1-bit processing used in the PT2399 (which drops in sample rate to achieve the longer delays). </p><p>Here's bench work on measurement of the frequency response of the prototype's output filter, which has a pair of Sallen-Key stages in as close to Butterworth configuration as E12 components allow without getting too precious about tweaking.</p><p><br /></p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEj5_mZsmAK_s08iFnBwhcFAd6DY-B93K6xyU5dldGJRhFTlhtLUVMflPo_iQm7kWIk8a4wgGZiqLnIqxhH8U5D-Fj5yLH7sQZzKyuyxd3nVGwd16So3uMjYWle3Jx-G8aPeAGJ8Srp69xQhGjk7AKYVqQfw23J0cQVIP3d6ZnoMo2bNpdtnjmu0kl5n-A" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="3024" data-original-width="4032" height="300" src="https://blogger.googleusercontent.com/img/a/AVvXsEj5_mZsmAK_s08iFnBwhcFAd6DY-B93K6xyU5dldGJRhFTlhtLUVMflPo_iQm7kWIk8a4wgGZiqLnIqxhH8U5D-Fj5yLH7sQZzKyuyxd3nVGwd16So3uMjYWle3Jx-G8aPeAGJ8Srp69xQhGjk7AKYVqQfw23J0cQVIP3d6ZnoMo2bNpdtnjmu0kl5n-A=w400-h300" width="400" /></a></div><br /> <p></p><p>As it happens, a shortage of any spare op-amps on the PCB meant I ended up neglecting to put buffering between the output of the PT2399 (and it's associated passive network, which does not have a particularly low source impedance) and the input of this filter stage (which similarly doesn't have a particularly high input impedance). So there will be some inevitable interaction, which means we won't get the measured flat(-ish) passband and -24dB/8ve from 8kHz seen on the analyser screen in the photo above. Doesn't matter - it's only for a synthesiser! </p><p>Aside from filters, encore! has some much more interesting additions, specific to synthesiser application.</p><p>All the main parameters (delay, gain of the recursion loop [controlling the number of repeats of the delayed signal] and level of the echo signal) are <u>voltage controlled</u>. This is achieved by voltage controlled amplifiers (in the case of the repeats and the level) and by a voltage controlled resistor (in the case of the delay). These features rest heavily on the shoulders of the late Ray Wilson of <a href="http://musicfromouterspace.com/index.php?MAINTAB=HOME&VPW=1024&VPH=716">Music From Outer Space</a>, who designed a couple of <a href="http://musicfromouterspace.com/analogsynth_new/ECHOFXXX/ECHOFXXX.php">pt2399 echo devices</a>. I modified Ray's voltage control circuits for use in this module.</p><p>Also, I have provided support to allow users to add external elements to the recursion path which feeds the delayed audio back into the input of the system via a 'send / return loop':</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEi2PEllfCm5GzC1qdjL_o3wu3AmeYGAyiyg7H005UoeeL53el11o1ulCq7GzbtqREzBd_9FlDdtuTKzL8-LUYcVSlW6MEpdKi3xVPlewFXAvqbTigx3ZsY5J07FxvQ5sjWb6pFwNLPRU86XXDaK1lU3DGV_mRbSplm1510juO_dbTBwJXlU_U6sn5nZ7Q" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="1535" data-original-width="2328" height="211" src="https://blogger.googleusercontent.com/img/a/AVvXsEi2PEllfCm5GzC1qdjL_o3wu3AmeYGAyiyg7H005UoeeL53el11o1ulCq7GzbtqREzBd_9FlDdtuTKzL8-LUYcVSlW6MEpdKi3xVPlewFXAvqbTigx3ZsY5J07FxvQ5sjWb6pFwNLPRU86XXDaK1lU3DGV_mRbSplm1510juO_dbTBwJXlU_U6sn5nZ7Q" width="320" /></a></div><p><br /></p><p>This allows (e.g.) a filter to generate frequency selective echos or a second delay unit to create more complex echo structures.</p><p><br /></p><p></p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEg5o2ERbQa_5j-psx3jks9oyAHtELMakrMULc8JVr-EVo-CLY6aRlppFCB5V_DvR_pCadOxg6YZeCnngCy5Lr2Rgersf58KpXb2DNzkcZ4cmeaNHXbnvALUISi6Xx1mX8MnBaOQwM6Yx33RxAi7LsbF9R7CgKV0zXj_kVj2tdOzQnF-p4QZSxv7M8RSuA" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="3024" data-original-width="4032" height="240" src="https://blogger.googleusercontent.com/img/a/AVvXsEg5o2ERbQa_5j-psx3jks9oyAHtELMakrMULc8JVr-EVo-CLY6aRlppFCB5V_DvR_pCadOxg6YZeCnngCy5Lr2Rgersf58KpXb2DNzkcZ4cmeaNHXbnvALUISi6Xx1mX8MnBaOQwM6Yx33RxAi7LsbF9R7CgKV0zXj_kVj2tdOzQnF-p4QZSxv7M8RSuA" width="320" /></a></div><br /><br />Details of the design (which has been published under a Creative Commons CC BY-SA 4.0 License), including schematics and full PCB details, are available in a <a href="https://github.com/m0xpd/encore">github repository</a>.<p></p><p>It's amazing how an inexpensive device, made more inexpensive by high demand, can generate opportunity for such pleasure.</p><p>73</p><p>m0xpd</p><p><br /></p><p><br /></p>m0xpdhttp://www.blogger.com/profile/13241728975907453128noreply@blogger.com0tag:blogger.com,1999:blog-8044784353067686026.post-31930219292184200932023-05-28T08:26:00.006+01:002023-05-28T13:56:56.055+01:00Bombing Run<p>I was sitting here at my computer yesterday, quietly building envelopes from a bunch of straight-line segments (no, I can't tell you why). </p><p>Suddenly, the quiet was broken by a familiar and evocative sound - the rising rumble of a group of beating piston aero engines. </p><p>The rumble rose to a dramatic, unmistakable roar and sure enough - as I looked out of my window - Avro Lancaster PA474 of the <a href="https://www.raf.mod.uk/display-teams/battle-of-britain-memorial-flight/">Battle of Britain Memorial Flight</a> thundered over my house at 12:26 on a heading of 170 degrees at 825ft (according to the flight track I just retrieved from <a href="https://www.radarbox.com/">RadarBox</a>).</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgPOpSaDC_fMT1aGFmxhqJ2SmhSth6ritC5Zn1J4e-ImJourkumBE9lk4CbqvRSGgG4IuLEHgD5ctv-i0eWcp7Z8qsXnurtoJdLmaJnUPmFpWDE82N7VQrguLH8qX49pD7LfGz5cntuSC1ZThzmBatjSqknkP5pE92jYzJ1clo3xi_5guOteIFF0l099Q/s1560/Screenshot%202023-05-28%20at%2007.48.42.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="720" data-original-width="1560" height="185" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgPOpSaDC_fMT1aGFmxhqJ2SmhSth6ritC5Zn1J4e-ImJourkumBE9lk4CbqvRSGgG4IuLEHgD5ctv-i0eWcp7Z8qsXnurtoJdLmaJnUPmFpWDE82N7VQrguLH8qX49pD7LfGz5cntuSC1ZThzmBatjSqknkP5pE92jYzJ1clo3xi_5guOteIFF0l099Q/w400-h185/Screenshot%202023-05-28%20at%2007.48.42.png" width="400" /></a></div><br /><p>Interestingly, the same track that gave me her altitude placed her a good deal E. of me (some 200m), but I (and the XYL, who saw her independently from the garden) have PA474 much closer on track for a 'direct hit' than that.</p><p>The Lancaster was flanked by a Hurricane and a Spitfire and the Hurricane (which was flying off the Starboard wing, which seems typical of all the images you see of this BBMF formation) was certainly well W. of my location. </p><p>The formation was travelling between '<a href="https://www.raf.mod.uk/display-teams/battle-of-britain-memorial-flight/news/bbmf-weekly-flypast-timings/">appearances</a>' at Bury and Smallwood to place themselves over my QTH and after their performance yesterday they returned to overnight at Liverpool Speke to continue their part in the <a href="https://battleoftheatlantic.org/boam-events/">Battle of the Atlantic Memorial</a> events.</p><p>The Lancaster will be showing her bomb bay to the good folks at Bury again today before going on to Stockport and then back home to Lincolnshire. If she runs a straight line over the ground between Bury and Stockport that will take her well E. of me but if (as happened yesterday) she routes via <a href="https://www.bartonaerodrome.co.uk/">Barton field</a>, I may get to see her again this lunchtime. As I write we do have cloud cover, but it isn't nearly as low as it was for <a href="https://www.raf.mod.uk/news/articles/armed-forces-make-major-contribution-to-historic-coronation-of-his-majesty-king-charles-iii/">Charley's big day</a>, which stopped PA474 flying down The Mall.</p><p>Last time I saw her, as recorded in these ramblings, was at <a href="http://m0xpd.blogspot.com/2010/09/grand-day-out.html">Bletchley Park</a>, from where we also saw another BBMF Spitfire on a <a href="https://m0xpd.blogspot.com/2011/08/enigmatic-deja-vu.html">subsequent visit.</a></p><p>So - fingers crossed I see the Lanc again today. Unfortunately, she's going solo today (so only 4 Merlins!) as the Spitfire and Hurricane are strutting their stuff elsewhere. I think I'll maximise my chances of a sighting by standing atop the local 'hill' (such as it is), rather than skulking indoors.</p><p>Many thanks to the good folks at the <a href="https://www.raf.mod.uk/display-teams/battle-of-britain-memorial-flight/">BBMF</a> (and similar) for keeping these wonderful machines flying (notwithstanding their bloodstained past) and honouring all those who served and serve. A wonderful sight and an even more wonderful sound.</p><p>73 <br />m0xpd</p><h3 style="text-align: left;">Update:</h3><p>I did see her again today, and she did route via Barton, but then turned hard for Stockport, taking her well East of me. Here she is at 1025 feet, approx. 4km away over the M60, Junction 7, en route to Stockport:</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhikyseBnsiTq3Omjo7vJqR5dquv5Q4okE1DTnScDYWRbDKhohHTGwzqhuMaxDiZujSFecMcTxcLImh8r_0nYt4tJcuxUASwavILrirJq_hZ0NujECdC7HMOfOXfKoNkIB4Sh3SZQuB2P5-lOzGUz3La6b4ZYcFWRasC1yAUmzh6pFOC2s5fOKPLzFWaw/s1034/Screenshot%202023-05-28%20at%2013.41.34.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="501" data-original-width="1034" height="194" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhikyseBnsiTq3Omjo7vJqR5dquv5Q4okE1DTnScDYWRbDKhohHTGwzqhuMaxDiZujSFecMcTxcLImh8r_0nYt4tJcuxUASwavILrirJq_hZ0NujECdC7HMOfOXfKoNkIB4Sh3SZQuB2P5-lOzGUz3La6b4ZYcFWRasC1yAUmzh6pFOC2s5fOKPLzFWaw/w400-h194/Screenshot%202023-05-28%20at%2013.41.34.png" width="400" /></a></div><br /> <p></p>m0xpdhttp://www.blogger.com/profile/13241728975907453128noreply@blogger.com0tag:blogger.com,1999:blog-8044784353067686026.post-47100685676221315772023-05-06T06:42:00.000+01:002023-05-06T06:42:43.189+01:00SubHarmonics<p>A <a href="http://m0xpd.blogspot.com/2023/04/vcas-and-old-dutch-masters.html">couple of posts ago</a> I wrote "I'll have something to say about adding and 'mixing' harmonics; watch this space." </p><p>Well, the time has come - enter my new module, <b>SubHarmonics</b></p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjIh6EGlasLoYf8xTXZOkaTNtbxAXOvQS4_WN8Zh8k2yr4MZN4uX33Gz-NU6QPygP3AtPNlgyR2HtX7ZdsSSx7xSv4E0OshW0q9SbaAbLZAaSg_IZLP2jUpZDdhXrKJw18ov5GJWY_xiknT9uUz8oSxUfTZmjZp5XOirV3pwzbchCkxhtMSHg3ex__Jng/s580/SubHarmonics%20Perspective%20View%202.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="580" data-original-width="402" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjIh6EGlasLoYf8xTXZOkaTNtbxAXOvQS4_WN8Zh8k2yr4MZN4uX33Gz-NU6QPygP3AtPNlgyR2HtX7ZdsSSx7xSv4E0OshW0q9SbaAbLZAaSg_IZLP2jUpZDdhXrKJw18ov5GJWY_xiknT9uUz8oSxUfTZmjZp5XOirV3pwzbchCkxhtMSHg3ex__Jng/w444-h640/SubHarmonics%20Perspective%20View%202.png" width="444" /></a></div><br />Before I go any further, I ought to explain what sub-harmonics are and why I might waste time and money developing some electronics which generates and manipulates them.<p></p><p>You will have heard of 'harmonics'; the idea that any periodic signal is composed of (a d.c. component plus) a sum of terms having frequencies at integer multiples of the 'fundamental frequency', where the fundamental frequency is the reciprocal of the period. </p><p>This concept, which is the core of Fourier analysis, underpins some of the most important mathematical and computational constructs of our age, including the Fast Fourier Transform. It also explains the "<a href="https://en.wikipedia.org/wiki/Harmonic_series_(music)">Harmonic series</a>" of musical notes: those notes some of which can be sounded on a natural trumpet (/bugle) or trombone (excepting 'pedal notes'), a string, etc.</p><p>It is possible to construct another series of frequencies starting on a fundamental which, instead of having members whose frequencies are integer multiples of the fundamental frequency (<i>f</i><span style="font-size: xx-small;">0</span>, 2<i>f</i><span style="font-size: xx-small;">0</span>, 3<i>f</i><span style="font-size: xx-small;">0</span>, 4<i>f</i><span style="font-size: xx-small;">0</span>, ...), has members whose frequencies are integer quotients of the fundamental (<i>f</i><span style="font-size: xx-small;">0</span>, <i>f</i><span style="font-size: xx-small;">0</span>/2, <i>f</i><span style="font-size: xx-small;">0</span>/3, <i>f</i><span style="font-size: xx-small;">0</span>/4 ...). This is called the undertone series or <a href="https://en.wikipedia.org/wiki/Undertone_series">sub-harmonic series.</a></p><p>Why does the sub-harmonic series matter musically? </p><p>Well, one of my sons-in-law plays bass and (as if his bass isn't low enough already) he likes to add an "<a href="https://en.wikipedia.org/wiki/Octave_effect">octave down</a>" effect </p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhFtqZc1by4lBW1VCU0z7Vge2FWy6NVhlizu2rHzMRWFHChPzGiDwGVjuq5A-FBfeeCF7WoO_lhQGGid6unHipGfu86ttLKxyKS82IFC_WohbhB2oRr7_3sHa_AFa_uMX0OnbTQxcJj_OEuOsizLDt12CVSjPvIT2ZgOD87MeUf1iGyA-TwO5ZdRzkSFg/s874/MuTron%20Octave%20Divider.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="874" data-original-width="546" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhFtqZc1by4lBW1VCU0z7Vge2FWy6NVhlizu2rHzMRWFHChPzGiDwGVjuq5A-FBfeeCF7WoO_lhQGGid6unHipGfu86ttLKxyKS82IFC_WohbhB2oRr7_3sHa_AFa_uMX0OnbTQxcJj_OEuOsizLDt12CVSjPvIT2ZgOD87MeUf1iGyA-TwO5ZdRzkSFg/w125-h200/MuTron%20Octave%20Divider.png" width="125" /></a></div><p>to add sound an octave lower - a sub-harmonic. So, sub-harmonics can add bass - but they are not just used to add weight and "depth". </p><p>Since two different <b>sub-harmonics</b> of a common fundamental are harmonically related they can be<b> combined to represent harmony</b> - <u>this is the main reason for my interest</u>. </p><p>Two distinct sub-harmonics occur at a frequency ratio of m/n where m and n are small integers. This "ratio of small integers" is the "recipe" for a musical interval (an octave is 2/1, a fifth is 3/2, a fourth is 4/3, etc) - making the combination of two sub-harmonics (often - but not always) musically useful. </p><p>That's the background - now back to the electronics:</p><p>My module "SubHarmonics" takes a fundamental signal, 'X', which is either generated by the module's internal Voltage Controlled Oscillator or derived from an external signal applied to the "Ext X In" clock input, and generates two square-wave signals, 'A' and 'B'. </p><p>These signals A and B are sub-harmonics of X (that is to say, their frequency is a quotient resulting from dividing the frequency of X by an integer divisor) and each divisor is set either by a front panel control on "SubHarmonics" or by a Control Voltage applied to the relevant control input. </p><p>You can see the divisor controls, CV inputs and indicators on the front panel:</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhjqjspdFxMxa1IXnqptYs16xHkDOk2v0PNiqk3i9aV8Rl7T5WrI9ATMwgZ3I-Ih7JIBd-RwJ_rhEOCvgGMfllCtInNgUG7YdIQ9QDK7T0nhWdvJvQyOdmk3pUYf34pFAvH4-mLFFWVVevLrLSheYptictgeqgWakUGpPKd3eWfhvOZSIBcrLxh5J0KFw/s315/SubHarmonics%20Divisor%20Controls.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="300" data-original-width="315" height="300" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhjqjspdFxMxa1IXnqptYs16xHkDOk2v0PNiqk3i9aV8Rl7T5WrI9ATMwgZ3I-Ih7JIBd-RwJ_rhEOCvgGMfllCtInNgUG7YdIQ9QDK7T0nhWdvJvQyOdmk3pUYf34pFAvH4-mLFFWVVevLrLSheYptictgeqgWakUGpPKd3eWfhvOZSIBcrLxh5J0KFw/s1600/SubHarmonics%20Divisor%20Controls.png" width="315" /></a></div><br /><p>The divisors can be set between 2 and 18, giving the unit a range a little over four octaves.</p><p>The two sub-harmonics are available individually as outputs and they are also applied to two internal modulators which combine A and B through switching equivalents of 'amplitude modulation' and 'ring modulation'. The result of these two modulators is passed to a voltage-controlled crossfader circuit to produce the module's fourth output: a "modulation mix". </p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiYEjK7q2r7WhZ-J86TnHJa33RtZo_JU0IM8H8fAQYTLLYzrdjr9g7TvdJcEvVA3OBgjU894pcrX6jVoazKyljgogOn0pT5bgL9Okjm3sFoeTrRK3BK_bdh1mpRd-GPpjeeLCM6nlsDkm-r_v0qBlVkD8ocXaQAAbUw1s90dwWRxszAPVKz7k6_tuFc4A/s316/SubHarmonics%20Outputs.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="135" data-original-width="316" height="135" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiYEjK7q2r7WhZ-J86TnHJa33RtZo_JU0IM8H8fAQYTLLYzrdjr9g7TvdJcEvVA3OBgjU894pcrX6jVoazKyljgogOn0pT5bgL9Okjm3sFoeTrRK3BK_bdh1mpRd-GPpjeeLCM6nlsDkm-r_v0qBlVkD8ocXaQAAbUw1s90dwWRxszAPVKz7k6_tuFc4A/s1600/SubHarmonics%20Outputs.png" width="316" /></a></div><p>The signal on this "modulation mix" output can be either of the two modulation types or a mix of the two.</p><p>The 'scope screenshots below show the module in action. There is an example of the 'ring modulation', implemented by an XOR operation between A and B (when the Mix control is at minimum, 0V level), left, and the 'amplitude modulation', implemented by an OR operation between A and B (when the Mix control is at maximum, 5V level), right. </p><p>I explained (at very tedious length) how and why modulation by OR gates produces an output identical (in terms of magnitude Fourier Transform) to modulation by AND gates for the particular case of "antipalindromic" inputs in an <a href="http://m0xpd.blogspot.com/2023/03/logic-gates-and-modulation-curiosity.html">earlier post</a>; these A and B sub-harmonics are antipalindromic.</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEheIQ4Miz2-NwkbJdpvxkblM3gy2WHCn9iLQh9lNzjmFYRVT0ufNkSyPtEMRZlg7Xnk_mgpgk37esnDj2A62K8kGuw0gKa65gR4YOdSEXxJ_aGUwyGzvXilgbVGms1S53XnZ6bDpOdGh2bK0oD9jEC5R08L7iWhUSEtvyEhIig8jWbbpdLi4m57yq0i4Q/s1040/SubHarmonics%20ModMix%20Extreme%20Examples.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="318" data-original-width="1040" height="122" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEheIQ4Miz2-NwkbJdpvxkblM3gy2WHCn9iLQh9lNzjmFYRVT0ufNkSyPtEMRZlg7Xnk_mgpgk37esnDj2A62K8kGuw0gKa65gR4YOdSEXxJ_aGUwyGzvXilgbVGms1S53XnZ6bDpOdGh2bK0oD9jEC5R08L7iWhUSEtvyEhIig8jWbbpdLi4m57yq0i4Q/w400-h122/SubHarmonics%20ModMix%20Extreme%20Examples.png" width="400" /></a></div><br /><p>The fundamental, X is the top trace in yellow - it is at approximately 600Hz. The first sub-harmonic, A, is the second trace, in Cyan. It is associated with the divisor m := fx/fA = 6 (giving the sub-harmonic at 100Hz). The second sub-harmonic is the third trace, in Magenta. It is associated with the divisor n := fx/fA = 12 (giving the sub-harmonic at 50Hz). The X, A and B traces are the same in the plots above.</p><p>However, changing the Mix setting changes the fourth trace, the Mod Mix output shown in Blue. It will be noted that the Mod Mix output is actually inverted; it goes from 0V to a negative value (I had no spare op-amp stages to correct this and no more space on an already busy board!) </p><p>In the left hand scope screen above, the Blue trace can be seen to describe the inverted exclusive OR on A, B. In the right hand scope screen above, the Blue trace describes the inverted XOR on A,B. </p><p>This inversion is performed in analog (by the action of the cross-fader), but it is (in this case) working as a perfect logical complement (making inverted OR look like NOR etc). Things are more complicated when the Mix control is at an intermediate setting:</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh0yvXS3-XwN8Iub77neEz6UCIqNY8Cj0tiP8K6h_8bwvqg-_z3S2wqbGtmCiNelzL4BgsAXfmcOhuApIBUmZb_ebHMAus0Zi1ABqtL7UlXUHlGH_z5-af6PH7ptWTGmch3sieBQSsgUUvwZjFCTdd3jQDSq_D-vMGZscqBZWgNI3f3zv9Mf6RilQp-0w/s554/SubHarmonics%20ModMix%20Intermediate%20Example.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="307" data-original-width="554" height="177" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh0yvXS3-XwN8Iub77neEz6UCIqNY8Cj0tiP8K6h_8bwvqg-_z3S2wqbGtmCiNelzL4BgsAXfmcOhuApIBUmZb_ebHMAus0Zi1ABqtL7UlXUHlGH_z5-af6PH7ptWTGmch3sieBQSsgUUvwZjFCTdd3jQDSq_D-vMGZscqBZWgNI3f3zv9Mf6RilQp-0w/w320-h177/SubHarmonics%20ModMix%20Intermediate%20Example.png" width="320" /></a></div><br /><p>Here, (above) with the X, A and B signals as before, the Mod Mix output (bottom, Blue trace) is seen to have a more complex waveform, mixing together elements of the balanced and unbalanced modulated signals from the two extreme cases illustrated above; the crossfader works!</p><p>In use, setting the 'Mix' control at the lowest setting gives the clean 'ring modulated' sound and increasing the 'Mix' setting increases the complexity of the sound toward the richness (/harshness) of the simple product of A and B.</p><p>The beauty of "SubHarmonics" is the ease with which a single pitch signal can generate a tone (or a 'melody') and the module can then fill out this single line with not just two sub-harmonics, but with a rich, inter-modulated texture. </p><p>Everything about the module is dynamic, being controllable by external control voltages, which can come from sequencers, LFOs or random generators, to give an infinite variety of expression.</p><p>The system is implemented largely in CMOS logic on two PCBs. The internal VCO uses the core of Moritz Klein's '<a href="https://www.youtube.com/watch?v=QBatvo8bCa4">Shapes VCO</a>', (later used as the Erica Synths <a href="chrome-extension://efaidnbmnnnibpcajpcglclefindmkaj/https://www.ericasynths.lv/media/VCO_FINAL.pdf">mki x es.edu VCO</a>), which fits nicely with the CMOS environment and is a very stable, elegant design - like all Moritz's work. The crossfader uses half an LM13700 OTA and the controls and CV inputs for the divisors are read and decoded by a PIC 16F676.</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh2B4-m2_xngdnS5Q6YoT10fFW42iRoXIO9a0L8gAZAPAscT-9sf9VS6iTr5Tj-KhPfpAYuQxgtHZkhCQrEwxbN3QAy7N6sqIiO4W4eTokzSLPTdUrntqFryf6_MPKNo5FNIlpeccwF95Xg2K3OEWMoj-nyFTReAJDizWVCR51MDWwp3TYB1qHXsKU_hg/s761/SubHarmonics%20Boards.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="518" data-original-width="761" height="272" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh2B4-m2_xngdnS5Q6YoT10fFW42iRoXIO9a0L8gAZAPAscT-9sf9VS6iTr5Tj-KhPfpAYuQxgtHZkhCQrEwxbN3QAy7N6sqIiO4W4eTokzSLPTdUrntqFryf6_MPKNo5FNIlpeccwF95Xg2K3OEWMoj-nyFTReAJDizWVCR51MDWwp3TYB1qHXsKU_hg/w400-h272/SubHarmonics%20Boards.png" width="400" /></a></div><div><br /></div>I have posted complete design files for the PCBs and Front Panel and code for the PIC in a <a href="https://github.com/m0xpd/SubHarmonics">GitHub repository</a>.<div><br /></div><div>It has been great fun developing this bird's nest of wire on the bench</div><div><br /></div><div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjtVVjs00VJgiBY3tv8zDV04oeCG9dGPKrb2-YTFKRNSpuGktmtxtkCFB2FrDaUnelA3M7CoNdUS2ZC0S08CW6_S870C181MK1zv8uvR0C_Nyh9nMvIycoJEulsUNhap1m9tUCPVFFdiaMXmLKRIjVDoVfaswv3j_cDIuZYrPInQkKhpIhasmPJ-0TbPA/s725/SubHarmonics%20Breadboard%20Development.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="549" data-original-width="725" height="303" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjtVVjs00VJgiBY3tv8zDV04oeCG9dGPKrb2-YTFKRNSpuGktmtxtkCFB2FrDaUnelA3M7CoNdUS2ZC0S08CW6_S870C181MK1zv8uvR0C_Nyh9nMvIycoJEulsUNhap1m9tUCPVFFdiaMXmLKRIjVDoVfaswv3j_cDIuZYrPInQkKhpIhasmPJ-0TbPA/w400-h303/SubHarmonics%20Breadboard%20Development.png" width="400" /></a></div><br /> into the finished "SubHarmonics" module - </div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgaM_BXAFyzeKuJLzoP0YJ3vnQZ1nd_kCZwDmx0mEj1mbIi-udxE-C3ALSFuXK5kWjQ7XTWp52K4OvA5iSCFdX9UFRZeL5IaqKcgkI8D580MEJ_oDu9d4sjrMaCfdGEA69NKuiYpMYQVvoLXb4sGPaI-bgGNpzQFDptBbmbMmNft6s9fmiFyD99ctL78A/s679/SubHarmonics%20in%20Action.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="617" data-original-width="679" height="364" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgaM_BXAFyzeKuJLzoP0YJ3vnQZ1nd_kCZwDmx0mEj1mbIi-udxE-C3ALSFuXK5kWjQ7XTWp52K4OvA5iSCFdX9UFRZeL5IaqKcgkI8D580MEJ_oDu9d4sjrMaCfdGEA69NKuiYpMYQVvoLXb4sGPaI-bgGNpzQFDptBbmbMmNft6s9fmiFyD99ctL78A/w400-h364/SubHarmonics%20in%20Action.png" width="400" /></a></div><br /><div>but it is even more fun using it.</div><div><br /></div><div>73</div><div>m0xpd<br /><p><br /></p><p><br /></p><p> </p></div>m0xpdhttp://www.blogger.com/profile/13241728975907453128noreply@blogger.com0tag:blogger.com,1999:blog-8044784353067686026.post-30341298769266113332023-04-24T11:08:00.001+01:002023-04-24T11:25:59.645+01:00EAGLE Toroid Library is Available (again)<p>Yesterday, after a request from Giannis in SV-land, I uploaded my EAGLE Library for inductors and transformers wound on FT37 and FT50 Toroidal Ferrite Cores to <a href="https://github.com/m0xpd/Toroid-Eagle-Library">a github repository</a>.</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgn0xxacSdZEalRPSEtinLBxF4WAqrqJBlTObx_Pi1jQkDEaczzfnrHfvm_ikltNboNqdTm1eE9F4iVsgGacFjQfwJvAISLSjcLiDBG9aQRzQbQWtgQfKI0auZq1c8W4lksNvO_t73GlIufqCBpg2DVHii5YMzn-UIln8rxVXrL2QPa984Mg2eDOS2mxQ/s1186/Toroid%20Library%20Image.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="836" data-original-width="1186" height="226" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgn0xxacSdZEalRPSEtinLBxF4WAqrqJBlTObx_Pi1jQkDEaczzfnrHfvm_ikltNboNqdTm1eE9F4iVsgGacFjQfwJvAISLSjcLiDBG9aQRzQbQWtgQfKI0auZq1c8W4lksNvO_t73GlIufqCBpg2DVHii5YMzn-UIln8rxVXrL2QPa984Mg2eDOS2mxQ/s320/Toroid%20Library%20Image.png" width="320" /></a></div><p>I <a href="http://m0xpd.blogspot.com/2009/12/toroid-library-for-eagle.html">had published this library many moons ago</a> to the CADSoft EAGLE Library page, but it no longer appears on the <a href="http://eagle.autodesk.com/eagle/libraries">Autodesk EAGLE Library collection</a>. Perhaps it got lost during the transfer of ownership of EAGLE or perhaps they just don't like my little library 😃</p><p>Whatever the reason, it is now online again and available for anybody to use.</p><p>The library was originally created and used in several of my projects, including the <a href="http://m0xpd.blogspot.com/2013/10/arduino-sudden-tx-shield-available-now.html">Tx</a> and <a href="http://m0xpd.blogspot.com/2015/04/si5351-shield-production-pcbs.html">Si5351</a> shields and has been successfully used by a number of others who have reason to play with these fundamental building blocks of practical RF circuits. </p><p>However, you should be careful before you use it. I have been burned by libraries from trusted sources and I would advise caution; you should check that it works in your application. Whilst it is offered in good faith, it comes with no warranties that it is suitable for any purpose!</p><p>Let me know if you have success with it,</p><p>73 de m0xpd</p>m0xpdhttp://www.blogger.com/profile/13241728975907453128noreply@blogger.com0tag:blogger.com,1999:blog-8044784353067686026.post-90727276429137076922023-04-13T17:38:00.001+01:002023-04-15T11:44:54.756+01:00VCAs and Old Dutch Masters<p> There's a saying out there, which is almost a truism:</p><p><span> </span>"you can never have too many VCAs".</p><p>Having some time on my hands today, I decided to knock up another of my takes on Yves Usson's <a href="http://yusynth.net/Modular/EN/VCA/index.html">'simple VCA' circuit,</a> which I have cast into Eurorack format. I made the VCA in an hour or so, with music ringing in my ears.</p><p>You can see the result in the pictures below, which show the front and back of the finished module as well as the PCB from the side which usually is obscured by the front panel.</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiEMU140nXfTJfFyNlaw4XU6PTTJf7l_3_h2yC1CyUREhz4ma6VGaY1b8Cvak6KXUxb5QTm1IpW0btZidb6Jgqepe7lnSfXJYAe3rT1D9XTIorbFp7un1vYUCyXa9-mmUUkgqmTmIyt1hpDd_YbBrOaSeylKqWhL00MBg94HgE5HM1OwV92c-F43J2ozg/s772/m0xpd%20VCA.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="554" data-original-width="772" height="230" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiEMU140nXfTJfFyNlaw4XU6PTTJf7l_3_h2yC1CyUREhz4ma6VGaY1b8Cvak6KXUxb5QTm1IpW0btZidb6Jgqepe7lnSfXJYAe3rT1D9XTIorbFp7un1vYUCyXa9-mmUUkgqmTmIyt1hpDd_YbBrOaSeylKqWhL00MBg94HgE5HM1OwV92c-F43J2ozg/s320/m0xpd%20VCA.png" width="320" /></a></div><p>My implementation pretty much follows Yves' words and music, only I drive each of the two outputs actively in order to use the last of the four op-amps in the quad package you see above. </p><p>Yves' circuit used a twin and a single op-amp and that's not very space efficient when you're squeezing chips onto a little board for Eurorack. I couldn't bear to see the last stage of my quad package sitting there doing nothing!</p><p>This is the fourth of these units I've made now (one is DC coupled, with linear controls, to use with CV signals) and they work like a charm. With the 4 other simpler CA3080-based VCAs already in my system (which were based on a <a href="http://musicfromouterspace.com/">MFOS</a> design), I may not have too many, but I'm getting by for now.</p><p>As I said, I was building today "with music ringing in my ears". I wasn't listening to music - it was the memory of last evening, when I went to a wonderful gig at <a href="https://themet.org.uk/">The Met</a>, Bury, to hear Dutch "prog-rock" (and - I would say - "fusion") legends, <a href="https://focustheband.co.uk/">FOCUS</a>, who are on their 50th anniversary tour. I have been a fan since the 1973 UK release of "<a href="https://en.wikipedia.org/wiki/Focus_II">Moving Waves</a>", so it's been 50 years for me too.</p><p>The band (who I've seen many times before) were superlative and the drummer, Pierre van der Linden, who played on that original album, was ON FIRE!</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiDo8C6hV3nhDY7uCguuzbJ4IW4-aaaewq4e8f1EhG80bV9IkC9hV967ihY34XGmFWpQPHeIcWM3hKz5rOOpXTQJ6sDr_mFdQFDszMX2wXYUY8xB1csaKHC5fO6YPjT841UrvN9t9qoQG_V2MZVbAhV7-nStHNtXQ1sR_YMeBQ5qHlMvM_VCGTpdk93wA/s4032/IMG_3345.HEIC" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="3024" data-original-width="4032" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiDo8C6hV3nhDY7uCguuzbJ4IW4-aaaewq4e8f1EhG80bV9IkC9hV967ihY34XGmFWpQPHeIcWM3hKz5rOOpXTQJ6sDr_mFdQFDszMX2wXYUY8xB1csaKHC5fO6YPjT841UrvN9t9qoQG_V2MZVbAhV7-nStHNtXQ1sR_YMeBQ5qHlMvM_VCGTpdk93wA/s320/IMG_3345.HEIC" width="320" /></a></div><br /><p>I was standing about six feet from another founder member, Thijs van Leer. Let's be clear - there was nothing synthetic last night - just real instruments. But the tonebars on Thijs' Hammond are often held up as an example of <a href="http://m0xpd.blogspot.com/2011/05/additive-fourier-synthesis.html">additive synthesis</a>.</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh6Y53gtdTANkQG7I10L0nEpCrtLzwMcQwuKPBRKsN6aMxuqtzH8Cj-uMviHM8_nqViqxccQNEFor1IUJ-YTSf0kXdBgI-CNEHuCbzjcxfi71TXb6fx1MqHTU6cnWNmykfk_javfmC8vjVCORSVanFz9IU4_O7PNrpl-XnKdR3kqCKG4WmFLw_Q-9NR0Q/s4032/IMG_3349.HEIC" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="3024" data-original-width="4032" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh6Y53gtdTANkQG7I10L0nEpCrtLzwMcQwuKPBRKsN6aMxuqtzH8Cj-uMviHM8_nqViqxccQNEFor1IUJ-YTSf0kXdBgI-CNEHuCbzjcxfi71TXb6fx1MqHTU6cnWNmykfk_javfmC8vjVCORSVanFz9IU4_O7PNrpl-XnKdR3kqCKG4WmFLw_Q-9NR0Q/s320/IMG_3349.HEIC" width="320" /></a></div><br /><p>Talking about tonebars, when the good people at <a href="https://jlcpcb.com/">JLCPCB</a> are finished with the pcb designs I sent them yesterday, I'll have something to say about adding and 'mixing' harmonics; watch this space.</p><p>I'm off to play with my new VCA and to revel in more music from "the most successful and the most appreciated of all the Dutch pop-rock exports" - and my favourite band of all time.</p><p>73<br />m0xpd</p><p><br /></p><h3 style="text-align: left;">UPDATE (15/04/23) :</h3><p>Design files for my Eurorack version of the YuSynth VCA </p><p><br /></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEgTHUbVImWBMcdT1kJ8BONexjvx6BRyG55M7tEuoi_7izfavogl_J1IrpLvbIjwUGGenKi4GCmj3eHzuxaX73slXoftibd7xS0xd1rvn2PALnI_-RBmuZdvmjgV11-VnH7rmH4lgw28Rs2cGLpiAxgfXW7_ir422w3PgG9J2dabMDv1BgRnocAU4Gc-xw" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="729" data-original-width="553" height="240" src="https://blogger.googleusercontent.com/img/a/AVvXsEgTHUbVImWBMcdT1kJ8BONexjvx6BRyG55M7tEuoi_7izfavogl_J1IrpLvbIjwUGGenKi4GCmj3eHzuxaX73slXoftibd7xS0xd1rvn2PALnI_-RBmuZdvmjgV11-VnH7rmH4lgw28Rs2cGLpiAxgfXW7_ir422w3PgG9J2dabMDv1BgRnocAU4Gc-xw" width="182" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><p></p><p>have now been published on my <a href="https://github.com/m0xpd/YuSynth-VCA-for-Eurorack">github</a>.</p><p><br /><br /></p><p> </p>m0xpdhttp://www.blogger.com/profile/13241728975907453128noreply@blogger.com0tag:blogger.com,1999:blog-8044784353067686026.post-11025867508193812862023-03-28T18:00:00.004+01:002023-05-03T16:53:52.943+01:00Logic Gates and a Modulation Curiosity<p>Recently I added some logic gates to my synthesiser. Not the familiar little chips we know and love</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgwzQgyt8vn9twzsBWI8TJpXk_GNKdS3vHDsGmbIBLdTjkctJPSW7N7FJoSgGTALDvjyx33p-JjbJQOeR1W6um8WZEEnAec5liM8d4LCoUzwMS8qzarCBUMg7v6rKVP0OKKyo4U5AGTrOqKUlM5PwbqgJE4RXmM5qsFPg9z3K-x-Sx2iA2m1Z4wTFUxlA/s4032/Logic%20Chips.HEIC" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="3024" data-original-width="4032" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgwzQgyt8vn9twzsBWI8TJpXk_GNKdS3vHDsGmbIBLdTjkctJPSW7N7FJoSgGTALDvjyx33p-JjbJQOeR1W6um8WZEEnAec5liM8d4LCoUzwMS8qzarCBUMg7v6rKVP0OKKyo4U5AGTrOqKUlM5PwbqgJE4RXmM5qsFPg9z3K-x-Sx2iA2m1Z4wTFUxlA/w320-h240/Logic%20Chips.HEIC" width="320" /></a></div><p></p><p>rather, logic gates especially for musical application.</p><p>I’ve had an OR gate in my synth from the early days, finding it useful for combining trigger signals from my sequencer to build up drum patterns, etc. Originally, I used the simplest diode-based OR gate designs, such as that as seen on the <a href="https://doepfer.de/DIY/a100_diy.htm">Doepfer DIY page</a>. Subsequently, I augmented this with a level converter, to allow the OR gate to trigger those modules requiring high voltage signals (I still have some old <a href="http://musicfromouterspace.com/">MFOS</a> modules expecting 10V) even when the sources were putting out timid 5V pulses from a microcontroller. I exploited the same old level converter circuit I’ve used and abused <a href="2) http://m0xpd.blogspot.com/2010/10/beacon-dds.html">many times before</a>. </p><p>This original OR gate worked but wasn’t everything I wanted, so I started to toy with a new design and realised it was easy to conceive of an AND sibling for my new OR gate, as they shared many common features. </p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEipwwJNi3MyaRgh4BDzTDqym-5Yzjmwhqn6jmzV5FZGGFv3nKf90F6Ksc11fvsq3xmGLafEqQ9Cb8zUjVtVxWxrua3jXyxTyUwp9v56TS05whcexbdKPFPIglWOCabnJGn3Lqxyp-yjk10MAQlF7NF7Ljgr0ZDtEYANZ-FfeeV5xZvRcmJZIeYmHduFug/s3338/m0xpd%20Logic%20Gates.HEIC" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="3338" data-original-width="1627" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEipwwJNi3MyaRgh4BDzTDqym-5Yzjmwhqn6jmzV5FZGGFv3nKf90F6Ksc11fvsq3xmGLafEqQ9Cb8zUjVtVxWxrua3jXyxTyUwp9v56TS05whcexbdKPFPIglWOCabnJGn3Lqxyp-yjk10MAQlF7NF7Ljgr0ZDtEYANZ-FfeeV5xZvRcmJZIeYmHduFug/s320/m0xpd%20Logic%20Gates.HEIC" width="156" /></a></div><div class="separator" style="clear: both; text-align: left;"><div class="separator" style="clear: both;"><br /></div><div class="separator" style="clear: both;">My new 4HP logic gates, some of which are seen above, have inputs which are normalled such that you can use fewer than the four available, as occasion demands. </div><div class="separator" style="clear: both;"><br /></div><div class="separator" style="clear: both;">The modules use the ‘comparator’ structure familiar from the input stage of Ken Stone’s ‘<a href="https://www.elby-designs.com/webtek/cgs/cgs39/cgs39_quad_gate.html">quad logic gate</a>’, in which any input exceeding a voltage of approximately 2 volts is associated with the logic value ‘true’ and voltages lower than this threshold are associated with the complement ‘false’. Thereafter the logic operators AND and OR in my design are implemented using diodes. The output stage is a conventional complementary BJT driver, outputting a signal of 0V (‘false’) or approx. 10V (‘true’), such that the modules also operate as gate level converters when there is only one input. </div><div class="separator" style="clear: both;"><br /></div><div class="separator" style="clear: both;">Needless to say, they work; the OR gate combines gate and trigger signals as expected and the AND gate gives me new opportunities to create rhythms (e.g. by putting a quaver trigger sequence into one input and putting random or asynchronous periodic signals into the other inputs, to generate a complex or random pattern of onsets on the quaver beats). However, let’s present some evidence before we go any further. </div><div class="separator" style="clear: both;"><br /></div><div class="separator" style="clear: both;">Here’s a screenshot of the ‘scope showing two square waves going into inputs of one of my AND gates.</div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEimpUkGgmLocPkEnD9Wkg386pXI9T32OMIncVGPtHpDJJkz8vfsllWUiBPB_R1LZcOvUzd2yUVsen_M3HdspmhjUvcW41P8HcnCsoupr619Gn6op1JXr84qhWMRgD9eeu8m1i6KlkdojqPmRmEhl7zBlWwjxx4NbvE1_uJxTRJN9nJEdfazYH2kY_uw0w/s4032/Scope%20AND.HEIC" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="3024" data-original-width="4032" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEimpUkGgmLocPkEnD9Wkg386pXI9T32OMIncVGPtHpDJJkz8vfsllWUiBPB_R1LZcOvUzd2yUVsen_M3HdspmhjUvcW41P8HcnCsoupr619Gn6op1JXr84qhWMRgD9eeu8m1i6KlkdojqPmRmEhl7zBlWwjxx4NbvE1_uJxTRJN9nJEdfazYH2kY_uw0w/s320/Scope%20AND.HEIC" width="320" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: center;"><b>New AND Module operating on two square waves at 2:1 frequency ratio</b></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: left;">The top two traces are the inputs and the bottom trace is the output. The square wave signals are coming from two of my CEM 3340 oscillators and (as seen above) they are tuned an octave apart (i.e. a 2:1 frequency ratio apart). The fundamental frequency was a little over 50Hz (by chance). These 3340 oscillators (which are based on the <a href="http://www.digisound80.co.uk/digisound/modules/80-2.htm">Digisound 80 VCO</a> design) usefully produce a pulse output which is at 0V and 10V). The output is seen to successfully implement the AND of the two inputs. </div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">To be honest, it was difficult to tune the oscillators to achieve the image above. Getting the 2:1 frequency ratio was easy enough; I could do it by ear and I could back it up by locking the oscillators using their sync capability. BUT, setting the PWM to get a 50% duty cycle on both signals was not nearly so easy. More of this later…</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">For convenience in grabbing images (particularly as I haven't got round to hooking up the scope to my computer, which is now a MacBook - Rigol's offering is for Windoze) I decided to connect the arrangement to a simple Chinese ‘logic analyser’, which has an HC245 input (capable only of handling 6V). As the signals already were overtopping this 6V limit, I had to make some limiters before I could hook up the logic analyser, but these were just a series resistor and a diode (to 5V) per channel, so it was no great shake. </div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">Here's the toy logic analyser and the limiters on the bench:</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjxAB1KbR-0uuz2j9mK8s9Uv4G0MWDmidgGWgzL8V2D57NlDuxsLc5lm6HxSoBOuFEKXaSmW9LOaR3gdXS2JNa9eNBRNLIdFDf6S6_dUSpil-g8_ki4baKtT0IzvgZhox2yDf803aUyKKOeyy6q_fIQyD9yenFxY1FxhWyfe_gXmT_5FxpvuQ3cldfjbw/s4032/Logic%20Analyser.HEIC" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="3024" data-original-width="4032" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjxAB1KbR-0uuz2j9mK8s9Uv4G0MWDmidgGWgzL8V2D57NlDuxsLc5lm6HxSoBOuFEKXaSmW9LOaR3gdXS2JNa9eNBRNLIdFDf6S6_dUSpil-g8_ki4baKtT0IzvgZhox2yDf803aUyKKOeyy6q_fIQyD9yenFxY1FxhWyfe_gXmT_5FxpvuQ3cldfjbw/s320/Logic%20Analyser.HEIC" width="320" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">Here is a screenshot from the USB interface (using Sigrok’s ‘<a href="https://sigrok.org/wiki/PulseView">PulseView</a>’ software) of the same AND function as that seen on the ‘scope screen (captured at the same time, but without the hassle of photography):</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEikclXQ8hI3sYyae-vV-6YAslTozFpl2Sgp7_7qzuaak4UUFJnB_3LJ9X6AGBFAimGNMbC_5Ep_iZMTWuB0ztmUF2Tty6e-1Kpk3p9F3akftRR6m22PjDBf9vh_G44BqX50fBnXa_R6Vi4dIaO5aRJmdGb9gXlDGOZZD8oFNcqqEWs8s0vRNog_ILoPkA/s1253/AND%20PulseView.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="146" data-original-width="1253" height="74" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEikclXQ8hI3sYyae-vV-6YAslTozFpl2Sgp7_7qzuaak4UUFJnB_3LJ9X6AGBFAimGNMbC_5Ep_iZMTWuB0ztmUF2Tty6e-1Kpk3p9F3akftRR6m22PjDBf9vh_G44BqX50fBnXa_R6Vi4dIaO5aRJmdGb9gXlDGOZZD8oFNcqqEWs8s0vRNog_ILoPkA/w640-h74/AND%20PulseView.png" width="640" /></a></div><div class="separator" style="clear: both; text-align: center;"><b>Figure 1<span> </span> AND of Square Waves recorded in PulseView, Ta=4, Tb=2 </b></div><br /><div><br /></div><div>Now we can turn our attention to the new OR gate, fed by the same square waves. This produced the expected image on PulseView:</div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJyt_Va4hV6u23r6NDgqtcoqO96U8kNH546DDBL7ba9WsWXOR1PmZjUmdTnlkMmQX585Oqvyjz3e0h9Ok8rJYCtAp3HyQoyp_pzMpzi90CFtMNboTxPbXRpgquB6JzQ_FHY8nw78wRTPLPn2eRG2jkecjy9zcHg2NurDpz7-8kWhErjIknm5t7lkabTg/s1247/OR%20PulseView.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="143" data-original-width="1247" height="74" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJyt_Va4hV6u23r6NDgqtcoqO96U8kNH546DDBL7ba9WsWXOR1PmZjUmdTnlkMmQX585Oqvyjz3e0h9Ok8rJYCtAp3HyQoyp_pzMpzi90CFtMNboTxPbXRpgquB6JzQ_FHY8nw78wRTPLPn2eRG2jkecjy9zcHg2NurDpz7-8kWhErjIknm5t7lkabTg/w640-h74/OR%20PulseView.png" width="640" /></a></div><div style="text-align: center;"><b>Figure 2 OR of Square Waves recorded in PulseView, Ta=4, Tb=2 </b></div><div><br /></div><div><div>Having tried all the obvious and familiar things with my new logic gates (like OR-ing drum triggers together and generating interesting patterns with the new opportunities presented by my AND gate), I couldn’t resist sticking some audio frequency signals through them and listening to modulation effects. It produced some surprises…</div><div><br /></div><h3 style="text-align: left;">Some observations on modulation</h3><div>Just as in the demonstrations reported above, I put square waves into two inputs of the OR and AND gates, but at somewhat higher frequencies. I then listened to the resulting output signals. </div><div><br /></div><div>I knew what to expect for the AND gate (because the AND function is a switching operation, closely related to multiplication, as we’ll see), but I had less of an intuition for the OR gate. </div><div><br /></div><div>I wasn’t too surprised to find that the outputs of the OR and AND gates sounded different when fed by the same pair of square waves, but I decided to do some poking around with some simple maths to explore what was going on – then the surprises really started. </div><div><br /></div><div>I ended up falling down a terribly deep rabbit hole, where strange symmetries inherent in musical intervals could make AND gates behave like OR gates, especially when seen "through the looking glass", whose reflections mirror and reverse words and images. </div><div><br /></div><div>All the stranger, since these logical entities had fascinated one <a href="https://en.wikipedia.org/wiki/Lewis_Carroll">Charles Lutwidge Dodgson</a>, who was born and grew up in<a href="https://en.wikipedia.org/wiki/Daresbury"> Daresbury</a> (where I <a href="https://en.wikipedia.org/wiki/Sci-Tech_Daresbury">worked</a> for the greater part of the last 20 years), wrote an interesting <a href="https://archive.org/details/gameoflogic00carrrich/page/n9/mode/2up">little book on logic</a>, took suspicious interest in pre-pubescent girls, and became world famous for writing books about falling down holes into wonderland.</div><div><br /></div><div>To help me navigate my own wonderland, I wrote a simple piece of code in <a href="https://octave.org/">Octave</a>.</div></div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjfMmYpMpkuNzvPixEhRL4_gxUcnXs9tpcuwS58bR-vQowx4KpNQsgnAyJJBBVCqj2jvFXEvNj1uOl61yEizmcjY479GKSRldCN1hsqleYI0FyZCVX_7Z6fjFUhvoRde4WhEiRsVwHUjjD9vtw3TnWJjnDkfcDrq4_rbFuYLDO_jbFJ1ufvqSUxepdPyw/s1024/Gnu-octave-logo.svg.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1024" data-original-width="1024" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjfMmYpMpkuNzvPixEhRL4_gxUcnXs9tpcuwS58bR-vQowx4KpNQsgnAyJJBBVCqj2jvFXEvNj1uOl61yEizmcjY479GKSRldCN1hsqleYI0FyZCVX_7Z6fjFUhvoRde4WhEiRsVwHUjjD9vtw3TnWJjnDkfcDrq4_rbFuYLDO_jbFJ1ufvqSUxepdPyw/w200-h200/Gnu-octave-logo.svg.png" width="200" /></a></div><div class="separator" style="clear: both; text-align: left;"><div class="separator" style="clear: both;"><br /></div><div class="separator" style="clear: both;">Octave is a Scientific Programming Language which is effectively an open-source equivalent of <a href="https://uk.mathworks.com/products/matlab-home.html">MATLAB</a>. I’ve lived my professional life depending on MATLAB and the idea of life without it (now I’m retired) is slightly depressing, made bearable by the presence of Octave. In its latest form (I’m running 8.1.0 on my MacBook) – with <a href="https://gnu-octave.github.io/packages/">additional packages</a> to do all the important things like signal processing (which I’ve been exploiting in what follows) - I can get by without the even more depressing prospect of shelling out £105 per year for a home license for MATLAB (plus £29 for packages). I can’t claim poverty, but I can confirm that my reputation as a cheapskate is showing no signs of wearing off.</div><div class="separator" style="clear: both;"><br /></div><div class="separator" style="clear: both;">Here is the core of the code I’ve been using to look at the effects of two square waves being thrown at various kinds of ‘logical’ modulators:</div><div class="separator" style="clear: both;"><br /></div></div></div><blockquote style="border: none; margin: 0px 0px 0px 40px; padding: 0px; text-align: left;"><div class="separator" style="clear: both; text-align: left;"><div class="separator" style="clear: both; text-align: left;"><div class="separator" style="clear: both;"><div class="separator" style="clear: both;"><span style="color: #04ff00; font-family: courier; font-size: small;">% Specify the Periods of the two squarewaves:</span></div></div></div></div><div class="separator" style="clear: both; text-align: left;"><div class="separator" style="clear: both; text-align: center;"><div class="separator" style="clear: both; text-align: left;"><span style="font-family: courier; font-size: x-small;">Ta=10;</span></div></div></div><div class="separator" style="clear: both; text-align: left;"><div class="separator" style="clear: both; text-align: center;"><div class="separator" style="clear: both; text-align: left;"><span style="font-family: courier; font-size: x-small;">Tb=12;</span></div></div></div><div class="separator" style="clear: both; text-align: left;"><div class="separator" style="clear: both; text-align: center;"><div class="separator" style="clear: both; text-align: left;"><span style="color: #04ff00; font-family: courier; font-size: x-small;">% Specify the duty cycles of the two squarewaves:</span></div></div></div><div class="separator" style="clear: both; text-align: left;"><div class="separator" style="clear: both; text-align: center;"><div class="separator" style="clear: both; text-align: left;"><span style="font-family: courier; font-size: x-small;">DUTYa=50;</span></div></div></div><div class="separator" style="clear: both; text-align: left;"><div class="separator" style="clear: both; text-align: center;"><div class="separator" style="clear: both; text-align: left;"><span style="font-family: courier; font-size: x-small;">DUTYb=50;</span></div></div></div><div class="separator" style="clear: both; text-align: left;"><div class="separator" style="clear: both; text-align: center;"><div class="separator" style="clear: both; text-align: left;"><span style="color: #04ff00; font-family: courier; font-size: x-small;">% Calculate the normalised frequencies of the two squarewaves:</span></div></div></div><div class="separator" style="clear: both; text-align: left;"><div class="separator" style="clear: both; text-align: center;"><div class="separator" style="clear: both; text-align: left;"><span style="font-family: courier; font-size: x-small;">fa=1/Ta-eps;</span></div></div></div><div class="separator" style="clear: both; text-align: left;"><div class="separator" style="clear: both; text-align: center;"><div class="separator" style="clear: both; text-align: left;"><span style="font-family: courier; font-size: x-small;">fb=1/Tb-eps;</span></div></div></div><div class="separator" style="clear: both; text-align: left;"><div class="separator" style="clear: both; text-align: center;"><div class="separator" style="clear: both; text-align: left;"><span style="color: #04ff00; font-family: courier; font-size: x-small;">% Generate a time vector:</span></div></div></div><div class="separator" style="clear: both; text-align: left;"><div class="separator" style="clear: both; text-align: center;"><div class="separator" style="clear: both; text-align: left;"><span style="font-family: courier; font-size: x-small;">tmax=1000;</span></div></div></div><div class="separator" style="clear: both; text-align: left;"><div class="separator" style="clear: both; text-align: center;"><div class="separator" style="clear: both; text-align: left;"><span style="font-family: courier; font-size: x-small;">t=[0:tmax];</span></div></div></div><div class="separator" style="clear: both; text-align: left;"><div class="separator" style="clear: both; text-align: center;"><div class="separator" style="clear: both; text-align: left;"><span style="color: #04ff00; font-family: courier; font-size: x-small;">% build the squarewaves:</span></div></div></div><div class="separator" style="clear: both; text-align: left;"><div class="separator" style="clear: both; text-align: center;"><div class="separator" style="clear: both; text-align: left;"><span style="font-family: courier; font-size: x-small;">a=(square(fa*2*pi*t,DUTYa)+1)/2;</span></div></div></div><div class="separator" style="clear: both; text-align: left;"><div class="separator" style="clear: both; text-align: center;"><div class="separator" style="clear: both; text-align: left;"><span style="font-family: courier; font-size: x-small;">b=(square(fb*2*pi*t,DUTYb)+1)/2;</span></div></div></div><div class="separator" style="clear: both; text-align: left;"><div class="separator" style="clear: both; text-align: center;"><div class="separator" style="clear: both; text-align: left;"><span style="color: #04ff00; font-family: courier; font-size: x-small;">% apply the logic:</span></div></div></div><div class="separator" style="clear: both; text-align: left;"><div class="separator" style="clear: both; text-align: center;"><div class="separator" style="clear: both; text-align: left;"><span style="font-family: courier; font-size: x-small;">c=and(a,b);</span></div></div></div><div class="separator" style="clear: both; text-align: left;"><div class="separator" style="clear: both; text-align: center;"><div class="separator" style="clear: both; text-align: left;"><span style="font-family: courier; font-size: x-small;">d=or(a,b);</span></div></div></div><div class="separator" style="clear: both; text-align: left;"><div class="separator" style="clear: both; text-align: center;"><div class="separator" style="clear: both; text-align: left;"><span style="font-family: courier; font-size: x-small;">e=xor(a,b);</span></div></div></div><div class="separator" style="clear: both; text-align: left;"><div class="separator" style="clear: both; text-align: center;"><div class="separator" style="clear: both; text-align: left;"><span style="color: #04ff00; font-family: courier; font-size: x-small;">% Now look at the result in the Frequency Domain:</span></div></div></div><div class="separator" style="clear: both; text-align: left;"><div class="separator" style="clear: both; text-align: center;"><div class="separator" style="clear: both; text-align: left;"><span style="color: #04ff00; font-family: courier; font-size: x-small;">% build a window:</span></div></div></div><div class="separator" style="clear: both; text-align: left;"><div class="separator" style="clear: both; text-align: center;"><div class="separator" style="clear: both; text-align: left;"><span style="font-family: courier; font-size: x-small;">w=window(@blackman,length(a)).';</span></div></div></div><div class="separator" style="clear: both; text-align: left;"><div class="separator" style="clear: both; text-align: center;"><div class="separator" style="clear: both; text-align: left;"><span style="color: #04ff00; font-family: courier; font-size: x-small;">% and calculate the FTs</span></div></div></div><div class="separator" style="clear: both; text-align: left;"><div class="separator" style="clear: both; text-align: center;"><div class="separator" style="clear: both; text-align: left;"><span style="font-family: courier; font-size: x-small;">A=fft(w.*a);</span></div></div></div><div class="separator" style="clear: both; text-align: left;"><div class="separator" style="clear: both; text-align: center;"><div class="separator" style="clear: both; text-align: left;"><span style="font-family: courier; font-size: x-small;">B=fft(w.*b);</span></div></div></div><div class="separator" style="clear: both; text-align: left;"><div class="separator" style="clear: both; text-align: center;"><div class="separator" style="clear: both; text-align: left;"><span style="font-family: courier; font-size: x-small;">C=fft(w.*c);</span></div></div></div><div class="separator" style="clear: both; text-align: left;"><div class="separator" style="clear: both; text-align: center;"><div class="separator" style="clear: both; text-align: left;"><span style="font-family: courier; font-size: x-small;">D=fft(w.*d);</span></div></div></div><div class="separator" style="clear: both; text-align: left;"><div class="separator" style="clear: both; text-align: center;"><div class="separator" style="clear: both; text-align: left;"><span style="font-family: courier; font-size: x-small;">E=fft(w.*e);</span></div></div></div></blockquote><div class="separator" style="clear: both; text-align: left;"><br /><div><div>You will see that I’ve set up a system to play with two rectangular waves, ‘a’ and ‘b’, which are the inputs to logic operators, interpreted as modulators. The modulators produce the signal 'c' (which is the result of passing 'a' and 'b ' through the AND operation). Similarly, variable 'd' is the output of the OR operation and 'e' is the result of XOR. The waves ‘a’ and ‘b’ are easily related in period (/frequency) by the ratio of small integers (through the variables ‘Ta’ and ‘Tb’, although non-integer values can be entered here) and the duty cycle of the waves can also be directly controlled (through variables ‘DUTYa’ and ‘DUTYb’); the waves become truly 'square' when DUTYx=50. The code also windows the time-domain signals and computes Fourier Transforms.</div><div><br /></div><div>Here's an example of running that code, seen first by looking at time-domain results.</div></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEivejVTLGKT1K2ssCUJ2He3qHoqeFEOUbMmWAI40B5QgIXrh1DMgNrN28DXtlfMCFYFN5-LFpSzfPpziDODsIYVsqRps82FJefO0KUjMMpiXQYyL6c1C9DtjmkI1mQwlpK-my-_RExT7B5AmP3lJvAWdYdPks7bZdeTE3D1ykLjPZqZiHGkYtrK7gZ0BQ/s945/Fig%203.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="945" data-original-width="791" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEivejVTLGKT1K2ssCUJ2He3qHoqeFEOUbMmWAI40B5QgIXrh1DMgNrN28DXtlfMCFYFN5-LFpSzfPpziDODsIYVsqRps82FJefO0KUjMMpiXQYyL6c1C9DtjmkI1mQwlpK-my-_RExT7B5AmP3lJvAWdYdPks7bZdeTE3D1ykLjPZqZiHGkYtrK7gZ0BQ/w335-h400/Fig%203.png" width="335" /></a></div><div class="separator" style="clear: both; text-align: center;"><b>Figure 3: Square Waves a, b, (Ta = 8, Tb = 10) modulated by AND and OR gates</b></div><br /><div class="separator" style="clear: both; text-align: center;"><div class="separator" style="clear: both; text-align: left;">The traces above in Fig 3 show 1000 samples of the two square waves 'a' and 'b' and the consequences of applying them to two logic gate modulators. The first is the AND gate (indicated by the expression ‘a^b’, where ∧ denotes logical conjunction, the operation for which ‘AND’ is the operator). The second is the OR gate (indicated by the expression 'a∨b', where ∨ denotes logical disjunction, the operation for which OR is the operator). These are models of passing the two signals, ‘a’ and ‘b’ through my new AND and OR gates.</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">Also seen (in red) in Figure 3 is the consequence of applying a (Blackman) window to the input and output signals. We need these windowed signals, because next we’re going to look at the signals in the Frequency Domain and we want to avoid smearing the energy to frequencies where it doesn’t really belong.</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">Here’s the same data in the frequency domain:</div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjm8pw8cXEljaL5cyw5moN69gCCthJ46xLLzsBe8zIN8xNalK4GVrr7FaxJfPeVWyJkr98h4rZr2WSy1XgIsY4IoTC-eHddnVElrTn6uqCb_dTtxDSYHaPqXY308MTf9X1kQvZXB523BA7KSGxuUuxlCfYzkkqmSBg4xbOmW2DdIi8SQIYITVnsQaMD6w/s927/Fig%204.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="927" data-original-width="771" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjm8pw8cXEljaL5cyw5moN69gCCthJ46xLLzsBe8zIN8xNalK4GVrr7FaxJfPeVWyJkr98h4rZr2WSy1XgIsY4IoTC-eHddnVElrTn6uqCb_dTtxDSYHaPqXY308MTf9X1kQvZXB523BA7KSGxuUuxlCfYzkkqmSBg4xbOmW2DdIi8SQIYITVnsQaMD6w/w333-h400/Fig%204.png" width="333" /></a></div><div class="separator" style="clear: both; text-align: center;"><b>Figure 4: Magnitude Spectra of Square Waves a, b, (Ta = 8, Tb = 10) </b></div><div class="separator" style="clear: both; text-align: center;"><b>modulated by AND and OR gates</b></div><div><br /><div class="separator" style="clear: both; text-align: left;">Figure 4 represents the same signals seen in Figure 3 (the uppercase variable names denote frequency-domain versions of the lowercase time domain entities). The plots within Figure 4 are parts of the magnitude Fourier Transforms of the time sequences in Figure 3, plotted on a log (dB) scale against normalised frequency, <i>f</i>n, (running from <i>f</i>n = 0 to the <a href="https://en.wikipedia.org/wiki/Nyquist_frequency">Nyquist Frequency</a>, <i>f</i>n = 0.5).</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">This is, in many ways, expected; modulating the two signals should generate a new sequence having a fundamental at the difference frequency between the fundamentals of A and B – which it does. But it is also unexpected.</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">This is the result I saw when I first ran this code and in one particular way it is STAGGERING. It appears to say that the (magnitude) spectrum of the output of the AND gate and the OR gate, when fed by the square waves as described, should be identical. </div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">Let’s just check that by over-laying the bottom two traces on an enlarged single plot, just to be sure…</div></div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiq50KsUzCnqZKzJHUMRuPf1QG1Srf_2S50VX1AGEkUxNyt8CXm9kJ7zXQa_uavDbygTqCVMmn_hzVcXd2u3Sxogj2JqyDgBq3TIF_Zf0wVZnTmWvEBBbhC_7_6VU6mFEPY_SKu8gQ0Yej5y6DiWWli5GP6P_q4HLWIvW2hkQahZN3LaJq5P1m-gi8_Qw/s1018/Fig%205.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="661" data-original-width="1018" height="260" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiq50KsUzCnqZKzJHUMRuPf1QG1Srf_2S50VX1AGEkUxNyt8CXm9kJ7zXQa_uavDbygTqCVMmn_hzVcXd2u3Sxogj2JqyDgBq3TIF_Zf0wVZnTmWvEBBbhC_7_6VU6mFEPY_SKu8gQ0Yej5y6DiWWli5GP6P_q4HLWIvW2hkQahZN3LaJq5P1m-gi8_Qw/w400-h260/Fig%205.png" width="400" /></a></div><div class="separator" style="clear: both; text-align: center;"><b>Figure 5: Comparison of the Magnitude Spectra of the outputs of the AND and OR gates</b></div><div class="separator" style="clear: both; text-align: center;"><b>when fed by Square Waves a, b, (Ta = 8, Tb = 10) </b></div><br /><div class="separator" style="clear: both; text-align: left;"><div class="separator" style="clear: both;">Yes – identical except for one place – zero frequency, <i>f</i>n = 0 (d.c. as electrical engineers call it).</div><div class="separator" style="clear: both;"><br /></div><div class="separator" style="clear: both;">This is crazy – when I listened to the output of my AND and OR gates, they certainly didn’t sound the same.</div><div class="separator" style="clear: both;"><br /></div><div class="separator" style="clear: both;">So I went back to the synth and made sure they were tuned this way (Tb = 1.25Ta). They were – but the outputs of the two gates STILL didn’t sound the same. Then I decided to check the only thing that could be different – the duty cycles.</div><div class="separator" style="clear: both;"><br /></div><div class="separator" style="clear: both;">I found that the duty wasn’t exactly 50% when the PWM control on my oscillators was centralized.</div><div class="separator" style="clear: both;"><br /></div><div class="separator" style="clear: both;"><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi-I_HXLd21OS9FjZ8ifm5suVyQSaA54-QXBm9AQAzCH8_IZ8OfvOXqg0Tgd3hxv6zxmt0eyldo8fRJyMV3yDfxnRa7ERwevchA47axKacP0zjIK5YzY4-Ay_oem0QOy8iPA7e3mt0kjKHwgHLjzHerIK7UdDtY2dO-h1PiDwCnvlNHvRL6nNV9nl1JUA/s2387/m0xpd%203340%20VCO.HEIC" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1280" data-original-width="2387" height="108" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi-I_HXLd21OS9FjZ8ifm5suVyQSaA54-QXBm9AQAzCH8_IZ8OfvOXqg0Tgd3hxv6zxmt0eyldo8fRJyMV3yDfxnRa7ERwevchA47axKacP0zjIK5YzY4-Ay_oem0QOy8iPA7e3mt0kjKHwgHLjzHerIK7UdDtY2dO-h1PiDwCnvlNHvRL6nNV9nl1JUA/w200-h108/m0xpd%203340%20VCO.HEIC" width="200" /></a></div><div class="separator" style="clear: both;"><br /></div><br />So I set the duty cycle of both pulse outputs as best I could to 50% and – yes – the sound of the OR and AND gate modulating the same pair of square waves suddenly sounded similar – just as the code predicted. <b><span style="color: red;">The outputs of the AND and the OR modulators sounded the same!!</span></b></div><div class="separator" style="clear: both;"><br /></div><div class="separator" style="clear: both;">I went back to the code and checked the sensitivity of the system to the ‘DUTYx’ variables. Sure enough, when the DUTY of either or both square waves changes, the spectra of the outputs of the AND and OR modulators diverge. </div><div class="separator" style="clear: both;"><br /></div><div class="separator" style="clear: both;">Here’s the overlay of the two spectra when DUTYa = DUTYb = 40%</div><div class="separator" style="clear: both;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6O_r20zSv6VWAAKA_HWB0zmADp7kzr8IUfJz-WCeSR0nrvUCHTEhBv11UQQQqn2qwQS9shPcwx8dtHXMLvN6fJCVGRi0hVfg6nw0reh6xth-O3sf4NmbzVQizyUXWVxFiZMj98vd-AQGJqCHlLoCni8goWunpHofwJ6Atx68DwpVBP6yjh5v97PW-mA/s1155/Fig%206.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="767" data-original-width="1155" height="266" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6O_r20zSv6VWAAKA_HWB0zmADp7kzr8IUfJz-WCeSR0nrvUCHTEhBv11UQQQqn2qwQS9shPcwx8dtHXMLvN6fJCVGRi0hVfg6nw0reh6xth-O3sf4NmbzVQizyUXWVxFiZMj98vd-AQGJqCHlLoCni8goWunpHofwJ6Atx68DwpVBP6yjh5v97PW-mA/w400-h266/Fig%206.png" width="400" /></a></div><div class="separator" style="clear: both; text-align: center;"><div class="separator" style="clear: both;"><b>Figure 6: Comparison of the Magnitude Spectra of the outputs of the AND and OR gates</b></div><div class="separator" style="clear: both;"><b>when fed by Rectangular Waves a, b, (Ta = 8, Tb = 10, DUTYa = DUTYb = 40) </b></div></div><br /><div class="separator" style="clear: both;"><div class="separator" style="clear: both;">Hopefully Figure 6 shows up well enough to allow you to see there are several spectral peaks with more than 4dB difference between the spectra of the two sequences – easily enough to make them sound significantly different. </div><div class="separator" style="clear: both;"><br /></div><div class="separator" style="clear: both;">Let’s summarise here – </div></div></div></div></div><blockquote style="border: none; margin: 0px 0px 0px 40px; padding: 0px; text-align: left;"><div class="separator" style="clear: both; text-align: left;"><div class="separator" style="clear: both; text-align: center;"><div class="separator" style="clear: both; text-align: left;"><div class="separator" style="clear: both;"><div class="separator" style="clear: both;">* the result of modulating two rectangular signals by an AND gate sounds different to the result of modulating the same pair of rectangular signals by an OR gate (no surprise) <i>but</i> </div></div></div></div></div><div class="separator" style="clear: both; text-align: left;"><div class="separator" style="clear: both; text-align: center;"><div class="separator" style="clear: both; text-align: left;"><div class="separator" style="clear: both;"><div class="separator" style="clear: both;">* there are special circumstances (in the case of SQUARE waves with truly 50% duty cycle), where modulation by AND and OR produces the same magnitude spectrum (apart from the d.c. term).</div></div></div></div></div></blockquote><div class="separator" style="clear: both; text-align: left;"><div class="separator" style="clear: both; text-align: center;"><div class="separator" style="clear: both; text-align: left;"><div class="separator" style="clear: both;"><div class="separator" style="clear: both;"><br /></div><div class="separator" style="clear: both;">This remains of surprise and interest and is worthy of more comment and consideration. </div><div class="separator" style="clear: both;"><br /></div><div class="separator" style="clear: both;">In order to understand the significance of the ‘equal magnitude spectra’ observed above, we might ask: What does it mean when two periodic signals have the same magnitude spectrum?</div><div class="separator" style="clear: both;"><br /></div><div class="separator" style="clear: both;">Well, for signals generated by a physical process (as opposed to something contrived), it is likely that: </div><div class="separator" style="clear: both;">•<span style="white-space: pre;"> </span>one signal is a delayed (time-shifted) version of the other and/or <span style="white-space: pre;"> </span>(1.1)</div><div class="separator" style="clear: both;">•<span style="white-space: pre;"> </span>a time-reversed version of the other<span style="white-space: pre;"> <span> </span><span> </span><span> </span><span> </span></span>(1.2)</div><div class="separator" style="clear: both;"><br /></div></div></div></div></div><blockquote style="border: none; margin: 0px 0px 0px 40px; padding: 0px;"><div class="separator" style="clear: both; text-align: left;"><div class="separator" style="clear: both; text-align: center;"><div class="separator" style="clear: both; text-align: left;"><div class="separator" style="clear: both;"><div class="separator" style="clear: both; text-align: left;">[because these (1.1 and 1.2) will only change the phase component of the spectral peaks associated with the harmonics of the periodic signal – not their magnitude, and will not change the peak at d.c (<i>f</i>n = 0)]</div></div></div></div></div></blockquote><div class="separator" style="clear: both; text-align: left;"><div class="separator" style="clear: both; text-align: center;"><div class="separator" style="clear: both; text-align: left;"><div class="separator" style="clear: both;"><div class="separator" style="clear: both;"> </div><div class="separator" style="clear: both;">Then, inspired by what we’ve seen of the case of the outputs of the AND and OR modulators (whose output magnitude spectra in special circumstances differed only at d.c.), we might further ask: </div><div class="separator" style="clear: both;"><br /></div><div class="separator" style="clear: both;">What does it mean when two periodic signals have magnitude spectra which differ only in their d.c. component?</div><div class="separator" style="clear: both;"><br /></div><div class="separator" style="clear: both;">This might mean that one of the signals has:</div><div class="separator" style="clear: both;">•<span style="white-space: pre;"> </span>been shifted in mean value and/or<span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span style="white-space: pre;"><span><span>(</span></span></span>2.1)</div><div class="separator" style="clear: both;">•<span style="white-space: pre;"> </span>has suffered negation (multiplication by -1) relative to the other <span style="white-space: pre;"> </span>(2.2)</div><div class="separator" style="clear: both;"><br /></div></div></div></div></div><blockquote style="border: none; margin: 0px 0px 0px 40px; padding: 0px;"><div class="separator" style="clear: both; text-align: left;"><div class="separator" style="clear: both; text-align: center;"><div class="separator" style="clear: both; text-align: left;"><div class="separator" style="clear: both;"><div class="separator" style="clear: both; text-align: left;">[because these (2.1 and 2.2) will impact the peak at d.c. ( <i>f</i>n = 0 ) but not the other harmonic peaks, which are agnostic to mean value and phase/polarity]</div></div></div></div></div></blockquote><div class="separator" style="clear: both; text-align: left;"><div class="separator" style="clear: both; text-align: center;"><div class="separator" style="clear: both; text-align: left;"><div class="separator" style="clear: both;"><div class="separator" style="clear: both;"> </div><div class="separator" style="clear: both;">With these ideas in mind, I looked at the time-domain outputs of the AND and OR gates, in the special circumstances of 50% duty and relative tuning which permit the output spectra to match other than at d.c. I realised that this could mean that the outputs of the modulators are time shifted and / or time reversed complements of each other. </div><div class="separator" style="clear: both;"><br /></div><div class="separator" style="clear: both;">Sure enough, under the conditions illustrated in earlier Figures (3,4,5), the time-domain outputs of the two modulators are matched, albeit shifted in time and/or time reversed, if one of them is complemented:</div><div class="separator" style="clear: both;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi6ZOvt4D7U_X8riOZPt6xCf1WznTOrnQbPpzU932K-1M2_sW-vdq69pKEsnWI-f2xi40jBMv-h2C06Qblxq1MuFMo_JRX2TYh8xmuyC0uEabne9jG-t4kBQccYYUL3fRhoyGeBxZ1KELvzaXOgDHDNHzrRWJWRuCOVcaDQFxGwku7Omzrv-Xin7sMS4Q/s1165/Fig%207.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="693" data-original-width="1165" height="381" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi6ZOvt4D7U_X8riOZPt6xCf1WznTOrnQbPpzU932K-1M2_sW-vdq69pKEsnWI-f2xi40jBMv-h2C06Qblxq1MuFMo_JRX2TYh8xmuyC0uEabne9jG-t4kBQccYYUL3fRhoyGeBxZ1KELvzaXOgDHDNHzrRWJWRuCOVcaDQFxGwku7Omzrv-Xin7sMS4Q/w640-h381/Fig%207.png" width="640" /></a></div><div class="separator" style="clear: both; text-align: center;"><div class="separator" style="clear: both;"><b>Figure 7: Comparison of the AND and (negated) OR gates' outputs</b></div><div class="separator" style="clear: both;"><b>when fed by Square Waves a, b, (Ta = 8, Tb = 10) </b></div></div><br /><div class="separator" style="clear: both; text-align: center;"><div class="separator" style="clear: both; text-align: left;">Figure 7 shows the output of the AND gate modulator (as shown before in Figure 3, but somewhat enlarged and seen over a shorter duration to allow the pattern to be more clearly seen) and the complement of the output of the OR gate modulator (indicated by the expression ‘¬ ( a ∨ b ) ‘, where ¬ denotes logical negation, the operation for which ‘NOT’ is the operator). The two sequences are compellingly similar – the lower trace appears to match the upper trace but to be shifted to the right (delayed in time).</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">Note that I said the “two traces are compellingly similar”, not “two traces are identical”. In fact, close examination reveals that the bit sequences from the modulators are time-reversed, making it harder to understand the relationship from the graphic alone (I had to look at the actual bits). </div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">In fact, possibilities (1.1, 1.2 and 2.2) suggested above in answer to my own questions are at play in this example. The (magnitude) spectral match between the outputs of the AND and OR modulators show that the outputs are are related to each other by time reversal, shift in mean value and negation. In the special conditions defined, their outputs are bit-exact, time reversed, complements of each other. Amazing. </div><div class="separator" style="clear: both; text-align: left;"><br /></div></div></div></div></div></div><blockquote style="border: none; margin: 0px 0px 0px 40px; padding: 0px;"><div class="separator" style="clear: both; text-align: left;"><div class="separator" style="clear: both; text-align: center;"><div class="separator" style="clear: both; text-align: left;"><div class="separator" style="clear: both;"><div class="separator" style="clear: both; text-align: center;"><div class="separator" style="clear: both; text-align: left;">[It also might <i>appear </i>that there's some time-shift involved too, but - as I'll show below - time shift isn't involved. In fact, there's no memory/filtering/delay mechanism in the modulator capable of imposing a time shift; it's all in the signals - but we're getting ahead of ourselves.]</div></div></div></div></div></div></blockquote><div class="separator" style="clear: both; text-align: left;"><div class="separator" style="clear: both; text-align: center;"><div class="separator" style="clear: both; text-align: left;"><div class="separator" style="clear: both;"><div class="separator" style="clear: both; text-align: center;"><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">There are (of course) other combinations of (relative) tunings Ta, Tb, where this condition is met, such as [Ta=10, Tb=10], [Ta=10, Tb=12], [Ta=10, Tb=14], [Ta=10,Tb=18], [Ta=9, Tb=9], [Ta=9, Tb=18] etc. These are recognised as conditions where Ta/Tb is the ratio of two small integers, familiar from the mathematics of musical harmony. Equally, and perhaps more excitingly, there are infinitely more conditions where these conditions don’t hold – or where they don’t <i>quite</i> hold. For, where they don’t quite hold, there are some fascinating possibilities for pattern generation. That's for another day. For now, I must limit myself to... </div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;"><br /></div><h3 style="clear: both; text-align: left;">Explaining the Curiosity</h3><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">I had hoped to find an explanation of the mechanism behind this curious convergence between the outputs of the AND and OR modulators in the frequency domain, perhaps by defining those conditions which cause the spectra of the outputs to diverge. In truth, it would have been difficult to find more than simple examples, close to low integer values of Ta and Tb. A general explanation would have involved treacherous summation over too many harmonics! </div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">I knew there had to be another route to a general explanation, closer to a proof and – after a few days head scratching with this issue on my brain's 'back burner' – I realised what it was. </div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">In certain special circumstances, the periodic digital signals applied to the AND or OR gate modulator possess a certain kind of symmetry. </div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">Readers will be familiar with <a href="https://en.wikipedia.org/wiki/Palindrome">palindromes</a>; words which read the same backwards and forwards (like 'pop', ‘kayak’, ‘radar’, etc.). Well, there are palindromic numbers as well, like 24742, 141 and the binary number 101. Note that these numbers are “mirrored” around their centre; the first and last digit is equal, etc, rather like '<a href="https://en.wikipedia.org/wiki/Even_and_odd_functions">even functions</a>' are symmetric about their centre/origin. Note that we might also extend the idea from numbers ('101') to sequences (1, 0, 1).</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">There have also been defined a family of <a href="https://arxiv.org/pdf/2008.06864">“antipalindromic” numbers</a>, which are the class of numbers having two or more digits and where the symmetry is different (more like an <a href="https://en.wikipedia.org/wiki/Even_and_odd_functions">‘odd’ function</a>). It is easiest to understand in binary, where the antipalindromic numbers are such that the bits in a number are mirrored around the centre by being Boolean complements of each other. For example, the binary numbers 10, 1100, and 10101010 are all antipalindromes.</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">If BOTH the inputs to our AND and OR gates are antipalindromes <u>over the period of the output of modulator</u>, which is to say, over a period of T0, where:</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;"><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span>T0=(Ta . Tb)/abs(Tb-Ta) </div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">then that is sufficient to ensure that the outputs of the gates will be time reversed complements of each other. </div><div class="separator" style="clear: both; text-align: left;"><span style="color: red;"><br /></span></div><div class="separator" style="clear: both; text-align: left;"><span style="color: red;"><b>Update</b> [3 May 2023]</span></div><div class="separator" style="clear: both; text-align: left;"><span style="color: red;"><br /></span></div><div class="separator" style="clear: both; text-align: left;"><span style="color: red;">The equation above is wrong (or, if I'm being kind to myself, incomplete), in that it doesn't correctly describe the singular (and important) case when Ta = Tb. </span></div><div class="separator" style="clear: both; text-align: left;"><span style="color: red;"><br /></span></div><div class="separator" style="clear: both; text-align: left;"><span style="color: red;">What we should say is :</span></div><div class="separator" style="clear: both; text-align: left;"><span style="color: red;"><br /></span></div><div class="separator" style="clear: both; text-align: center;"><span style="color: red;">T0=(Ta.Tb)/abs(Tb-Ta) when Tb ≠ Ta T0 = Ta when Tb = Ta </span> </div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">To illustrate this to you, let me start by looking at the example we’re familiar with from above, from Figs 3, 4, & 5 (Ta = 8, Tb = 10, Tb = 1.25Ta).</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">In this case, the period T0 = 40 samples (from the equation above) and one period of the inputs a and b, along with their time-reversed copies (obtained in Octave / MATLAB by the function flip() ), are shown in Figure 8 below.</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiG-HZRa5BQROgQwyC_XgcSYdIm2p2E30PA969o2a1jQagWuTFmH6V6E-5h28fOGQ0h646imV33PrQqg3TU-bdSuCgW3-UVttrmVeFZ2xQnb96upWZ1kCfBW6ImMgL_icSfr3Ahvj3e890M6Tu8TBwxQsJEnDeXPqbgv-pkeTAmYmeRwlpJgTQhwK5aWA/s1036/Fig%208.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="709" data-original-width="1036" height="438" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiG-HZRa5BQROgQwyC_XgcSYdIm2p2E30PA969o2a1jQagWuTFmH6V6E-5h28fOGQ0h646imV33PrQqg3TU-bdSuCgW3-UVttrmVeFZ2xQnb96upWZ1kCfBW6ImMgL_icSfr3Ahvj3e890M6Tu8TBwxQsJEnDeXPqbgv-pkeTAmYmeRwlpJgTQhwK5aWA/w640-h438/Fig%208.png" width="640" /></a><b>Figure 8: Inputs and flipped inputs to the AND and negated OR gates</b></div><div class="separator" style="clear: both;"><b>when fed by Square Waves a, b, (Ta = 8, Tb = 10), demonstrating antipalindromic property </b></div></div><div><br /></div><div><div>You can see in Figure 8 that the square wave input (blue trace) is always the complement of its time-reversed self (the red trace) for both input a and input b. The antipalindromic condition is met for both input ‘a’ and ‘b’.</div><div><br /></div><div>Let’s now look at an adjacent integer tuning (Ta = 8, Tb = 9, Tb = 1.125Ta). In this case the period of the multiplexer output has extended to 72 and comparison of the input square waves and their time-reversed copies over this period reveals that input b is no longer antipalindromic:</div></div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgrIH7YgVopk44GGpTOSvZLxqFS3v_rKJiuqcwrW44G5dnmEQ3t7-zjBzL1NauHNG2vwH3SFRRwtMRbiE3SbejZqnY2kElqlk4m52q7-mfhi5qNI0wrvpVG8Y1ceIyDUPXH08LN6K0P33bnipxgo5iTI9wgsIVQzyOlzsO9vPKOJq86We-sft24DFNkWQ/s1036/Fig%209.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="709" data-original-width="1036" height="438" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgrIH7YgVopk44GGpTOSvZLxqFS3v_rKJiuqcwrW44G5dnmEQ3t7-zjBzL1NauHNG2vwH3SFRRwtMRbiE3SbejZqnY2kElqlk4m52q7-mfhi5qNI0wrvpVG8Y1ceIyDUPXH08LN6K0P33bnipxgo5iTI9wgsIVQzyOlzsO9vPKOJq86We-sft24DFNkWQ/w640-h438/Fig%209.png" width="640" /></a></div><div class="separator" style="clear: both; text-align: center;"><div class="separator" style="clear: both;"><b>Figure 9: Inputs (and 'flipped' inputs) to the AND and negated OR gates</b></div><div class="separator" style="clear: both;"><b>when fed by Square Waves a, b, (Ta = 8, Tb = 9), input b is NOT antipalindromic </b></div></div><div class="separator" style="clear: both;"><br /></div><div class="separator" style="clear: both;"><br /></div><div class="separator" style="clear: both;">Since both inputs are not antipalindromic in the case reported in Figure 9, the outputs of the AND and OR gate modulators now sound quite dissimilar, and the negated output of the OR gate no longer follows the same pattern as the output of the AND gate (in fact, if interpreted as a rhythm, it has more onsets in the period – a higher ‘density’ - as seen in Figure 10): </div><div class="separator" style="clear: both;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiEN1BDMH1DZfEocKnBmygWNEUOiZ83x4WI0JtRo-8wV1NbQoy4eRGJMJLEcF9wCugLPcFChvt-zu-qLcgbUtvNbrc19BZmkjIBrhXlzGsYl-1LGU7sudp7LAhP-YF51Hf2PNbod3hJZjoWi9uH1su9eH0o5u2TdOJ_yKN_PKPzJP_SFYJfwh_gFCHvFg/s1165/Fig%2010.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="693" data-original-width="1165" height="380" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiEN1BDMH1DZfEocKnBmygWNEUOiZ83x4WI0JtRo-8wV1NbQoy4eRGJMJLEcF9wCugLPcFChvt-zu-qLcgbUtvNbrc19BZmkjIBrhXlzGsYl-1LGU7sudp7LAhP-YF51Hf2PNbod3hJZjoWi9uH1su9eH0o5u2TdOJ_yKN_PKPzJP_SFYJfwh_gFCHvFg/w640-h380/Fig%2010.png" width="640" /></a></div><div class="separator" style="clear: both; text-align: center;"><div class="separator" style="clear: both;"><b>Figure 10: Output of the AND and (negated) output of the OR gate</b></div><div class="separator" style="clear: both;"><b>when fed by Square Waves a, b, (Ta = 8, Tb = 9) </b></div></div><br /><div class="separator" style="clear: both;"><br /></div><div class="separator" style="clear: both;"><div class="separator" style="clear: both;">So – I’ve presented a test for cases where two binary input sequences will cause an AND gate and an OR gate to produce complementary, time reversed outputs: ONLY if those input sequences are antipalindromic over the period of the modulator output. I ought to explain WHY a test for antipalindromes is appropriate in this context and explain the mechanism underneath it all.</div><div class="separator" style="clear: both;"><br /></div><div class="separator" style="clear: both;">In order to explain what is going on, we have to call on one of Charles L Dodgson’s approximate contemporaries, another nineteenth century British Mathematician and Logician who became Professor of Mathematics at (<i>what is now</i>) <a href="https://www.ucl.ac.uk/">UCL</a>. This <a href="https://en.wikipedia.org/wiki/Augustus_De_Morgan">man</a>, who gloried in the given name Augustus, formulated a pair of laws important to searching and fundamental to the simplification of logic networks. The laws honour his family name: ‘<a href="https://en.wikipedia.org/wiki/De_Morgan%27s_laws">De Morgan’s Laws</a>’ and used to be a mainstay of undergraduate digital courses in electronic engineering programs everywhere, along with Karnaugh maps, ‘minterms’, Sum-of-Product solutions and all the rest. I used to teach this stuff back in the 1980s.</div><div class="separator" style="clear: both;"><br /></div><div class="separator" style="clear: both;">De Morgan’s laws can be expressed (in the stuffy language which might have appealed to nineteenth century logicians) as:</div><div class="separator" style="clear: both;"><br /></div></div></div></div></div></div><blockquote style="border: none; margin: 0px 0px 0px 40px; padding: 0px; text-align: left;"><div class="separator" style="clear: both; text-align: left;"><div class="separator" style="clear: both; text-align: center;"><div class="separator" style="clear: both; text-align: left;"><div class="separator" style="clear: both;"><div class="separator" style="clear: both;"><div class="separator" style="clear: both;">"The negation of a disjunction is the conjunction of the negations"</div></div></div></div></div></div><div class="separator" style="clear: both; text-align: left;"><div class="separator" style="clear: both; text-align: center;"><div class="separator" style="clear: both; text-align: left;"><div class="separator" style="clear: both;"><div class="separator" style="clear: both;"><div class="separator" style="clear: both;">"The negation of a conjunction is the disjunction of the negations" </div></div></div></div></div></div></blockquote><div class="separator" style="clear: both; text-align: left;"><div class="separator" style="clear: both; text-align: center;"><div class="separator" style="clear: both; text-align: left;"><div class="separator" style="clear: both;"><div class="separator" style="clear: both;"><div class="separator" style="clear: both;"><br /></div><div class="separator" style="clear: both;">Let’s see this expressed in a more accessible language, using the symbols of the logic gates which implement the AND and OR operation and Boolean algebra:</div><div class="separator" style="clear: both;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhd9VbE1KabIAdq6Fv9q2rsbrT8tpXvF9kiEoXgRmLwULehoVCde8s4QCaziHz3tqB4xAZVvO_fYP1dQiYtUiwyZWC-SF8efaxIkEE9ESVFdR2okl-NVOpSfz6cT2gKCwO7V8o8CuHZQHaP_1qfOzhvNyQj4OPjUab9Oqvcrw88tyOSmyYtdCk8xz_hxw/s1242/De%20Morgans%20Laws.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="650" data-original-width="1242" height="167" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhd9VbE1KabIAdq6Fv9q2rsbrT8tpXvF9kiEoXgRmLwULehoVCde8s4QCaziHz3tqB4xAZVvO_fYP1dQiYtUiwyZWC-SF8efaxIkEE9ESVFdR2okl-NVOpSfz6cT2gKCwO7V8o8CuHZQHaP_1qfOzhvNyQj4OPjUab9Oqvcrw88tyOSmyYtdCk8xz_hxw/s320/De%20Morgans%20Laws.png" width="320" /></a></div><br /><div class="separator" style="clear: both;"><div class="separator" style="clear: both;">De Morgan’s Laws teach us that when we feed an AND gate with the complement of a pair of signals it is equivalent to an OR gate (and versa vice, as Alice might see in the mirror); the only difference is a negation.</div><div class="separator" style="clear: both;"><br /></div><div class="separator" style="clear: both;">This is exactly what is happening with our AND and OR gate modulators; the input sequences carry the complement within themselves. When they are antipalindromes, inputs ‘a’ and ‘b’ are at once themselves and complements of themselves in time-reversed order. They are like a word that reads ‘yes’ forwards and ‘no’ backwards (I’m still trying to find an example – please leave one in the comments if you have one!) </div><div class="separator" style="clear: both;"><br /></div><div class="separator" style="clear: both;">Let me show you this working in the <u>second</u> simplest example I can conceive of (I would show you the simplest example but it's too trivial, so I’ll leave that to you).</div><div class="separator" style="clear: both;"><br /></div><div class="separator" style="clear: both;">The "second simplest case" occurs when Ta=4 and Tb=2, giving Tb = 0.5*Ta (a 2:1 frequency ratio, called an ‘octave’ in music). In this ‘tuning’, the AND and OR switching modulators generate output sequences with a period of T0 = 4, over which the finite segments of the square wave signals ‘a’ and ‘b’ follow the form seen in Figure 10 below:</div><div class="separator" style="clear: both;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi4B9dzy5Lk7WSL3m741eKV0XOx9fLwp6yi4yYA6E1dqwdshGFt68eFTihDffTm78ReeKO1LtFaCSwtg766ESfCjtl54wEQ_mnOlYI_V-yhoDGbs9vW1jMG2Pa6rzPed9KXXsFbmGYhdbHRrwAID5xxyfLCb7EP4nA4QiDNbZB0pVdRZ-2Lzyl9niRO9Q/s1036/Fig%2011.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="709" data-original-width="1036" height="438" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi4B9dzy5Lk7WSL3m741eKV0XOx9fLwp6yi4yYA6E1dqwdshGFt68eFTihDffTm78ReeKO1LtFaCSwtg766ESfCjtl54wEQ_mnOlYI_V-yhoDGbs9vW1jMG2Pa6rzPed9KXXsFbmGYhdbHRrwAID5xxyfLCb7EP4nA4QiDNbZB0pVdRZ-2Lzyl9niRO9Q/w640-h438/Fig%2011.png" width="640" /></a></div><div class="separator" style="clear: both; text-align: center;"><div class="separator" style="clear: both;"><b>Figure 10: Inputs and flipped inputs to the AND and OR gates</b></div><div class="separator" style="clear: both;"><b>when fed by Square Waves a, b, (Ta = 4, Tb = 2), demonstrating antipalindromic property </b></div></div><br /><div><div class="separator" style="clear: both; text-align: center;"><br /></div>You will see that both these sequences are antipalindromic. Perhaps you recognise that we’ve already played with this pair of sequences before and – indeed – applied them to AND and OR gates.</div><div><br /></div><div>Recalling how this pair of sequences excited the AND gate (Figure 1):</div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjUlH60TC4fjIR6vNd3DJtbyiMb2Z61H5v0ZDVGTTVYWVefY9LuG4GYiy2yhyLXqMJ7nctEIzjH_u-V2dYKtOZmUnAwY_wek-4Zi7bssQQkyE4Kkah3fb-c6CP_8ar_uAr_EjP6U24hpMVeZhJWB693OhIBQ14FkdgBUttpSS3wMLbL0XTcfVe0g0oFUA/s1253/AND%20PulseView.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="146" data-original-width="1253" height="74" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjUlH60TC4fjIR6vNd3DJtbyiMb2Z61H5v0ZDVGTTVYWVefY9LuG4GYiy2yhyLXqMJ7nctEIzjH_u-V2dYKtOZmUnAwY_wek-4Zi7bssQQkyE4Kkah3fb-c6CP_8ar_uAr_EjP6U24hpMVeZhJWB693OhIBQ14FkdgBUttpSS3wMLbL0XTcfVe0g0oFUA/w640-h74/AND%20PulseView.png" width="640" /></a></div><br /><div>and the OR gate (Figure 2):</div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgoWF-iTLURFNQ_JF3fQtdycrzN-jNfLNuk5PsTGftc7wIHUnTWaqZk5R6BQBsNtMrTltwaDwfP8vi6w-icUVsXdsRj25IXjq8S-_q5IuYevAOOKfSKICTS5BxuI0F_W4ne7pwoigdWzg2-93KrWDMFP1N3QfZ4Y5IOPAVnHOZ5etZuZizrFLPLNd7vOg/s1247/OR%20PulseView.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="143" data-original-width="1247" height="74" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgoWF-iTLURFNQ_JF3fQtdycrzN-jNfLNuk5PsTGftc7wIHUnTWaqZk5R6BQBsNtMrTltwaDwfP8vi6w-icUVsXdsRj25IXjq8S-_q5IuYevAOOKfSKICTS5BxuI0F_W4ne7pwoigdWzg2-93KrWDMFP1N3QfZ4Y5IOPAVnHOZ5etZuZizrFLPLNd7vOg/w640-h74/OR%20PulseView.png" width="640" /></a></div><br /><div>we are now equipped, with an appreciation of the role of antipalindromic sequences and De Morgan’s Laws, to understand why the outputs are (time reversed) complements of each other.</div><div><br /></div><div class="separator" style="clear: both; text-align: left;"><div class="separator" style="clear: both;">So – unison (Ta = Tb = 2) was too trivial to show you, we’ve seen that the octave (Ta = 2, Tb = 4) works, we’ve seen that the major third (Ta = 8, Tb = 10) works – what about other intervals? </div><div class="separator" style="clear: both;"><br /></div><div class="separator" style="clear: both;">Well, the fifth (Ta = 8, Tb = 12), the fourth (Ta = 10, Tb = 14) and the minor third (Ta = 10, Tb = 12) work too. It seems this antipalindromic condition is met when square waves of all significant musical intervals are applied to a switching modulator. It is no mere ‘accident’, it is an inheritance of the ‘ratio of small integers’ that lies at the heart of harmony, of rhythm and of music itself.</div><div class="separator" style="clear: both;"><br /></div><div class="separator" style="clear: both;">One last diversion before we clamber out of the rabbit hole; square waves are not the only kind of antipalindromic signal we could feed into our modulators. Let’s check our emerging theory about the generation of spectrally equivalent and time-reversed, complementary outputs from AND and OR modulators by contriving another input.</div><div class="separator" style="clear: both;"><br /></div><div class="separator" style="clear: both;">Here’s an arbitrary antipalindromic binary sequence, 8 bits long,</div><div class="separator" style="clear: both;"><br /></div><div class="separator" style="clear: both; text-align: center;">[1, 0, 1, 1, 0, 0, 1, 0]</div><div class="separator" style="clear: both;"><br /></div><div class="separator" style="clear: both;">repeats of which I can stitch together into a signal of arbitrary length. If I combine that with another signal (for simplicity, we’ll use a square wave at Tb=10 as the second signal, b) the combination of the 8 element length of the sequence above and the period Tb yield a fundamental period for the modulator output of T0 = 40.</div><div class="separator" style="clear: both;"><br /></div><div class="separator" style="clear: both;">Here are the input sequences in this new experiment – made of five repeats of the 8 bit sequence above, the other being four cycles of a square wave.</div></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjIdrXLmmzX2ERPkpDmioo5Hrohh0sKg3qZ467uZ_2UTGnJnGcxqgE_gPLs8WavLd9o6BLjXdmETlf2z2XDNumEfe0QkMfCLxPaHLnZ_oUSkM2SDwJv99BgzDFGRxPC9qbaHelMJcKq_HsizUVYIE7O5A1ID7Sw8BPYdCSrwTWW7u9DZ1X2jTT-ZfDSMQ/s1036/Fig%2012.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="709" data-original-width="1036" height="438" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjIdrXLmmzX2ERPkpDmioo5Hrohh0sKg3qZ467uZ_2UTGnJnGcxqgE_gPLs8WavLd9o6BLjXdmETlf2z2XDNumEfe0QkMfCLxPaHLnZ_oUSkM2SDwJv99BgzDFGRxPC9qbaHelMJcKq_HsizUVYIE7O5A1ID7Sw8BPYdCSrwTWW7u9DZ1X2jTT-ZfDSMQ/w640-h438/Fig%2012.png" width="640" /></a></div><div class="separator" style="clear: both; text-align: center;"><div class="separator" style="clear: both;"><b>Figure 11: Inputs and flipped inputs to the AND and OR gates</b></div><div class="separator" style="clear: both;"><b>when fed by a repeated sequence [1, 0, 1, 1, 0, 0, 1, 0], a, and a Square Wave, b, (Tb = 2)</b></div></div><div class="separator" style="clear: both;"><br /></div><br /><div>These sequences both are antipalindromic over T0 and so – no surprises – the modulator outputs are spectrally identical (except at <i>f</i>n = 0):</div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEib-uWZ3Tzm_ztansacVA3rAzOo63D2NHSbziIc59VH_BQQtSggPszFM4t7-GBlc4tl_X_Y95hzIzh5m7WgFKCXTAmG8dd1duFlqb703e2IIXoksp4FkM4PNKrk02fz2KmDKqPBrhqj8iH5qYZKektTlQxguRzpLe9P6B2iGFbw1JzD6CJ0xx4uGV2SiQ/s1155/Fig%2013.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="767" data-original-width="1155" height="213" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEib-uWZ3Tzm_ztansacVA3rAzOo63D2NHSbziIc59VH_BQQtSggPszFM4t7-GBlc4tl_X_Y95hzIzh5m7WgFKCXTAmG8dd1duFlqb703e2IIXoksp4FkM4PNKrk02fz2KmDKqPBrhqj8iH5qYZKektTlQxguRzpLe9P6B2iGFbw1JzD6CJ0xx4uGV2SiQ/s320/Fig%2013.png" width="320" /></a></div><div class="separator" style="clear: both; text-align: center;"><div class="separator" style="clear: both;"><b>Figure 12: Comparison of the Magnitude Spectra of the outputs of the AND and OR gates</b></div><div class="separator" style="clear: both;"><b>when fed by </b><b>a repeated sequence [1, 0, 1, 1, 0, 0, 1, 0], a, and a Square Wave, b, (Tb = 2)</b><b> </b></div></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: left;"><br /></div><div>and the outputs are bit-exact, time-reversed complements of each other:</div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhIYoJVDYUSWiWj_0AYdXJyF2GBe2k_FlxLXCeIpe_Z5o6QqvggfAwIEEb12EUgRuSsfb_Gdok2O1Fi0SEs-xgyMbrK38GlVOxslMm2ZEOJ57KKIlWjcRzsEFiGxFsKnSmm_HMFnKkVKIL18qjFcQd28F3PbiMnk_YEGxE6egkEyt58jTfZTcSOgE2w3g/s1165/Fig%2014.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="693" data-original-width="1165" height="190" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhIYoJVDYUSWiWj_0AYdXJyF2GBe2k_FlxLXCeIpe_Z5o6QqvggfAwIEEb12EUgRuSsfb_Gdok2O1Fi0SEs-xgyMbrK38GlVOxslMm2ZEOJ57KKIlWjcRzsEFiGxFsKnSmm_HMFnKkVKIL18qjFcQd28F3PbiMnk_YEGxE6egkEyt58jTfZTcSOgE2w3g/s320/Fig%2014.png" width="320" /></a></div><div class="separator" style="clear: both; text-align: center;"><div class="separator" style="clear: both;"><b>Figure 13: Output of the AND and (negated) output of the OR gate</b></div><div class="separator" style="clear: both;"><b>when fed by </b><b>a repeated sequence [1, 0, 1, 1, 0, 0, 1, 0], a, and a Square Wave, b, (Tb = 2)</b><b> </b></div></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: left;"><div class="separator" style="clear: both;">OK – that works. Time to say goodbye to wonderland and to go back to the mundane, familiar world, where we’ll calm down by taking a moment to look at another important class of modulator (lest anybody thinks I’ve missed or ignored it).</div><h3 style="clear: both; text-align: left;">Covering the Exclusive Base</h3><div class="separator" style="clear: both;"><br /></div><div class="separator" style="clear: both;">The AND gate modulator performs a switching equivalent to multiplication, and this is reflected in the frequency products at its output. The AND operation is sometimes referred to as ‘logical multiplication’ for this reason and if the truth values 0 and 1 are interpreted as integers, the AND operation can be expressed arithmetically as multiplication.</div><div class="separator" style="clear: both;"><br /></div><div class="separator" style="clear: both;">Using a multiplier as a modulator is known to produce simple amplitude modulation.</div><div class="separator" style="clear: both;"><br /></div><div class="separator" style="clear: both;">There are, however, other modulator types of importance to communication (and, particularly RF) applications, which have also found use in the generation and manipulation of music. Most important among these is the class of modulators which feature ‘carrier suppression’. </div></div><div><br /></div></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjtOmTyy9pIHsWUlZV_ei_KAeuvxs5G3u2vqJ5h8ycqA-3BYp_2PkFYfHpEkNBXT8JeOeUXrRrjAGqQ5Op-Bt9TiHqAjjDVFd4Qwc1LoXhJMIqYQ_JV5M6TmnRSYodrqA-PoqORcY7kEjN-uJP88MunPdb5zjTLoIBucdsFSQryBPLUviL_DorFniJocg/s979/Fig%2015.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="979" data-original-width="771" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjtOmTyy9pIHsWUlZV_ei_KAeuvxs5G3u2vqJ5h8ycqA-3BYp_2PkFYfHpEkNBXT8JeOeUXrRrjAGqQ5Op-Bt9TiHqAjjDVFd4Qwc1LoXhJMIqYQ_JV5M6TmnRSYodrqA-PoqORcY7kEjN-uJP88MunPdb5zjTLoIBucdsFSQryBPLUviL_DorFniJocg/w315-h400/Fig%2015.png" width="315" /></a></div><div class="separator" style="clear: both; text-align: center;"><div class="separator" style="clear: both;"><b>Figure 14: Magnitude Spectra of Square Waves a, b, (Ta = 8, Tb = 10) </b></div><div class="separator" style="clear: both;"><b>modulated by AND, OR, and XOR gates</b></div></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both;"><br /></div><div class="separator" style="clear: both;">Figure 14 above is an expanded form of an image already seen (Fig 4), in which the spectrum of an additional modulator output is seen. It too is modulating the ‘a’ and ‘b’ square waves (still at the Tb =1.25Ta period ratio which cause the AND and OR modulators to produce time-reversed, complementary outputs).</div><div class="separator" style="clear: both;"><br /></div><div class="separator" style="clear: both;">This additional modulator is an XOR gate; an ‘Exclusive-OR’ gate (indicated by the expression ‘A ⊕ B’, where ⊕ denotes the secondary Boolean operation of ‘exclusive or’). As is seen in the figure above, none of the harmonics of either A or B get through to the output of the XOR gate modulator in this case – it certainly is suppressing whichever is the carrier! </div><div class="separator" style="clear: both;"><br /></div><div class="separator" style="clear: both;">Trouble is, I didn’t make a new XOR gate, only some ORs and some ANDs.</div><div class="separator" style="clear: both;"><br /></div><div class="separator" style="clear: both;">Fortunately, as I mentioned above, XOR is a secondary operator; it can be (in fact, it MUST be) built from AND and OR, but it also needs the last of the three basic Boolean operators: NOT for negating or complementing a variable. </div><div class="separator" style="clear: both;"><br /></div><div class="separator" style="clear: both;">I also didn’t build a NOT gate. However, fortunately again, I do have some available on my synth. You might not recognise it as a NOT gate, but here it is:</div><div class="separator" style="clear: both;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEisv1geHg380xYbUGscc5RNZGB9RzPb3rA_URw2reOpuDjbYxnCVfg8tTC7cBO9cZpKfIJxHCLEF_f_-9uw1Xp4Z54FohL4lgsw_wtm5FFg7dIdw2l3aeNZUSs8ofElgrwmgL-wIEyCb3GgTQVaeokWB1z70Q9Qt-wodPlP_ApK9sZw-PpYGa0JAhKTdA/s3888/m0xpd%20Voltage%20Processor.HEIC" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="3888" data-original-width="661" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEisv1geHg380xYbUGscc5RNZGB9RzPb3rA_URw2reOpuDjbYxnCVfg8tTC7cBO9cZpKfIJxHCLEF_f_-9uw1Xp4Z54FohL4lgsw_wtm5FFg7dIdw2l3aeNZUSs8ofElgrwmgL-wIEyCb3GgTQVaeokWB1z70Q9Qt-wodPlP_ApK9sZw-PpYGa0JAhKTdA/w68-h400/m0xpd%20Voltage%20Processor.HEIC" width="68" /></a></div><br /><div><div>It is a ‘Voltage Processor’ – one of those ‘utility’ modules that you never know how much you need until you get one (or five). It can attenuate, shift (<i>i.e. add an offset</i>) and apply lag (<i>i.e. impose first order filtering</i>) to a voltage signal passed through it. Most importantly to the present application, if you keep on dialling down the attenuation control it turns into an inverter; an ‘attenuverter”. Voila – the Voltage Processor becomes a NOT gate. </div><div><br /></div><div>Here it is playing starring role as a NOT gate:</div></div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgh6RnyXgSRjf4R0uG7ATqWvyWmhYSSCNC4-bvwQfdx8LjJCZcZAbtfhvMRIJtov5_3vTfzljl2gdYosaDxc257KHROMHWho5LXq5w3QKU6mUHKu95U7ocQwGy3rqWr8SEE2y2C_txAcs_1pSUdK4l0E9Sd1elanOOSZmGH36dZhYKfbFn2CMAApRpc8g/s4032/Scope%20VP%20NOT.HEIC" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="3024" data-original-width="4032" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgh6RnyXgSRjf4R0uG7ATqWvyWmhYSSCNC4-bvwQfdx8LjJCZcZAbtfhvMRIJtov5_3vTfzljl2gdYosaDxc257KHROMHWho5LXq5w3QKU6mUHKu95U7ocQwGy3rqWr8SEE2y2C_txAcs_1pSUdK4l0E9Sd1elanOOSZmGH36dZhYKfbFn2CMAApRpc8g/s320/Scope%20VP%20NOT.HEIC" width="320" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div><div>Now, with NOT gates to hand, we’re in a position to implement the XOR function, which is defined as:</div><div><br /></div><div style="text-align: center;">a ⊕ b = ( a ∧ ¬ b ) ∨ ( ¬ a ∧ b )</div><div><br /></div><div>You’ll see we need two AND gates, two NOT gates (/Voltage Processors) and an OR gate to implement a single XOR gate; this is why it is a secondary operator! </div><div><br /></div></div></div></div></div></div></div><blockquote style="border: none; margin: 0px 0px 0px 40px; padding: 0px;"><div class="separator" style="clear: both; text-align: left;"><div class="separator" style="clear: both; text-align: center;"><div class="separator" style="clear: both; text-align: left;"><div class="separator" style="clear: both;"><div class="separator" style="clear: both;"><div><div style="text-align: left;">[It is also ‘two layer’; you have to do the ANDs first before the OR, so it literally takes longer than the single layer AND and OR operations.]</div></div></div></div></div></div></div></blockquote><div class="separator" style="clear: both; text-align: left;"><div class="separator" style="clear: both; text-align: center;"><div class="separator" style="clear: both; text-align: left;"><div class="separator" style="clear: both;"><div class="separator" style="clear: both;"><div><div><br /></div><div>Anyway, we have the ingredients to build an Exclusive-OR gate should we ever wish to – I suppose we owe it to the great traditions of ring modulation to give it a try…</div><div><br /></div><div>Here’s the behaviour XOR function, implemented by my new gates and VP modules, as seen on the scope screen:</div></div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhAyLNz3gTTaPYj8xzlw8EjqGvxePccHReFolVdQtxlKUtnzoUG7Lcjgey0mcrv1Y6Pw7FUBE0FDykSBZyRize6Ps3lSZD67igRxa2BOa9f4a79Qc1eM0R3xANcW6sWL1FI73KENr5sZ-yfu0mr4CmIg0o2-ztgL3_APhv9CqC73jxgP5HRlzkoa3_R0A/s4032/Scope%20XOR.HEIC" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="3024" data-original-width="4032" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhAyLNz3gTTaPYj8xzlw8EjqGvxePccHReFolVdQtxlKUtnzoUG7Lcjgey0mcrv1Y6Pw7FUBE0FDykSBZyRize6Ps3lSZD67igRxa2BOa9f4a79Qc1eM0R3xANcW6sWL1FI73KENr5sZ-yfu0mr4CmIg0o2-ztgL3_APhv9CqC73jxgP5HRlzkoa3_R0A/s320/Scope%20XOR.HEIC" width="320" /></a></div><br /><div>and on PulseView:</div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEimcch2R9dG_4smwkWVocPncIhW_Pr4LmSqkR9HgJylHUI7Phj4YLzZTB28jfHtP2mdaeXZengQjNeekPy3QdWnuqgMwKS2eHVmB_a883tgHhYnV1v5ojuVBtCiYub_wuf5lzFG95J0MqKoHBLSPr9318u8kbRulvgzBBHPudmB5vdzLQp0f_oSlQaxKw/s1255/XOR%202%20PulseView.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="144" data-original-width="1255" height="74" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEimcch2R9dG_4smwkWVocPncIhW_Pr4LmSqkR9HgJylHUI7Phj4YLzZTB28jfHtP2mdaeXZengQjNeekPy3QdWnuqgMwKS2eHVmB_a883tgHhYnV1v5ojuVBtCiYub_wuf5lzFG95J0MqKoHBLSPr9318u8kbRulvgzBBHPudmB5vdzLQp0f_oSlQaxKw/w640-h74/XOR%202%20PulseView.png" width="640" /></a></div><br /><div>Try as I might, I couldn’t get rid of that little glitch in the middle of the two asserted periods of the XOR sequence. I believe this is still an issue with my VCO oscillator tuning / duty cycle settings of the input signals; the experiment is too slow for it to be attributed to timing / propagation effects in the ‘gates’.</div><div><br /></div><div>Anyway, the system is perfectly fit-for-purpose. If I ever want to get seriously involved in XOR-type modulating, I shall make a dedicated module; this patch with five modules is WAY too much trouble!</div><div><br /></div><div>XOR gates are (or, at least, used to be) very popular in synths and other switching modulators have been rather dismissed. I'm delighted to have the new AND and OR logic gates on board in my modular - not just for combinatorial applications in triggering but to explore opportunities in modulation for tone and pattern generation. </div><div><br /></div><div>So - there you have it. I wanted simply to show you a couple of new logic gates, but I was blown off course by (what I thought to be) an interesting observation in the behaviour of switching modulators that I never anticipated. </div><div><br /></div><div>Unfortunately I can think of no useful application of the fact that the outputs of AND and OR gates display the convergent behaviour I've described under the special input conditions I've defined - it remains no more than an intellectual and mathematical curio. However, I'm sure it will have (or already has) <i>some</i> significance in <i>some</i> area and is probably already widely known and widely described - there is, after all, "nothing new under the sun".</div><div><br /></div><div>It has, at least, kept me engrossed for the past few days.</div><div><br /></div><div>73</div><div>m0xpd </div></div></div></div></div></div>m0xpdhttp://www.blogger.com/profile/13241728975907453128noreply@blogger.com0tag:blogger.com,1999:blog-8044784353067686026.post-48584955367490830492023-03-19T14:38:00.003+00:002023-03-19T14:48:04.632+00:00New Builds and Kudos for a Blogger<p>At some point during the past five months of development work on my synthesiser, I was lucky to chance on <a href="https://www.eddybergman.com/">Eddy Bergman's</a> blog. Eddy has built an impressive website which details the development of his own modular synthesiser. </p><div class="separator" style="clear: both; text-align: center;"><a href="https://www.eddybergman.com/" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="82" data-original-width="726" height="36" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj61bAFfRsO03LGdr2nXHUcnCuGNJOchNLRI20QWJEKtQJTTam7GxjWeP0d3hFvpqB3-bls9pXOVKh7KBvg1WIv6SUrvOI-Ib8iXITx-bKbCju1F9cx8JAguB38i79McyHiaOo8ZEUO-BMuhNbYLZwziZHnK-F_OIbf06kn7FxvElGDCzfi-Fvo-wOEuA/s320/Screenshot%202023-03-19%20at%2008.56.44.png" width="320" /></a></div><p>Eddy writes in an accessible, practical style and has helped and inspired newcomers to enter the world of "Synth DIY" (or Homebrew, as we would say in the world of radio). Eddy is no stranger to radio, as his blog - like mine - started in the world of RF, back in the teens, with a post on an <a href="https://www.eddybergman.com/2017/03/cze-t251-fm-broadcast-transmitter-review.html">FM TX</a> and a <a href="https://www.eddybergman.com/2018/08/baofeng-bf-f9v2-impressions.html">handy-talkie</a>. Having said that, I can find no evidence of Eddy (who's in The Netherlands) holding a ham license.</p><blockquote style="border: none; margin: 0px 0px 0px 40px; padding: 0px;"><p style="text-align: left;">There are, of course, lots of significant links between licensed radio amateurs and the world of electronic synthesisers - most notably, the case of one R A Moog, k2amh.</p></blockquote><p>The greatest feature of Eddy's blog is the presentation of validated stripboard layouts for each of the designs featured in the posts. This collection of stripboard-based designs is a rare (or, perhaps, unique) resource in the world of synth DIY and makes a very easy entry point for people wanting to start building.</p><div style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjh_dgNisLr7Rsej6a8Z9eJkfOtEz_ecWnFJjrQuSFyW_2Xyk58XNHRh7FaWvT-UV25orEx21DzfsxVzIuO0mSiQEPrV1bEDHbmarJ36rQEyKjjHMvvA7dMw9gmCHE7uuv3l70BbaUVZlSVVhC8bEe3g5zELoQIyKoTIItNv0bBZJx7VrmqtlEf1fRtrA/s1494/Screenshot%202023-03-19%20at%2014.20.13.png"><img alt="Part of Eddy's Stripboard Design for the Moog Ladder Filter" border="0" data-original-height="194" data-original-width="1494" height="85" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjh_dgNisLr7Rsej6a8Z9eJkfOtEz_ecWnFJjrQuSFyW_2Xyk58XNHRh7FaWvT-UV25orEx21DzfsxVzIuO0mSiQEPrV1bEDHbmarJ36rQEyKjjHMvvA7dMw9gmCHE7uuv3l70BbaUVZlSVVhC8bEe3g5zELoQIyKoTIItNv0bBZJx7VrmqtlEf1fRtrA/w640-h85/Screenshot%202023-03-19%20at%2014.20.13.png" width="640" /></a></div><p>Readers with as much grey hair as me will know I like stripboard. I have even used it in RF applications, where inter-strip capacitance (etc) makes it a dubious choice, basing my <a href="http://m0xpd.blogspot.com/2014/08/breadboard-bitx.html">modular BITX</a> on stripboard modules and even using these as the platform for my <a href="http://m0xpd.blogspot.com/2015/03/parallel-if-for-vero-bitx.html">Parallel IF</a> rig. </p><p>I still like stripboard - but other aspects of synth project builds are tempting me away from its use.</p><p>Back in 2017, I used the schematic on Yves Usson's "<a href="http://yusynth.net/Modular/index_en.html">YuSynth</a>" site to build an instance of Dr Moog's iconic voltage controlled filter - what Yves describes as the "must-have" filter. Yves is a Biologist by profession and the creative genius behind the <a href="https://www.arturia.com/ranges/brute">Arturia 'Brute'</a> analog synthesisers. And I checked by asking him; no - he never was a radio amateur!</p><p>Yves website describes modules for his own synthesiser, which was developed in the "Moog Unit", "MU" or "5U" standard (think <a href="https://en.wikipedia.org/wiki/Keith_Emerson">Keith Emerson</a>), which uses 1/4 inch jack sockets, runs on +/- 15V power supply and is physically much bigger than the much more popular Eurorack standard (which is only 3U tall and uses tiny 1/8 inch jacks). However, Yves' modules are adaptable for Eurorack and he gives specific details of circuit changes required to operate on the +/-12V supply used in Eurorack. There are PCB designs on the YuSynth site, but these PCBs do not 'host' the controls or connectors; 5U expects wires from the PCB to front panel components and a bracket to mount the PCB on the front panel. </p><p>Here are some images (from September 2017) of the stripboard layout, the populated board, the bracket, and the front panel for my Eurorack build of the Moog filter.</p><div class="separator" style="clear: both; text-align: center;"><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiyq5VSRhV6t2onyk17I3gPLkcog28PIbjxJpPHsKk0HP7V0TVd_y3Xwcsrkh-sN3Tx-Ac2z1zTWyegUg8pfmPuW79ZW8emDpiD5GVKI7QfKT2blg9wthBp36uTt5mQ-t2lqYdNlEsZ0rKeMxG75JM7oPLAd0TD8JImUNeU8WAvfZjhQCTDhC6I2Rk7_g/s1126/Screenshot%202023-03-19%20at%2009.22.15.png" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" data-original-height="1126" data-original-width="1042" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiyq5VSRhV6t2onyk17I3gPLkcog28PIbjxJpPHsKk0HP7V0TVd_y3Xwcsrkh-sN3Tx-Ac2z1zTWyegUg8pfmPuW79ZW8emDpiD5GVKI7QfKT2blg9wthBp36uTt5mQ-t2lqYdNlEsZ0rKeMxG75JM7oPLAd0TD8JImUNeU8WAvfZjhQCTDhC6I2Rk7_g/w185-h200/Screenshot%202023-03-19%20at%2009.22.15.png" width="185" /></a><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhWIbT3PeObObhvTUeUXzOaeq4Tsyr2UnnR1XWi_OS1UFCNCm344rUevm8Z77GkuOoos4ZPAdEaVuG4Od-4EWmDYhzINPRwwNx2SQqqGP36XXXxPIZfTbbGC_KoToky48X5-6b5uwlt8AmaIfIRayMviDNz25jWmkeoLmfHuEgboUi90vPj9VGDziFBAQ/s2214/IMG_1141.JPG" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="2214" data-original-width="1973" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhWIbT3PeObObhvTUeUXzOaeq4Tsyr2UnnR1XWi_OS1UFCNCm344rUevm8Z77GkuOoos4ZPAdEaVuG4Od-4EWmDYhzINPRwwNx2SQqqGP36XXXxPIZfTbbGC_KoToky48X5-6b5uwlt8AmaIfIRayMviDNz25jWmkeoLmfHuEgboUi90vPj9VGDziFBAQ/w178-h200/IMG_1141.JPG" width="178" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiBwi1CLceYaNvlu-9jw2HYHMMv59MC-hRH22mUNaAeEZk6I9yiedVXb4lW9zlKU1PhCwSE62H3xQcy_vWx9pNDdEezjQ9bfLvlj2zWbcqORq5cSq_kxKpcCcjgWJzPVwyhSwBoHwqrvtBHyv7xYHmdzESCv4OrcmT7zYNTcBlEDcUiKbDGWh-QaeMDUw/s2214/IMG_1141.JPG" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><br /></a><span style="text-align: left;">Everything at this stage is nice and tidy - but look at the mess of wires that results when you connect up the controls and connectors on the front panel to the board to finish the module:</span></div><div style="text-align: left;"><br /></div><div style="text-align: left;"><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgOVTDlBOTT-RZY6sTJglm8mRlLDnI2SgXR7Qx6rG6j-qSBsMLg9yaruT3OeJmUpCUniHYFCzB9C-2y5s1mH289htz5pt2GLt4Z0MQ2F91p5BgUoQsGCsOXkDZXVoRRC4DUUcLLuI524s4_afORRMFKdb7UJCmA7A_aT_nrIGOwVG81bWwZzgM0ljGa6Q/s4032/IMG_3298.HEIC" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="4032" data-original-width="3024" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgOVTDlBOTT-RZY6sTJglm8mRlLDnI2SgXR7Qx6rG6j-qSBsMLg9yaruT3OeJmUpCUniHYFCzB9C-2y5s1mH289htz5pt2GLt4Z0MQ2F91p5BgUoQsGCsOXkDZXVoRRC4DUUcLLuI524s4_afORRMFKdb7UJCmA7A_aT_nrIGOwVG81bWwZzgM0ljGa6Q/s320/IMG_3298.HEIC" width="240" /></a></div><div style="text-align: left;"><br /></div><br />Actually, this one is pretty 'clean', because there are only four sockets and three potentiometers - imagine what it would have been like if my <a href="http://m0xpd.blogspot.com/2023/03/a-scalable-multiplexer-for-eurorack.html">4:1 mux</a> (with 12 sockets, 5 potentiometers, 9 switches and 4 LEDs) had been assembled using this method.</div><div style="text-align: left;"><br /></div><div style="text-align: left;">I'm getting old and I figure I've earned the right to say (to myself, at least) when I don't like things.</div><div style="text-align: left;"><br /></div><div style="text-align: left;">Truth is, I don't like wiring up front panels. It is soul-destroying, labour-intensive and boring. If you have poor eyesight and an intention tremor (like me) it is difficult. Worst of all, it becomes the weakest link in the module - the place where the faults are most likely to emerge. So - I've decided to stop doing it. You saw the outcomes in the <a href="http://m0xpd.blogspot.com/2023/03/a-scalable-multiplexer-for-eurorack.html">multiplexer </a>, which even went so far into the 21st century as to use surface mount components (!) Let me show you some more conventional modules, made using good, old-school through-hole components.</div><div style="text-align: left;"><br /></div><div style="text-align: left;">In both cases, it was the writing and enthusiasm of Eddy Bergman which inspired - at least in part - my decision to build the new modules.</div><div style="text-align: left;"><br /></div><div style="text-align: left;">The first calls again on the work of Yves Usson at YuSynth, who has published a design for an envelope generator, based upon a 7555 - the CMOS version of the once omnipresent 555 timer. This idea - as Yves generously acknowledges - can be traced back to a suggestion by Jonathan Jacky in 1980 which has been developed by others. But Yves has produced a schematic for a great implementation, which is <a href="https://yusynth.net/Modular/index_en.html">published on his site</a>, including a PCB layout. </div><div style="text-align: left;"><br /></div><div style="text-align: left;">Eddy has a <a href="https://www.eddybergman.com/2020/03/synthesizer-build-part-24-adsr-with.html">post associated with this envelope generator,</a> where he presents stripboard layouts for the YuSynth design, including a stripboard design "for Eurorack" (that's to say, a layout including the 2*5 header used in the very loose Eurorack 'standard' [which really is the <a href="https://doepfer.de/a100_man/a100t_e.htm">Doepfer technical specification for the A100 system</a>] for the power supply). </div><div style="text-align: left;"><br /></div><div style="text-align: left;">Most importantly, Eddy made the comment: </div></div><blockquote style="border: none; margin: 0px 0px 0px 40px; padding: 0px;"><div class="separator" style="clear: both; text-align: center;"><div style="text-align: left;">"<span style="text-align: center;">I can say without any doubt that this design is perfect if you want a good and reliable ADSR to pair with your VCA or to drive a filter. " </span></div></div></blockquote><div class="separator" style="clear: both; text-align: center;"><div style="text-align: left;"><span style="text-align: center;">That was enough for me - when I decided back in December 22 that I was going to build a new envelope generator, this was the one I was going to build. But there was going to be a twist...</span></div><div style="text-align: left;"><span style="text-align: center;"><br /></span></div><div style="text-align: left;">The YuSynth 7555 envelope generator is an "<a href="https://en.wikipedia.org/wiki/Envelope_(music)">ADSR</a>" design, which means that it offers independent control over the <u>A</u>ttack, <u>D</u>ecay, <u>S</u>ustain and <u>R</u>elease phases of the envelope. I previously have described in these pages an ADSR envelope generator which was (childishly) called the <a href="http://m0xpd.blogspot.com/2017/02/signal-processing-on-arduino.html">ADSRduino</a>. That design offered a 'looping' feature, whereby the envelope generator can optionally re-trigger itself to produce a pulse train. I decided that my Eurorack implementation of the YuSynth 755 ADSR envelope generator would also include the additional feature of looping, so I set about modifying Yves' design to provide this.</div><div style="text-align: left;"><br /></div><div style="text-align: left;">Here's the schematic, to explain what I did:</div><div style="text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi-2q-dfGz5Zl9gqPvWsg9z7Eij5pded1ZLZrsJeDhLBYdKJtZ7iFqd4047TWSrLNdkCkTyCW3-VgUCdxa2Dd-DPxPAQCXevjud8t2UOaLnddOhxYUHfUp9CDZ1m3TL6FQeOTwVg2Rkz3FD_VJcedfmXfm1C2QtLLY1h9DCmWbDxXB-qx6qummBv2M5BA/s3532/m0xpd%20Looping%20ADSR.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1872" data-original-width="3532" height="213" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi-2q-dfGz5Zl9gqPvWsg9z7Eij5pded1ZLZrsJeDhLBYdKJtZ7iFqd4047TWSrLNdkCkTyCW3-VgUCdxa2Dd-DPxPAQCXevjud8t2UOaLnddOhxYUHfUp9CDZ1m3TL6FQeOTwVg2Rkz3FD_VJcedfmXfm1C2QtLLY1h9DCmWbDxXB-qx6qummBv2M5BA/w400-h213/m0xpd%20Looping%20ADSR.png" width="400" /></a></div><br /><div style="text-align: left;"><br /></div><div style="text-align: left;">Here's the new module from front, back and side:</div><div style="text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjkWK6_zDfZtScKgByJS-uP39rg7eol2BI7jLIp9Q0xAfgAit24UDE3HSgDtE4pjKfqrLu8_4Eub4a2CMqTMmUp-ovjbsFcmgfN4V1YjWcpLA8KVqOB8Pg28MqQcpR4Z-Bnwbs4IJ1Z8X6Sb_h9hMnChJP9nCil30_6Pr9TgQOK4pTOiavFD3oeqMeD1A/s3800/IMG_3078.heic" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="3800" data-original-width="1548" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjkWK6_zDfZtScKgByJS-uP39rg7eol2BI7jLIp9Q0xAfgAit24UDE3HSgDtE4pjKfqrLu8_4Eub4a2CMqTMmUp-ovjbsFcmgfN4V1YjWcpLA8KVqOB8Pg28MqQcpR4Z-Bnwbs4IJ1Z8X6Sb_h9hMnChJP9nCil30_6Pr9TgQOK4pTOiavFD3oeqMeD1A/s320/IMG_3078.heic" width="130" /></a><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhoUR-SAucFpCAMSd1bkLwVphHUT8gsRW0U4tCtOodnNdl8LxM_fB9kzZo3fOD4tI85_lKQHKqAhO9xiheISG8waaat8So2Gxp7GXn3DQIWPePCMBKhHIAxS92ln5ytK00TQ0lGFVnBTdMaEDscsNOpYRbHrh5alh_Qab2jpR2m1nhI6Zia53PaqEIZaQ/s2926/IMG_3299.HEIC" style="margin-left: 1em; margin-right: 1em; text-align: center;"><img border="0" data-original-height="2926" data-original-width="1403" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhoUR-SAucFpCAMSd1bkLwVphHUT8gsRW0U4tCtOodnNdl8LxM_fB9kzZo3fOD4tI85_lKQHKqAhO9xiheISG8waaat8So2Gxp7GXn3DQIWPePCMBKhHIAxS92ln5ytK00TQ0lGFVnBTdMaEDscsNOpYRbHrh5alh_Qab2jpR2m1nhI6Zia53PaqEIZaQ/s320/IMG_3299.HEIC" width="153" /></a><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJr3aIO-LuqdTUR3R5qkalE97VGax7oHgbUD62BGDZlcjpmCyoFXxM0odmNYtOFjCtn0wyZGt2IscZROpDxItUN-__s-W3TBSGxgnZWW5e1SzzFV-8B6SsgOyH4DfeFdau2z_3MS12QHqfhlRTj_ZyXWtIA3iFN1vDTecSsmO5nB6M6edmqmt0-onfRw/s2982/IMG_3300.HEIC" style="clear: right; display: inline; margin-bottom: 1em; margin-left: 1em; text-align: center;"><img border="0" data-original-height="2982" data-original-width="1160" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJr3aIO-LuqdTUR3R5qkalE97VGax7oHgbUD62BGDZlcjpmCyoFXxM0odmNYtOFjCtn0wyZGt2IscZROpDxItUN-__s-W3TBSGxgnZWW5e1SzzFV-8B6SsgOyH4DfeFdau2z_3MS12QHqfhlRTj_ZyXWtIA3iFN1vDTecSsmO5nB6M6edmqmt0-onfRw/s320/IMG_3300.HEIC" width="124" /></a></div><br /><div style="text-align: left;">Note the complete absence of any wiring - lovely to my failing eyes and unsteady hands! This is the way 'real' (i.e. commercial) Eurorack modules are made - for good reason.</div><div style="text-align: left;"><br /></div><div style="text-align: left;">Note also the adorable little illuminated push button used as both manual gate switch and gate indicator (seen only as a white circle in the picture above, left). It is the Thonk <a href="https://www.thonk.co.uk/shop/low-profile-led-buttons/">Low-Profile LED Button</a>, which I used on the <a href="http://m0xpd.blogspot.com/2023/03/a-scalable-multiplexer-for-eurorack.html">multiplexer</a> and for which I posted an Eagle library<a href="https://github.com/m0xpd/4-1-Mux-for-Eurorack/blob/main/Hardware/THONK_Illuminated_PushButton.lbr"> here</a>.</div><div style="text-align: left;"><br /></div><div style="text-align: left;">Needless to say (I hope) the ADSR module - including the looping addition - works perfectly. The new build format, with PCBs and panels from <a href="https://jlcpcb.com/">JLCPCB</a> (usual disclaimer) has allowed me easily to build 3 units, which now see service in the m0xpd synth; duplication is a great benefit of this approach over stripboard and panel wiring!</div><div style="text-align: left;"><br /></div><div style="text-align: left;">I should say that there are also links to files for a Eurorack PCB version of the YuSynth 7555 envelope generator on Eddy's site. Whilst these are great, the PCB does not house the controls / connectors etc (like the PCBs on YuSynth, intended for 5U) and so does nothing to eliminate the wiring task from the build. I do not wish to appear to diminish the importance and value of these files, but they do not meet my need.</div><div style="text-align: left;"><br /></div><div style="text-align: left;">The second of my Eddy-inspired new builds is a Low Frequency Oscillator. </div><div style="text-align: left;"><br /></div><div style="text-align: left;">My first LFO goes right back to <a href="http://m0xpd.blogspot.com/2017/02/a-modular-is-born.html">the start of my synth adventure</a>. It is a design by the late, great Ray Wilson, whose website '<a href="http://musicfromouterspace.com/">Music From Outer Space</a>' (MFOS) has been left up as a tribute to Ray's creativity and as a wonderful resource. My original LFO offered two oscillators with square or ramp outputs. </div><div style="text-align: left;"><br /></div><div style="text-align: left;">When I decided (in January this year) to build a new LFO, I looked again at Eddy's site. Sure enough, there was a suggestion there for <a href="https://www.eddybergman.com/2022/01/dual-lfo-eurorack.html">an LFO with 'variable skew' </a>designed by Ken Stone. I was attracted by Eddy's words: </div></div><blockquote style="border: none; margin: 0px 0px 0px 40px; padding: 0px;"><div class="separator" style="clear: both; text-align: center;"><div style="text-align: left;">"<span style="text-align: center;">A simple LFO with pulsewave (with variable pulse width) and a seamless transition between a Ramp wave, Triangle wave and Sawtooth wave using one potmeter. With LED rate indicators and Speed and Shape controls." </span></div></div></blockquote><div class="separator" style="clear: both; text-align: center;"><div style="text-align: left;"><span style="text-align: center;">However, I couldn't help remembering something similar on the MFOS site.</span></div><div style="text-align: left;"><span style="text-align: center;"><br /></span></div><div style="text-align: left;"><span style="text-align: center;">Sure enough, there is a <a href="http://musicfromouterspace.com/analogsynth_new/OLDIESBUTGOODIES/LFO/lfo-1.html">'variable skew' design on MFOS</a> which offers the additional benefit of a 'sinewave' output. That got me thinking.</span></div><div style="text-align: left;"><span style="text-align: center;"><br /></span></div><div style="text-align: left;"><span style="text-align: center;">I wanted a 'sinewave' output, because I like the idea of modulation sources without discontinuities (like the step-wise discontinuities in the squarewaves or the gradient discontinuities in the ramp, neither of which are really what we want when we're trying to make "whoosing" or "swirling" effects...). </span></div><div style="text-align: left;"><span style="text-align: center;"><br /></span></div><div style="text-align: left;"><span style="text-align: center;">I decided to go with something closer to the MFOS design but, as a fully signed up cheapskate, I resented the idea of 'wasting' an LM13700 on the task of triangle to sinewave conversion, even though I have an embarrassing number of 13700s in 'stores'. Instead, I used the old <a href="https://www.timstinchcombe.co.uk/index.php?pge=trisin">differential pair ploy</a>, now widely associated with Thomas Henry, familiar to <a href="https://www.eddybergman.com/2020/01/synthesizer-build-part-18-really-good.html"> readers of Eddy's site</a>. </span></div><div style="text-align: left;"><span style="text-align: center;"><br /></span></div><div style="text-align: left;"><span style="text-align: center;">Here's my schematic:</span></div><div style="text-align: left;"><span style="text-align: center;"><br /></span></div><div style="text-align: left;"><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjzngIGmjwTcOTq5pXc5twX-mJ5AOQ_yzPRBA0s86s3rdok2KPPLxnkl6O6VDHQYr8wHUFbgerbYjjSpPeLlGldy6-xTK7rPuEM4cIfjFWiMT3kigbEgE4FWlrjyb6qYW-c4hf_FOXFdHzNoOXZEOVq0yDX4itpNC16YwCU5NqhWAFZabciWI7P0hXppQ/s2378/m0XPD%20LFO.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1570" data-original-width="2378" height="264" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjzngIGmjwTcOTq5pXc5twX-mJ5AOQ_yzPRBA0s86s3rdok2KPPLxnkl6O6VDHQYr8wHUFbgerbYjjSpPeLlGldy6-xTK7rPuEM4cIfjFWiMT3kigbEgE4FWlrjyb6qYW-c4hf_FOXFdHzNoOXZEOVq0yDX4itpNC16YwCU5NqhWAFZabciWI7P0hXppQ/w400-h264/m0XPD%20LFO.png" width="400" /></a></div><br /><span style="text-align: center;"><br /></span></div><div style="text-align: left;"><span style="text-align: center;"><br /></span></div><div style="text-align: left;"><span style="text-align: center;">Here's one of my new LFOs, seen from all important angles:</span></div><div style="text-align: left;"><span style="text-align: center;"><br /></span></div><div style="text-align: left;"><div class="separator" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgWvj6dOtKHJW7OFy5Vy4yOG7i3DaUItD5hReFJkMMXuE-Odsf5Mwg42Xkxie-JQSQm8Iu5AkzBDtv8NteoysK0VdGCtV49Pz1jeowyYbd5oAS0T_iDSQTeSspZk3yVXWeAI6KqF3RA7T2lGFTuwLq9gvVuFsOX6rLYHxOsOUgtWpkHaCc-1Z3qCPlXeQ/s3389/IMG_3301.HEIC" style="clear: left; float: left; margin-bottom: 1em; margin-left: 1em;"></a><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEicVa0uPvF8k9uo8fFYAuEyvIs8nbPwR7f406XO-ElLcQ3Zt7t-NFc9J_57788s51fUaZNNqm-GR6R_NGJSzpwskoABMnSpzICxmv8-9z0I0o5H6xDHKCySgFBiuxLWrHhC33c-R1qVVlxP4gV1P7UZ8ct_kF4mzl3sSPETOK1-o1Cq6CIz2rjNQ-aQxA/s3296/IMG_3302.HEIC" style="clear: right; display: inline; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" data-original-height="3296" data-original-width="1227" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEicVa0uPvF8k9uo8fFYAuEyvIs8nbPwR7f406XO-ElLcQ3Zt7t-NFc9J_57788s51fUaZNNqm-GR6R_NGJSzpwskoABMnSpzICxmv8-9z0I0o5H6xDHKCySgFBiuxLWrHhC33c-R1qVVlxP4gV1P7UZ8ct_kF4mzl3sSPETOK1-o1Cq6CIz2rjNQ-aQxA/s320/IMG_3302.HEIC" width="119" /></a><img border="0" data-original-height="3389" data-original-width="1224" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgWvj6dOtKHJW7OFy5Vy4yOG7i3DaUItD5hReFJkMMXuE-Odsf5Mwg42Xkxie-JQSQm8Iu5AkzBDtv8NteoysK0VdGCtV49Pz1jeowyYbd5oAS0T_iDSQTeSspZk3yVXWeAI6KqF3RA7T2lGFTuwLq9gvVuFsOX6rLYHxOsOUgtWpkHaCc-1Z3qCPlXeQ/s320/IMG_3301.HEIC" width="116" /><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgO5-FSaweFgcoJtnmV7T7yI_iD1UNlzVCp9dLeSGKSCiBf-H2dJLSgrgHTg8RdrJlT8qGta9KnVcMPbpkoofovo4vtVfwJa8ASz30g1oSL2_g3fnx9wSrpkNf358T_DZbAW9X4xXfN2u68LN-bD8F1tVeHCaNDAm39Vthhz0Rff2nBR8tCD12MHKjong/s3261/IMG_3303.HEIC" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="3261" data-original-width="1296" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgO5-FSaweFgcoJtnmV7T7yI_iD1UNlzVCp9dLeSGKSCiBf-H2dJLSgrgHTg8RdrJlT8qGta9KnVcMPbpkoofovo4vtVfwJa8ASz30g1oSL2_g3fnx9wSrpkNf358T_DZbAW9X4xXfN2u68LN-bD8F1tVeHCaNDAm39Vthhz0Rff2nBR8tCD12MHKjong/s320/IMG_3303.HEIC" width="127" /></a></div></div><div style="text-align: left;"><br /></div><div style="text-align: left;"><span style="text-align: center;"><br /></span></div><div style="text-align: left;"><span style="text-align: center;"><br /></span></div><div style="text-align: left;"><span style="text-align: center;"><br /></span></div><div style="text-align: left;"><span style="text-align: center;"><br /></span></div><div style="text-align: left;"><span style="text-align: center;"><br /></span></div><div style="text-align: left;"><span style="text-align: center;"><br /></span></div><div style="text-align: left;"><span style="text-align: center;"><br /></span></div><div style="text-align: left;"><span style="text-align: center;"><br /></span></div><div style="text-align: left;"><span style="text-align: center;"><br /></span></div><div style="text-align: left;"><span style="text-align: center;"><br /></span></div><div style="text-align: left;"><span style="text-align: center;"><br /></span></div><div style="text-align: left;"><span style="text-align: center;"><br /></span></div><div style="text-align: left;"><span style="text-align: center;"><br /></span></div><div style="text-align: left;"><span style="text-align: center;"><br /></span></div><div style="text-align: left;"><span style="text-align: center;"><br /></span></div><div style="text-align: left;"><span style="text-align: center;"><br /></span></div><div style="text-align: left;"><span style="text-align: center;"><br /></span></div><div style="text-align: left;"><span style="text-align: center;"><br /></span></div><div style="text-align: left;"><span style="text-align: center;"><br /></span></div><div style="text-align: left;"><span style="text-align: center;">Once again, there's not a wire in sight. Oh and yes - you do see an LM324 there. I'm starting a one-man crusade against the indiscriminate use of TL074s everywhere. There are simpler alternatives which should be used, especially when the price of semiconductors (and everything else) is so crazy! I even got a bunch of TL084s (at a good price) and intend to remind the world that there may be times when we need the JFET input impedance, but don't need the last scintilla the TL07x offers over the TL08x. Perhaps I shouldn't say that in case it pushes up the price of TL084s!</span></div><div style="text-align: left;"><span style="text-align: center;"><br /></span></div><div style="text-align: left;"><span style="text-align: center;">Of course, the 'sinewave' is only a (poor man's approximation to a) sinewave when the shape control is centralised; at either extreme of travel the 'sine' output approaches what might best be described as a train of sigmoid functions, which is why I labelled the output "Curve" on the front panel.</span></div><div style="text-align: left;"><span style="text-align: center;"><br /></span></div><div style="text-align: left;"><span style="text-align: center;">Needless to say (again) everything works fine and it is a joy to have too many LFOs, rather than too few.</span></div><div style="text-align: left;"><span style="text-align: center;"><br /></span></div><div style="text-align: left;"><span style="text-align: center;">So - here are two modules, built according to my new design practice, standing on the shoulders of the original design work of Yves Usson and Ray Wilson and motivated (<i>at least in part</i>) by the words of blogger and inspiration Eddy Bergman.</span></div><div style="text-align: left;"><span style="text-align: center;"><br /></span></div><div style="text-align: left;"><span style="text-align: center;">73,</span></div><div style="text-align: left;">m0xpd</div><div style="text-align: left;"><br /></div></div>m0xpdhttp://www.blogger.com/profile/13241728975907453128noreply@blogger.com0tag:blogger.com,1999:blog-8044784353067686026.post-46949767214151284302023-03-07T11:46:00.011+00:002023-03-07T17:09:28.991+00:00A Scalable Multiplexer for Eurorack<p>I've been playing with the electronic synthesis and manipulation of sound - mainly in the context of <a href="https://en.wikipedia.org/wiki/Eurorack">Eurorack</a> Modular Synths - over the past few months.</p><p>Whilst it is relatively easy to set up systems which make slowly evolving 'sound environments' (<i>let's not tempt fate by using the grand label 'generative music'</i>), it is harder to make wholesale change within these experiments. But change is fundamentally important in music.</p><p>In fact, musical styles are marked or defined by changes between different 'phases':</p><blockquote style="border: none; margin: 0px 0px 0px 40px; padding: 0px;"><p style="text-align: left;"><span style="color: red;">Songs can have verses, choruses, bridges, 'pre-choruses', etc.. Sonatas have an exposition a development and a recapitulation. Rondos have ABACA or ABACABA...</span></p></blockquote><p>You get the idea.</p><p>I dreamed of a system which would allow me to switch between a number of discrete 'phases' within a composition (/"patch") on a synthesiser. The system would need to make a parallel switch of a number of audio signals, control voltages, trigger and timing signals. </p><p>The result of this dream was a scalable 4:1 multiplexer system, the design of which <a href="https://github.com/m0xpd/4-1-Mux-for-Eurorack" target="_blank">I've just published</a>.</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEixsjsFAxQgKSYNND7PkXA1n4Et0R4_o3mpJN4cooIzdA38ODrymPUdztiSiX3FwzqbwPN0MZs8gVWx-9pZktWt60XR2bsf-f6J2XZlN1GLE_OZjSDzA811dHs7h1maKMIWRrRZObBr60L4hT7A716pwnqZkr12FNbycn6kpTGFiEf8O7-Vagos45Nf3Q/s4032/MuxSystemInSitu.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="3024" data-original-width="4032" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEixsjsFAxQgKSYNND7PkXA1n4Et0R4_o3mpJN4cooIzdA38ODrymPUdztiSiX3FwzqbwPN0MZs8gVWx-9pZktWt60XR2bsf-f6J2XZlN1GLE_OZjSDzA811dHs7h1maKMIWRrRZObBr60L4hT7A716pwnqZkr12FNbycn6kpTGFiEf8O7-Vagos45Nf3Q/s320/MuxSystemInSitu.jpg" width="320" /></a></div><br /><p>The system comprises: </p><p></p><ul style="text-align: left;"><li>a 'master' module, which provides two channels of 4:1 multiplexing and a controller, and </li><li>a 'slave' module, which adds another two channels of 4:1 multiplexing under the control of the master. </li></ul><p></p><p>The master can control several slaves, each of which connect to the master on a 'daisy-chain' ribbon connector.</p><p>The four inputs to one of the multiplexer channels in each module (master or slave) are "normalled" to four potentiometers [that is synthesiser-speak for "if you don't plug anything into these sockets, the voltage from the potentiometers will be applied to these inputs"]. This allows the system to generate sequences of control voltages, set up locally on the potentiometers. </p><p>The system is the first pair of Eurorack modules in which I have used surface mount components, which was helpful in achieving the component density on the PCBs. These were already busy with the sockets and user interface components, particularly on the 'master' module. The rear of the (prototype) systems are seen below.</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiuC0gxvbVJPyb_zVUyVy0B37R3mdHM26-WuxL5g7ZSSRsMmttpEbrQUnIMVH0iZe-VGeZy7CxxJQIUwdlMb7HMOzNUc2xiNXXTZy5BlFcBYJhk9p6qVYFnoRBHZpjHK4GmiVt9ot0XEYU4m7J_hO_FtHICdKnPp0oPOD9LIku4EfMSAHcTwWbNiEPBGQ/s4032/MasterRear.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="4032" data-original-width="3024" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiuC0gxvbVJPyb_zVUyVy0B37R3mdHM26-WuxL5g7ZSSRsMmttpEbrQUnIMVH0iZe-VGeZy7CxxJQIUwdlMb7HMOzNUc2xiNXXTZy5BlFcBYJhk9p6qVYFnoRBHZpjHK4GmiVt9ot0XEYU4m7J_hO_FtHICdKnPp0oPOD9LIku4EfMSAHcTwWbNiEPBGQ/s320/MasterRear.jpg" width="240" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: left;">Readers will recognise from the image above that the control functions are implemented in an Arduino Nano, which was chosen for convenience. </div><div class="separator" style="clear: both; text-align: center;"><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi0hVsXUUsjr35HXouCWznmZ7rVSVOfMuNo7SWA1ogcdQ33S0L6QNCFAPbDkUI9ckyVk7M7S18zWHTBKIYOD8x-5FtfJZApFVJR1dUFEh29xpOEDc2HJJpgQ_hwEQKgxSY4fa7UZCgwo_0bB7gb70HCbh4UjPIARgqjYQMlQqBYXaumfQP2K6egIEinLA/s4032/SlaveRear.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="4032" data-original-width="3024" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi0hVsXUUsjr35HXouCWznmZ7rVSVOfMuNo7SWA1ogcdQ33S0L6QNCFAPbDkUI9ckyVk7M7S18zWHTBKIYOD8x-5FtfJZApFVJR1dUFEh29xpOEDc2HJJpgQ_hwEQKgxSY4fa7UZCgwo_0bB7gb70HCbh4UjPIARgqjYQMlQqBYXaumfQP2K6egIEinLA/s320/SlaveRear.jpg" width="240" /></a></div><br /></div><div class="separator" style="clear: both; text-align: left;">The prototype PCBs and panels were made by<a href="https://jlcpcb.com/"> JLCPCB</a> (usual disclaimer).</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">Details of the system, including schematics, PCB layouts (EAGLE), front panel designs (Kicad) and controller code, as well as more description of features of the controller and user interface, are available <a href="https://github.com/m0xpd/4-1-Mux-for-Eurorack">here.</a></div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">The system attenuates the input signals before passing them through the (4052) multiplexer and then amplifies the output to restore signal level. It can handle bipolar signals to full Eurorack level. I avoided the requirement for 0.1% resistors by measuring and selecting from a hundred 1% resistors, itself an interesting exercise:</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjkJHd0JsFxrGaCW4r6iXOMPCk4bQnDe1Bq8Cue3rcQkSrIpwz8xFIkYSmwvsMhfNPniaSGyJ7jd0cCYDK71bBUKzgXTbV_5_j7IVAbRA5GcdKWJ1dBAiJDy5mIP_eyGAAi-14Z4kxn0oCDshT75D1eFmVYRBDKCkr11pYBIHxGRdIhCcK0Rmta5L-SMQ/s4032/ResistorSorting.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="3024" data-original-width="4032" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjkJHd0JsFxrGaCW4r6iXOMPCk4bQnDe1Bq8Cue3rcQkSrIpwz8xFIkYSmwvsMhfNPniaSGyJ7jd0cCYDK71bBUKzgXTbV_5_j7IVAbRA5GcdKWJ1dBAiJDy5mIP_eyGAAi-14Z4kxn0oCDshT75D1eFmVYRBDKCkr11pYBIHxGRdIhCcK0Rmta5L-SMQ/s320/ResistorSorting.jpg" width="320" /></a></div><br /><div class="separator" style="clear: both; text-align: left;">You can see the bins of this physical histogram and the rather predictable distribution of the sample of one hundred 1206 resistors. </div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">I hope somebody out there finds this system of interest. It works like a charm and is great fun to 'play' with.</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">73,</div><div class="separator" style="clear: both; text-align: left;">m0xpd</div><div class="separator" style="clear: both; text-align: left;"><br /></div><p><br /></p>m0xpdhttp://www.blogger.com/profile/13241728975907453128noreply@blogger.com0tag:blogger.com,1999:blog-8044784353067686026.post-2575080026685122932017-10-08T13:00:00.000+01:002017-10-08T13:00:58.258+01:00Gaelic WSPRsI was fortunate to spend a week on the banks of Loch na Deasport on the Isle of Lewis and (<a href="http://m0xpd.blogspot.co.uk/2017/09/ipad-wspr.html">as previously advertised</a>) I decided to throw out some WSPR signals.<br />
<br />
The cottage in which I was staying had a convenient 'fence-post' to support the telescopic pole I use to hold up the centre of my '<a href="http://m0xpd.blogspot.co.uk/2015/05/excess-aerial-baggage.html">holiday dipole</a>',
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-3JUz-9MiRxM/WdoSGru7spI/AAAAAAAAICo/Wr3lyQuiGKwr9hetXePO71D8yrhzZ1SRQCLcBGAs/s1600/Scottish%2BAntenna.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1024" data-original-width="844" height="400" src="https://4.bp.blogspot.com/-3JUz-9MiRxM/WdoSGru7spI/AAAAAAAAICo/Wr3lyQuiGKwr9hetXePO71D8yrhzZ1SRQCLcBGAs/s400/Scottish%2BAntenna.jpg" width="328" /></a></div>
<br />
so I was soon in action on 20 and 40 metres.
<br />
<br />
It was nice to see the 'xpd' lines on the WSPR map diverging from somewhere other than Manchester, for a change...<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-33UKxUk4vAk/Wdn2huAyVpI/AAAAAAAAICE/mJ-cK-xTceIQ03iZDMp_NlPVpU82kSRNACLcBGAs/s1600/Map1.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="647" data-original-width="640" height="320" src="https://4.bp.blogspot.com/-33UKxUk4vAk/Wdn2huAyVpI/AAAAAAAAICE/mJ-cK-xTceIQ03iZDMp_NlPVpU82kSRNACLcBGAs/s320/Map1.jpg" width="316" /></a></div>
<br />
and my new /a location allowed me to reach places I'm not ordinarily able to cover from the home QTH (at normal WSPR power levels, at least), including some novel parts of Canada, the mid-west and Japan (the latter seen here)...<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://2.bp.blogspot.com/-6g_T2nk78vE/Wdn3Hq7HnnI/AAAAAAAAICM/YPpeU_INA_shCVcmFJJAnLDTCVgYPLbOQCLcBGAs/s1600/Map2.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="647" data-original-width="640" height="320" src="https://2.bp.blogspot.com/-6g_T2nk78vE/Wdn3Hq7HnnI/AAAAAAAAICM/YPpeU_INA_shCVcmFJJAnLDTCVgYPLbOQCLcBGAs/s320/Map2.jpg" width="316" /></a></div>
<br />
I did try a few CQ calls on CW, but wasn't heard, despite being spotted by the <a href="http://www.reversebeacon.net/">Reverse Beacon Network</a>. This being an 'ordinary' holiday, I wasn't able to spend much time at the key trying for a contact - which was precisely why I left it with the WSPR mode.<br />
<br />
Another important mission whilst on Lewis and Harris was to indulge in the delicious <a href="https://en.wikipedia.org/wiki/Stornoway_black_pudding">Stornoway Black Pudding</a>, to which I was introduced when reading Alastair McIntosh's equally delicious book <a href="https://www.amazon.co.uk/Poachers-Pilgrimage-Journey-Alastair-McIntosh/dp/1780273614/">Poacher's Pilgrimage</a> and which I've been eating (<i>whenever I can find it</i>) ever since. Being on Lewis gave me the perfect opportunity to visit the lodestone, so the xyl and I found three Stornoway butchers - each claiming to have 'original recipes' - and sampled their wares.<br />
<br />
After careful tasting sessions, we found we preferred the offering from <a href="https://www.charlesmacleod.co.uk/">Charles MacLeod</a>, whose shop (below left) is near the Co-Op on the outskirts of town. We purchased enough pudding to sink the <a href="https://www.calmac.co.uk/destinations/lewis">CalMac</a> ferry, which we have today sliced (the pudding, not the ferry) and put into the freezer in breakfast-sized portions, some of which you see below right...<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-zZq5tqMZQr8/Wdn6U7f0i8I/AAAAAAAAICY/xSrLJkuu45AufFZwNbcHseW7DXRljFOOQCLcBGAs/s1600/Pudding.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="258" data-original-width="640" height="129" src="https://4.bp.blogspot.com/-zZq5tqMZQr8/Wdn6U7f0i8I/AAAAAAAAICY/xSrLJkuu45AufFZwNbcHseW7DXRljFOOQCLcBGAs/s320/Pudding.jpg" width="320" /></a></div>
<br />
Charles MacLeod is known locally as 'Charley Barley' - usual disclaimer. The other butchers and their puddings were good too.<br />
<br />
You go into wild places like the Outer Hebrides to get away from it all - so you'll imagine my surprise when I was walking down a backstreet of Stornoway and heard a cry of 'Paul'! It was a fellow radio amateur, well known on the RSGB / G-QRP circuit, who I'd seen only a matter of weeks before at the <a href="http://www.telfordhamfest.org.uk/">Telford</a> event and who had also taken exactly the same week 'away from it all' with his xyl.<br />
<br />
Small world indeed.<br />
<br />
...-.- de m0xpd<br />
<br />m0xpdhttp://www.blogger.com/profile/13241728975907453128noreply@blogger.com0tag:blogger.com,1999:blog-8044784353067686026.post-17326891106116969152017-09-20T14:32:00.000+01:002017-09-20T14:43:09.516+01:00iPad WSPRI'm about to take a few weeks rest up in Bonnie M-Land. Since I always take the trusty <a href="http://m0xpd.blogspot.co.uk/2010/04/birthday-in-blackpool.html">FT817</a> on (domestic) holidays and am never far from an iPad or iPhone, I thought it might be fun to see if there is an iOS APP which could squirt WSPR signals out of my <a href="http://m0xpd.blogspot.co.uk/2015/05/excess-aerial-baggage.html">holiday antenna</a>.<br />
<br />
Sure enough, Federico, IW2MVI, has put together a terrific offering called iWSPR, which does the business. It is available for a <a href="https://itunes.apple.com/us/app/iwspr-tx-qrp-hamradio/id781433570?mt=8">reasonable fee on the App Store</a>.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://3.bp.blogspot.com/-KmL4SATmBUg/WcJmm2drIvI/AAAAAAAAIBY/bbmfZG7BnG8L6xNJp5Vxo7k1HbvlUhBxwCLcBGAs/s1600/iWSPR%2BLogo.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="301" data-original-width="300" height="200" src="https://3.bp.blogspot.com/-KmL4SATmBUg/WcJmm2drIvI/AAAAAAAAIBY/bbmfZG7BnG8L6xNJp5Vxo7k1HbvlUhBxwCLcBGAs/s200/iWSPR%2BLogo.jpg" width="199" /></a></div>
<br />
You can run iWSPR 'acoustically coupled' to your rig - but that is pretty much asking for trouble and it is <u>so</u> 1970s. I decided to look into lashing together a cable to connect the iPad to my '817.<br />
<br />
Ordinarily, this wouldn't be a problem but for the fact that the '817 has no VOX on the DATA input and the iPad only offers an audio output. Consequently I had to derive a PTT signal from the audio output.<br />
<br />
Federico offers such a circuit in <a href="http://subdimensions.com/AppDocs/iWSPR2_iPhone_to_Hamradio_Circuit_Diagram.pdf">notes supporting his software</a>, using a FET to switch the PTT line. However, I wondered if a simpler solution would work.<br />
<br />
I threw together this circuit, in which the audio output is rectified by a voltage doubler. The same idea is used by many other dabblers, including <a href="http://www.vk2zay.net/article/161">Alan Yates</a>, vk2zay. I found there's plenty enough AF output from the iPad to generate sufficient d.c. voltage to allow the BJT to switch the FT817's PTT line reliably (in my case the transistor was a BC557).<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-2El8gQPbotM/WcJomsV1oYI/AAAAAAAAIBk/L142Pw7YD6AgHCtADEnXAF_Z8J--D015ACLcBGAs/s1600/Schematic.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="377" data-original-width="1024" height="117" src="https://1.bp.blogspot.com/-2El8gQPbotM/WcJomsV1oYI/AAAAAAAAIBk/L142Pw7YD6AgHCtADEnXAF_Z8J--D015ACLcBGAs/s320/Schematic.jpg" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
The little circuit is designed to be used with my existing '<a href="http://m0xpd.blogspot.co.uk/2010/04/dead-mice-in-shack.html">dead mice</a>' interface, which is seen next to it here - there's an extra connection to the PTT line via the big ugly red 4mm plug (I was in a hurry).</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-V5wsgks-qkE/WcJo1zRUMWI/AAAAAAAAIBo/HGIGuvB-j1UJbk12kYkJ7Aaz-y0z8HM9gCLcBGAs/s1600/Bench.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="321" data-original-width="640" height="160" src="https://4.bp.blogspot.com/-V5wsgks-qkE/WcJo1zRUMWI/AAAAAAAAIBo/HGIGuvB-j1UJbk12kYkJ7Aaz-y0z8HM9gCLcBGAs/s320/Bench.jpg" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
The whole kit was tested here on the bench at home before we pile into the car for the drive north tomorrow.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-GjKZBoWfS98/WcJpHGAJ8GI/AAAAAAAAIBs/X4DwbILZ0WUdUZE3Iv112-odGnesirzrACLcBGAs/s1600/Testing.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="478" data-original-width="640" height="239" src="https://1.bp.blogspot.com/-GjKZBoWfS98/WcJpHGAJ8GI/AAAAAAAAIBs/X4DwbILZ0WUdUZE3Iv112-odGnesirzrACLcBGAs/s320/Testing.jpg" width="320" /></a></div>
<br />
Putting out a lazy 5 W on 20m I was easily able to get all over the place, before throttling back to a more conservative and appropriate 500mW.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-2LP8bVu2qHc/WcJpbXIXo5I/AAAAAAAAIBw/915dJDOB568Od0jmE6JTqtLWGi5FHfm3gCLcBGAs/s1600/Reports.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="563" data-original-width="1024" height="175" src="https://4.bp.blogspot.com/-2LP8bVu2qHc/WcJpbXIXo5I/AAAAAAAAIBw/915dJDOB568Od0jmE6JTqtLWGi5FHfm3gCLcBGAs/s320/Reports.jpg" width="320" /></a></div>
<br />
I hope to contact you from Scotland, either on WSPR or (perhaps) on other modes.<br />
<br />
...-.- de m(m)0xpdm0xpdhttp://www.blogger.com/profile/13241728975907453128noreply@blogger.com1tag:blogger.com,1999:blog-8044784353067686026.post-61499736287867133202017-04-18T19:05:00.000+01:002017-04-18T19:32:16.856+01:00Volca Sync DIYA few weeks back Cameron (yes - the Cameron who <a href="http://m0xpd.blogspot.co.uk/2017/01/analog-synths.html">started all this synthesizer nonsense</a>) came into the office with a neat little toy. It was the <a href="http://www.korg.com/uk/products/dj/volca_keys/">Volca Keys</a> Analog Synthesizer, made by <a href="http://www.korg.com/uk/">Korg</a>. It was great for annoying other occupants of the office (especially Tom) but it couldn't really do anything my modular couldn't already do (apart from in the sequencer department and I already had plans to put that right).<br />
<br />
Last week, I found myself outside a music shop and I went inside and got myself another member of the Korg Volca family, which could do some different things; the <a href="http://www.korg.com/uk/products/dj/volca_fm/">Volca FM</a>, which is a Digital FM synthesizer...<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://3.bp.blogspot.com/-fSmMllg59hI/WPZJ1ibgQeI/AAAAAAAAIAc/O73jODoUPSQZn-88dKEbyP_EkyxE60q-ACLcB/s1600/Volca%2BFM.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="258" src="https://3.bp.blogspot.com/-fSmMllg59hI/WPZJ1ibgQeI/AAAAAAAAIAc/O73jODoUPSQZn-88dKEbyP_EkyxE60q-ACLcB/s400/Volca%2BFM.jpg" width="400" /></a></div>
<br />
I spent quite a few happy hours over the Easter weekend putting right the deficit on my modular synthesizer by building the sequencer which I've been plotting for the last few weeks. Once I had that running, I thought it would be neat to synchronize the little Volca up to the modular, so the two can play along together...<br />
<br />
The Volca FM (<i>in common with the other units in the Volca series</i>) has a couple of sync connections on its front panel: SYNC IN and a SYNC OUT, both on 3.5mm TRS jacks. The user manual explains their use and enough to deduce the 'format'...<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://2.bp.blogspot.com/-TpTGOAxzYMo/WPZMPmh8ixI/AAAAAAAAIAo/n64J58c5Bw0y-Ywk-fDCPgA-QDXfLyLUwCLcB/s1600/Sync%2BSpec.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="125" src="https://2.bp.blogspot.com/-TpTGOAxzYMo/WPZMPmh8ixI/AAAAAAAAIAo/n64J58c5Bw0y-Ywk-fDCPgA-QDXfLyLUwCLcB/s400/Sync%2BSpec.jpg" width="400" /></a></div>
<br />
The new sequencer for my modular synth is controlled by an <a href="https://www.arduino.cc/en/Main/ArduinoBoardNano">Arduino (NANO)</a> and has 5V clock signals bouncing around all over the place. But there isn't a 15ms pulse / trigger. Of course, I could generate one in software and output it over a GPIO but<br />
<ol>
<li>that would take up resources in the code and, more importantly, </li>
<li>I have already assigned all the IO resources of the NANO to other functions. </li>
</ol>
So - I decided to generate the sync pulses from the existing clock pulses using hardware.<br />
<br />
All that's needed is a simple one-shot, triggered at the leading edge of each of my existing clock pulses. Sounds like an easy job for a venerable <a href="https://en.wikipedia.org/wiki/555_timer_IC">555</a>. <br />
<br />
Here's my circuit:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-lCwvasMKZc4/WPZNNFlfQnI/AAAAAAAAIAw/IUpyriSTu24JANV-UE9NUxaYqM6EnYpZwCLcB/s1600/Schema.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="226" src="https://4.bp.blogspot.com/-lCwvasMKZc4/WPZNNFlfQnI/AAAAAAAAIAw/IUpyriSTu24JANV-UE9NUxaYqM6EnYpZwCLcB/s400/Schema.jpg" width="400" /></a></div>
<br />
I put the trimmer on the resistor which sets the time constant as I didn't know just how sniffy the Volca would be about the precise length of the 15ms pulses (the total resistance should be about 137 kOhms for a 0.1uF capacitor). As it happens, I suspect a 100k and a (fixed) 33k in series would do fine.<br />
<br />
Here's the circuit in development on a solderless breadboard, with my sequencer off to the left:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-Uj0gQXDC2do/WPZOJbZNKKI/AAAAAAAAIA0/04mwtEJwdU0KmH9lH2ytqV5wEQ4zwTY7gCLcB/s1600/Develop%2B1.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="287" src="https://4.bp.blogspot.com/-Uj0gQXDC2do/WPZOJbZNKKI/AAAAAAAAIA0/04mwtEJwdU0KmH9lH2ytqV5wEQ4zwTY7gCLcB/s400/Develop%2B1.jpg" width="400" /></a></div>
<br />
Adjusting the trim pot allowed me to set the specified 15ms pulse length:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-VwR4hyYgKzQ/WPZOfntJcVI/AAAAAAAAIA4/IcqwFRB_tDsazrlNGOqz3WYLHSVYYx2tQCLcB/s1600/Pulse.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="247" src="https://1.bp.blogspot.com/-VwR4hyYgKzQ/WPZOfntJcVI/AAAAAAAAIA4/IcqwFRB_tDsazrlNGOqz3WYLHSVYYx2tQCLcB/s400/Pulse.jpg" width="400" /></a></div>
<br />
and here are a train of pulses, generated when my sequencer is stepping at its fastest rate (as currently programmed):<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-LzXRDxNMd9g/WPZOrJ5yhgI/AAAAAAAAIA8/aA26QU7z6-oOjmeO-xLCO-GCyHRaf_rvgCLcB/s1600/Pulse%2BTrain.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="247" src="https://1.bp.blogspot.com/-LzXRDxNMd9g/WPZOrJ5yhgI/AAAAAAAAIA8/aA26QU7z6-oOjmeO-xLCO-GCyHRaf_rvgCLcB/s400/Pulse%2BTrain.jpg" width="400" /></a></div>
<br />
Here's the circuit at the bottom of my (working, but not-yet completed) sequencer controller module:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-fwwm-aqrevk/WPZP8OYirOI/AAAAAAAAIBE/hvpSbF-M0kgBK36bcQQnnTqNyzr_hpNAQCLcB/s1600/Module.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://4.bp.blogspot.com/-fwwm-aqrevk/WPZP8OYirOI/AAAAAAAAIBE/hvpSbF-M0kgBK36bcQQnnTqNyzr_hpNAQCLcB/s320/Module.jpg" width="275" /></a></div>
<br />
The whole thing clocks the Volca FM perfectly:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-IrEri6Ly73A/WPZO7y3rqEI/AAAAAAAAIBA/sdNd5SfEnWMr1ppKG3YaREk1Nq2D_MStgCLcB/s1600/Finished.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="293" src="https://4.bp.blogspot.com/-IrEri6Ly73A/WPZO7y3rqEI/AAAAAAAAIBA/sdNd5SfEnWMr1ppKG3YaREk1Nq2D_MStgCLcB/s400/Finished.jpg" width="400" /></a></div>
<br />
I can't test to confirm that the same circuit will also drive the other Volcas (<i>because I don't have any</i>) but I'm sure it would. Perhaps I'll ask Cameron for a loan of the Keys, just to be sure.<br />
<br />
Now I need to arrange for a clock input to my sequencer to respond to the SYNC OUT of the little Volca - it only seems fair.<br />
<br />
...-.- de m0xpd <br />
<br />
<br />m0xpdhttp://www.blogger.com/profile/13241728975907453128noreply@blogger.com0tag:blogger.com,1999:blog-8044784353067686026.post-75167323411013418352017-02-26T13:19:00.001+00:002017-02-26T18:00:37.827+00:00Signal Processing on the ArduinoI've been doing some DSP on the Arduino<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-U-5vU4kgN8w/WLK4StazOiI/AAAAAAAAH9g/1KktS9LU7EsGt5T5RE7BMGxdWC7vhVeJQCLcB/s1600/Banner.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="212" src="https://4.bp.blogspot.com/-U-5vU4kgN8w/WLK4StazOiI/AAAAAAAAH9g/1KktS9LU7EsGt5T5RE7BMGxdWC7vhVeJQCLcB/s400/Banner.jpg" width="400" /></a></div>
<br />
Since signal processing is so computationally intensive, we tend to <a href="http://m0xpd.blogspot.co.uk/2014/12/arduino-sdr-iv.html">associate it</a> with powerful processors, like the mighty <a href="https://www.arm.com/">ARM</a> of the <a href="https://www.arduino.cc/en/Main/arduinoBoardDue">DUE</a>. However, it is entirely possible to do useful signal processing tasks - such as running digital filters, or even performing Fourier Transforms - on humble little processors like the ATmega328 on the Arduino. These past few days I've been doing just that.<br />
<br />
The application is within music - specifically, on my <a href="http://m0xpd.blogspot.co.uk/2017/02/a-modular-is-born.html">new modular synthesizer</a>. But don't look away just because you might not be interested in music, for underlying this is an entirely general application of real-time programming.<br />
<br />
My synthesizer already had (as you <a href="http://m0xpd.blogspot.co.uk/2017/02/a-modular-is-born.html">might have seen</a>) a couple of envelope generators, capable of producing exponential 'attack' and 'release' envelopes at the edges (or at the beginning) of a gate pulse. However, I wanted a more traditional '<a href="https://en.wikipedia.org/wiki/Synthesizer#Attack_Decay_Sustain_Release_.28ADSR.29_envelope">ADSR</a>' envelope generator with the capability to generate independent control of three time constants: attach, release and 'decay', as well as to manage the amplitude of a 'sustain' phase.<br />
<br />
This type of circuit needs two core elements:<br />
<ol>
<li>a first-order circuit with three controllable time constants </li>
<li>logic to switch between the three exponential decay phases and manage the 'sustain' phase.</li>
</ol>
Ordinary ADSR circuits charge or discharge a capacitor at three different rates; an analog solution involving a simple, first-order differential equation (albeit with changing coefficients). The exponential voltage required in any phase is the voltage on the capacitor of a trivial RC filter.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://2.bp.blogspot.com/-UR7SScbDrds/WLLTebfspAI/AAAAAAAAH_U/zdoaJYcXb2g7OBzDAdhOG2amCzOJ1XqdgCLcB/s1600/RC.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="138" src="https://2.bp.blogspot.com/-UR7SScbDrds/WLLTebfspAI/AAAAAAAAH_U/zdoaJYcXb2g7OBzDAdhOG2amCzOJ1XqdgCLcB/s200/RC.jpg" width="200" /></a></div>
<br />
It struck me that - given the requirement for the logic around the analog filter, the entire system might be better implemented by a micro-controller, replacing the analog 'filter' with its digital equivalent.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://3.bp.blogspot.com/-Oag4ZBir3vo/WLLTn_PRqyI/AAAAAAAAH_Y/e3lCtlqx5KQ2zVgBMp88QbmaeEiZyxQwACLcB/s1600/PIC.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="70" src="https://3.bp.blogspot.com/-Oag4ZBir3vo/WLLTn_PRqyI/AAAAAAAAH_Y/e3lCtlqx5KQ2zVgBMp88QbmaeEiZyxQwACLcB/s200/PIC.jpg" width="200" /></a></div>
<br />
I certainly don't claim any novelty in this thought - indeed, it was reading about <a href="http://electricdruid.net/product/loopenv-envelope-generator/">Tom Wiltshire's excellent Digital Envelope Generator</a> which motivated me to give it a try. But the experiences of doing some more work back in PIC-land last week (<i>more of that in a later post</i>) reminded my just how dry and tedious that place can be, so I set about trying it on the homely little Arduino.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-9ozK8LJiL74/WLLTuOM7MjI/AAAAAAAAH_c/Hp-YgcATHV09LAw31V7HRYtgZjaH7cu_QCLcB/s1600/Arduino.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="139" src="https://4.bp.blogspot.com/-9ozK8LJiL74/WLLTuOM7MjI/AAAAAAAAH_c/Hp-YgcATHV09LAw31V7HRYtgZjaH7cu_QCLcB/s200/Arduino.jpg" width="200" /></a></div>
<br />
Neither do I claim any novelty about the idea of doing it on an Arduino - somebody/several bodies must have done it on this platform before (indeed, I got a first version running using <a href="http://sensorium.github.io/Mozzi/doc/html/class_a_d_s_r.html">ADSR()</a> from <a href="http://sensorium.github.io/Mozzi/">Mozzi</a>, but I didn't like that for several reasons, most important of which was management of the sustain phase). Anyway, whatever the reasons, I wanted to have a bash for myself.<br />
<br />
Let's take a look at my code first.<br />
<br />
Here's the core first-order difference equation which - in any of the phases of operation - produces the required exponential envelope...<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-gnhnCE5HwRA/WLK8RUw5CGI/AAAAAAAAH9s/uJNGzyFlcsMckjdBgZmGkrA8RQE68Nq6gCLcB/s1600/Difference.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="73" src="https://1.bp.blogspot.com/-gnhnCE5HwRA/WLK8RUw5CGI/AAAAAAAAH9s/uJNGzyFlcsMckjdBgZmGkrA8RQE68Nq6gCLcB/s400/Difference.jpg" width="400" /></a></div>
'envelope' is the main variable, which is updated every pass through the program to its next value, ready to be output to the DAC in the 'Set_DAC_4921()' subroutine. 'alpha' is actually the location of the single pole of the digital filter (remember - this is a <i>first order</i> digital filter) and it determines the 'time constant' of the exponential decay. 'drive' is a constant, driving the step response of the filter in this phase. The factor (1-alpha) is required to correct the overall gain of the filter to unity at zero frequency.<br />
<br />
If you don't understand the math behind this stuff don't worry - you can read about it in a book if you like - or you can just be content to use the results. I've written the difference equation in the comment above in something close to 'conventional' notation, for those who do understand these things.<br />
<br />
That was the first of the two 'core elements' - the digital filter implementing the exponential response. The second part is the logic. Here's a snapshot of part of that logic...<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://3.bp.blogspot.com/-x4Ecl2j27Xs/WLK_BbvycdI/AAAAAAAAH-A/P3fXS6tHIaIhoJxkGtt6_FemUUJyxfIJwCLcB/s1600/Logic.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="81" src="https://3.bp.blogspot.com/-x4Ecl2j27Xs/WLK_BbvycdI/AAAAAAAAH-A/P3fXS6tHIaIhoJxkGtt6_FemUUJyxfIJwCLcB/s400/Logic.jpg" width="400" /></a></div>
<br />
To be precise, it is the part of the logic which tests if the envelope is at the end of the attack phase. If it is the end, new values of 'drive' and 'alpha', relevant for the next phase - the decay phase - are loaded.<br />
<br />
Enough dry talk of the inside of the code - if you want to see it all, you can download it from <a href="https://github.com/m0xpd/ADSRduino">this github repository</a>.
<br />
<br />
I had to give it a name and I followed the rather childish practice of choosing names which pick up on the involvement of the Arduino: 'ADSRduino'. Sorry.<br />
<br />
Instead of talking, let's see some action.<br />
<br />
You probably weren't impressed with the rather quantized image at the top of the post. What you didn't know was that entire envelope was less than 10ms long (<i>shown</i> <i>in order to demonstrate that this system is appropriately fast - in fact, the sample rate </i>[that's to say, the rate at which the difference equation is operated]<i> is around 3.3kHz</i>).<br />
<br />
Here's a longer event (<i>around 400ms long</i>) along with the gate pulse from my keyboard which triggered it. It leaves time for envelope to move through the quantization steps of the DAC more slowly, making for a smoother trace.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-lKx9dNCYGT0/WLK_tHZFTrI/AAAAAAAAH-I/5uMk6-isPwcYGs3i4yW1-dmLIi4SHNuKQCLcB/s1600/ADSR.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="278" src="https://1.bp.blogspot.com/-lKx9dNCYGT0/WLK_tHZFTrI/AAAAAAAAH-I/5uMk6-isPwcYGs3i4yW1-dmLIi4SHNuKQCLcB/s400/ADSR.jpg" width="400" /></a></div>
<br />
Here's the same thing, annotated to make it clear what all this is about:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-wVdOznzjnJ8/WLK_-mdc92I/AAAAAAAAH-M/0pMMkTv5CDMmYhQvU38suLJ2xa6Zg-f-gCLcB/s1600/Labelled.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="278" src="https://4.bp.blogspot.com/-wVdOznzjnJ8/WLK_-mdc92I/AAAAAAAAH-M/0pMMkTv5CDMmYhQvU38suLJ2xa6Zg-f-gCLcB/s400/Labelled.jpg" width="400" /></a></div>
<br />
You can see that the attack phase starts when the note is gated and rises up to full value (actually 5V) then falls down in the decay phase to the sustain level. The note is sustained until the gate is released (unless it already has been released), after which the release phase begins.<br />
<br />
The time constants for attack, decay and release - and the level for sustain, are adjustable via user potentiometers. To illustrate the point, here's another setting (with fast attack and lower sustain and, as it happens, I pressed down the key for longer, so the gate pulse and associated sustain phase is longer):<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://2.bp.blogspot.com/-5R1A8Sa0y1s/WLLAvsg3JOI/AAAAAAAAH-U/Pd7E_EnvLz4e0FYEdcDiK2OZOEpiXImHACLcB/s1600/Shorter.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="275" src="https://2.bp.blogspot.com/-5R1A8Sa0y1s/WLLAvsg3JOI/AAAAAAAAH-U/Pd7E_EnvLz4e0FYEdcDiK2OZOEpiXImHACLcB/s400/Shorter.jpg" width="400" /></a></div>
<br />
All of this is actually running on useful hardware. It started as a prototype on an Arduino UNO and then migrated onto a physically smaller NANO, which is seen here...<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://3.bp.blogspot.com/-zU7zLPWWyVQ/WLLBNHBzQ6I/AAAAAAAAH-c/bD7ZQ-NRGuYE35Yu7uYU5eSxG0l_SANLwCLcB/s1600/Proto.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="280" src="https://3.bp.blogspot.com/-zU7zLPWWyVQ/WLLBNHBzQ6I/AAAAAAAAH-c/bD7ZQ-NRGuYE35Yu7uYU5eSxG0l_SANLwCLcB/s400/Proto.jpg" width="400" /></a></div>
<br />
You can see both the original trimpots used for the ADSR controls and the new potentiometers on a front panel (made from double-sided copper-clad board, painted black to make it look fancy) - as well as sockets for the gate input and the output. There's also a switch to select a looping mode, in which the system can automatically re-trigger itself.<br />
<br />
You can also just see (at the right-hand end of the breadboard) the little MCP4921 12-bit DAC used to output the envelope voltage.<br />
<br />
The circuitry above was moved onto a piece of stripboard:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-NLXFvQMz084/WLLCHnr7WPI/AAAAAAAAH-o/yKO1HIQSuQUt0qVs_islb4wBGY24nifKwCLcB/s1600/Elements.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="255" src="https://4.bp.blogspot.com/-NLXFvQMz084/WLLCHnr7WPI/AAAAAAAAH-o/yKO1HIQSuQUt0qVs_islb4wBGY24nifKwCLcB/s400/Elements.jpg" width="400" /></a></div>
<br />
and assembled, using the bracket bent up from sheet steel, into a complete 'Eurorack' module:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://2.bp.blogspot.com/-W9HicHcjJ9I/WLLCVA65igI/AAAAAAAAH-s/-sBiSsnne20gAg5Wk-MyFGUDmPxSn-wEACLcB/s1600/Eurorack.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="368" src="https://2.bp.blogspot.com/-W9HicHcjJ9I/WLLCVA65igI/AAAAAAAAH-s/-sBiSsnne20gAg5Wk-MyFGUDmPxSn-wEACLcB/s400/Eurorack.jpg" width="400" /></a></div>
<br />
You can find a schematic for the whole system <a href="https://github.com/m0xpd/ADSRduino/blob/master/Schematic.jpg"> here </a><br />
<br />
It now does great service in the <a href="http://m0xpd.blogspot.co.uk/2017/02/a-modular-is-born.html">considerably extended</a> modular synthesizer:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://3.bp.blogspot.com/-FEjVewQ0KDM/WLLCieeqyJI/AAAAAAAAH-w/u2NgTVgqPTA9KGPf05FrNAxRRDZjpPRyACLcB/s1600/Modular.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="238" src="https://3.bp.blogspot.com/-FEjVewQ0KDM/WLLCieeqyJI/AAAAAAAAH-w/u2NgTVgqPTA9KGPf05FrNAxRRDZjpPRyACLcB/s400/Modular.jpg" width="400" /></a></div>
<br />
where it sits next to another Arduino-based module, running as a voltage-controlled digital wavetable oscillator, built upon resources from the <a href="http://sensorium.github.io/Mozzi/">Mozzi</a> library.<br />
<br />
Of course, as I mentioned at the top of this post, you can take the signal processing ideas on the Arduino further than first-order. I've been playing with a <a href="https://en.wikipedia.org/wiki/Digital_biquad_filter">biquad</a> structure on the Arduino within the loop() function...<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-mPjLX4WJO_8/WLLDakFrosI/AAAAAAAAH-4/1ObwH0uXHiUcApLpAxze7z1WkYUPtxO-ACLcB/s1600/Biquad.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="93" src="https://1.bp.blogspot.com/-mPjLX4WJO_8/WLLDakFrosI/AAAAAAAAH-4/1ObwH0uXHiUcApLpAxze7z1WkYUPtxO-ACLcB/s400/Biquad.jpg" width="400" /></a></div>
<br />
(in which all the elements have their usual meaning). I found that it is easy to achieve a sample rate of 2 kHz which - although it isn't useful for audio frequency work - does make for some very useful filtering for signal detection etc. If you need to detect or monitor AF signals, the <a href="http://wiki.openmusiclabs.com/wiki/ArduinoFFT">Fast Fourier</a> and <a href="http://wiki.openmusiclabs.com/wiki/ArduinoFHT">Hartley</a> Transforms work very well at sample rates of tens of kHz - but that's a rather different kettle of fish.<br />
<br />
Don't overlook the little ATmega328 when you're playing with a time-varying signal that takes you to the edge of a DSP application. You can run some genuine digital filtering algorithms (including floating point math to manage poles right up close to the unit circle) and have fun in the process.<br />
<br />
...-.- de m0xpdm0xpdhttp://www.blogger.com/profile/13241728975907453128noreply@blogger.com3tag:blogger.com,1999:blog-8044784353067686026.post-76558318954466964812017-02-04T09:59:00.001+00:002017-02-04T10:37:18.763+00:00A Modular is BornI should 'fess up'. I've been having a ball. I've been neglectful of the radio arts whilst working up my <a href="http://m0xpd.blogspot.co.uk/2017/01/synthesized-sidetone.html">recent experiments with analog synthesizer elements</a> into something more permanent.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://3.bp.blogspot.com/-PYD2WgKPahE/WJWb_2Yv2YI/AAAAAAAAH8o/nDpkT20EGtgW1jgJiLvF7fWVqqjRfhLjQCLcB/s1600/Banner.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="146" src="https://3.bp.blogspot.com/-PYD2WgKPahE/WJWb_2Yv2YI/AAAAAAAAH8o/nDpkT20EGtgW1jgJiLvF7fWVqqjRfhLjQCLcB/s400/Banner.jpg" width="400" /></a></div>
<br />
In fact, you caught a glimpse of some of my synth modules on stripboard in my <a href="http://m0xpd.blogspot.co.uk/2017/01/synthesized-sidetone.html">last post</a>. Now, I've bent up some mounting brackets from sheet steel and made front panels (in standard '<a href="https://www.sdiy.info/w/Eurorack">Eurorack</a>' size) to turn them into pukka modules.<br />
<br />
Here, for example, is the evolution of my dual envelope generator module, the circuit of which was inspired by ideas on Ray Wilson's <a href="http://musicfromouterspace.com/index.php?MAINTAB=HOME&VPW=1024&VPH=703">MFOS</a> site...<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://3.bp.blogspot.com/-OXXhqiemte8/WJWc3INspDI/AAAAAAAAH8w/A91Blec5WLcWwjnvxOBiDYBdu8k9OpTHwCLcB/s1600/Module%2Bconstruction.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="311" src="https://3.bp.blogspot.com/-OXXhqiemte8/WJWc3INspDI/AAAAAAAAH8w/A91Blec5WLcWwjnvxOBiDYBdu8k9OpTHwCLcB/s400/Module%2Bconstruction.jpg" width="400" /></a></div>
<br />
Of course, once in these modules, bringing together some recipe on the bench isn't quite as untidy as it was before<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://3.bp.blogspot.com/-4MDbMyH74Vo/WJWdgzsGsDI/AAAAAAAAH84/TXqTcBsd5ecMKaFsNSEL3PF2N4zrmG_cQCLcB/s1600/Modules%2Bon%2BBench.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="248" src="https://3.bp.blogspot.com/-4MDbMyH74Vo/WJWdgzsGsDI/AAAAAAAAH84/TXqTcBsd5ecMKaFsNSEL3PF2N4zrmG_cQCLcB/s400/Modules%2Bon%2BBench.jpg" width="400" /></a></div>
<br />
but the real purpose of adopting the (3<a href="https://en.wikipedia.org/wiki/Rack_unit">U</a>) Eurorack standard is such that everything can be mounted in a standard card frame.<br />
<br />
This ought to pose a challenge for a notorious cheapskate like m0xpd but - as ever - it isn't what you know, it's who you know. In this instance, we're indebted to Nigel. A little judicious metalwork (<i>to reduce the depth of the donor frame</i>) and several modules later...<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://2.bp.blogspot.com/-KUIyQD8tpW4/WJWeY6aZoZI/AAAAAAAAH9A/esm1O1xKp2QrnX0BSJSG_NOf2tjw09KGQCLcB/s1600/Mounted.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="200" src="https://2.bp.blogspot.com/-KUIyQD8tpW4/WJWeY6aZoZI/AAAAAAAAH9A/esm1O1xKp2QrnX0BSJSG_NOf2tjw09KGQCLcB/s400/Mounted.jpg" width="400" /></a></div>
<br />
Here you see the current complement of modules, as labelled. With all the inter-connectivity afforded by those 3.5mm jack sockets, you very quickly learn the first rule of modular synthesizers: 'you can never have enough patch cables'.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://3.bp.blogspot.com/-GTZAPct2rY0/WJWfAyMdVqI/AAAAAAAAH9E/YOYHx86J85AN7jY7FIVLcRTfqPiLk2DJwCLcB/s1600/Patch%2BCables.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="262" src="https://3.bp.blogspot.com/-GTZAPct2rY0/WJWfAyMdVqI/AAAAAAAAH9E/YOYHx86J85AN7jY7FIVLcRTfqPiLk2DJwCLcB/s400/Patch%2BCables.jpg" width="400" /></a></div>
<br />
Again, a challenge for the cheapskate (have you <i>seen</i> how much they want for patch cables?!?). Fortunately, I found a nice OM who is selling batches of old-school mono 3.5mm jack plugs on that familiar auction site for bait money - so I'm rolling my own patch cables.<br />
<br />
In the image above you can see that the VCO is still in proto form, off to the left of the synth, because I'm still not happy with the performance of this simple oscillator with its (admittedly) simple circuit.<br />
<br />
At least I've added a <a href="https://www.midi.org/">MIDI</a> interface to drive the synth...<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://2.bp.blogspot.com/-JgqsXm3syuo/WJWf8_w_1yI/AAAAAAAAH9Q/_W6hdnnlsBMpobymSK9YkOuF_5t7Gq6GgCLcB/s1600/MIDI.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="300" src="https://2.bp.blogspot.com/-JgqsXm3syuo/WJWf8_w_1yI/AAAAAAAAH9Q/_W6hdnnlsBMpobymSK9YkOuF_5t7Gq6GgCLcB/s400/MIDI.jpg" width="400" /></a></div>
<br />
MIDI (<i>from either a keyboard or from a sequencer on the computer, via the USB - MIDI interface</i>) goes through the MIDI to TTL converter shown (which I knocked up with a 4N25 found in the junk box) and into the Arduino MEGA.<br />
<br />
It is good that it's a MEGA because this flavour of Arduino has four UARTs, meaning that I can keep the connection to the PC (for e.g. programming) AND have another serial connection dedicated to MIDI. This isn't possible on (e.g.) the humbler Arduino UNO.<br />
<br />
The Arduino MEGA is now running a MIDI to CV and Gate routine, with which I can make my new modular synthesizer generate all sorts of irritating and occasionally musical sounds.<br />
<br />
So - not much radio action to report - but a whole lot of '<a href="https://en.wikipedia.org/wiki/BBC_Radiophonic_Workshop">radiophonic</a>' fun.<br />
<br />
...-.- de m0xpdm0xpdhttp://www.blogger.com/profile/13241728975907453128noreply@blogger.com0tag:blogger.com,1999:blog-8044784353067686026.post-88098375156244517512017-01-15T13:42:00.000+00:002017-01-15T13:42:45.074+00:00Synthesized SidetoneThe m0xpd bench is full of even more tangles of wire, associated with <a href="http://m0xpd.blogspot.co.uk/2017/01/analog-synths.html">analog synthesis</a>.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-wZIR8wmj4rI/WHtssXwVQkI/AAAAAAAAH8E/KDUAQmItCt4YuyqxSRSkksnd8ltx7jWjwCLcB/s1600/Banner.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="138" src="https://1.bp.blogspot.com/-wZIR8wmj4rI/WHtssXwVQkI/AAAAAAAAH8E/KDUAQmItCt4YuyqxSRSkksnd8ltx7jWjwCLcB/s400/Banner.jpg" width="400" /></a></div>
<br />
I realised this morning that my new system could be gated by any time sequence, such as that produced by my Morse keyer - it is <a href="http://m0xpd.blogspot.co.uk/2010/03/funky-keyer.html">Funky</a> after all! So, I've made the most over-engineered sidetone generator ever.<br />
<br />
Here's the beginning of a 'CQ' call...<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-FmKaT0vrJ5A/WHttJYQRm-I/AAAAAAAAH8I/O5OErAp1dl838zy7Lbyt8Qu7P_DKRsGgACLcB/s1600/Straight.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="261" src="https://4.bp.blogspot.com/-FmKaT0vrJ5A/WHttJYQRm-I/AAAAAAAAH8I/O5OErAp1dl838zy7Lbyt8Qu7P_DKRsGgACLcB/s400/Straight.jpg" width="400" /></a></div>
<br />
The top trace is the keying waveform, sending the letters C and Q (<i>identified in red for the illiterate amongst you</i>). In the bottom trace is the resulting audio; a 600 Hz tone, produced by the VCO, modulated by new elements on the bench.<br />
<br />
Since <a href="http://m0xpd.blogspot.co.uk/2017/01/analog-synths.html">last time</a>, I've made several new bits of what I've decided will be a <a href="https://en.wikipedia.org/wiki/Modular_synthesizer">modular synthesizer</a>. The voltage-controlled filter, which languished on a <a href="http://m0xpd.blogspot.co.uk/2015/07/prototyping-with-small-outline.html">solderless breadboard</a>, has now been proudly copied onto a piece of Vero stripboard. In fact, there are two of them in a dual configuration. The VCF is filtering the (square) VCO output to make a cleaner signal for our sidetone (analog synthesizers generally use '<a href="https://en.wikipedia.org/wiki/Subtractive_synthesis">subtractive</a>', rather than '<a href="http://m0xpd.blogspot.co.uk/2011/05/additive-fourier-synthesis.html">additive</a>' synthesis).<br />
<br />
Next, I made a dual low-frequency oscillator on a piece of Vero, to save my trusty Heathkit AF generator from doing all the modulation duties. It isn't being used in this 'demo'.<br />
<br />
More importantly, a look in the junk box revealed a nice crop of CA3080 Transconductance Amps - so a search on the web found ideas for a Voltage Controlled Amplifier, now implemented on another solderless breadboard. This is what is doing the modulation of the (audio) carrier you see in the image above to generate the 'CQ' sound.<br />
<br />
Then, I've made a (dual) envelope generator, which makes exponential 'attack' and 'release' profiles at the beginning and end of gating pulses (or, alternatively, of triggers), which can control the VCA. This would usually be controlled by (e.g.) the gate output of a keyboard or sequencer - but in this silly 'demo', my morse keyer is gating the VCA.<br />
<br />
Setting the attack and release times to take non-zero values allows the hard-switching of the audio seen above to be replaced by exponential gating...<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://2.bp.blogspot.com/-oXMvoq2lXZk/WHtvVjADTvI/AAAAAAAAH8M/S2tr9DYhkesvwIWwFmB_Qb_aTkFRkoQOgCLcB/s1600/Nice.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="260" src="https://2.bp.blogspot.com/-oXMvoq2lXZk/WHtvVjADTvI/AAAAAAAAH8M/S2tr9DYhkesvwIWwFmB_Qb_aTkFRkoQOgCLcB/s400/Nice.jpg" width="400" /></a></div>
<br />
The image above shows the output of the envelope generator in the middle (blue) trace. This output is used as the control voltage for the VCA, which implements the modulation resulting in the trace seen at the bottom of the image.<br />
<br />
Taking it too far, for example by setting an inappropriately long release time, reduces the modulation depth of the CW...<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-Vn8UO4GlBKc/WHtxtVYkLMI/AAAAAAAAH8Q/6Aa1TU1-RYMlsgbYLJBZloGdu5FTiignACLcB/s1600/Overdone.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="260" src="https://1.bp.blogspot.com/-Vn8UO4GlBKc/WHtxtVYkLMI/AAAAAAAAH8Q/6Aa1TU1-RYMlsgbYLJBZloGdu5FTiignACLcB/s400/Overdone.jpg" width="400" /></a></div>
<br />
This 'soft-switching' of the sidetone takes away the hard, clicking edge associated with simple on/off switching, leaving the resulting waveform easier on the ear [for reasons directly analogous to those which motivate soft keying of RF to avoid spectral splatter]. Readers of long standing might recall that this is <a href="http://m0xpd.blogspot.co.uk/2009/11/m0xpd-keyer.html">something I've played with before</a> in building one of my keyers.<br />
<br />
Here's a view of the modules of the synth in the making on the bench, with the modules and some other elements labelled...<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-BkMcKm3qoUI/WHtzRAcUGmI/AAAAAAAAH8U/Joir13u4-CsWAH-qB_GNK-MvMtGr_V2pACLcB/s1600/Bench.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="231" src="https://4.bp.blogspot.com/-BkMcKm3qoUI/WHtzRAcUGmI/AAAAAAAAH8U/Joir13u4-CsWAH-qB_GNK-MvMtGr_V2pACLcB/s400/Bench.jpg" width="400" /></a></div>
<br />
You can see the Attack and Release controls. You can also see a small interface circuit to link between the (open collector) output of the keyer and the 12V positive logic required for the gate input to the Envelope Generator. This is a trivial single transistor.<br />
<br />
The mess on the bench does allow half-way serious demonstrations of keying. But you just can't help applying frequency modulation to the CW and all sorts of other zany effects. There's music in there somewhere!<br />
<br />
I've just come back from the West Manchester Club's Winter 'Red Rose' Rally. It <a href="http://m0xpd.blogspot.co.uk/2016/01/bench-psu-for-tube-projects.html">used to be held conveniently close to my home</a>, but now it has moved out to Lowton on the <a href="https://en.wikipedia.org/wiki/A580_road">East Lancs</a>. I was hoping to get some bits for the synth-to-be, but the Rally was a wash-out in more ways than one. No matter - I know where I can find lots of traders happy to send me all the pots and sockets and other hardware I need to put my circuits into Eurorack compatible modules.<br />
<br />
...-.- de m0xpd<br />
<br />m0xpdhttp://www.blogger.com/profile/13241728975907453128noreply@blogger.com0tag:blogger.com,1999:blog-8044784353067686026.post-10111028092771822742017-01-08T15:40:00.000+00:002017-01-09T08:38:55.193+00:00Analog SynthsCameron was talking about analog synthesizers last week and he got me interested.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-LXjDq5Unvf0/WHJGG9RpzkI/AAAAAAAAH6k/Dd1442HNgy4Q_KMzgvlCoLIAiK1b2kgfwCLcB/s1600/Banner.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="91" src="https://1.bp.blogspot.com/-LXjDq5Unvf0/WHJGG9RpzkI/AAAAAAAAH6k/Dd1442HNgy4Q_KMzgvlCoLIAiK1b2kgfwCLcB/s400/Banner.jpg" width="400" /></a></div>
<br />
I refer, of course, to my colleague Cameron and not to the former 'Prime' Minister. Don't expect any political comment or porcine quips - that really would be beneath me...<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-vx_xHja3oOk/WHJGqz9SZmI/AAAAAAAAH6o/b4PWwm6x7ogwjYQ3krF3NdMkYSdulGvWACLcB/s1600/Prime%2BCameron.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="300" src="https://4.bp.blogspot.com/-vx_xHja3oOk/WHJGqz9SZmI/AAAAAAAAH6o/b4PWwm6x7ogwjYQ3krF3NdMkYSdulGvWACLcB/s400/Prime%2BCameron.jpg" width="400" /></a></div>
<br />
There's quite a lot of common ground between me and analog synths: electronics, music, signal processing, some of the particular technologies of radio (<i>modulation etc</i>) - I could go on.<br />
<br />
Despite this affinity, I realised when Cameron showed me some YouTube videos last week that, whilst I know all about the technology underpinning Analog Synthesizers, I've never actually played with them. So - you can guess the rest.<br />
<br />
Yesterday I made a new mess on the bench...<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://2.bp.blogspot.com/-2B0BAqKsQ-M/WHJILddi6VI/AAAAAAAAH64/7-bnc3CkQ5MiD8I_1bz53-O8OIKqoeL6gCLcB/s1600/Bench.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="281" src="https://2.bp.blogspot.com/-2B0BAqKsQ-M/WHJILddi6VI/AAAAAAAAH64/7-bnc3CkQ5MiD8I_1bz53-O8OIKqoeL6gCLcB/s400/Bench.jpg" width="400" /></a></div>
<br />
The heart of the story is a <u>V</u>oltage <u>C</u>ontrolled <u>O</u>scillator, which makes square- or triangular-waves, whose frequency is controlled by a voltage (hence the name). Now - we've <a href="http://m0xpd.blogspot.co.uk/2010/08/wspr-ing-vxo.html">done things not a million miles different than this before</a> - but this is an audio project!<br />
<br />
There's lots of circuits for audio fequency VCOs on the internet, but I wanted something which was not just a voltage controlled oscillator, but rather the particular sort of VCO used in a 'real' musical synthesizer. These have oscillators whose output frequency is proportional to an exponential function of the controlling input voltage (because then, the input voltage will be proportional to the musical 'note' produced, which is itself the logarithm of the frequency). These are usually called 'one Volt per octave' oscillators, because of one industry standard (used by Korg, Yamaha, etc) of using a voltage change of one volt to signal an octave change in frequency (a 2:1 frequency ratio).<br />
<br />
I took as starting inspiration a circuit found on <a href="http://www.allaboutcircuits.com/projects/diy-synth-series-vco/">this page</a>. Here's my resulting VCO...<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://2.bp.blogspot.com/-qkiZp9BvuqM/WHJKZ_g2TlI/AAAAAAAAH7A/f81zfD0uLDsq_P21Q8ZM0cquCD_gtno5gCLcB/s1600/VCO.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="247" src="https://2.bp.blogspot.com/-qkiZp9BvuqM/WHJKZ_g2TlI/AAAAAAAAH7A/f81zfD0uLDsq_P21Q8ZM0cquCD_gtno5gCLcB/s400/VCO.jpg" width="400" /></a></div>
<br />
As usual, I had to make various changes to accommodate the contents of my junk box (the linear to exponential converter stage is built on a TL074 and the VCO proper is an LM324). Plus, the final output was rather more than one octave per volt, so I've added some trimming, as seen. There's a potentiometer to manually tune the oscillator and two inputs for control voltages (CVs) - which are additive signals (i.e. you can transpose by adjusting the tune control).<br />
<br />
I soon confirmed I could test the oscillator with the manual tune control and apply modulation input from an oscillator to get vibrato effects. Throughout all the experiments here, my old Heathkit AF Sig Gen was serving as the LFO and modulation source...<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://3.bp.blogspot.com/-FTABZ0_y9MU/WHJaUgfsoMI/AAAAAAAAH70/KHebMn8Wc2UNwLY28Sz3Spi6eKjWep1nwCLcB/s1600/LFO.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="236" src="https://3.bp.blogspot.com/-FTABZ0_y9MU/WHJaUgfsoMI/AAAAAAAAH70/KHebMn8Wc2UNwLY28Sz3Spi6eKjWep1nwCLcB/s400/LFO.jpg" width="400" /></a></div>
<br />
I don't have any analog synths or 1V/8ve gear, so I programmed an Arduino to make a simple sequencer.<br />
<br />
You can't use the PWM output produced by the '<a href="https://www.arduino.cc/en/Reference/AnalogWrite">analogWrite()</a>' function (at least you CAN use it, but you hear too much of the PWM frequency to make the approach useful), so I added an MCP4922 DAC (which I've played with many times <a href="http://m0xpd.blogspot.co.uk/2013/04/analog-nostalgia.html">before</a>) to give steady DC control voltages and to increase the available resolution to 12 bits.<br />
<br />
With the 12-bit resolution, you can easily construct a table of the codes required to put out five octaves of semitones...<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-BK_rjXEXxWQ/WHJM5Jji2xI/AAAAAAAAH7M/-bST6eb-gS42vYqhE93AxZsZLeU5VOc5QCLcB/s1600/Key%2BCodes.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="152" src="https://1.bp.blogspot.com/-BK_rjXEXxWQ/WHJM5Jji2xI/AAAAAAAAH7M/-bST6eb-gS42vYqhE93AxZsZLeU5VOc5QCLcB/s400/Key%2BCodes.jpg" width="400" /></a></div>
<br />
from which a simple look-up allows you to sequence a loop of notes or a random pattern. I even added an analogRead() of another external voltage to control the speed of the sequencer. This sounds interesting when you control it with an LFO - especially when it is playing a random pattern. Funny how the 5V Analog Ref of the Arduino works so nicely with the CV scheme of the Analog Synth world.<br />
<br />
The simple VCO tracks well over a middle octave and is very stable (<i>particularly as I've not yet taken ANY steps to ensure temperature stability</i>), but isn't going to knock Moog off its pedestal quite yet.<br />
<br />
Flushed with the success of the VCO, I built a Voltage Controlled Filter, taking my lead from <a href="http://musicfromouterspace.com/index.php?MAINTAB=SYNTHDIY&VPW=1490&VPH=763">Outer Space</a> and making the appropriate revisions to accommodate the contents of the junk box (most importantly to work in <a href="http://m0xpd.blogspot.co.uk/2012/12/phasers-to-stun.html">the beloved 2N3819</a>)...<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-kVZYob01-RM/WHJOPXG-p6I/AAAAAAAAH7Q/7U1bqRunT2o0JguUB2s2j6MlyE-RErTPQCLcB/s1600/VCF.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="400" src="https://1.bp.blogspot.com/-kVZYob01-RM/WHJOPXG-p6I/AAAAAAAAH7Q/7U1bqRunT2o0JguUB2s2j6MlyE-RErTPQCLcB/s400/VCF.jpg" width="392" /></a></div>
<br />
The filter allows you to make all the expected 'Wah-wah' type sounds and more, controlled manually or - more importantly - by external control voltages. These allow either continuous modulation (e.g. controlling the filter from a free-running oscillator) or can be triggered by the sequencer (e.g. I've set the sequencer to set a digital line LOW every time the root note of a sequence is played, which allows the filter to emphasize that note and - hence - the tonality of the sequence).<br />
<br />
Here are images of the filter response (to a square wave generated by the VCO, set manually to 100 Hz) with varying settings of the filter 'cutoff', at full 'resonance'...<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://2.bp.blogspot.com/-PBtlF0U3_so/WHJPxmfl3cI/AAAAAAAAH7Y/gCTaVOVNQCkSPmzvjfm2Aum1s05Qdzb_gCLcB/s1600/VCF%2BResponses.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="286" src="https://2.bp.blogspot.com/-PBtlF0U3_so/WHJPxmfl3cI/AAAAAAAAH7Y/gCTaVOVNQCkSPmzvjfm2Aum1s05Qdzb_gCLcB/s400/VCF%2BResponses.jpg" width="400" /></a></div>
<br />
So, with only two simple analog circuits and a sequencer made from an Arduino, a DAC and a few lines of code, I've had quite a bit of fun. I guess the next step (<i>if I can be bothered to make one</i>) is going to involve a VCA, an envelope generator and a homebrew MIDI : CV converter.<br />
<br />
Alternatively, I might just follow Chick Corea's advice and condemn these horrible pieces of electronics to where they belong and play a real instrument (even if my 'Hammond' is a clone)...<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-jZ-CUJp9jv8/WHJWYqF4eTI/AAAAAAAAH7o/TIupYKHD500EwuCj-6hh45BsAXveQ9ITQCLcB/s1600/keyboards.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="155" src="https://1.bp.blogspot.com/-jZ-CUJp9jv8/WHJWYqF4eTI/AAAAAAAAH7o/TIupYKHD500EwuCj-6hh45BsAXveQ9ITQCLcB/s400/keyboards.jpg" width="400" /></a></div>
<br />
Or, I could even get back on the radio - let's see if that contest has finished yet...<br />
<br />
...-.- de m0xpd m0xpdhttp://www.blogger.com/profile/13241728975907453128noreply@blogger.com0tag:blogger.com,1999:blog-8044784353067686026.post-28693064530878651622017-01-01T11:29:00.000+00:002017-01-01T11:29:21.808+00:00HNYDon't know about you, but <a href="http://www.gqrp.com/awards.htm">Winter Sports</a> was a complete wash-out for me - perhaps due to a complete lack of snow<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-4eSZxnkhryA/WGjgiqcOP_I/AAAAAAAAH6U/cVILz80mKiYX9V5WWfpbwSmNeO4Iq24hwCLcB/s1600/Ski%2BArea.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="400" src="https://1.bp.blogspot.com/-4eSZxnkhryA/WGjgiqcOP_I/AAAAAAAAH6U/cVILz80mKiYX9V5WWfpbwSmNeO4Iq24hwCLcB/s400/Ski%2BArea.jpg" width="398" /></a></div>
<br />
The snow-free picture above is the only ski area I can claim any familiarity with - located on the <a href="http://m0xpd.blogspot.co.uk/2016/03/a-new-book.html">road to heaven</a> and imaged in May, 2015. There was (<i>of course</i>) snow a few hundred yards further up the road.<br />
<br />
I have had S7 noise (<i>and more</i>) all over the 40m band throughout the holiday period and the other low HF bands haven't been much better. I've not spent a lot of time on the radio - but I've been on every day. I've not heard a single person calling "CQ QRP" and when I tried, I didn't get an answer. Also, I didn't get spotted on the <a href="http://www.reversebeacon.net/">reverse beacon network</a> until I got depressed and stacked on 10dB of power.<br />
<br />
Of course, I've had some QRO QSOs. There (<i>and whilst listening to other people's exchanges</i>), I noticed that people weren't even bothering to spell out complements of the season but - rather - were resorting to a telegraphic version of text speak with the lazy 'HNY'.<br />
<br />
Of course, we do it all the time with our Q-codes and the like - and for good reason. But, surely, this is the one time of the year when everybody has a little more time for longer and/or slower exchanges (<i>like the faltering first CW QSO I enjoyed with a new Polish ham on 20m on the 23rd</i>). Unfortunately, it isn't easy with (<i>as now</i>) S8 of noise on the meter and somebody banging out CQ TEST on 7030 kHz.<br />
<br />
So, bear with me all you speed merchants, as I waste precious seconds of your lives, which you'll never recover, to wish you all a very<br />
<br />
Happy New Year<br />
<br />
...-.- de m0xpd m0xpdhttp://www.blogger.com/profile/13241728975907453128noreply@blogger.com0tag:blogger.com,1999:blog-8044784353067686026.post-72737044781668521522016-12-26T17:11:00.002+00:002016-12-26T17:25:49.466+00:00Santa Stopped HereUnwilling to go to the trouble of watching out, not crying, not pouting and - worst of all - being nice rather than naughty, the kids round here resorted to posting stop signs, exhorting Santa to call at their gaffs yesterday. <br />
<br />
Not wanting to be outdone by the little darlings, I joined in...<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/--FDQplZttJU/WGFDSrPbyEI/AAAAAAAAH5M/jPrqTXjtAkkW7xH_grTD0ulYqWVpkpYIACLcB/s1600/Santa.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://1.bp.blogspot.com/--FDQplZttJU/WGFDSrPbyEI/AAAAAAAAH5M/jPrqTXjtAkkW7xH_grTD0ulYqWVpkpYIACLcB/s320/Santa.jpg" width="243" /></a></div>
<br />
and - glad tidings of great joy - it worked!<br />
<br />
I've never really had anything to complain about before, but Santa really excelled himself this year (<i>aided and abetted by the XYL</i>), providing the <a href="https://www.telonic.co.uk/Rigol-DS1054Z-4ch-50MHz-Digital-Oscilloscope-p/ds1054z.htm">Rigol DS1054Z</a> I've been sniffing around for a while...<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-9rSI05LQpJk/WGFD9RCGKRI/AAAAAAAAH5Q/-f7yOgV9m-8vuVcWZ5AuRPwn29oxS1mQwCLcB/s1600/Scope.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="272" src="https://4.bp.blogspot.com/-9rSI05LQpJk/WGFD9RCGKRI/AAAAAAAAH5Q/-f7yOgV9m-8vuVcWZ5AuRPwn29oxS1mQwCLcB/s400/Scope.jpg" width="400" /></a></div>
<br />
Here are some<strike> proud boasts of a kid with a new toy</strike> first impressions, formed after opening the box and looking at some of the functions offered by this inexpensive instrument. <br />
<br />
There's a great colour display and four input channels. There's the temptations of some <a href="http://hackaday.com/2014/11/12/how-to-get-50-more-zed-from-your-rigol-ds1054z/">software hacks</a> to increase the available bandwidth above the cited 50MHz. There's also the promise of digital connectivity, which means an end to all those ugly oscilloscope screen photographs, which have blighted the pages of 'Shack Nasties' over the years.<br />
<br />
Getting some screen images onto the computer was the first thing I tried - which involved downloading the two lumps of freeware which Rigol provide to accompany my new toy: <a href="http://telonicinstruments.co.uk/rigol-uk/software/Ultra%20Sigma.rar">UltraSigma</a> and <a href="http://telonicinstruments.co.uk/rigol-uk/software/Ultra%20Scope.rar">UltraScope</a>.<br />
<br />
With these pieces of code in place on the shack PC, I could hook up immediately to the new 'scope and see the screen. I achieved this first through the ethernet connection (<i>just because I could</i>) and then went back to the planned option of USB...<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-yDu0GD6996s/WGFFOOIyjDI/AAAAAAAAH5g/oRuwDajZScw2rUkIUZuLgS9m2s6-6LJHgCLcB/s1600/UltraScope.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="253" src="https://1.bp.blogspot.com/-yDu0GD6996s/WGFFOOIyjDI/AAAAAAAAH5g/oRuwDajZScw2rUkIUZuLgS9m2s6-6LJHgCLcB/s400/UltraScope.jpg" width="400" /></a></div>
<br />
All of this was anticipated - I expected to be able to 'echo' the screen and its controls on the PC. What I didn't expect was that the PC display could provide <u>different</u> information to that presented on the (<i>already more than adequate</i>) seven inch screen of my new 'scope.<br />
<br />
I can - for example - set up some measurements on the PC (<i>making it do service as a multimeter and counter/timer</i>)...<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://3.bp.blogspot.com/-rgaBoRI0jcE/WGFG1CLpPiI/AAAAAAAAH5s/k4MwAjLC74UAFRka-weROCvTmV0HQzhygCLcB/s1600/Measure.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="225" src="https://3.bp.blogspot.com/-rgaBoRI0jcE/WGFG1CLpPiI/AAAAAAAAH5s/k4MwAjLC74UAFRka-weROCvTmV0HQzhygCLcB/s400/Measure.jpg" width="400" /></a></div>
<br />
Here you can see that the sinewave I'm shoving into the 'scope to give you something to look at has frequency of 4.386 kHz and you can check its RMS value. You can do all sorts of other stuff as well - but we're only just getting started here!<br />
<br />
Given the frequency content, it might be interesting to open an FFT window on the PC (<i>you can do this on the 'scope too - but the bigger PC screen makes the additional graphical information easier to consume, whilst keeping up the conventional time-domain display on the instrument</i>)...<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://2.bp.blogspot.com/-50qZhmvls8M/WGFHs3zzhOI/AAAAAAAAH50/7M0EXsnT6kIYtsjvIVKNjNjvvgaxaeuUACLcB/s1600/FFT.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="262" src="https://2.bp.blogspot.com/-50qZhmvls8M/WGFHs3zzhOI/AAAAAAAAH50/7M0EXsnT6kIYtsjvIVKNjNjvvgaxaeuUACLcB/s400/FFT.jpg" width="400" /></a></div>
<br />
Here (above) is the expected peak in the magnitude spectrum at the correct frequency. The FFT was being computed at something like 1 MHz sample rate, but I've changed the display to make things easier to see (<i>which explains why the frequency resolution isn't so great</i>). Here's the same signal, sampled at a lower rate (<i>i.e. with the horizontal timebase slower</i>), making the frequency resolution higher...<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-xfQv2mALRnA/WGFPEmqJ-pI/AAAAAAAAH6E/Er5bn3vjiwkYBVpvO_h0FmPEQNEpAp5kACLcB/s1600/FFT%2BSlow.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="263" src="https://4.bp.blogspot.com/-xfQv2mALRnA/WGFPEmqJ-pI/AAAAAAAAH6E/Er5bn3vjiwkYBVpvO_h0FmPEQNEpAp5kACLcB/s400/FFT%2BSlow.jpg" width="400" /></a></div>
<br />
<br />
I've had this new toy for thirty six hours and I've been playing with it for a few minutes. It seems to me to be bursting with possibilities and it is absolutely amazing value for money. Plus, the XYL (<i>who acted as Santa's little helper in this transaction</i>) tells me that <a href="https://www.telonic.co.uk/default.asp">the UK agent</a> was really helpful and good to do business with.<br />
<br />
Here's one little boy who's been very lucky.<br />
<br />
I hope you've been lucky too and I wish you all a very Happy Christmas,<br />
<br />
...-.- de m0xpd m0xpdhttp://www.blogger.com/profile/13241728975907453128noreply@blogger.com1tag:blogger.com,1999:blog-8044784353067686026.post-82564491947548154652016-12-23T10:03:00.002+00:002016-12-23T10:03:53.623+00:00Forty-9er ShieldI've been tinkering with a quick lash-up of Wayne Burdick, n6kr's famous 'Forty-9er' receiver, implemented on an Arduino shield and tuned by one of my DDS systems.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-vLsZjwj6d78/WFzojJcf4HI/AAAAAAAAH4o/sUVRhcNzyKk3SNBtThtav12rPzk5i_5vACLcB/s1600/Banner.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="106" src="https://1.bp.blogspot.com/-vLsZjwj6d78/WFzojJcf4HI/AAAAAAAAH4o/sUVRhcNzyKk3SNBtThtav12rPzk5i_5vACLcB/s400/Banner.jpg" width="400" /></a></div>
<br />
Regular readers will remember how I tried running my <a href="http://m0xpd.blogspot.co.uk/p/kanga-uk-resources.html#Rx">Kanga / m0xpd Sudden-inspired receiver shield</a> under the control of the new <a href="http://m0xpd.blogspot.co.uk/2016/12/esp8266-kit-released.html">DDS on the Internet of Things board</a> and found the latter to <a href="http://m0xpd.blogspot.co.uk/2016/12/noisy-esp8266.html">cause a lot of noise problems</a>. I stripped out unnecessary active stages in the Rx shield to try to manage some of the receiver's susceptibility to the hostile EM environment generated by the ESP8266 and realised that I was left with something which resembled not only a <a href="http://www.gqrp.com/sudden.htm">Sudden</a> but also any other SA602 / LM386 receiver - including the <a href="http://www.qsl.net/va3iul/Homebrew_RF_Circuit_Design_Ideas/40m_Forty-9er_TRX_N6KR.gif">Forty-9er</a>.<br />
<br />
Interestingly, there's <a href="http://www.lxqqfy.com/">a guy in Asia</a> who produces a CW transceiver with an ESP8266, available as a kit or as an assembled unit through our favourite auction site. This transceiver is rock-bound, and is offered with an app for an Android phone, which allows automated sending of CW. There's some implication that it was supposed to allow automated copying too but, from what I gather, that side of things isn't working too well. The transceiver is based on - you guessed it - the Forty-9er. (He also makes units based on Rock-mites etc.)<br />
<br />
I figured that the combination of my <a href="http://m0xpd.blogspot.co.uk/2016/08/esp8266-geolocation.html">beacon work</a> (<i>which does all the transmit side stuff</i>) and my <a href="http://m0xpd.blogspot.co.uk/2016/11/a-wifi-controlled-vfo.html">WiFi controlled VFO</a> already adds up to way more than the simple CW transceiver mentioned above, which was what motivated me to investigate the IoT DDS / Receiver combo. But - as readers recall - I found it <a href="http://m0xpd.blogspot.co.uk/2016/12/noisy-esp8266.html">impractically noisy</a>.<br />
<br />
Well - if the commercial unit is offered and (<i>one idealistically supposes</i>) works with the Forty-9er, perhaps I should try the Forty-9er circuit too...<br />
<br />
I found that I could take an empty prototype Sudden Rx shield PCB (<i>with tracking for the DIL format 602, rather than the production version SMD</i>) and bodge it for the Forty-9er circuit. The Sudden and the Forty-9er receivers are so similar that the PCBs can be re-worked to serve both roles with almost no effort.<br />
<br />
Here's my new kludged Forty-9er receiver, atop the Sudden Tx prototype shield (<i>which is only serving as a power supply, so most of the pins aren't connected</i>) - the new ESP8266 / AD9834 board lurks behind the stack:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://2.bp.blogspot.com/-859B4zkCbKU/WFzs2eliHNI/AAAAAAAAH40/jrkfE24pYzIVt6J4gPRVYofFYHzj_4rtACLcB/s1600/Bench.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="298" src="https://2.bp.blogspot.com/-859B4zkCbKU/WFzs2eliHNI/AAAAAAAAH40/jrkfE24pYzIVt6J4gPRVYofFYHzj_4rtACLcB/s400/Bench.jpg" width="400" /></a></div>
<br />
Here are details of what I've implemented on the shield:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://3.bp.blogspot.com/-oD2XP3BEvAI/WFzt0AAoezI/AAAAAAAAH48/BZZOj9YB7OsPfBtgPpFN6k9HHJzJOC60QCLcB/s1600/Schematic.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="262" src="https://3.bp.blogspot.com/-oD2XP3BEvAI/WFzt0AAoezI/AAAAAAAAH48/BZZOj9YB7OsPfBtgPpFN6k9HHJzJOC60QCLcB/s400/Schematic.jpg" width="400" /></a></div>
<br />
Those familiar with the original Forty-9er will notice I've been forced (<i>by the PCB</i>) to deviate from the original recipe in a few ways:<br />
<ol>
<li>My input filtering network is implemented off-board</li>
<li>I'm taking the output from the 612 OUT_B (pin 5), rather than OUT_A; simply an inversion</li>
<li> I'm applying the input to the 386 inverting input (pin 2) rather than the non-inverting input; another inversion</li>
<li>I've added the 10uF capacitor between pins 1 and 8 of the 386; experiment showed I needed more gain to drive the speaker </li>
</ol>
All of these measures are not significant departures from the letter or spirit of the Forty-9er design (excepting 1 - which does have an impact which cannot be avoided in terms of layout).<br />
<br />
The limited experiments to date show that the Forty-9er is better than the original Kanga / m0xpd HF shield (<i>with its extra active stages</i>) and possibly <u>marginally</u> better than the 'bare' Sudden. However, there is still a clearly audible clicking, which isn't yet - by any means - perfect. But, at least we're now at the point where I have a usable receiver.<br />
<br />
I've not yet got a big enough inductor on the input to the 386 (the 'junk' box didn't stretch that far), so there is some performance gain to be expected in the original circuit when I get the correct magnitude inductance. Also, there is more to be done in experimentation with shielding / positioning, etc..<br />
<br />
I've also searched the 'net for any mention of the clicking in discussion of the performance of the lxqqfy.com receivers - but to no avail. These devices have a very narrow (crystal) filter on their input and may derive some benefit from that strategy. If any reader has any direct experience of these units - or can point me to any evidence - <u>please get in touch</u>. <br />
<br />
Now I'm off to continue with the tinkering, to listen to more clicking and - in between it all - to get lost in last minute preparations for Christmas,<br />
<br />
...-.- de m0xpd m0xpdhttp://www.blogger.com/profile/13241728975907453128noreply@blogger.com0tag:blogger.com,1999:blog-8044784353067686026.post-5989888277025300412016-12-11T17:51:00.000+00:002016-12-11T17:51:21.073+00:00Homebrew WiFi ShieldHaving just finished development of the new <a href="http://m0xpd.blogspot.co.uk/2016/12/esp8266-kit-released.html">m0xpd / Kanga ESP8266 - AD9834 board</a>, I find myself with a few WiFi components knocking about on the bench - so I figured it would be fun to try to make a WiFi shield for an Arduino...<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://3.bp.blogspot.com/-BVfjXIjKoE4/WE2Jc228XbI/AAAAAAAAH30/SVcwBpvP0vUMB00tK0PrD1L9dzsFUHS5QCLcB/s1600/Banner.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="186" src="https://3.bp.blogspot.com/-BVfjXIjKoE4/WE2Jc228XbI/AAAAAAAAH30/SVcwBpvP0vUMB00tK0PrD1L9dzsFUHS5QCLcB/s400/Banner.jpg" width="400" /></a></div>
<br />
Using an ESP8266 (<i>in a module, such as an ESP-12</i>) as a WiFi shield for an Arduino is a little like using the proverbial 'steam hammer to crack a nut' - but these modules are frighteningly cheap and I do want a WiFi shield (which are surprisingly expensive).<br />
<br />
I have a spare ESP-12 module on a nice breakout board with 0.1 inch pitch headers, just crying out to be used once again (it having <a href="http://m0xpd.blogspot.co.uk/2016/03/late-adopter-of-things.html">done service in the early stages of the development of the connected beacon etc</a>)<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://3.bp.blogspot.com/-nrjsODPmW3Y/WE2KSg58XZI/AAAAAAAAH34/WHNBOzK03zQC57CkA1GlPnMc3n0_bR-dwCLcB/s1600/Mounted%2BModule.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="345" src="https://3.bp.blogspot.com/-nrjsODPmW3Y/WE2KSg58XZI/AAAAAAAAH34/WHNBOzK03zQC57CkA1GlPnMc3n0_bR-dwCLcB/s400/Mounted%2BModule.jpg" width="400" /></a></div>
<br />
This could be a great opportunity to press the module back into some useful work and to teach myself something new.<br />
<br />
I found a nice page about <a href="https://cdn.sparkfun.com/datasheets/Dev/Arduino/Shields/SparkFun-ESP8266-WiFi-Shield-v10.pdf">Sparkfun's ESP8266 WiFi shield</a> and realised I could easily make a cut-down version with the module. Here's my schematic...<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-zaZvD_K6yWI/WE2Kyl-E7GI/AAAAAAAAH38/YT70BfASPWEyu9q6EGg1mlEODsD1828qwCLcB/s1600/Schematic.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="177" src="https://1.bp.blogspot.com/-zaZvD_K6yWI/WE2Kyl-E7GI/AAAAAAAAH38/YT70BfASPWEyu9q6EGg1mlEODsD1828qwCLcB/s400/Schematic.jpg" width="400" /></a></div>
<br />
All that's needed is a power supply to ensure the current demands of the ESP8266 (on transmit) don't frighten the Arduino and a level converter for the software serial interface.<br />
<br />
Regular readers will recognise my old favourite level converter, originally used in the <a href="http://m0xpd.blogspot.co.uk/2010/10/beacon-dds.html">Si570 board</a> and later developed in quad and <a href="http://m0xpd.blogspot.co.uk/2013/05/octals-and-octuples.html">octuple</a> parallel versions (although this time I'm using the familiar 2N7000 device, as I did in <a href="http://m0xpd.blogspot.co.uk/2015/07/new-user-interface.html">the level converter for the display driver in Occam's Dirk</a>, rather than the fancy surface mount BSS138). To be perfectly honest, I'm not absolutely sure this level converter is required (<i>I've seen some folks doing without it </i>) but it only takes a couple of shakes to build it and it only costs two FETs and four resistors, so it may as well go in!<br />
<br />
Here's the completed circuit taking up almost no space on a prototyping shield:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-9xlZsE8LnV0/WE2NiE-HYYI/AAAAAAAAH4I/sOtRgS8V4pIxqWmvYUhTR6fInSr-ShqQwCLcB/s1600/Empty%2BShield.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="271" src="https://1.bp.blogspot.com/-9xlZsE8LnV0/WE2NiE-HYYI/AAAAAAAAH4I/sOtRgS8V4pIxqWmvYUhTR6fInSr-ShqQwCLcB/s400/Empty%2BShield.jpg" width="400" /></a></div>
<br />
and here's the shield with the actual ESP module plugged in:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://2.bp.blogspot.com/-p1CRifg66j4/WE2NxmVVcaI/AAAAAAAAH4M/nJ9k-YZwgsEzfjttq4HHIlEOqgOQFt1ywCLcB/s1600/Shield.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="288" src="https://2.bp.blogspot.com/-p1CRifg66j4/WE2NxmVVcaI/AAAAAAAAH4M/nJ9k-YZwgsEzfjttq4HHIlEOqgOQFt1ywCLcB/s400/Shield.jpg" width="400" /></a></div>
<br />
I fiddled around for a while with the code and eventually got the Arduino UNO (<i>underneath the shield in the photo at the head of this post</i>) to serve up a very simple web page, via the WiFi shield, on which it reported the analog levels read at each of its six analog input pins:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://3.bp.blogspot.com/-zFqv6Ms3qms/WE2OPOkVEeI/AAAAAAAAH4Q/60fgC4i1890-HODCD7se7McjuphWb2FZgCLcB/s1600/webpage.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="250" src="https://3.bp.blogspot.com/-zFqv6Ms3qms/WE2OPOkVEeI/AAAAAAAAH4Q/60fgC4i1890-HODCD7se7McjuphWb2FZgCLcB/s400/webpage.jpg" width="400" /></a></div>
<br />
<br />
The response above is produced with A0:A4 floating (open circuit) and A5 grounded (hence the zero).<br />
<br />
This success was obtained using 'brute force' AT commands (I started from the code prototype given <a href="http://apcmag.com/arduino-wi-fi-part-2.htm/">here</a>). My attempts to use WiFi AT libraries - including <a href="https://github.com/sparkfun/ESP8266_WiFi_Shield">SparkFun's,</a> - have not yet been completely successful. I don't yet know why - given that the shield is obviously working.<br />
<br />
All-in-all, an interesting exercise and a nice way of getting a WiFi shield for 'nothing'.<br />
<br />
...-.- de m0xpdm0xpdhttp://www.blogger.com/profile/13241728975907453128noreply@blogger.com1tag:blogger.com,1999:blog-8044784353067686026.post-63778296716210501302016-12-10T07:46:00.000+00:002016-12-10T08:02:55.535+00:00ESP8266 Kit ReleasedThe <a href="http://m0xpd.blogspot.co.uk/2016/09/new-esp8266-board.html">m0xpd / Kanga ESP8266 - AS9834 board</a>, '<i>A DDS on The Internet of Things</i>,' is <a href="http://www.kanga-products.co.uk/m0xpd-arduino-shields">now available for purchase as a kit</a>, with the three SMD devices supplied already installed on the PCB...<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-axmbtIUnGbw/WEuu3Pd-FEI/AAAAAAAAH3U/HCUCLXNFf3cJ1xV40dE2rWTBg1mf772LQCLcB/s1600/Completed%2BBoard.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://1.bp.blogspot.com/-axmbtIUnGbw/WEuu3Pd-FEI/AAAAAAAAH3U/HCUCLXNFf3cJ1xV40dE2rWTBg1mf772LQCLcB/s320/Completed%2BBoard.jpg" width="320" /></a></div>
<br />
The <a href="http://www.kanga-products.co.uk/m0xpd-arduino-shields">kit</a> is provided (as usual) by the board's co-developer, <a href="http://www.kanga-products.co.uk/">Kanga Products UK</a>.<br />
<br />
Although this board is no more complicated than any other of my Arduino shields, it is rather different in scope and application. As such, I have set up a <a href="https://sites.google.com/site/addsontheinternetofthings/home">small website</a> to support the board. The site provides details of the board's <a href="https://sites.google.com/site/addsontheinternetofthings/home/hardware">hardware</a> and how to go about <a href="https://sites.google.com/site/addsontheinternetofthings/home/building-the-kit">assembling</a> and interfacing it.<br />
<br />
More importantly, it provides some support to help new users get going with applications of this board. There are instructions for <a href="https://sites.google.com/site/addsontheinternetofthings/home/software/programming-in-the-arduino-ide">integrating the ESP8266 into the Arduino IDE</a> and some <a href="https://sites.google.com/site/addsontheinternetofthings/home/software">test and application code</a> for the new board - including a basic version of the <a href="https://sites.google.com/site/addsontheinternetofthings/home/software/a-multimode-qrss-beacon">multi-mode QRSS beacon</a>.<br />
<br />
I wish to thank <a href="http://www.kanga-products.co.uk/">Kanga</a> for their continued support and encouragement in bringing my work to a wider audience. I hope that this board will be of interest to many experimenters who wish to explore the interface between ham radio and The Internet of Things.<br />
<br />
...-.- de m0xpd<br />
<br />
<br />m0xpdhttp://www.blogger.com/profile/13241728975907453128noreply@blogger.com0tag:blogger.com,1999:blog-8044784353067686026.post-52974814525837753702016-12-04T13:04:00.000+00:002016-12-04T13:04:00.259+00:00Noisy ESP8266Having enjoyed a lot of success <a href="http://m0xpd.blogspot.co.uk/2016/07/ad9834-esp8266-beacon.html">transmitting</a> and having produced a <a href="http://m0xpd.blogspot.co.uk/2016/11/a-wifi-controlled-vfo.html">usable VFO</a>, I decided it was time to try using the <a href="http://m0xpd.blogspot.co.uk/2016/09/new-esp8266-board.html">new m0xpd / Kanga ESP8266 - DDS board</a> in a receiving application. I soon discovered just how noisy the ESP8266 is.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-zGsyxyY-FjY/WEQABAsCXuI/AAAAAAAAH2s/RmP9wwyvRJ4E72q_3e6E2Fe12b_g9V4MgCLcB/s1600/Banner.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="298" src="https://1.bp.blogspot.com/-zGsyxyY-FjY/WEQABAsCXuI/AAAAAAAAH2s/RmP9wwyvRJ4E72q_3e6E2Fe12b_g9V4MgCLcB/s400/Banner.jpg" width="400" /></a></div>
<br />
Above, you see the new board sitting on top of my <a href="http://m0xpd.blogspot.co.uk/2011/10/shelving-audio-filter.html">old Leslie 825</a>. The Leslie is next to the bench, which is too full of work and other projects to host a little game like this - so the impromptu receiver has spilled out onto the nearest flat surface.<br />
<br />
Next to the <a href="http://m0xpd.blogspot.co.uk/2016/09/new-esp8266-board.html">IoT processor and DDS</a> is an early prototype of the <a href="http://m0xpd.blogspot.co.uk/p/kanga-uk-resources.html#Rx">Kanga / m0xpd HF receiver shield</a> (<i>it differs from the production versions sold as kits only in that the SA602 is a lovely old original DIL version, as opposed to the SOIC surface mount versions supplied on the PCBs of the kits</i>).<br />
<br />
The receiver shield is actually on top of the <a href="http://m0xpd.blogspot.co.uk/p/kanga-uk-resources.html#Tx">transmitter shield</a> used in recent beacon exploits (which includes a buffer for the local oscillator signal for the receiver - an inheritance from the 'Occam's Micro' days - you can ignore that for the purposes of this story). <br />
<br />
To the left of the receiver shield is a filter system, originally developed for the "<a href="http://m0xpd.blogspot.co.uk/2015/05/another-rig-for-occam.html">Occam's Dirk</a>" rig (that recently had a <a href="http://m0xpd.blogspot.co.uk/2016/11/occam-going-dutch.html">Dutch makeover</a>), which provides switchable input and output filtering for 40 and 20m.<br />
<br />
I fired up this little combo, with the ESP8266 - DDS board running the <a href="http://m0xpd.blogspot.co.uk/2016/11/a-wifi-controlled-vfo.html">recently reported WiFi controlled VFO system</a>.<br />
<br />
The result was a working receiver, with tuning from my iPad, marred by a horrible clicking sound. 'Marred' is an understatement. I should say 'made un-usable'.<br />
<br />
Here is a segment of the receiver shield schematic, including one point where I'm going to report a voltage...<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://3.bp.blogspot.com/-KWeMNh6ByOI/WEQCS2iOuuI/AAAAAAAAH28/LulsiFFTk4cBLGjCWf741098b4MFIyXogCLcB/s1600/Measured%2BHere.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="235" src="https://3.bp.blogspot.com/-KWeMNh6ByOI/WEQCS2iOuuI/AAAAAAAAH28/LulsiFFTk4cBLGjCWf741098b4MFIyXogCLcB/s400/Measured%2BHere.jpg" width="400" /></a></div>
<br />
I powered up the system with the antenna input connected to a dummy load and recorded the voltages at the point '<b><span style="color: red;">MEASURED HERE</span></b>' in the schematic above (<i>conveniently available on a header at the edge of the receiver shield</i>). Here it is, (<i>with apologies for the nasty oscilloscope screen photo</i>), explaining the horrible clicking sound:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-AbgeG2Eps1k/WEQCzTvAvwI/AAAAAAAAH3A/ywI_zHFxwQsqWCd-36rUwsVd3vQkVjLagCLcB/s1600/Noise.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="267" src="https://4.bp.blogspot.com/-AbgeG2Eps1k/WEQCzTvAvwI/AAAAAAAAH3A/ywI_zHFxwQsqWCd-36rUwsVd3vQkVjLagCLcB/s320/Noise.jpg" width="320" /></a></div>
<br />
There are short clicks every 100ms, of amplitude reaching at least -300mV. Remembering that there is another active stage (at 0 dB gain) and then the final LM386 stage (at 46 dB gain) after this, you'll understand that the output is driven to saturation on its power rails every tenth of a second, making the 10Hz clicking, which dominates the output. The miracle is that it is possible to hear activity on the band at all against all this bad behaviour!<br />
<br />
First of all, the origin: Remember that the ESP8266 is being asked to establish an access point in order to run my <a href="http://m0xpd.blogspot.co.uk/2016/11/a-wifi-controlled-vfo.html">WiFi controlled VFO</a> program. Well, every 100ms, the system comes to the end of its 'beacon interval' in servicing that access point and makes some wireless activity (<i>such as broadcasting its SSID</i>). It is that which is causing the noise - but how is it getting into my receiver?<br />
<br />
I found (<i>somewhat to my surprise</i>) that the greater part of the noise wasn't being received via the SA602 (<i>this discovery was made by removing the chip - the reason I was using the early prototype version of the shield with a DIL mixer - and grounding the input to the Op-Amp</i>). Instead, the greater part of the noise is actually generated by the twin Op-Amp package, where it was being directly detected / demodulated to AF. Some little of this 'detection' is also happening in the LM386 - but the op-amp seems to be the greater culprit.<br />
<br />
The receiver actually seems closer to usable (notice I say '<i>closer to usable</i>' rather than '<i>usable</i>') without the op-amp in circuit at all - just taking the output straight from the SA602 to the LM386 (just like the original Sudden). Some part of the clicking which remains is directly demodulated in the audio frequency circuitry (the LM386). In the shield (unlike some implementations of Sudden-inspired DC receivers) this is operated with an unbalanced input. This experience of a very hostile EM environment caused by the ESP8266 might occasion a re-think of the receiver shield design. The remaining part of the clicking appears to enter through the intended (i.e. tuned) RF input...<br />
<br />
Either switching the input filter to the other band or (equivalently) switching the VFO to the other band causes a big drop (>20 dB) in the clicking amplitude.<br />
<br />
All the above is pretty disappointing; the ESP8266 and a simple receiver are uncomfortable bedfellows. There needs to be some careful layout and some circuit re-design before a WiFi module and a simple DC receiver can sit next to each other easily. This isn't exactly news (noise problems <a href="https://forum.pjrc.com/threads/38901-Noise-with-ESP8266">have been reported before in trying to close-couple an ESP8266 and a 2m transceiver</a>) but it sure puts the brakes on some plans I had for the next few weeks.<br />
<br />
Finally, for something really wierd...<br />
<br />
I re-programmed the ESP8266 with some code which just set the DDS frequency. No access point, no WiFi activity. Nothing. Just a quick set-up of the DDS on 40m and then just sit there in an endless loop, twiddling its thumbs.<br />
<br />
The result?<br />
<br />
You guessed it - exactly the same 10Hz noise!<br />
<br />
The chip is still pumping out noise pollution, even when the code hasn't asked it to do anything fancy. I don't know if this is a failing of the IDE (<i>I was using the Arduino IDE, and I don't know if the compiler doesn't turn off the WiFi resources if they've previously been turned on in an earlier program</i>). I don't even <i>know</i> if it is POSSIBLE to turn off the WiFi resources (though I <i>believe</i> it is). All I know is that a piece of code written to evoke NO WiFi functionality at all is producing the massive noise fields around the device as are present due (presumably) to WiFi activity. Wierd.<br />
<br />
So - I have a working, WiFi tuned HF receiver running. It is just ruined at present by some nasty 10Hz clicking, which makes it just about worthless. I don't know if it can be fixed.<br />
<br />
It has certainly put a dent in my enthusiasm for the ESP8266. <br />
<br />
...-.- de m0xpdm0xpdhttp://www.blogger.com/profile/13241728975907453128noreply@blogger.com1tag:blogger.com,1999:blog-8044784353067686026.post-88035121876822518732016-11-27T08:34:00.000+00:002016-11-27T09:13:31.432+00:00A WiFi-Controlled VFONow that I have placed a <a href="http://m0xpd.blogspot.co.uk/2016/09/new-esp8266-board.html">DDS on a board with Wireless connectivity</a>, it is only obvious to set it up as an AP Web Server and allow remote control via a 'soft' user interface...<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-wn2xLSnUPqw/WDqR3Pz3L9I/AAAAAAAAH1w/nyT08LLOBxYsznu6kjCpR44aW4mu66dJwCLcB/s1600/Banner.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="300" src="https://4.bp.blogspot.com/-wn2xLSnUPqw/WDqR3Pz3L9I/AAAAAAAAH1w/nyT08LLOBxYsznu6kjCpR44aW4mu66dJwCLcB/s400/Banner.jpg" width="400" /></a></div>
<br />
When I first started to play with the AD9850 DDS, I made some <a href="http://m0xpd.blogspot.co.uk/2013/02/arduino-beacon.html">beacons</a> and wrote the <a href="http://m0xpd.blogspot.co.uk/p/kanga-uk-resources.html#VFO">Kanga VFO</a> demonstrator code (as application code to support the <a href="http://m0xpd.blogspot.co.uk/p/kanga-uk-resources.html#DDS">Kanga / m0xpd DDS shield</a>). Well, now I've <a href="http://m0xpd.blogspot.co.uk/2016/11/esp8266-production-pcb.html">produced this new internet savvy AD9834 DDS board</a>, I've followed the same pattern; I've done the <a href="http://m0xpd.blogspot.co.uk/2016/08/esp8266-geolocation.html">beacon</a> thing and now - in this post - I'm covering the VFO. Only, of course, this VFO won't have physical knobs and buttons like its predecessor. Understand, it <i>could</i> have all the physical controls if you wanted it to - but that's not the point. Instead...<br />
<br />
When the new code fires up, the ESP8266 sets itself up as an access point and offers a new wireless network:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-P6zA-q-ZiMA/WDqS7XB3PQI/AAAAAAAAH10/sy-AfnXH6p4hfyKoDw6t_CY6OVjM95MFACLcB/s1600/WiFi%2BNetworks.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="306" src="https://4.bp.blogspot.com/-P6zA-q-ZiMA/WDqS7XB3PQI/AAAAAAAAH10/sy-AfnXH6p4hfyKoDw6t_CY6OVjM95MFACLcB/s400/WiFi%2BNetworks.jpg" width="400" /></a></div>
<br />
which you can join from any phone, tablet, computer or similar wireless enabled device. This will provide the interface to the VFO. The network name 'm0xpd Kanga DDS 94TD' is formed of a generic part ('m0xpd Kanga DDS') and a four character index associated with the particular board (<i>such that two VFOs in the same area could operate independently</i>).<br />
<br />
Opening a browser and going to the VFO's 'web page' will open the simple control interface seen below, which reports the frequency at which the oscillator is running, offers 'buttons' to adjust the frequency and 'buttons' to change band:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-hErAkLdY6hk/WDqTpJ0vhRI/AAAAAAAAH2A/QZFY8isbdZ4MEFllCle5LxOEYYcyEw0BQCLcB/s1600/GUI.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="298" src="https://1.bp.blogspot.com/-hErAkLdY6hk/WDqTpJ0vhRI/AAAAAAAAH2A/QZFY8isbdZ4MEFllCle5LxOEYYcyEw0BQCLcB/s400/GUI.jpg" width="400" /></a></div>
<br />
The picture above is a photo of my iPad mini screen, controlling the VFO. I've added the red annotations to make it clearer for you.<br />
<br />
The web page is generated entirely by the m0xpd / Kanga ESP8266 - AD9834 board - the iPad is just interpreting it (<i>as HTML</i>).<br />
<br />
Clicking on any of the 'Adjust Freq' hyperlinks will cause the VFO frequency to change according to the label. Clicking on any of the 'Select Band' hyperlinks has the obvious effect.<br />
<br />
All this is rather dynamic and needs a video to demonstrate (<i>which I haven't provided</i>) - so here are some rather dull 'stills' of the system on 40 metres<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-hOQQdmMrKc8/WDqVw54zL1I/AAAAAAAAH2Q/gbOTGJXNlI0q72rZ6cxpe5lJZZsfQWaSgCLcB/s1600/40m.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="155" src="https://1.bp.blogspot.com/-hOQQdmMrKc8/WDqVw54zL1I/AAAAAAAAH2Q/gbOTGJXNlI0q72rZ6cxpe5lJZZsfQWaSgCLcB/s400/40m.jpg" width="400" /></a></div>
<br />
and 80 metres...<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-M_k6kD77dfM/WDqVnHSRxFI/AAAAAAAAH2M/gET2yKFoM4QIV7nUfqEnQGk3foUejyQbgCLcB/s1600/80m.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="153" src="https://4.bp.blogspot.com/-M_k6kD77dfM/WDqVnHSRxFI/AAAAAAAAH2M/gET2yKFoM4QIV7nUfqEnQGk3foUejyQbgCLcB/s400/80m.jpg" width="400" /></a></div>
<br />
And here's a 'sniff' of the requests received from the web page of sequential increments and decrements in frequency whilst on 80m, along with the resulting frequencies...<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-fUD8zq229JM/WDqWOlb0tlI/AAAAAAAAH2U/GjOwxGdKABkzmJRHcvwrLuw-cefR-LqewCLcB/s1600/Sniff%2BRequests.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="260" src="https://1.bp.blogspot.com/-fUD8zq229JM/WDqWOlb0tlI/AAAAAAAAH2U/GjOwxGdKABkzmJRHcvwrLuw-cefR-LqewCLcB/s400/Sniff%2BRequests.jpg" width="400" /></a></div>
<br />
This code will be released as an application 'demo' for the new m0xpd / Kanga ESP8266 - AD9834 board (along with a multi-mode beacon).<br />
<br />
Of course, the demo code above is intended only as an illustration of what is possible. The rather dry web page could be replaced by an application, written specifically to control a different piece of VFO code, etc.. This is just a start point - but it sure gets me thinking... <br />
<br />
There are other exciting opportunities to be exploited via this access point - watch this space!<br />
<br />
...-.- de m0xpdm0xpdhttp://www.blogger.com/profile/13241728975907453128noreply@blogger.com3tag:blogger.com,1999:blog-8044784353067686026.post-7626630001441543782016-11-25T15:01:00.003+00:002016-11-25T15:01:55.206+00:00Occam Going DutchKees, pa5cw, has produced a new variant of my '<a href="http://m0xpd.blogspot.co.uk/2015/05/another-rig-for-occam.html">Occam's Dirk</a>' software for a multi-band CW transceiver.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://3.bp.blogspot.com/-7x4AJ1yh95s/WDhJfgpj-7I/AAAAAAAAH1g/iCItKAgGi0cFSt6twgqkAUxlcx7g5FVUACLcB/s1600/Flag.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="286" src="https://3.bp.blogspot.com/-7x4AJ1yh95s/WDhJfgpj-7I/AAAAAAAAH1g/iCItKAgGi0cFSt6twgqkAUxlcx7g5FVUACLcB/s400/Flag.jpg" width="400" /></a></div>
<br />
'<a href="http://m0xpd.blogspot.co.uk/2015/05/another-rig-for-occam.html">Occam's Dirk</a>' was a multi-band development of the original '<a href="http://m0xpd.blogspot.co.uk/2013/09/occams-microcontroller.html">Occam's Microcontroller</a>' concept, adding automated 'CQ' calls and one or two other little refinements (like RiT, VFO A/B, etc). The original 'Dirk' was presented with an <a href="https://www.silabs.com/Support%20Documents/TechnicalDocs/Si5351-B.pdf">Si5351</a> in the RF generating role (<i>as I wanted to try using the then new Kanga / m0xpd <a href="http://m0xpd.blogspot.co.uk/2015/04/si5351-shield-production-pcbs.html">Si5351 shield</a></i>).<br />
<br />
Kees has decided to revert to the <a href="http://www.analog.com/media/en/technical-documentation/data-sheets/AD9850.pdf">AD9850</a> DDS for his version of the code, which makes the architecture similar to that introduced in my '<a href="http://m0xpd.blogspot.co.uk/p/kanga-uk-resources.html#VFO">Kanga VFO</a>' demo software (<i>and elsewhere</i>).<br />
<br />
Kees has also added some new functionality: the means to change keyer speed using a voltage input to A0, most conveniently generated by a potentiometer. The original code had speed change as a software function under the menu system - which works, but isn't immediately accessible for a quick change.<br />
<br />
I've always built keyers into my software (<i>and provided both a paddle and a straight key input</i>) but - if I'm honest - I've seldom used these keyers in anger. Here at the shack, I usually drive all my rigs (<i>via their straight key input</i>) from the old faithful "<a href="http://m0xpd.blogspot.co.uk/2010/03/funky-keyer.html">Funky Keyer</a>", which has its own physical speed control. Thus, menu-based speed adjustment of the software was never a big handicap for me. But Kees' approach certainly is convenient (<i>at the expense of one knob</i>).<br />
<br />
Any of you interested in trying Kees' code can find it <a href="https://sites.google.com/site/occamsmicrocontroller/home/software">here on the Occam's Software page</a>. I haven't tried running it - but I have confirmed that it compiles correctly.<br />
<br />
Many thanks to Kees for sharing his work,<br />
...-.- de m0xpd m0xpdhttp://www.blogger.com/profile/13241728975907453128noreply@blogger.com0tag:blogger.com,1999:blog-8044784353067686026.post-28016934260779291432016-11-19T12:01:00.000+00:002016-11-20T07:45:58.780+00:00SNA JuniorI have (<i>finally</i>) got round to building my own instance of <a href="http://kv4qb.blogspot.co.uk/">DuWayne, KV4QB</a>'s <a href="http://kv4qb.blogspot.co.uk/2016/06/sna-jr-ii-update-two.html">prize-winning Scalar Network Analyser Jr</a>:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://2.bp.blogspot.com/-R6x5Odf0gWs/WDArYRp7nnI/AAAAAAAAH0A/IDQ2jj-ImSEfaSR2CelhyQW9-hPG0esSgCLcB/s1600/SNA_Jr.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="288" src="https://2.bp.blogspot.com/-R6x5Odf0gWs/WDArYRp7nnI/AAAAAAAAH0A/IDQ2jj-ImSEfaSR2CelhyQW9-hPG0esSgCLcB/s400/SNA_Jr.jpg" width="400" /></a></div>
<br />
and a <u>great</u> little instrument it is too!<br />
<br />
DuWayne and I have been corresponding for a couple of years, sharing mutual interests. I was pleased to be able to give his work a shout in both the <a href="http://m0xpd.blogspot.co.uk/2016/05/dayton-presentation-materials-online.html">printed and 'spoken' version of my talk at this year's Four Days in May event in Dayton</a> and - more importantly - to catch up with the man in person for a quick eyeball QSO. I also got a PCB for SNA Jr, which has been sitting on the bench for months - until last week.<br />
<br />
The SNA board finally bubbled up to the top of the pile and I looked around for the bits I needed to complete it. Perhaps I should explain (to those of you who don't know) what's involved...<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://3.bp.blogspot.com/-x63cVzek5HI/WDAtL7Ksn4I/AAAAAAAAH0M/Ta7h958-e5EHJ8pFXU5Y0FxJlRYcxGDywCLcB/s1600/Labels.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="290" src="https://3.bp.blogspot.com/-x63cVzek5HI/WDAtL7Ksn4I/AAAAAAAAH0M/Ta7h958-e5EHJ8pFXU5Y0FxJlRYcxGDywCLcB/s400/Labels.jpg" width="400" /></a></div>
<br />
DuWayne's baby uses an AD9850 in one of our <a href="http://m0xpd.blogspot.co.uk/2013/01/multi-mode-beacon-on-rpi.html">familiar modules</a> to generate RF, under the control of an Arduino NANO. You can read on <a href="http://kv4qb.blogspot.co.uk/">DuWayne's blog</a> how the <a href="http://kv4qb.blogspot.co.uk/2015/03/sna-jr.html">SNA Jr is the descendant of earlier experiments in which an Si5351 was used as the signal source</a>.<br />
<br />
In the SNA Jr, the output from the DDS is fed to the device under test and the returned signal is observed in a detector system. DuWayne has 'history' in using simple diode detectors in this role (<i>and I was praising kv4qb for this minimalist approach in my talk at Dayton</i>) - again, you can read about this lineage. However, the SNA Jr now replaces the earlier simple diode detector with a fancy AD8307 detector, in the well-known Wes Hayward, w7zoi, circuit. This gives superior performance in terms of dynamic range and 'linearity'. Also, with the availability of cheap AD8307s (<i>of dubious parentage</i>) from China, this option is also becoming attractive for cheapskates like me! [I have some Chinese AD8307s on order and will report back on performance when the slow boat docks.]<br />
<br />
You can't see the detector in the photo above, because it lurks under the screen - so here's another shot (<i>with apologies for my wayward handling of some of the SMT devices</i>):<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://3.bp.blogspot.com/-vmRpJgjpo04/WDAvVjqBO0I/AAAAAAAAH0Y/TUHNNaRdV7MDOhpnYn9W6THLwS0vqc4xQCLcB/s1600/Detector.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="288" src="https://3.bp.blogspot.com/-vmRpJgjpo04/WDAvVjqBO0I/AAAAAAAAH0Y/TUHNNaRdV7MDOhpnYn9W6THLwS0vqc4xQCLcB/s400/Detector.jpg" width="400" /></a></div>
<br />
The detector is supposed to be enclosed in a screening can, which I haven't made yet - so final performance will be better than I'm going to show you below.<br />
<br />
The DDS RF source and measurement of the RF level returned from the device under test are all under the control of the little Arduino NANO, which runs a sketch <a href="http://kv4qb.blogspot.co.uk/2016/06/sna-jr-ii-update-two.html">provided by DuWayne</a>. This sketch compiled for me under Arduino 1.6.12. The user interface is provided through just a rotary encoder and the 1.8 inch TFT screen.<br />
<br />
I found I had everything needed to build SNA Jr in the 'junk box' - except the screen and a spare NANO, so these were quickly ordered through usual suppliers.<br />
<br />
The result, as you see above, was simple to put together and works very well.<br />
<br />
DuWayne's software offers a number of options, including a 'signal generator' mode, in which the output of the DDS module is set at a single frequency, whilst the returned RF amplitude is displayed numerically and on a bar display (useful when the numerical display is flicking between two values). This mode is illustrated in the graphic below, which shows the system driving a simple switched attenuator, seen in the graphic, with and without 20dB of attenuation switched in (two 10 dB stages).<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-SUYmUsiNS18/WDAxycb8QAI/AAAAAAAAH0k/09K7ksrV2hgtUGFnTNMSZceFees7AyRKQCLcB/s1600/SigGen.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="262" src="https://1.bp.blogspot.com/-SUYmUsiNS18/WDAxycb8QAI/AAAAAAAAH0k/09K7ksrV2hgtUGFnTNMSZceFees7AyRKQCLcB/s400/SigGen.jpg" width="400" /></a></div>
<br />
I'm sure the (in)accuracy of the -20dB step is down to my cheapskate attenuator (with its low tolerance resistors, lack of screening etc.), rather than SNA Jr.<br />
<br />
Another, more important series of modes sets the DDS module generating RF sweeps, which result in graphical displays. These are illustrated below, in which I've contrived a test of the low pass filter which has been conditioning the output of the 'connected beacon' (<a href="http://m0xpd.blogspot.co.uk/2016/11/esp8266-production-pcb.html"><i>Blogs passim</i></a>) on 30m.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://2.bp.blogspot.com/-x6kaIVvIISI/WDAym1pMzkI/AAAAAAAAH0s/NTYgr-OPIQYlL9Yc2qH3nU5SuttxWZpvQCLcB/s1600/LowPass.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="400" src="https://2.bp.blogspot.com/-x6kaIVvIISI/WDAym1pMzkI/AAAAAAAAH0s/NTYgr-OPIQYlL9Yc2qH3nU5SuttxWZpvQCLcB/s400/LowPass.jpg" width="280" /></a></div>
<br />
SNA Jr can also be used with various 'attachments' such as a 40dB tap (<i>with which DuWayne's software allows it to function as an RF Power Meter</i>) or a <a href="http://m0xpd.blogspot.co.uk/2015/09/bridging-gap.html">Return Loss Bridge</a>, with which it can perform SWR Scans.<br />
<br />
Here's a scan looking into my (g5rv) antenna, with (<i>right</i>) and without (<i>left</i>) the Made-from-Junk 'Deluxe' Versa Tuner II switching in tuning appropriate for operation at the CW end of 40m...<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://3.bp.blogspot.com/-wslBo3mQH-w/WDAzooArauI/AAAAAAAAH04/IG0FRKTGq-gkLWPDydM9hvoRL-fDaaNIQCLcB/s1600/g5rv.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="225" src="https://3.bp.blogspot.com/-wslBo3mQH-w/WDAzooArauI/AAAAAAAAH04/IG0FRKTGq-gkLWPDydM9hvoRL-fDaaNIQCLcB/s400/g5rv.jpg" width="400" /></a></div>
<br />
As you see from my additional labeling in the graphic above, the scan was set up to run from 6 to 8 MHz. I reported an equivalent measurement on my own system (originally reported <a href="http://m0xpd.blogspot.co.uk/2015/11/bridge-measurements.html">here</a>) in one of my slides at FDIM (<i>although it was presented in terms of Reflection Coefficient, rather than SWR</i>)...<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://2.bp.blogspot.com/-Id7u9nJkrLY/WDA1O9MJQAI/AAAAAAAAH1E/GX4xfgcTw-ECmkOhXveBfhvjltHknIVdQCLcB/s1600/FDIM.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="296" src="https://2.bp.blogspot.com/-Id7u9nJkrLY/WDA1O9MJQAI/AAAAAAAAH1E/GX4xfgcTw-ECmkOhXveBfhvjltHknIVdQCLcB/s400/FDIM.jpg" width="400" /></a></div>
<br />
<br />
There's even more to SNA Jr - it can even locate minima to impersonate a dip meter (but I haven't been able to try this yet).<br />
<br />
I said at the beginning of this post that SNA Jr is 'prize winning'. DuWayne won the 'Best in Show' award at the homebrew competition at FDIM (<i>which is no mean feat, given the very high standard of the submissions I saw there, in several widely different categories</i>). The prize was well-deserved. <br />
<br />
The project was written up in QRP Quarterly (vol 57(3) pp 22:25, July 2016) :<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://3.bp.blogspot.com/-esxAl-yUYwM/WDA26hgPwfI/AAAAAAAAH1Q/Gg28HEfd564mY2r4yfSWCq4LC5bE2sWNQCLcB/s1600/QRP%2BQuarterly.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="298" src="https://3.bp.blogspot.com/-esxAl-yUYwM/WDA26hgPwfI/AAAAAAAAH1Q/Gg28HEfd564mY2r4yfSWCq4LC5bE2sWNQCLcB/s400/QRP%2BQuarterly.jpg" width="400" /></a></div>
<br />
which is nice to read. But the best thing to do is to get the information from <a href="http://kv4qb.blogspot.co.uk/2016/06/sna-jr-ii-update-two.html">DuWayne's blog</a> and build an SNA Jr for yourself - or take the inspiration to build something similar.<br />
<br />
Great fun - thanks, DuWayne.<br />
<br />
...-.- de m0xpdm0xpdhttp://www.blogger.com/profile/13241728975907453128noreply@blogger.com0