Posts Tagged ‘ synth

pucktronix.magix complex lfo diagram

5U Modules / Panels

MFOS Dual Log/Lin VCA

My USB-Octomod

patch[052012] – sketch for upcoming performance

Here’s a sketch for an upcoming performance, happening at Mariposa, an artist live/work space in Tijuana. Using homebrew computer-controlled hardware into a custom software filterbank.

Here’s where the gig is:


View Larger Map

pucktronix.snake.corral software and interface

This is a revamped interface screenshot for the snake.corral.

Download the beta.

from the readme file:

pucktronix.snake.corral

readme.txt
last modified 02.26.2012

software, text, and images copyright 2012
greg surges
surgesg@gmail.com

http://www.gregsurges.com/

pucktronix.snake.corral is a computer-controlled dual 8 x 8 analog signal routing matrix.
Two independent matrices are presented, each with 8 inputs and 8 outputs. Within each matrix,
any input (or summed combination of inputs) can be routed to any output. The device can switch
and route any type of analog signal within the range of +/- 5V. The main electronic components
of the pucktronix.snake.corral are a Teensy 2.0 and a pair of Zarlink MT8816 analog switching
matrix ICs. The MT8816 is a bidirectional 8 x 16 matrix with minimal signal bleed.
Like the USB-Octomod, the pucktronix.snake.corral is powered from the USB bus.

A Max/MSP patch which allows the user to define and switch between presets and/or
apply various algorithmic rhythmic effects to the switching matrices has also been developed.

Using the pucktronix.snake.corral, a modest number of synthesis modules can be used
to create interesting rhythmic and timbral variety. The ability to rapidly switch or
reconfigure a large number of signal connections enables a level of rhythmic complexity
which is difficult to obtain through other means. Sharp cuts between disparate types
of musical material are made possible, and patches can be stored and quickly recalled.

The software is available in two forms, a Max 6 collective which can be run using the free
Max 6 runtime software available from cycling74.com, and a standalone application. Currently,
the standalone is OS X only, but hopefully a volunteer can help compile it for Windows.

On loading the software, the user is presented with two sets of matrix controls and a set of
serial port controls. The first thing to do is to select the serial port which the snake.corral
device is plugged into, and then click the “open serial” button.

Matrix connections can be made by clicking cells on the large matrices. If desired, a configuration
can be saved as a preset by shift-clicking one of the preset slot circles to the right of each matrix.A preset can be recalled by clicking a circle.

Below the preset selection buttons are a pair of buttons, one for clearing the matrix, and one for
setting up a random automation configuration. The two number boxes below select low and high range
limits for the automation timing.

Finally, to the far right of each matrix is a rhythmic automation interface. By selecting one of the
tabs labeled “sinusoid”, “periodic”, “random”, or “pucklet”, the user can then toggle a given
cell to toggle itself on/off with the corresponding rhythmic type. The number box below selects a
relevant time value for each automation type.

Please contact me with suggestions or questions.

Interfacing an MT8816 crosspoint switch with Arduino

I thought I would post a bit of information about using a Zarlink MT8816 crosspoint switch (datasheet) with an Arduino or similar microcontroller. The MT8816 is a 40-pin IC which allows you to route any of its 8 X pins to any of its 16 Y pins – the connections are bidirectional, so you have do 8 ins, 16 outs or 16 ins, 8 outs. What you get from this is a cool matrix signal router – a great device to have for musical or other nefarious purposes.

Here’s the pinout:

Screen shot 2011-09-10 at 7.59.56 PM

Each of the pins beginning with “A” is an address pin – they’re how you address a specific X/Y connection. To interface this with an Arduino, you need to connect 11 digital output pins from the Arduino:

  • 7 address pins (AX0-AX3, AY0-AX2, these use a strange binary-ish number system – more on that later)
  • DATA (High or low to indicate whether to open or close the specified switch)
  • CS (Chip Select – you can just tie this high if you’re only using one)
  • STROBE (Setting this high writes the DATA to the indicated address)
  • RESET (I found that if I didn’t reset the chip upon powering the circuit, I’d get strange results)

Other than that, you need to connect VDD, VSS, and VEE to +, GND, and – supplies.

