Categories
Uncategorized

Qu-Bit Nano Rand

Is this one the most abused Eurorack Module ever?

Just bought this second hand off eBay, and good grief, what a mess! even the main pot is super loose.

Categories
Uncategorized

korg NTS 1 mod for Eurorack

Well, I like the idea of the Korg NTS 1, a programmable Oscillator and much more. I think that it would be a useful component of my developing Mixed Signal System for Eurorack. Mixed signal, as in, the rack has both MIDI and CV, and 12v and 5v. Probably a shocker to the purists, but for me, Eurorack is all about making it your own, to satisfy whatever itch you have.

So, the NTS 1 gets a small mod, and then fits straight into the rack, the CV trigger signal from the sequencer is recognised by the korg sync input, as it is set up for 5v triggers. So this works straight out of the box.

The korg dimensions are: (W x D x H) 129 mm x 78 mm x 39 mm / 5.08” x 3.07” x 1.54”, so its already the right height, with the mounting holes in the right place for the rack.

This will no doubt VOID YOUR WARRANTY… dont blame me….

https://www.korg.com/uk/products/dj/nts_1/specifications.php

As you can see from the above, I made up a fixing panel to fit the side panel that has all the inputs and outputs next to the face plate. All that was needed was an extender cable to bring the audio to the front panel, and a small hole drilled to fit it through.

the second NTS 1 circuit board DOES NOT FIT without some fine fettling, as its a mm too wide for the rack. but, after a little adjustment it went in. To bring the inputs and outputs to the front, the second circuit board can just be mounted side on:

lastly, I took and old USB micro B cable, cut the end off, and fitted a eurorack power connector to connect to the rails that already have a 5v supply alongside the 12v supply.

the adapter panel is below, scrappy, but it does the trick.

Categories
Uncategorized

Working on a Teensy Euclidean eurorack module

teensy euclidean eurorack module
just starting to move the Teensy Euclidean box to eurorack

Categories
Uncategorized

static text display using the Teensy OctoWS2811 library

here is some code for static text display using the Teensy OctoWS2811 library



