ornaments+crimes extended / polymorphic 16bit CV genererator

Status
Not open for further replies.

mxxx

Well-known member
ornaments+crimes extended / polymorphic 16bit CV generator

fyi / fwiw ...

since this is built around a teensy 3.x, i figured why not post it here, too:

20090774694_b56e557693_b.jpg

the hardware has been around for a while, but there has been in the works a/the new and proper firmware (in the creation of which i wasn't really involved) which turns the module in a nifty, multi-function CV generator/processor (for use with modular synthesizers):

the beta release can be found here: https://github.com/mxmxmx/O_C , including the schematics, gerber files, and a fair amount of code.

the main purpose of this is producing precision control voltages, but there's a couple of random and LFO-type functionalities included, too. a/the bottle neck in this regard was the single SPI port, which is shared by the DAC8565 and the OLED, so achieving decent sample rates was tricky/impossible; we ended up using a custom SPIFIFO/DMA driver for the DAC and OLED which manages 16.6kHz and draws/write single pages, so as to minimize any interference with time-sensitive stuff. not too bad, but a second SPI port would have been convenient ...

anyways, here's a little run-down of what it does:


* CopierMaschine: is an enhanced version of the original quantising digital emulation of a four stage analogue shift register (ASR).

* Harrington 1200: provides basic neo-Riemannian Tonnetz transformations of triadic chords, triggered by the digital (gate/trigger) inputs.

* Automatonnetz: combines Tonnetz transforms with a "vector" sequencer - it can be both a chord sequencer and a melody sequencer, but not of the usual kind.

* Quantermain: is a quad pitch quantiser for external voltages, with editable preset scales, even fully editable user-scales incl. microtonal tunings, etc; it can do clocked (trigger-driven) quantising, or continuous quantising, with a latency of under 100 microseconds; it also features quad Turing Machines and/or May-Verhulst logistic maps as optional, semi-random, internally generated CV sources.

* Quadraturia: is a wavetable quadrature LFO, based on the "Easter egg" in the Mutable Instruments Frames module.

* Low-rents: is a dual Lorenz and Rössler (strange attractor) modulation generator, partially based on the "Easter egg" in the Mutable Instruments Streams module.

* Piqued: is a quad voltage-controlled envelope generator, based on envelope generator code from the Mutable Instruments Peaks module, but extending it with voltage control, additional envelope types, including re-triggering (looping) envelopes, additional segment shapes, adjustable trigger delays, and a unique Euclidean "trigger filter" which turns the app into a Euclidean rhythm generator which can output envelopes, not just gate or trigger pulses.

* Dialectic Ping Pong: is a quad bouncing ball envelope generator, based on a hidden mode of the Mutable Instruments Peaks module.

* Viznutcracker, sweet!
: is a quad "byte beat" equation generator, which can be used as an audio source to generate curious but often interesting 8-bit noises and tunes, or which can be clocked by an external source to produce "byte beat" control voltage sequences.

* References: is a simple utility app that outputs specific reference voltages on each channel to help tune or calibrate VCOs and other modules.

hardware:

- teensy 3.1 / 3.2
- 4x precision CV outputs, 16-bit (TI DAC8565), output range: -3v / +6v, "in-the-loop" compensated, for best DC accuracy, with 9 calibration points at -3v to +6V per channel settable in firmware to ensure excellent linearity (+/- 1mV accuracy across a 9 octave pitch CV range is achievable).
- 4x CV inputs, -3.5v / +6.5v, 12bit, 100k input impedance.
- 4x trigger/gate inputs, threshold ~ 2.5v, 100k input impedance.
- two rotary encoders, with built-in push switches.
- two push buttons.
- 128 x 64 pixel 1.3" OLED display (SPI / SH1106 driver chip).
- trigger-to-quantised-output latency < 100 microseconds
- apps use a 16.7kHz internal timer (CPU overclocked to 120MHz), therefore the DAC update (sample) rate is 16.7kHz on each of the 4 channels.
- ADCs are also read at 16.7kHz but in many of the "apps" running on O+C, 16 values are averaged to remove noise, meaning that the effective sample rate for CV inputs is about 1 kHz. Digital (gate/trigger) inputs are read at 16.7 KHz - this ensures very low latency.
- +/-12V power only, ca. 85mA power draw on +12V bus, much less on -12V bus).
 
Last edited:
WOW. just WOW

soundclips of what this does with a synth? I take it that it generates control patterns for synth parameters? analog control signals!

MAN, this is a whole new world .... how does it plug in to an amp:rolleyes:
 
Last edited:
soundclips of what this does with a synth? I take it that it generates control patterns for synth parameters? analog control signals!

yes, just control patterns. so it'll really depend on what else is in your system, which mode you use, and so on.

the initial "ASR" (analogue shift register) function is a classic from the 70s; it's commonly used to generate "arabesque" patterns.

i don't have any proper soundclips. here's a test-track though, made with one of the early prototypes where you can sort of hear the "arabesque" thing (driving 4 analog oscillators/voices, in this case):

https://soundcloud.com/menschenimhotel/further-memory-problems

and here's a crappy phone video showing the ASR screen saver:


the other modes, say the chaotic functions stuff, would have very different effects on whatever else sits downstream, of course.
 
Merci. I will look at this when I am not at work ... AWESOME

thanks.

here's another one:


that's quad quantiser mode (in the video, only two channels are being used (one driving an oscillator, the other modulating the cut-off of a filter)). typically you'd use that to process incoming control voltages / force them to a particular scale (Volt/octave). in this case, we included some additional features, where the source "voltage" is generated internally. LFSR type things, in this case.
 
Mxmxmx,
Can I ask how you're driving the OLED? I've picked up one of thos 1.3" oleds SPI with sh1106 chipset and I'm struggling to find a working driver for it. It appears you were using a hacked version of u8glib but I see you dropped it a couple of months ago from the repo. How are you now doing your rendering?
 
Mxmxmx,
Can I ask how you're driving the OLED? I've picked up one of thos 1.3" oleds SPI with sh1106 chipset and I'm struggling to find a working driver for it. It appears you were using a hacked version of u8glib but I see you dropped it a couple of months ago from the repo. How are you now doing your rendering?

hi mongrol,

sorry, only seen this now. yeah, i/we used u8glib initially, but it was too inefficient (probably not an issue in general, but in this case, consistently updating the DAC8565 at a somewhat decent sample rate was/is the main priority, as was not wasting too much time with drawing frames so that the input/output latency is low); we only kept the init sequence from u8glib, most the rest works very different. see here for the basic driver code. this renders + sends the pages individually, most of the SPI happens via DMA, so it's generally quicker and doesn't delay time-critical stuff as badly.

it should be possible to repurpose that for other stuff, though using u8glib will be more straightforward. this is still using u8glib (NB: SPI clock is pin 14 in this case, so you might need to adjust spi4teensy, too)
 
Status
Not open for further replies.
Back
Top