Home | ER-101 | ER-102 | ER-301 | Wiki | Contact

Transit - MIDI to ER-301 via I2C

I’ve just finished up the first alpha version of my Arduino sketch that lets a Teensy in USB MIDI (non-host) mode talk to the ER-301 fairly robustly. The table of capabilities in my post in the other MIDI thread is fully implemented, and I’ve tested all functionality with Ableton as the MIDI source. Feedback welcome and appreciated as always.

Now that I have a proof of concept for sending the MIDI as I2C, I’ll be building up a version that uses a 5-pin DIN MIDI (and/or TRS 3.5mm jack) to make sure it all works with that, software-wise.

Also, I would love to know folks’ interest in a 2hp module that would have a 3.5mm jack on the front to accept MIDI converters, a switch to change between the 2 ‘standards’ of 3.5mm to DIN converters, and an LED for MIDI activity. Possibly a wider, future version with a USB Host jack on it.

  • I would be interested in a module that does this
  • I would rather build my own hardware solution
  • I’m not interested in MIDI and the ER-301

0 voters


The main question to me is : would it handle polyphony ?
Monophony would have a very limited interest.

1 Like

This ^^

There are an awful lot of USB midi controllers in the world, being able to map them directly to i2c ports on ER-301 would be seriously good!

I am impressed with how quickly you have taken this from an idea to reality - excellent work!!


Can I suggest the inclusion of a diagram clearly showing how to wire this up for the Teensy novices amongst us?


I will echo @anon83620728 in saying this is most impressive @Drillionaire!

I didn’t vote because I’m not sure any of the choices fit me.

I am interested in a direct MIDI solution for the 301. I’m not sure I’d want it to be i2c based though, due to the fact that I do use Teletype often, and wouldn’t want potential conflicts with multiple leaders in the ecosystem. I’m fairly sure that while multiple leaders can usually, sometimes work ok, there’s no actual code to handle it currently.

Ultimately I guess im hoping once the lower level SDK becomes available, something can be done with the UART, and dedicated MIDI Units can be made.

Not trying to discourage you though. Following with interest! It’s a cool project!


Yes, this too!!

To clarify my position:

I am really not interested at all in sequencing via midi; I have that covered - more than covered - in other ways with zero latency with CV.

I am very interested in revealing all the parameters in ER-301 patches to control surfaces where latency is much less of an issue.


I have been looking at making something similar, but i think i need help to make it happen. This seems cool though, would possibly be interested if there was a way of getting midi out of the 301 (i want to use the internal signals of the 301 to triggers visuals) :slight_smile:

1 Like


I’m in complete agreement in terms of a UART MIDI solution. I suppose my impatience got the best of me and I felt like if I didn’t make this converter to use with my Cirklon, I’d end up getting a NerdSeq, which I really can’t justify.

I’ll look into making one of the available channels into a poly voice. It’s just a matter of wrapping my head around the voicing logic and adding it to my code.

I believe this would require firmware changes in the 301’s firmware. I don’t believe there’s any way to request values from the 301 via I2C, but possibly if/when there are MIDI units that work with the UART, there will be the ability to send values to a unit that could be assigned to a MIDI CC output, or something like that.


How’s this? The actual location of the pins on the Teensy might differ, but as long as you connect GND to GND, SDA to SDA, and SCL to SCL, it’ll work. Also depending on how long your cable is, you might need to reduce the value of the 4.7k pullup resistors to something like 2.2k or lower.

Sorry I can’t be of much help in terms of hooking up the USB type A connector for MIDI host, as that’s not something I’ve ever done.


Very clear - thank you very much!!!


1 Like

Quick update that should please @chapelierfou and others. I’ve implemented two MIDI channels of 8-voice poly, complete with pitchbend, mod wheel, and mono aftertouch for each. I’ve attached an updated port map chart to this post.

Currently on my to-do list:

  • Add MIDI CC control over pitchbend depth on the 8 mono channels, and the 2 poly channels. It’s currently ±1 in terms of ER-301 values, which is pretty extreme
  • Add MIDI CC control over the voice limit for each of the poly channels. This will prevent there being unvoiced notes if you’re only using those channels for less than 8 voices
  • Implement storage of above settings in EEPROM, so that they are stored across power cycles
  • Add support for “All Notes Off” MIDI command

Edit: Here’s a little video of me playing back a MIDI file for six Variable Sample Players and a Freeverb


Nice !
Out of curiosity, how is the voice allocation working ?

1 Like

First it checks to see if there are any unused voices available. If there are, it uses the lowest numbered available voice.
Then, if there are no available voices, it checks the order in which the active voices were played, and steals the least recently played voice.

It keeps track of all the voice related stuff in a 3 dimensional array.


Amazing work @Drillionaire - can’t believe you got this far so quick! I think all of this is really nice, and though I could use this as you are currently building i (using pitch, vel, modwheel, aftertouch to control other stuff than what they are supposed to), I would still very much like to see some way to use midi CC’s with ER-301 - for example as a possibility on ports 65-100. What do you think of that?


Thanks! I’m quite surprised myself :sweat_smile:
I currently have SC.CV ports 33-64 mapped to 32 MIDI CCs on channel 16. Are you looking for more than 32 CCs?


Sorry, yes I see - youre totally right.! Thats perfect.! :smiley:

1 Like

No problem! I appreciate the input/feedback.
I’m trying to cover as many use cases as possible with this implementation.

Edit: Here’s an updated port map that’s color coded. Hopefully this is a bit easier to decipher, and understand the relationship between corresponding SC.CV and SC.TR ports.


Great work! It’s really great to have the possibility to control the ER-301 with Midi via I2c. I have this 16n faderbank also running with a Teensy, the hardware is already there (I mean the jack i2c output) so I don’t know which solution i should choose, @scanner_darkly said he’s working on implementing midi to I2c for the faderbank. Anyway, both solutions will be fine and will be a game changer. Thanks again :pray:t2:


So basically all i need is to buy a teensy for $25/load up the free code, and hook up 3 wires and power and i have midi for the er-301 ?

That’s correct, if you want to use the USB Micro port on the Teensy.
I’ve yet to implement USB Host or DIN/3.5mm MIDI.