Forum Replies Created

Viewing 14 posts - 1 through 14 (of 14 total)
  • Author
  • in reply to: Set a bpm speed in arduino code #2023


    I made a mono 1/8th cable to wire pin connector to connect the sync out of my other gear to use on my NS-1. Connect the ground to a 0v rail and the positive to the Arduino (or divider -> Arduino because it’s probably pretty fast). The PO-12 specifically might be easiest to just use this kind of cable and plug your LFO out to a multiplier and those to the Arduino AND the PO-12. The PO-12 has many different sync options.

    in reply to: ns1 and sq1 #1992


    If you keep the initial up (under level), that will kind of bypass the VCA stage. The gate is always the same voltage level for each step that is on. The CV out is the variable voltage sent from the sequencer, that will have changes instead of rhythmic on / off.

    in reply to: Driver error / Compilation errors #1969


    So Mozzi will only compile on 1.0.5. So if you are still going for the Mozzi version, you are going to have to stay on that. reference. Just the first error is odd, because the library is DAC_MCP49xx, not DAC_MCP49x1. Perhaps try downloading it again? The download is weird, because the .ino file you get is actually a .html file you have to open to view the real .ino file (rename the original .ino to .html) on the github last I checked.

    I find working with the digipots way easier than ever trying to get Mozzi to work properly. If you are dead set on it, that is ok, there are many things released that use Mozzi.

    If you still have no luck, try the digipot version, and if that still doesn’t work try either mine or someone else’s firmware. Mine will compile with no extra downloaded libraries on the newest version of Arduino, and is also completely standalone once installed.

    in reply to: Driver error / Compilation errors #1954


    Ahhh. I think this is an issue with Mozzi. I don’t think Mozzi works with the last few versions of the Arduino IDE. You have to use Arduino 1.0.5.

    Arduino 1.0.5

    Hopefully that works!

    in reply to: Driver error / Compilation errors #1952


    I couldn’t tell you what’s going on with the MIDI portion of the problem. The USB audio devices are those I guess? The error you are getting uploading to the Arduino is just because you haven’t installed the MCP49xx DAC library yet!

    Here is a link to the library DAC library

    And then just look up a tutorial for installing libraries into the Arduino IDE, then you should be able to upload to the board no problem. Good luck!

    in reply to: Ixar'An Sequencer Firmware #1894


    The CV output is the first digipot (top right of the Arduino section). Put a jumper between 5v and top pin of the digipot, a jumper between 0v and the bottom pin, and the middle section of the digipot is the CV output of the sequencer!

    in reply to: Ixar'An Sequencer Firmware #1884


    This is better

     * for Arduino 
     * for Soundmachines NS1 nanosynth
     * for Summoning Dark Lords of Immaterial Planes
     *    Kyle Werle
     *      2016-02-24
     *    PIN 5 - Gate Randomizer button
     *    PIN 6 - Sequencer Gate Output
     *    PIN 7 - Clock input (LFO or analog trigger)
     *    PIN 8 - Record Control (Ribbon GATE)
     *    PIN 13 - Record Mode LED
     *    ANALOG PIN 1 - Length input (C1)
     *    ANALOG PIN 2 - CV Length input (C2)
     *    ANALOG PIN 3 - CV Input (Ribbon HLD)
     *    POSSIBLE ADDITIONS********
     *      EEPROM storage of randomSeed to save sequences
     *      extra gate and CV sequencers
     *      use 2 more more buttons
     *    CHANGE LOG****************
     *      v1
     *      2016-05-17
     *        added CV sequencer with record mode switch
     *        implemented the MCP4451 quad digipot on NS1
     *      2016-5-18
     *        switched gate output and clock input pins
     *        changed record behavior to be controlled by ribbon gate
    //  i2c lib to drive the quad digipot
    #include "Wire.h"
    /****SET VARIABLES****/
    //  pins on Arduino
    const int randomButton = 5;
    const int seqOut = 6;
    const int clockPin = 7;
    const int recordControl = 8;
    const int recordModeLED = 13;
    const int lengthIn = A1;
    const int CVlengthIn = A2;
    const int CVinput = A3;
    //  sequencer arrays
    int CVsequence[16];
    int sequence[16];
    //  sequencer lengths
    int CVseqL = 15; //0-15
    int seqL = 15; //0-15
    //  position of sequencer in array
    int CVseqPos = 0;
    int seqPos = 0;
    //  record Mode
    bool recordMode = false;
    //  read CV input
    int CVreader = 0;
    //  quantise CV output
    unsigned char quantiser = PI;
    unsigned char CVquantise;
    //  state of recorder button
    bool recordState = false;
    bool recordStatePrevious = false;
    //  state of randomizer button
    bool randomState = false;
    bool randomStatePrevious = false;
    //  parse clock input
    bool clockState = false;
    bool clockStatePrevious = false;
    //  digipot variables
    byte addresses[4] = { 0x00, 0x10, 0x60, 0x70 };
    byte digipot_addr = 0x2C; //  i2c bus IC addr
    /****INIT SETUP****/
    void setup() {
      //  begin i2c
      //  set random seed
      //  fill sequencer with random data
      //  set pins on Arduino
      pinMode(randomButton, INPUT);
      pinMode(seqOut, OUTPUT);
      pinMode(clockPin, INPUT);
      pinMode(recordControl, INPUT);
      pinMode(recordModeLED, OUTPUT);
      pinMode(lengthIn, INPUT);
      pinMode(CVlengthIn, INPUT);
      pinMode(CVinput, INPUT);
      //  begin serial for debug
    void loop() {
      //  read and map CVlength to 2-16 steps
      CVseqL = map(analogRead(CVlengthIn), 0, 1023, 1, 15);
      //  read and map length input to 2-16 steps
      seqL = map(analogRead(lengthIn), 0, 1023, 1, 15);
      //  set state for recorder button
      recordState = digitalRead(recordControl);
      //  detect edge of record button input
      if (recordState != recordStatePrevious) {
        recordStatePrevious = recordState;
        //  set record mode on when gate is held down
        if (recordState == HIGH) {
          recordMode = true;
          //  enable LED for record mode
          digitalWrite(recordModeLED, HIGH);
        } else {
          recordMode = false;
          //  disable LED
          digitalWrite(recordModeLED, LOW);
      //  set state for randomizer button
      randomState = digitalRead(randomButton);
      //  detect edge of random button input
      if (randomState != randomStatePrevious) {
        randomStatePrevious = randomState;
        //  activate randomizer
        if (randomState == HIGH) {
          //  set sequencer back to first position
          seqPos = 0;
      //  read clock input and set state of clock
      clockState = digitalRead(clockPin);
      //  detect edge of clock input
      if (clockState != clockStatePrevious) {
        clockStatePrevious = clockState;
        //  only progress if clock is HIGH
        if (clockState == HIGH); {
          //  move CV sequencer position forward
          if (CVseqPos < CVseqL) {
          } else {
          CVseqPos = 0;
          //  read CV input when record mode is active
          if (recordMode) {
            //  read incoming CV input and map to 255
            CVreader = map(analogRead(CVinput), 0, 1023, 0, 254);
            //  quantise CV sequencer to PI
            CVquantise = (int)(quantiser*(float)((int)((float)CVreader/quantiser+0.5)));
            //  record CV data into current sequence memory
            CVsequence[CVseqPos] = CVquantise;
          //  write current CV sequence data to digipot
          DigipotWrite(0, CVsequence[CVseqPos]);
          //  move gate sequencer position forward
          if (seqPos < seqL) {
          } else {
            seqPos = 0;
          //  read sequence data and set pin output
          if (sequence[seqPos] == 1) {
            digitalWrite(seqOut, HIGH); 
          } else {
            digitalWrite(seqOut, LOW);
    //  fill sequence array with random values
    void randomizeSeq() {
      for (int i = 0; i <= 15; i++) {
        float randomF = random(2);
        int randomC = (int) randomF;
        sequence[i] = randomC;
    //  write a value on a digipot in the IC
    void DigipotWrite(byte pot,byte val) {
      i2c_send( digipot_addr, 0x40, 0xff );
      i2c_send( digipot_addr, 0xA0, 0xff );
      i2c_send( digipot_addr, addresses[pot], val);  
    //  wrapper for i2c digipot routines
    void i2c_send(byte addr, byte a, byte b) {

    >Ixar’An Sequencer v1

    The old link doesn’t work.

    • This reply was modified 4 years, 4 months ago by  werle.kyle.
    in reply to: New Firmware for NS1 Nanosynth #1610


    Sweet thread. Ive never used interrupts before. Gonna add it to my sequencer clock.

    I made a toggle button for record in my sequencer, but just putting the gate from the ribbon to activate recording is way simpler and better!

    in reply to: new user question #1609


    The werkstatt looks like it’d sound really wicked with the NS1!!

    The sensor blocks are supposed to be used like a breadboard. It’s just to add extra components and connections onboard. I was super confused by them when I first got it as well.

    I have never used the stock firmware, but if you do end up using Arduino, digital pin 4 is connected to the power rail and the DAC IC. Not sure what it does because I haven’t used the DAC yet.

    in reply to: Constant voltage on pin 5 #1605


    Pin 5 on the arduino is connected to an IC on the ns1 already. I was super confused by that too until I checked the schematic. I just don’t use pin 5 in my arduino firmware. I haven’t used the midi implementation, but it looks like it’d be not too difficult to change the pin to another unused digital pin.

    I’m not %100 positive, but i think it is safer to go with the higher pins because they arent connected to other ICs.

    I think pin 5 was for a dac or something? Little thing has so many things to play with 0.o

    in reply to: Using digipots with line level signals #1434


    The two ends of the digipots aren’t hardwired to grounds so it could work just like any potentiometer I think? Mixing before the amp on board might be weird, though. I don’t think the mix points would cut off the negative portion of the signal. I’m not sure about the circuit, but you could put a resistor before your signal mixes.

    You could also put your signals at a middle voltage reference point with a breadboard, a quad op-amp and a few resistors. The amp removes the DC offset.

    What is line level? +-1 or 2 volts?

    in reply to: Arduino Patches for NS1nanosynth #1431


    Made a really simple gate sequencer that is filled with a new random sequence on every button push. There is only one sequence right now, and I am probably going to add more sequences and ways to change the length of the sequences.

    Github – NS1 Random Sequencer

    in reply to: Arduino Patches for NS1nanosynth #1382


    I can’t seem to edit my post right now, but we need this link here!

    Github page

    in reply to: Hi everyone!!! #1381


    I know! So great!

Viewing 14 posts - 1 through 14 (of 14 total)