Posted by & filed under Projects, Synth DIY.

A single chip 1V/Oct voltage controlled digital oscillator, with 20 waveforms in a scannable wavetable.

The VCDO uses a PIC 16F1847 microprocessor to create a versatile and simple voltage-controlled 8-bit digital wavetable oscillator. All oscillator parameters are controlled by 0-5V control voltages. The chip has a native exponential control response, making interfacing with 1V/Oct control voltages very simple, even without an exponential convertor.

Scanning through the wavetable with the Waveform knob. Sub Osc is a simple sine 2 octs down:


Starting with a straight sound, then wrecking it with delicious bitcrush:


Glide between notes:


A ‘ping’y sound with a touch of envelope to the wave CV:


Switching through a few of the Sub Osc options. There are 8 waveforms, each available either -2 octs, -1 oct, Unison, or +1 octave.


Scanning through the wavetable with an envelope:


Note that none of these sounds include any filtering. They were recorded using a Sequential Pro-One to provide a CV and VCA (via the External Audio input) but the filter was left wide open.

Additionally, Rick Holt has some great sound examples (much better than mine!) over at the Frequency Central VCDO page. He builds and sells a module based on my chip.

VCDO Features

Exponential frequency response with no exponential convertor

The Note CV input accepts 0-5V control voltages to cover the MIDI note range 0-63. The highest note the VCDO can produce is Note 120, 8372Hz.

10 octave note range from 8.18Hz to 8372Hz

The basic frequency range of the VCDO is ten octaves from MIDI Note 0 to MIDI Note 120. The NOTE CV input is quantized to semitones, but the FREQ MOD CV input is not.

Main Oscillator with 16 waveforms arranged as a wavetable

The chip can produce 16 output waveforms. Rather than switch from one to another, the oscillator is able to crossfade from one to the next, creating a wavetable which you can scan through under voltage control.

It would have been easy to include standard waveforms like ramps and triangles, but there are many oscillators that produce those. This oscillator has its own character and provides something different.

Separate Sub Oscillator with 8 waveforms at four octaves

As well as the main oscillator, there is also a sub oscillator with 8 waveforms. Each waveform can be selected at one of four octaves, either +1 octave (above the main osc pitch!), in unison, -1 octave, or -2 octaves.

Bitcrushing effect

The BITCRUSH CONTROL input controls the sample bit resolution of the output. This can be reduced from 8-bit down to 1-bit in eight steps.


The chip also includes a glide/portamento effect, without requiring an external lag processor for the control voltage. Glide times range from 12ms/octave to 2.4secs/octave. Turning the GLIDE CONTROL to minimum switches the glide effect off.

8-bit, 62.5KHz sample output rate

The internal waveforms and calculations are 8-bit, and new samples are output via the on-chip PWM modules at 62.5KHz. The PWM modules’ outputs are at 125KHz. The fact that this is higher than the sample rate allows more effective PWM filtering to be applied. The two-stage 24dB Bessel filter provides the best-possible pulse filtering.

Easy interfacing to control voltage mixers

The inputs intended for control voltages have an inverted response to make it simple to interface them with an inverting mixer. This is shown in the application circuits.

The waveforms and an example circuit are in the datasheet.

More details

If you’d like to build one, or like to know how I built mine, perhaps you’d like to look at:

VCDO elsewhere on the web

Rick Holt has a DIY PCB for this project over at his website – Frequency Central VCDO DIY page.

    Related Products

  • VCDO Wavetable oscillator

    The VCDO chip is a powerful voltage-controlled 8-bit wavetable oscillator. It includes a sub-oscillator, a glide feature, and separate modulation inputs for frequency and waveform modulation. Download Electric Druid VCDO Datasheet The datasheet includes example circuit diagrams, example waveforms, and the chip pinout diagram. There are further details on the VCDO project page....

    More Info Buy Now