So, as I mentioned, the addressing scheme is a little strange – and caused me 2 – 3 lost days of head-scratching and frustration. Here’s the info from the datasheet:

Screen shot 2011-09-10 at 8.10.24 PM

As you can see, the address pins indicate an address in a parallel, binary-ish scheme. So, if we’re going to select a particular matrix point – let’s use X3/Y1 – we use all of the address pins at once to indicate the numbers we need. Pins AX0 – AX3 give us 4 X address pins – 4four bits, which lets us count from 0 – 15 in binary. AY0 – AY2 give us 3 bits, 0 – 7 in binary. The 4-bit binary representation of our X address, 3, is 0011, and our Y address, 1, is 001. Consulting the table above, we can look up the value for X3 and see that it is actually 0110, and if we jump down a bit, we see that Y1 is 001. So, to represent our X3/Y1 we just turn our Arduino pins X1, X2, and Y0 high, and leave the others low.

This is all pretty clear, and the addressing follows binary counting rules until you get to X6. Look at the data sheet – X12 and X13 are actually represented by the binary numbers 6 (0110) and 7 (0111). I found an easy fix for my application, but long story short – never assume your chip follows any logic, and always read the datasheet thoroughly. I will admit to much profanity upon discovery of this design “feature” – you can see I had fun on this one…

Screen shot 2011-09-10 at 8.33.01 PM

Here’s my code, apologies for crummy WordPress formatting. Note that I’m only using an 8 x 8 subset of the chip, so my compensation may not work for your needs.

void togglePins(int chip, uint8_t x, uint8_t y, int state){
if(x >= 6){ // compensate for strange x-axis addressing scheme
x += 2;
}
digitalWrite(chip, HIGH);
// next lines convert from integer to binary address
// bitRead returns whether a given bit position in the binary representation of a value is high or low
if(bitRead(x, 0)) digitalWrite(X0, HIGH);
if(bitRead(x, 1)) digitalWrite(X1, HIGH);
if(bitRead(x, 2)) digitalWrite(X2, HIGH);
if(bitRead(x, 3)) digitalWrite(X3, HIGH);
if(bitRead(y, 0)) digitalWrite(Y0, HIGH);
if(bitRead(y, 1)) digitalWrite(Y1, HIGH);
if(bitRead(y, 2)) digitalWrite(Y2, HIGH);
// after address pins are set, set strobe high
digitalWrite(STROBE, HIGH);
// make sure DATA pin is the correct value
digitalWrite(DATA, state);
// reset all pins to low
digitalWrite(STROBE, LOW);
digitalWrite(X0, LOW);
digitalWrite(X1, LOW);
digitalWrite(X2, LOW);
digitalWrite(X3, LOW);
digitalWrite(Y0, LOW);
digitalWrite(Y1, LOW);
digitalWrite(Y2, LOW);
digitalWrite(chip, LOW);
}

It’s a pretty simple function, and you can see the rest of the program in my bitbucket repository.

I’ll be posting more soon about the device I’m building – it’s called pucktronix.snake.corral. I hope this helps decipher the datasheet, and saves some possible head-scratching.

pucktronix.snake.corral computer-controlled analog signal routing matrix demo recordings

here are some improvisations using a new dual 8 x 8 matrix switching device being developed at pucktronix

Updated Synth Modules

Updated panel for SVF.

Updated panel for SVF.

New panel design for VCA. Knobs arent installed yet.

New panel design for VCA. Knobs aren't installed yet.

4 x 4 Matrix Mixer and State-Variable VCF

I’ve recently built both a 4 x 4 audio matrix mixer and a state-variable vcf. Here are some images:

This is the inside of the 4 x 4 matrix mixer.

This is the inside of the 4 x 4 matrix mixer.

Some of the inner circuitry.

Some of the inner circuitry.

This is the back panel w/ outputs and power.

This is the back panel w/ outputs and power.

This is the finished matrix mixer.

This is the finished matrix mixer.

The mostly populated VCF PCB.

The mostly populated VCF PCB.

Panel wiring and testing the VCF circuit.

Doing the panel wiring and testing the VCF circuit.

The finished enclosure: a power-indication LED will fit in the hole on the left.

The finished enclosure: a power-indication LED will fit in the hole on the left.