<pre><code>
#include "OctoWS2811.h" //this code displays a static text message to octows2811 led array //mortonkopf //fixed values for octoWS2811 const int ledsPerStrip = 34; DMAMEM int displayMemory[ledsPerStrip*6]; int drawingMemory[ledsPerStrip*6]; const int config = WS2811_GRB | WS2811_800kHz; OctoWS2811 leds(ledsPerStrip, displayMemory, drawingMemory, config); //=== F O N T ===// /*for ease of reading the code the font could be placed under a seperate tab using the add tab and then using #include*/ byte alphabets [96] [5] = { { 0x00, 0x00, 0x00, 0x00, 0x00 }, // space (0x20) { 0x00, 0x00, 0x2F, 0x00, 0x00 }, // ! { 0x00, 0x07, 0x00, 0x07, 0x00 }, // " { 0x14, 0x7F, 0x14, 0x7F, 0x14 }, // # { 0x24, 0x2A, 0x7F, 0x2A, 0x12 }, // $ { 0x23, 0x13, 0x08, 0x64, 0x62 }, // % { 0x36, 0x49, 0x55, 0x22, 0x50 }, // & { 0x00, 0x05, 0x03, 0x00, 0x00 }, // ' { 0x00, 0x1C, 0x22, 0x41, 0x00 }, // ( { 0x00, 0x41, 0x22, 0x1C, 0x00 }, // ( { 0x14, 0x08, 0x3E, 0x08, 0x14 }, // * { 0x08, 0x08, 0x3E, 0x08, 0x08 }, // + { 0x00, 0x50, 0x30, 0x00, 0x00 }, // , { 0x08, 0x08, 0x08, 0x08, 0x08 }, // - { 0x00, 0x30, 0x30, 0x00, 0x00 }, // . { 0x20, 0x10, 0x08, 0x04, 0x02 }, // / { 0x3E, 0x51, 0x49, 0x45, 0x3E }, // 0 (0x30) { 0x00, 0x42, 0x7F, 0x40, 0x00 }, // 1 { 0x42, 0x61, 0x51, 0x49, 0x46 }, // 2 { 0x21, 0x41, 0x45, 0x4B, 0x31 }, // 3 { 0x18, 0x14, 0x12, 0x7F, 0x10 }, // 4 { 0x27, 0x45, 0x45, 0x45, 0x39 }, // 5 { 0x3C, 0x4A, 0x49, 0x49, 0x30 }, // 6 { 0x01, 0x71, 0x09, 0x05, 0x03 }, // 7 { 0x36, 0x49, 0x49, 0x49, 0x36 }, // 8 { 0x06, 0x49, 0x49, 0x29, 0x1E }, // 9 { 0x00, 0x36, 0x36, 0x00, 0x00 }, // : { 0x00, 0x56, 0x36, 0x00, 0x00 }, // ; { 0x08, 0x14, 0x22, 0x41, 0x00 }, // < { 0x14, 0x14, 0x14, 0x14, 0x14 }, // = { 0x00, 0x41, 0x22, 0x14, 0x08 }, // > { 0x02, 0x01, 0x51, 0x09, 0x06 }, // ? { 0x32, 0x49, 0x79, 0x41, 0x3E }, // @ (0x40) { 0x7E, 0x11, 0x11, 0x11, 0x7E }, // A { 0x7F, 0x49, 0x49, 0x49, 0x36 }, // B { 0x3E, 0x41, 0x41, 0x41, 0x22 }, // C { 0x7F, 0x41, 0x41, 0x22, 0x1C }, // D { 0x7F, 0x49, 0x49, 0x49, 0x41 }, // E { 0x7F, 0x09, 0x09, 0x09, 0x01 }, // F { 0x3E, 0x41, 0x49, 0x49, 0x7A }, // G { 0x7F, 0x08, 0x08, 0x08, 0x7F }, // H { 0x00, 0x41, 0x7F, 0x41, 0x00 }, // I { 0x20, 0x40, 0x41, 0x3F, 0x01 }, // J { 0x7F, 0x08, 0x14, 0x22, 0x41 }, // K { 0x7F, 0x40, 0x40, 0x40, 0x40 }, // L { 0x7F, 0x02, 0x0C, 0x02, 0x7F }, // M { 0x7F, 0x04, 0x08, 0x10, 0x7F }, // N { 0x3E, 0x41, 0x41, 0x41, 0x3E }, // O { 0x7F, 0x09, 0x09, 0x09, 0x06 }, // P (0x50) //edited - replace 0x3F with 0x7F { 0x3E, 0x41, 0x51, 0x21, 0x5E }, // Q { 0x7F, 0x09, 0x19, 0x29, 0x46 }, // R { 0x46, 0x49, 0x49, 0x49, 0x31 }, // S { 0x01, 0x01, 0x7F, 0x01, 0x01 }, // T { 0x3F, 0x40, 0x40, 0x40, 0x3F }, // U { 0x1F, 0x20, 0x40, 0x20, 0x1F }, // V { 0x3F, 0x40, 0x30, 0x40, 0x3F }, // W { 0x63, 0x14, 0x08, 0x14, 0x63 }, // X { 0x07, 0x08, 0x70, 0x08, 0x07 }, // Y { 0x61, 0x51, 0x49, 0x45, 0x43 }, // Z { 0x00, 0x7F, 0x41, 0x41, 0x00 }, // [ { 0x02, 0x04, 0x08, 0x10, 0x20 }, // backslash { 0x00, 0x41, 0x41, 0x7F, 0x00 }, // ] { 0x04, 0x02, 0x01, 0x02, 0x04 }, // ^ { 0x40, 0x40, 0x40, 0x40, 0x40 }, // _ { 0x00, 0x01, 0x02, 0x04, 0x00 }, // ` (0x60) { 0x20, 0x54, 0x54, 0x54, 0x78 }, // a { 0x7F, 0x50, 0x48, 0x48, 0x30 }, // b { 0x38, 0x44, 0x44, 0x44, 0x20 }, // c { 0x38, 0x44, 0x44, 0x48, 0x7F }, // d { 0x38, 0x54, 0x54, 0x54, 0x18 }, // e { 0x08, 0x7E, 0x09, 0x01, 0x02 }, // f { 0x0C, 0x52, 0x52, 0x52, 0x3E }, // g { 0x7F, 0x08, 0x04, 0x04, 0x78 }, // h { 0x00, 0x44, 0x7D, 0x40, 0x00 }, // i { 0x20, 0x40, 0x44, 0x3D, 0x00 }, // j { 0x7F, 0x10, 0x28, 0x44, 0x00 }, // k { 0x00, 0x41, 0x7F, 0x40, 0x00 }, // l { 0x7C, 0x04, 0x18, 0x04, 0x78 }, // m { 0x7C, 0x08, 0x04, 0x04, 0x78 }, // n { 0x38, 0x44, 0x44, 0x44, 0x38 }, // o { 0x7C, 0x14, 0x14, 0x14, 0x08 }, // p (0x70) { 0x08, 0x14, 0x14, 0x08, 0x7C }, // q { 0x7C, 0x08, 0x04, 0x04, 0x08 }, // r { 0x48, 0x54, 0x54, 0x54, 0x20 }, // s { 0x04, 0x3F, 0x44, 0x40, 0x20 }, // t { 0x3C, 0x40, 0x40, 0x20, 0x7C }, // u { 0x1C, 0x20, 0x40, 0x20, 0x1C }, // v { 0x3C, 0x40, 0x30, 0x40, 0x3C }, // w { 0x44, 0x28, 0x10, 0x28, 0x44 }, // x { 0x0C, 0x50, 0x50, 0x50, 0x3C }, // y { 0x44, 0x64, 0x54, 0x4C, 0x44 }, // z { 0x00, 0x08, 0x36, 0x41, 0x00 }, // { { 0x00, 0x00, 0x7F, 0x00, 0x00 }, // | { 0x00, 0x41, 0x36, 0x08, 0x00 }, // } { 0x30, 0x08, 0x10, 0x20, 0x18 }, // ~ { 0x7F, 0x55, 0x49, 0x55, 0x7F } // unknown char (0x7F) };//==end of font array==// unsigned int Color(byte r, byte g, byte b); //fixed values for scrolling text String inData = ""; int rows = 8; int strip = ledsPerStrip; //strip length //int pix[8] = {strip - 1, (strip * 2) - 1, (strip * 3) - 1, (strip * 4) - 1, (strip * 5) - 1, (strip * 6) - 1, (strip * 7) - 1, (strip * 8) - 1}; int del = 7; //#define BLACK 0x000000 //#define RED 0xFF0000 int Colour1 = Color(random(1, 100), random(1, 100), random(1, 100)); char msg[] = "Hello";//using a character lookup table for alphabet. # $ @ * etc... "; char leng[5];// =number of chars void setup() { leds.begin(); // start the ws2811 library delay(200); }//==end of setup==// void loop() { texttest(msg); }//==end of loop==// void texttest(char msg[]) { //==Start of message setup==// for (unsigned int charIndex = 0; charIndex < (sizeof(leng)); charIndex++) //start of charIndex setup { int alphabetIndex = msg[charIndex] - ' '; //where are we in the message if (alphabetIndex < 0) alphabetIndex = 0; bool isOn = 0; //isOn is the bit / led //==START OF SET METHOD==// for(int letterCol =0; letterCol<6-1;letterCol++) { for (int row = 0; row < rows ; row++) { isOn = bitRead( alphabets[alphabetIndex][letterCol], row ) == 1; leds.setPixel((row*ledsPerStrip)+(letterCol+(charIndex*5)), isOn * Colour1); } }//end of Set Method }//end of message setup leds.show(); delay(300); }//end of texttest //------- HELPER FUNCTION------// // Create a 24 bit color value from R,G,B ////these strips are BRG unsigned int Color(byte r, byte g, byte b) { //Take the lowest 8 bits of each value and append them end to end return ( (((unsigned int)g & 0x1F ) << 16) | (((unsigned int)b & 0x1F) << 8) | ((unsigned int)r & 0x1F) ); }