17 Responses to “Voltage-controlled digital oscillator VCDO1”

  1. Alon

    Hey there !
    what chip’s do you use for IC1.1/1.2 and IC2.1/2.2 for filtering the PWM output out of the VCDO (the chips or the 24dB Bessel LPF)

    thanks a head 🙂

    • Tom Wiltshire

      Any typical audio op-amp will do. I used TL072’s, but LF353 or MC1458’s would do just as well. The circuit isn’t fussy about op-amp choice, so it doesn’t matter too much.

  2. Robert

    Hey, I build your VCDO circuit but get a slight modulation or flutter in sound (cant tell if frequency or another parameter).
    I didn’t build the 1k/100nF potentiometer smoothing filter, because of the way I arranged it on (perma-)breadboard there wasn’t any place left.
    Is the smoothing crucial or should I look out for a grounding issue?
    Your help is very much appreciated, all the best!

    • Tom Wiltshire

      On the first version of the Freq Central VCDO PCB, we had some problems with the CV inputs that were next to the PWM outputs. On the second revision, I routed the PWM outputs on the other side of the board from all the CV inputs, and that fixed it. I think the Wave CV was the culprit. Adding a good dollop of capacitor from that input to ground solved a lot of issues. Try that and see if it helps.
      Decent grounding is always a good idea, but I’m always amazed at what I can get away with!

  3. Cor Hofman

    I studied your circuit diagrams in the datasheet a bit.
    I wondered, shouldn’t C18 be connected the other way around. The – should actually connect to -15V and the + to GND.

    By the way would +/- 12 V do as well?

    • Tom Wiltshire

      Yes, it should. Well spotted! It’s electrolytic, so it should definitely be -ve to -15V and +ve to Ground.

      Yes, +/-12V works fine too, with no changes. The only parts that are voltage-sensitive run off the +5V supply, so there’s no problem.

  4. L´Andratté

    Hey Tom, what´s the difference between control inputs and cv inputs, are they just two of the same, can I cv the bitcrushing e.g.?

    • Tom Wiltshire

      Yes, basically they are two of the same. You can CV the bitcrush. Sometimes I tweaked the ranges to suit either a knob or a CV, but in general they’re just added together inside the chip.


      • L´Andratté

        Ah, that´s what I thought, just wanted to make sure before starting to build!
        Thanks for answering (and all the cool stuff on your site btw.)!

  5. Jim Wyatt-Lees

    Hi Tom

    great stuff! One quick and possibly dumb question but could I control pitch of the VCDO 1 from a ribbon controller input into NOTE CV or would the semitone quantizer step it to the nearest semitone?



    • Tom Wiltshire

      If you feed it to NOTE CV, it’ll get quantised, yes. If you feed it to FREQ MOD CV, it won’t get quantised, but the range is more limited. This was my sneaky way of working around the limitations of the on-chip ADC.


      • Jim Wyatt-Lees

        Hi Tom

        that’s not the three octaves I’d hoped for. Oh well, back to the analogue drawing board!



        • Tom Wiltshire

          You could give the code a tweak…
          3 octaves on the Freq Mod CV wouldn’t be hard to do, and you’d have enough resolution for that.
          Altering this part of the RebuildPitchWord routine so the FREQ_MOD_CV was one bit further left would give you a 32 note range instead of the 16 notes that it currently has:

          ; Add the Freq Mod CV
          swapf FREQ_MOD_CV, w
          andlw 0xF0 ; Get low nibble in upper nibble position
          addwf REQ_PITCH_LO,f ; Add low nibble to low byte
          swapf FREQ_MOD_CV, w
          andlw 0x0F ; Get upper nibble in low nibble position
          addwfc REQ_PITCH_HI,f ; Add upper nibble to high byte

          Although in fact, I might be tempted to alter the set-up of REQ_PITCH_HI/LO, since doing it this way would avoids turning FREQ_MOD_CV into a two-byte variable and then doing a two-byte addition.

          ; Start with the Master Offset
          clrf REQ_PITCH_LO
          ; movlw (256-37) ; -37 semitones offset
          ; DEBUG - no offset for now

          ; Add the Freq Mod CV
          movlw FREQ_MOD_CV
          movwf REQ_PITCH_HI ; Too much range
          lsrf REQ_PITCH_HI, f ; Downshift 3 places
          rrf REQ_PITCH_L, f
          lsrf REQ_PITCH_HI, f
          rrf REQ_PITCH_L, f
          lsrf REQ_PITCH_HI, f
          rrf REQ_PITCH_L, f

          ; Add the Note CV
          movf NOTE_CV, w
          addwf REQ_PITCH_HI, f

  6. Ed

    so feel free to download and use Electric Druid code in your personal synth…
    I did, and use it in a midi controlled generator I am building using an Arduino and an AM7200 256*9bit FIFO (and some other chips..).
    Thanks for the waveforms!

  7. Ed

    As soon as the module is finished I’ll post a link to youtube and a thread on but this might take some time while I’m still in the hard/software design phase.


Leave a Reply

Your email address will not be published. Required fields are marked *