Universal Control Voltage Module

Current applications:
  • MIDI2CV (up to 8 channels)
  • MIDIMON
  • CV2CV (Quantizer)
  • CV2MIDI
  • Voltmeter

    Possible applications:
  • Sequencer
  • Appregiator
    ...
  • last update 06.07.2004
    Yeah, here it is, my first µcontroller based module, the one and only :-) Universal Control Voltage Module (UCVM). It is built around an Atmel AT90S8535. The main job of this module will be to act as a MIDI2CV module, but there will be some extras which might be worth looking at.

  • Eight CV outputs and eight GATE outputs: Currently the UCVM works as an 8-channel MIDI2CV module, so an 8 finger chord results in 8 CVs and 8 GATE signals. Future software updates will provide the possibility of configuring the CV outputs for different purposes, like 4 note values and 4 velocity values, or 7 note values and 1 velocity output or 6 note values, 1 velocity and 1 key pressure value and so on.

  • Two analog inputs: The AT90S8535 contains eight 10 bit ADCs and I connected two of them to these inputs. In the CV2CV (Quantizer) function these inputs are quantized and put as note values to CV out 1 and in the CV2MIDI function the result is converted into a MIDI message and sent to MIDI out (for example analog sequencers could use this, and you can make your old formant keyboard beeing a MIDI-Keyboard! (that is what the world waited for :-)))

  • 4x20 character display and 3 function keys: displays the actual module setup which is set up with the 3 function keys. Currently you can select the module function via F1 (red button) and F3 (white button) acts as the 'enter' key.

  • ISP interface to do software updates without programmer. Very useful while making experiments and software changes, so you can hack around, compile, plug your laptop into the module and do an upload. Without ISP you had to remove the module from the synthi for each update - superhorror!! - Schematic Programmer Interface / Programmer Software. This interface can also be used for memory downloads, for example if the UCVM is used as a sequencer you could download sequences and tracks to laptop. I don't have the software now, so this will also be a future project.
  • Assembly report and circuit description

    Well, there is nothing special or tricky in the circuit. As I don't have much electronic know how I am glad that everything seems to work fine. I collected most of the circuit parts from other web pages; if somebody recognizes a part as 'his' or 'her' development, I will thank him or her and hope that he or she is generous enough to allow me to use / show this part in my circuit or documentation, if not, please let me know. I will remove it from the documentation.

    Important notice: clicking on the schems means ACCEPTING THE DISCLAIMER on bottom of the page!

    Control unit

    I started with the ISP interface of course to be able to test all new functions without removing the controller. I continued with the display interface to be able to display status or debugging infos of new functions. The display interface works with the standard HD44780 lcd displays incl. backlight function. I don't use backlight with my actual display (the backlight lcd module in 4x20 was too expensive, but I testet with a 2x16 backlight display).

    Next thing was to connect and test the function keys. Everything worked fine. Then I built the DAC. I use the DAC08, but only in a 6 bit resolution. Later on I recognized that I was fixed in my 5 Octave environment with one semitone / bit using this resolution, but this seemed to be ok for me for using the UCVM as a MIDI2CV. And I did not want to do a redesign. Additional to mention that I had my quantizer implicitly :-)
    As I did not want to use too many wire bridges I connected the port pins of the controller to the input pins of the dac as easyly as possible, so thats why I do a bit conversion in the coding.

    After that I testet the Analog In channels and I wrote a little routine just for fun to read the Analog 1 input and put the result on the dac, and I had my quantizer, yeah! I testet it with my formant VCOs and realized that my old formant keyboard has a problem in its upper half (CV jump), which I had compensated with VCO adjusting, so now I have to do a new VCO adjusting, hmpf!

    Last thing of the control board was to build and test the MIDI connections. That was quite difficult and very frustrating for me, because I got in contact with the MIDI protocol the first time in my life. I wrote the software for the MIDIMON to see the incoming MIDI messages and plugged in my old ELKA EK22 synthesizer. This veteran, glad to be reactivated, startet with an orgasm of $FE bytes which I saw on my MIDIMON display ('...what the hell is this filling my display making no sense...'). First I considered it as an error in the MIDI IN current loop interface or in my software, but then I realized (via oscilloscope) that it came directly from the ELKA meaning 'Active Sensing' (according to my MIDI documentation). Yeah, great, this was very 'active', but sensing? What does this sensing expect as an answer? Another synthesizer yelling 'Hi', or a slap into the face from a 'sensed' woman? Well, I immediately killed this nonsense in my MIDI In routine and then I saw something that looked like a MIDI message, three bytes starting with a $90, but followed by trash. I made some experiments, but nothing helped. Key pressed, three bytes, key released, three bytes, but no sense behind the $90. But then I thought: Receiving MIDI does not send an acknoledge, so sending MIDI sends three bytes or more in one stream, and my software just was too slow to read a byte, convert it into hex and display it in the MIDIMON and then to read the next MIDI byte. I programmed a stack solution, and everything worked fine.

    GATE and CV unit

    Both the GATE and the CV bank work with analog storage of the voltage provided by the DAC, so I built just one DAC and multiplexed it with two 4051.

    The first 4051 transmits the voice depending GATE voltage (0 or 5V) to a capacitor, which is followed by a voltage follower (1/4 of a TL064) and an inverting Schmitt Trigger (1/6 of a 40106). Because the Schmitt Trigger is inverting, the software generates 0V to activate a GATE and 5V to deactivate it.

    The second 4051 transfers the voice depending note voltage to a capacitor, which is also followed by a voltage follower (1/4 of a TL064) and a simple portamento circuit consisting of a portamento pot and another capacitor. The portamento stage is followed by (yes, you are right!) another voltage follower and a voltage adder stage to do the +/-0 adjustment and the semitone fine tuning. This stage is followed by (incredible!) a voltage follower acting as the output.

    The 200k trimpot between stage 2 and 3 works as a V/Oct adjustment. This was necessary to compensate component tolerances.

    Schematics and software Please see the disclaimer on page bottom!

  • Schematic Control Unit
  • Schematic GATE and CV bank
  • Schematic Programmer Interface / Programmer Software
  • UCVM assembler source
  • Experiences I made working with the module

    Well, if I had to design again another module like that or a similar module I would do some changes in different parts. But this is the purpose of an experimental module, to learn how to realize functions or how to make them better or easier.
    First of all: All functions work satisfying, but to achieve this I had to compensate some hardware design failings by additional software functions, so some hardware design changes would make software development faster.

    One thing which can't be compensated by software is the 6 bit resolution of the DAC. This is the minimal resolution to fulfil 5 octave requirements and that works fine, but that means you can't use the dac for other purposes (fine tuning for example). I did this to save connections between µC and DAC, but now I would use 8 or better 10 bit resolution to have a scalable quantizer and to be more flexible.

    Next thing is that the ADC functions of the µC could work better. Constant voltages differ +/- 0x020 in their ADC results from measurement to measurement. I think this is the result of saving a precise reference voltage and reference ground circuitry (instead I connected reference voltage to 5V supply and reference ground to ground).

    Last thing is the fact that I used the pins for RXD and TXD also for the display bus which results in the need of higher discipline in programming MIDI I/O and display functions (I had some bad collisions, he he).

    First unit of the UCVM: The control module with 4x20 character display, reset and function keys, the two analog inputs, ISP interface, MIDI IN OUT THRU and the eight GATE outputs.
    Click to enlarge
    Click to enlarge
    Second unit of the UCVM: The voice module with eight analog outputs. Each analog output has a fine tune and portamento knob (No, I did not want to program fine tune and portamento, and the DAC in the module has only 6 bit resolution for 5 octave tone values, so I implemented an analog solution for fine tune and portamento).

    Control board with µcontroller, ISP and MIDI interface, function keys, analog input, display interface and DAC.

    GATE board with GATE bank and four of the eight CV output stages.

    Voice board with the rest of the analog outputs.

    PCB - Printed Circuit Burger

    PCBurger and Pasta

    Final module test at the workbench...
    Please send any questions or remarks to:
    Carsten Toensmann

    Home



    Disclaimer:
    No warranty for completeness or correctness of technical descriptions, schemas or any information provided on www.analog-monster.de/* pages.
    Contents of linked pages are in responsibility of the page owners and analog-monster dissociates from them.
    All information provided on www.analog-monster.de/* pages is in ownership of www.analog.monster.de (except especially marked) and for private use only. All rights reserved.