</code></pre>



Categories
Uncategorized

Teensy Midi euclidean sequencer (Arduino IDE)

Here’s a short video of where the midi sequencer is up to so far…

Categories
Uncategorized

Teensy midi euclidean sequencer

Working on a new Sequencer, uses a Teensy 3.5 with Neopixel rings. Working with Euclidean algorithm to produce the outputs. trying to figure out what the panel layout should be, so this a mockup.

midi sequencer using Teensy 3.5
testing a panel size for the sequencer

Categories
Uncategorized

Teensy 16 step sequencer update

Here is a video of progress so far. The step sequencer is being used as a four voice fugue.

I got inspired by alexandernaut and the fugue machine, particularly the way Elinch used it for the modular shades track (thanks alexandernaut!). So I built a four voice Fugue maschine / step sequencer.
A fugue is a short melody that is started by one voice, and then taken on by other voices. This can be faster or slower, backwards or forwards. The idea is that the melody/theme is created in a way that allows harmonies to develop by the different notes contained within the single melody coming together in various forms. (well, hopefully… better go and read up on it..)
This is a really simple four voice 16 step fugue built around a Teensy micro controller programmed on the Arduino IDE. The teensy is running the everything; the screen, the 16 rotary knobs with push buttons and leds, the tactile button grid with leds, and sending the usb MIDI signals. (it is also controlling gate, pitch and cutoff for analogue- but not used today)
The step sequencer in this instance is sending usb MIDI signals to four seperate Ableton tracks using one channel per track / voice. I wanted to keep the video short, so we go through the development quickly.
All four voices go forwards in this tune, and the patch is preset and called from memory bank at the start of the sequence. The data for the patch is stored on an SD card mounted in the Teensy onboard SD card slot. The patch was set using the 16 rotary controllers to select the notes and then using the rotary integrated push button to switch the note on or off. The button pads to the top are set to either momentary or latching. I use a pair of momentary buttons to move the notes up and down scales during this tune, major to minor.
At the end of the track I just play around with a repeater button on the button pad that is set up to latch to a chosen step in the 16 step sequence, and this then plays that note when switched on.
BPM is changed at the very start of the track, increasing 1bpm per button push. The screen gives feedback on button push parameters.

Categories
Uncategorized

update – teensy step sequencer

a quick update. have the 16 rgb rotary encoders working with SPI in a chain, also have the SPI screen working and the three adafruit trellis button pads are working well. short video below:

Categories
rotary encoder Sequencer

teensy 16 step sequencer with rgb rotary controller – update

So here is an update on the progress of the step sequencer. The RGB rotary controllers from Sparkfun have continuous rotation but also have a button incorporated. The chips being used are the MCP23S17 port expanders. They have interrupt capability, but this was not work out well for me, so currently relying on polling, which seems more than adequate right now. Video below:

Categories
Graphic Poi BMP from SD card Light Painting

Teensy 3.6 BMP Light Painting with Onboard SD card

Currently using the Teensy 3.6 onboard SD card to create some light painting using 24bit BMP images stored on the sd card. Here is the result:
(code is over not he write-up page)

Light painting with images stored on the Teensy3.6 onboard sd slot using 24 bit BMP files
Light painting with images stored on the Teensy3.6 onboard sd slot using 24 bit BMP files