A user's guide to i2c

You are not connecting two power supplies together, there are resistors in between. image

Say both regulators have 1% ripple, so in the worst case module A has a 3.333 V reference and module B has a 3.267 V reference and both use the same pullup values. Then (.033 + 0.033)V / (2000 + 2000) ohms is a 16.5 microamp current flowing from module A’s reference to module B’s reference. If you connected these voltage supplies directly without these resistors you would instead be putting a .066V drop over, say, a foot of 26AWG wire in a ribbon cable which has a resistance of about 0.04 ohms per foot, which would be 1.65A flowing into module B’s 3.3V regulator, certainly this would be bad but the circuit does not allow this because there are resistors in the path between the 3.3V supplies. You are, of course, coupling these power supplies to each other in some sense (there is that 16.5 uA current, for instance) but digital communication is usually robust to quite a bit of interference.

Nothing should worry you as far as module damage about whether the pullups are switched on or not. If a module has no pullups (such as TXi / TXo / Ansible) or its software-controllable pullups are disabled, then there is no path from the SDA / SCL pins to 3.3V; effectively there is an infinite-ohm pullup resistor, not a 0-ohm pullup resistor. Even if you had a hundred other modules with pullups connected, the resistance seen by a given 3.3V supply would always be at least 2K ohms, because each supply has a 2K resistor in series with it.

Enabling pullups or having more pullups connected to the bus just decreases the total resistance seen between the SDA / SCL lines and the 3.3V power supply. If this resistance is too small, it will take a long time to pull the lines low. If the total pullup resistance is too large, it will take a long time to pull the lines high. There is loads of information on pullup value selection here but in practice having a few different modules with pullups is generally fine.

This is IMO the simplest and most robust solution and I have been using this with many combinations of different modules for years. I just made a single long cable with 6 pin headers crimped on every 4 inches or something. The IDC headers used on ribbon cables sit very securely.

Because there is so much variation in setups it is basically impossible to give general purpose troubleshooting advice beyond: go slowly, add one module at a time, check that things are working robustly before proceeding. Daisy-chain when possible. Some setups may just not work out for reasons that are difficult to discern. Using multiple smaller buses may be more stable than connecting everything together.


So if I understand correctly it’s a matter of trial and error. I will maybe start by connecting my Teletype to another module to figure out the right cable orientation and then proceed from there.

No, it is not a matter of trial and error. Read the markings on the modules and make the connections to match. If the module lacks lettering, try white line as ground, middle pin SCL, then SDA.

I finally got it! It was difficult to understand until I started connecting everything together…I just had to match the cable orientation on all modules with the white stripe behind the Txb (which means GND). Everything working perfectly now, and I am so excited to be able to control Just Friends without any patch cable inserted. Thanks again for your help!


This is the setup I want, ie. With the Teletype passing the 16n data to the ER-301.

What I can’t figure out is the most elegant way to do the polling.
I can brute force it via the Metronome but I was wondering if there is a nicer way?

i was going to reply that yes, using the metronome is the only option, but it just occurred to me there is another option now if you use the latest teletype beta that has MIDI in ops, and connect 16n to the USB port on teletype. with this setup, you can assign MIDI CCs to trigger a script and then send to er-301 from that script.

2 things to be aware of:

  • teletype might not be able to provide sufficient power to 16n, so i would recommend being careful and powering 16n externally
  • you’ll have less precision this way

I’d like to connect a Teletype to a Just Friends. The adafruit.com link to the i2c jumper cables shows 6" cables. Would 12" jumper cables be ok, or is it the shorter the better?

Question: Can I have two teletypes both connected to two TXo+?
How would such a connection lool like?

[ TT → TT → TXo → TXo ] ?

Or should thet all have their separate connection to each other?

In a multi-leader setup your chances of a bus error goes way up. If you arrange the scripts such that they are not trying to access the TXo simultaneously, it might work well enough. I wouldn’t recommend it for live use though.

Is it still possible to buy a powered busboard for the older Teletype model? There is no info on the Monome website… And unfortunately I dont have any DIY skills.

Ok, that sounds promising. What I’m mainly looking for is a more flexible assignment of the expanders. So that I can add one or two expanders to either of the teletypes without having to unplug en rewire.
Is there any risk of damaging any of the modules when testing this?

No risk of damage, just errors

1 Like

to add, you can have all 4 connected together, the order shouldn’t really matter, and you should be able to access both txos from both teletypes, just try not to send i2c commands from both teletypes at the same time.

Ok, thank you. I feel comfortable experimenting with this now! It feels almost like I can think of the expanders as a remote API that can be accessible from different leaders. Very. cool indeed. Now I just have to wait for my expanders to be built. :slight_smile:

Perhaps a silly question, but here goes…
I have a small i2c setup with crow, Just Friends, and Disting EX connected together. Recently I added a 16n controller (AtoVproject rework), planning to use this over 3 wires i2c. I intend to use this on the desktop and found out there is no space to let 3 wires come out of the case, so I ordered a TXb to connect it via a stereo cable instead. It just arrived and I’m wondering if I should connect it to the power bus, considering crow puts some power to the i2c bus as well. Would this be dangerous or good practice?

1 Like

Not dangerous, but probably not needed if you have pull-ups elsewhere.

1 Like

I added TXb to the rest over 3 wires, attached 16n to TXb with stereo cable (with system turned off) and I don’t see anything in either leader or follower mode, not via crow/norns, or via i2c history in Disting Ex. Also Just Friends is starting to freeze a lot. I would be grateful for any hints on what to try.

Hmm. Are you sure you’re plugged into the I2C and not the TRS MIDI jack? Maybe try disconnecting power from the TXb, too.

Yeah I’m sure, and I did not connect power in the first place… Maybe try with power?

1 Like

Also how long is your trs cable?