[sdiy] Autotuning CEM3340/V3340 oscillators

Roman Sowa modular at go2.pl
Wed Sep 20 16:13:30 CEST 2017

Don't know which PIC you are using but usually you can use TMR0's 
overflow as input for TMR1, so it forms 24-bits counter, plus TMR0 has 
it's own additional prescaller. That's 2s period from 8MHz or over 8 
minutes if you add prescaller.


W dniu 2017-09-20 o 14:19, Tom Wiltshire pisze:
> Hi all,
> A little while ago I was asking about setting the lowest frequency on
> a V3340 oscillator, because I was struggling a bit. In the end, it
> seemed to be only prototype woes, and the board has been fine since.
> Since then, I’ve been experimenting with autotuning the VCO using a
> PIC (a 16F1778), and I thought some of you might be interested to
> hear a progress report. I have the PIC receiving a MIDI input and
> producing control voltages for the VCO via both channels of a MCP4822
> dual 12-bit DAC. The pulse output of the VCO drives a NPN transistor
> to pull down one of the PIC’s input pins to act as a tuning input.
> Tuning the VCO isn’t too difficult, except at the very low end (I’ll
> come to that in a mo). I’m using the typical “successive
> approximation” method, which is described nicely in the Prophet T8
> service manual. In short, you set the highest bit of the DAC, then
> measure the waveform period. If the waveform period is too short, you
> clear the bit, and otherwise you leave it set. Then you move to the
> next bit down, and set that and repeat the test. When you get down to
> the lowest bit, you have the DAC value that gives you the nearest
> frequency below your required frequency. Note any errors are always
> on the low side because of the algorithm.
> There have been some quirks. One is that I’m running the PIC at
> 32MHz, and consequently have 32MHz or 8MHz available as 16-bit timer
> clock frequencies. Even with prescale settings of /2, /4, or /8, this
> is too fast to measure frequencies below 16Hz. I got around this by
> keeping track of timer overflow, which effectively gives me a 17-bit
> counter, which is *just* long enough for the job. To be honest,
> no-one will notice tuning errors way down there anyway - it’s on the
> border of sub-audio.
> Another quirk is using a cheap SPI DAC with only 12-bit resolution.
> There are some nice TI 16-bit DACs available in 8-pin DIP, but they
> cost £10/unit, unlike the one I’m using. Obviously I could go SMD,
> but I’m avoiding that. Twelve bits isn’t enough to produce a good CV
> over the full MIDI note range. 4096 / 128 notes = 32 sub-semitone
> steps, or about 3 cents - not audible, but borderline. So I’d thought
> to produce an fairly general “Octave CV” on one channel and a more
> detailed “Note CV” on the other, which would cover only a part of the
> full range - say four octaves (4096/48 = 85 steps, much better). This
> seems to work pretty well, as far as it goes. I can’t decide how wide
> to have the Note CV. Would it make sense for it to only cover a
> single octave? That’s the most efficient in some ways, but by making
> it wider, I can do larger pitch shifts without having to change the
> Octave CV. That makes updates quicker and also removes the risk of a
> glitch at the moment the octave switches. It’s “six of one and half a
> dozen of the other”, as we say in English.
> Another problem is the SPI interface. Since I have to send two bytes
> to program a 12-bit variable into the DAC (so four bytes for the two
> CVs) there is a limit to how fast the DAC can be updated. You can
> then reduce that theoretical maximum another chunk to allow for
> actual calculation time. This is a problem for something like MIDI
> pitch bend, where the data needs filtering (e.g. more calculation
> time) and also needs sending out frequently enough no steps are
> audible. Adding smoothing to the analog CV would be one solution, but
> if the steps in the Pitch Bend are heavily smoothed by analog
> filtering, then no rapid changes in Note CV are possible. Unless you
> change things around and use a separate channel for Pitch Bend CV,
> with the Bend CV filtered and the Note CV not - but then that’s three
> DAC channels for one note! Not very efficient! The advantage of that
> is that *only* the Pitch Bend CV has to update rapidly. The Note and
> Octave CVs can change only when a new note is played - much simpler.
> Finding the best way to do this with low-cost and easily-available
> chips is proving not entirely straightforward. There are a lot of
> possible ways to arrange things in terms of the range of the various
> CV channels and the distribution of different data to the CV
> channels, and I’m experimenting to see what gives a decent result.
> Hope this is of interest, Tom
> ================== Electric Druid Synth & Stompbox DIY
> ==================
> _______________________________________________ Synth-diy mailing
> list Synth-diy at synth-diy.org
> http://synth-diy.org/mailman/listinfo/synth-diy

More information about the Synth-diy mailing list