Multitrack step sequencer -- 2D array? Ambitious first project!

I'm building an analog modular synthesizer using CMOS chips, mostly 4xxx series, and the power and flexibility of a microcontroller has FINALLY urged me to start exploring the Arduino universe. I'm not really interested in MIDI since my synthesizer is just microchips and circuitry without (so far) any digital control or actual musical instruments.

I want a step sequencer that will output triggers (~10ms pulse) according to an array -- six (plus?) tracks with sixteen (plus?) steps. The triggers will be used to control any module that can get triggered that way -- I've built clones of some TR-808 voices... kick, hat, snare. :slight_smile:

I'm anticipating populating the array by selecting the track with a rotary switch configured as a voltage divider, which will set the active track. Then I'll have sixteen momentary switches configured as a voltage divider which will toggle the step to 1 or 0.

I'll be keeping track of the patterns with an array of addressable RGB leds, which will, if I understand these things, take up one whole output pin!!!

I envision six or whatever output pins playing back the array in time. Externally clocked or controlled by a potentiometer -- I feel like that's simple stuff to solve. It is for fully analog circuitry, at least.

Right! So all the research I've done so far hasn't turned up a ton of relevant stuff. There's AMAZING projects out there, but most people seem to want their sequencers to either make noise themselves, or communicate through MIDI. Nope, I just want to control my circuits.

Here's a tiny demo of me playing my super-DIY, very early-stages synthesizer:

Playing synth on porch

Mmm...
So basically what you're looking for:

  • a single input switch with 16 different settings (can be done using 4 digital IO pins and a pile of diodes, or by using voltage divider and an analog input pin and a bit more of programming),
  • a number of digital outputs, where the output is a 10 ms pulse that starts off something else,
  • a number of LEDs that light up in sequence.

Sounds like a routine job for an Arduino or similar microprocessor. You may need some port extenders, as it sounds like you're going to need lots of outputs.

Yup! That's it! Routine, eh? That's encouraging.

The way I understand it, I'll need one analog input for what's basically a sixteen position switch using a resistor voltage divider and "a bit more programming". I'll need another analog input to select the track with a six position switch and a voltage divider. One input for each "axis" of the 2D array (I read on here that multidimensional arrays don't have axes, but I don't know what they're called otherwise).

The LED string (arranged to mirror the 2D array) should need just one digital out because oh em gee individually addressable LED strings? Amazing.

Then I'll need one more output pin per track to do the trigger pulses. So that comes to a mere eight pins so far, assuming six tracks. Another analog pin for tempo clock rate control, and other pins as I figure out uses for them, but I'm not even close to the pin count available on even a basic Arduino... right?

Most step sequencers I've seen use one pin per step. Why?!? I've already built several 16 step sequencers in hardware, so I understand how decade counters hit their output pins, but the microcontroller is a lot more powerful and shouldn't be limited like that?

Anyway, thanks!!!

You can do your 16-step sequencer in a single analog input indeed. Same for the 6-level one.

Analog out doesn't work like that, though, as it's PWM: a square wave between Vdd and GND, not a regulated voltage. So for your 16-level output you need 16 pins. Doing some trickery with external hardware indeed you can bring that down, but instead of using decade counters it's easier to use a port extender and be able to address every single port independently.

Some LED strings are indeed individually addressable. That helps cutting down on pins.

I don't need variable voltages on the out, just the trigger pulses.

Like four a 4/4 house beat would be;

(snare drum) 0000100000001000 -> triggers on steps 5 and 12
(bass drum) 1000100010001000 -> triggers on steps 0, 5, 9, 12

Each drum should require one output pin?

Ozerik:
Each drum should require one output pin?

Yes - otherwise how would they know which pulse is for them, and not for another drum?