This is Pt.1 of my serie about modding a Monotron Duo to add Midi and other features.
Controlling the monotron duo’s pitch is a little more tricky than the regular monotron. For one, it doesn’t have a pad on it’s pcb for pitch control. Then, the monotron duo has a small Texas Instrument chip that allow it to play the ribbon in note steps rather than the continuous sweep.
Although it’s an interesting feature – it seems also somehow the chip receives some feedback from the vco1 itself, possibly to do automatic pitch calibration – it also comes in the way of external pitch control. The only pitch control point provided is Vrib on pin2, meaning it doesn’t bypass the chip’s processing. This means first that the pitch is quantized but, more importantly, that the control rate is limited to the ribbon’s 14 semi-tones, which is a bit disappointing compared the 4 octave range the original monotron can provide.
So we need to find an alternate way to control pitch. One could be finding the equivalent point of the Pitch trace on the original monotron but Alessandro Fasan took an interesting path: remove the pitch potentiometer and drive the pitch from it’s central pin. Rather than controlling the pitch offset using the potentiometer, we”ll simply apply voltage generated by the dac to simulate the effect. This has also a rather good side effect: on my first nostromotron, getting the pitch of the analog oscillator tuned is always a tad fiddly due to how sensitive the pitch potentiometer is. By ‘removing’ this feature and placing the mcu control at that level, we gain a much better control over the oscillator’s pitch.
Removing the potentiometer is a bit fiddly and requires some patience, but you can also go the short way by “hacking” the potentiometer’s leg off the pcb and solder a wire to the middle point. Not pretty but hey, it works:
So, using a schematic similar to the original nostromotron mod, we can now hook a MCP4822 dac to a teensy and send some voltage to control the pitch.
However, things get a little complicated from here…
Mapping voltage ranges
Trouble is, the usable voltage range to control the pitch this way is fairly different from what the dac can deliver. Doing a 0->5v sweep on our newly uncovered pitch shows that control is only effective above 1.4v. Our dac though can only provide voltages between 0->4v. So if we do a direct connection between the dac and the pitch control, we’ll lose 1.4v on the bottom end of the dac (nearly a third of it’s range) and will never be able to reach the 4->5v range.
So we need somehow to ‘map’ the 0->4v range of the dac to the 1.4->5v of the pitch control. This is a good job for an op-amp but for some reason, I always find these configuration to be more complicated than they should. Let’s dive into some simple math:
Let’s consider at an op-amp in a typical active inverting amplifying configuration.
Our opamp is wired in single supply mode with Vcc being 5v and VBias being 2.5v.
We know that vout will correspond to Vin – mirrored across VBias – and ‘amplified’ by a factor R3/R1
Vout = VBias + (VBias – Vin) * R3/R1
Therefore, we can deduce that going from the dac’s 4v range to the pitch’s 3.6v range will lead to
R3/R1 = 3.6/4
Using this value, we can compute the resulting voltage from our straight amplifying configuration applying the dac’s voltage range to the input:
Vin = 0v -> Vout = 2.5v + (2.5v – 0v) * 3.6/4 = 4.75v
Vin = 4v -> Vout = 2.5v + (2.5v – 4v) * 3.6/4 = 1.15v
So we see that, in order to match the desired range, we still need to offset/raise the signal of 0.25v.
We do that by creating an additional constant current through R3 using a another resistor (R2) connected to the ground. Here’s the full schematics:
Since the opamp is in an inverting configuration, the contribution of R2, wired to the ground, will be to shift the output up, which is what we want. The amount of offset is determined by
offset = (Vbias -0v) / R2 * R3 = 2.5 / R2 * R3.
Since we want an offset of 0.25v, we get
R3/R2 = 0.25 / 2.5
Knowing the ratio of R3/R1 and R3/R2 now allows us to select a value of R1 and deduce the 2 others. For example, if R1 is 1K, we get R2 = 7.26k and R3 = 0.88k.
However, here comes the extra difficulty: resistors don’t have any given value. Depending (mostly) on the resistor’s tolerance, there’s a fix number of resistor values per decade. For example my set is an E12 (12 values per decade) . This means that you can’t just compute resistor values but need to find which combination of E12 values gives you values that are the closest possible to what you want. I’ve spend a good deal of time yesterday trying to find some “clever” algorithm to find it but in the end, I used brute force : evaluate all the combination, calculating their output range, filter the obvious miss and going through the results manually.
I ended with the following configuration:
R1 = 3,9K | R2 = 22K | R3 = 3,3K
For a predicted output range of 1.52->4.99v (this will vary due to resistor tolerance). I’m getting the following:
Which is close enough for comfort.
Wiring the monotron
An important note is that since we want to produce voltages that are close to Vcc, it is important to select an opamp that allows rail to rail operation (i.e. it can output very close to the positive and negative supplies without clipping the output). The TI TL07x aren’t for example, they will clip at about 2v from VBias. So instead we’ll use a TLV2472.
We’ll also feed temporarily Vrib to 5v in order to get the highest frequency range possible. We might end up later playing with this voltage too, in conjunction to the pitch control to either increase the resolution of the output but we’ll see that when doing the pitch calibration.
Finally, we’ll hard wire the gate pad to 5v too so the monotron produces sound continuously. Since we plan on hooking up a VCA at the end of the chain, we don’t need to ‘trigger’ the osc/filter.
The current setup gives us an osc1 frequency ranging from 50hz to 1Khz, which is a little more than 4 octaves. The second oscillator is still tunable manually way above that, so it all feels good !
Next time will be calibrating, and we’ll try some interesting auto-calibration technique.