n16o (nicks-tea-no)

i2c-based ER-301 control via korg nanoKONTROL2


n16o is a norns script that turns a KORG nanoKONTROL2 into an i2c-enabled faderbank and button buffet (lol) for controlling an ER-301.


The norns script intercepts the midi messages from the nk2 and sends them as i2c commands to crow. Provided your crow and ER-301 are connected via an i2c cable, you can then use SC.CV and SC.TR devices on the ER-301 to listen for these messages.


I’m working to downsize my system, and will not have all the knobs of 3 Quadratts to control my ER-301 patches…which I tend to use a lot of! Since I don’t currently have a 16n, I wanted to be able to emulate similar functionality with the nk2 I had lying around.

doesn’t this seem like a silly thing to tie up norns for?

Yes, it does! I tried to architect the code in a way that makes it super easy to run n16o in the background of any other script…you just import the lib and execute the init function (passing configuration params if you so desire). The main n16o.lua acts as documentation for how to do this, as well as all the possible params. This is really easy to do, you do not need to have any programming experience to do it! Happy to answer questions if they do arise though!

performance notes!

Currently I’m not throttling the number of i2c messages sent over the wire in any way (as during my tests, there hasn’t been any lagging even when I’m going really fast with the faders, trying to break it), but the throughput of messages does raise some concern. If anyone notices any performance issues, please let me know the scenario, and I will see if I need to implement any sort of debounce to lower the amount of messages sent.

I’ve added 50ms of CV slew for the 16 ports the nk2 uses. In testing, this seems to fix the alias-y sound you get when moving the faders very slowly without introducing any sort of perception of lagginess. There seems to still be a distinct “on” value, where you can hear a linear unipolar vca device go from “silent” to “not silent”. I’m not sure if this is a 301-thing or a thing with how my script works. Any ideas of how to fix are greatly appreciated!


  • norns (191230 or later)
  • crow (1.0.2 or later)
  • i2c-enabled er-301 (tested with v0.4.27-stable, probably will work with v0.3-stable, but not tested)
  • nanoKONTROL2


  • The physical connections required are as followed: nk2 to norns via usb, norns to crow via usb, crow to er-301 via 3 or 6-pin i2c.
  • To enable n16o, you can either run the n16o script, or add 2 lines to any other script’s init function, as defined in the main n16o.lua file.
  • By default:
    • cv ports 1-8 correspond to the nk2 faders (left to right), range is 0-10v.
    • cv ports 9-16 correspond to the pan knobs (left to right), range is 0-10v.
    • tr ports 1-8 correspond to R buttons (left to right). These are momentary, meaning the go high when they are pressed, and low when they are released.
    • tr ports 9-16 correspond to M buttons (left to right). These are momentary.
    • tr ports 17-24 correspond to M buttons (left to right). These are momentary.
    • tr ports 25-35 correspond to transport buttons (all the buttons to the left of the fader). These are ordered left to right, bottom to top. In other words, the rewind button is 25, and the right arrow track button is 35. These are latching meaning they go high when pressed and stay high until they are pressed again. They will continually toggle states off and on with each press.




n16o is in the maiden package manager now should you want to download from there!

1 Like