Getting Started
You probably want to install the app first, to get the latest firmware.
Here's a super-quick rundown of the how to use the thing:
The Probe
First, keep the switch on the probe set to Select
(If you're curious why:
Measure
mode allows the probe tip to be ±9V tolerant and routable like any other node, but as of yet, the code to actually do anything with it is unwritten so it just connects to DAC 0 and outputs 3.3V just like it was in Select
mode. But the DAC is much worse at matching the RP2350B's idea of what 3.3V is exactly, so probing will be flaky and may be off from the rows you're tapping in Measure
.
To Connect
rows, click the Connect
button on the probe
The logo should turn blue and the LEDs on the probe should also change
Now any pair of nodes you tap should get connected as you make them. In connect mode, you're creating bridges
(see the glossary at the bottom of this page), so connections are made in pairs. When you've tapped the first node
in a pair, the logo
and Connect
text on the probe will brighten to show that you're "holding
" a connection, and the next thing you tap will connect to that first node
.
If you make a mistake while holding
a connection, click the Connect
button and it will clear it and take you back to the first node
.
If you click the Connect
button while you're not holding
a node
, it will leave probe mode
and bring you back into idle mode
(rainbowy logo
, all 3 probe LED
s on.)`
To connect to special functions
, tap the corresponding pad
near the logo, it will show you a menu on the breadboard and terminal to choose them.
(This is an ASCII version of what will show on the breadboard LEDs)
You can think of special functions
just like any other node
, there's just a second step to picking them so I didn't need to put a dedicated pad for each of them.
The other 4 user pads
will be more remappable in the future, but for now, top_guy
is routable UART Tx
and bottom_guy
is routable UART Rx
. The building pads are for overriding colors in idle mode
(you'll see more about that that below.)
To get out of Connect
mode, press the button again.
To Remove
rows, click the Remove
button
and the logo should turn reddish
Now you can swipe along the pad
s or tap them one at a time. Remember it only disconnects that node
and anything connected to it directly, not everything on the net
. So tapping say, row 25
that's connected to GND
won't clear everything connected to GND
, but tapping the -
on the rails (for GND
) would.
The special functions work the same way, tap the pad, pick one, and it will remove it. Click the button again to get out.
Remember the probe is read by a resistive voltage divider, so putting your fingers on the pads (or the back sides of the 4 risers that connect those probe sense
boards to the main board), or anything causing the probe tip not to be at a steady 3.3V will give you weird readings.
If you can't seem to stop playing with the switch on the probe, run DAC calibration with $
and the 3.3V measure
mode puts out should be fairly accurate enough for probing.
The Click Wheel
There are two kinds of presses, click
(short press) and hold
(long press). In general, a click
(short) is a yes
, and a hold
(long) is a no
/back
/exit
/whatever
.
To get to the menu, click
the button and scroll through the menus, click
will bring you into that menu, hold
will take you back one level. If you have trouble reading stuff on the breadboard LEDs, everything is copied to the Serial terminal and the OLED (talked about below), and adjusting the brightness may help; in the menus, it's Display Options
> Bright
> Menu
and then scroll around until you find a level you like, then click
to confirm.
Behold! The App!
Now that I've lifted my self-imposed ban on VT100 commands (for compatibility and me-spending-too-much-time-on-them reasons, but, YOLO), we've got colors now!
But that's like the least cool thing the new app can do, here's a list of what's new:
-
No longer a janky pile of garbage
-
Firmware updating should be pretty reliable when there's a new version (falls back to instructions for how to do it manually)
-
Command history and tab completion, up arrows will go through past commands and are persistent after closing
-
Properly detects which port is the main Jumperless Serial and which is routable UART
-
Arduino flashing from Wokwi works once again and is a lot more solid
- It installs arduino-cli on first startup and uses it pull in libraries, compile, and flash an arduino Nano in the header
- If the routable UART lines aren't connected when the app detects a change in the sketch file, it will connect them to flash the new code and then return them to how they were
- avrdude output is shown in real time (you'd be amazed how difficult this was)
-
You can set a
slot
to point to a local Arduino sketch.ino file and it will flash if it detects a change- If you don't like using Arduino IDE or Wokwi and prefer using
vim
oremacs
or whatever, now you can let the app handle the flashing stuff and just edit an .ino file. - In the app, type
menu
thenslots
and instead of entering a link to a Wokiw project, just give it a path to a file (this will be saved so you can unassign it and pick it later by name) - (This one is so fucking sick)
- If you don't like using Arduino IDE or Wokwi and prefer using
-
Launch scripts included to easily run it from your favorite terminal emulator and not just the system default (terminal.app on macOS, Powershell on Windows, idk on Linux), just go to the directory in a terminal and run the script in tabby or whatever
-
The launcher should kill other instances (and close their windows) that happen to be open because it's such a common issue for me at least
-
Linux people are no longer red-headed stepchildren, there are proper tar.gz packages now for you nerds
Or you can use any terminal emulator you like, iTerm2, xTerm, Tabby, Arduino IDE's Serial Monitor, whatever. The TUI is all handled from the Jumperless itself so it just needs something to print text.
Animated rows
If it's a rail, those are animated and should be a continuous slow pulsing toward the top or bottom depending in the rail.
ADCs
are green at 0V, and go through the spectrum to red at +5V, and get whiter hot pink toward +8V. Negative voltages are kinda blue/icy and do that same thing with the "cold" colors towards -8V.
GPIO
as inputs are animated with a white pulsing (this might be broken in that FW release, I'm fixing that right now actually, and will just be purple/white) when floating, red for high, green for low
GPIO
outputs will be either green or red depending on their state
Idle mode interactions
The main thing is that there'a a lot more interaction that can be done outside of any particular mode (like not probing and the logo is rainbowy, I'm gonna call this idle mode here until I think of a good name)
Here's what's new (all of this is in idle mode):
-
Tapping nets highlights them as before, but there's a slightly different animation on the
row
you have selected from the wholenet
-
The click wheel scrolls through highlighting
rows
as if you tapped each one -
With a
row
selected, here's what you can do-
connect
button will bring you into probing mode with the highlighted row already selected and then spit you back out toidle
mode once you've made a connection to another row, or clickconnect
again to exit -
remove
will briefly turn therow
reddishwarn
(I need to settle on a good time for this, if it feels too short or long lmk), anotherremove
press will remove thatrow
(just like inprobe
mode, it removes thebridge
it's in, so just things that have a direct connection to thatrow
, not the wholenet
), if you let it time out without pressing anything, the row will be unhighlighted. TL;DR, double clickremove
to remove, single click to unhighlight. -
tapping the
building top
pad with something highlighted will open thecolor picker
, (note: the color now follows therow
instead of the net, so it can keep the colors even if you remove nets below it and they shift, this was soooo difficult until I realized I should do it bynode
).- Also the color assignments are saved to a file for each slot, so they should work after a reboot and when changing
slots
- In the
color picker
, short clicking the probe buttons will zoom in and out, long press will confirm. The click wheel is similar, except you togglezoom
andscroll
modes with short presses and long press to confirm Here's a demo on YouTube
- Also the color assignments are saved to a file for each slot, so they should work after a reboot and when changing
-
if the highlighted row is a
measurement
(gpio input
oradc
) it will print the state to serial and the oled -
if the highlighted row is an
output
(gpio output
, I'll eventually dodacs
too) clicking theconnect
button will toggle ithigh
/low
. Theremove
button will just unhighlight the net (there were some choices here, like make each button assigned to high / low or allow removing them, but this felt like the best way after trying them all). I will eventually add a setting for the toggle repeat rate (set to 500ms now) and a way to set it freewheeling as a clock.- this one feature is the reason I did this whole update. And it's worth it because it's sick af.
-
-
when selecting
gpio
inprobing
mode (tap the bottom of the 3 pads by thelogo
), there are shortcuts forinput
andoutput
, the blue line on the left isinput
, red square on the right isoutput
. Tapping right in the middle of a number will take you to the old written out on the top and bottom selector.
OLED Support
First, get yourself one of these bad boys (literally any of these are fine.)
https://www.amazon.com/MakerFocus-Display-SSD1306-3-3V-5V-Arduino/dp/B079BN2J8V
They should friction fit into the SBC/SMD/OLED board included with your Jumperless V5.
This should copy basically any text printed on the breadboard, some people have trouble reading text on the breadboard LEDs, which is why I added all this. (if I missed something, let me know, it's a fairly new thing so I've probably forgot to add code for it to print in a bunch of places.)
To connect the data lines to the Jumperless' GPIO 7 and 8, just use the menu option .
(that's a period). It will try to find the OLED on the I2C bus, after a few failed attempts, it'll automatically disconnect to free up GPIO 7 and 8.
If you want to use this all the time, there's a config option to connect the OLED on startup. You can just paste these into the main menu:
`[top_oled] enabled = true;
and
`[top_oled] connect_on_boot = true;
Config file stuff
To change any persistent settings, there's a config
file. You can read it with ~
and edit settings by copying any of those lines, pasting it back, and changing the value to whatever you want it to be.
~
copy / edit / paste any of these lines
into the main menu to change a setting
Jumperless Config:
`[hardware] generation = 5;
`[hardware] revision = 5;
`[hardware] probe_revision = 5;
`[dacs] top_rail = 0.00;
`[dacs] bottom_rail = 0.00;
`[dacs] dac_0 = 3.33;
`[dacs] dac_1 = 0.00;
`[dacs] set_dacs_on_boot = false;
`[dacs] set_rails_on_boot = true;
`[dacs] probe_power_dac = 0;
`[dacs] limit_max = 8.00;
`[dacs] limit_min = -8.00;
`[debug] file_parsing = false;
`[debug] net_manager = false;
`[debug] nets_to_chips = false;
`[debug] nets_to_chips_alt = false;
`[debug] leds = false;
`[routing] stack_paths = 1;
`[routing] stack_rails = 2;
`[routing] stack_dacs = 0;
`[routing] rail_priority = 1;
`[calibration] top_rail_zero = 1634;
`[calibration] top_rail_spread = 20.60;
`[calibration] bottom_rail_zero = 1614;
`[calibration] bottom_rail_spread = 20.73;
`[calibration] dac_0_zero = 1635;
`[calibration] dac_0_spread = 20.53;
`[calibration] dac_1_zero = 1625;
`[calibration] dac_1_spread = 20.80;
`[calibration] probe_max = 4060;
`[calibration] probe_min = 19;
`[logo_pads] top_guy = uart_tx;
`[logo_pads] bottom_guy = uart_rx;
`[logo_pads] building_pad_top = off;
`[logo_pads] building_pad_bottom = off;
`[display] lines_wires = wires;
`[display] menu_brightness = -10;
`[display] led_brightness = 10;
`[display] rail_brightness = 55;
`[display] special_net_brightness = 20;
`[display] net_color_mode = rainbow;
`[gpio] direction = 0,1,1,1,1,1,1,1,0,1;
`[gpio] pulls = 0,0,0,0,0,0,0,0,2,2;
`[gpio] uart_tx_function = off;
`[gpio] uart_rx_function = passthrough;
`[serial_1] function = passthrough;
`[serial_1] baud_rate = 115200;
`[serial_1] print_passthrough = false;
`[serial_1] connect_on_boot = false;
`[serial_1] lock_connection = false;
`[serial_1] autoconnect_flashing = true;
`[serial_2] function = off;
`[serial_2] baud_rate = 115200;
`[serial_2] print_passthrough = false;
`[serial_2] connect_on_boot = false;
`[serial_2] lock_connection = false;
`[serial_2] autoconnect_flashing = false;
`[top_oled] enabled = false;
`[top_oled] i2c_address = 0x3C;
`[top_oled] width = 128;
`[top_oled] height = 32;
`[top_oled] sda_pin = 26;
`[top_oled] scl_pin = 27;
`[top_oled] gpio_sda = MCP_2;
`[top_oled] gpio_scl = MCP_3;
`[top_oled] sda_row = D2;
`[top_oled] scl_row = D3;
`[top_oled] connect_on_boot = false;
`[top_oled] lock_connection = false;
There's also a help
you can get to by entering ~?
~ = show current config
~[section] = show specific section (e.g. ~[routing])
` = enter config settings
~? = show this help
`reset = reset to defaults //editor's note: this doesn't clear the calibration or hardware version, to clear that, you can use `reset_all `reset_calib `reset_hardware
~names = show names for settings
~numbers = show numbers for settings
config setting format (prefix with ` to paste from main menu)
`[serial_1]connect_on_boot = true;
Look Inside your Jumperless
Crossbar Array
There's a new way to see what the 12 analog crossbar switches are up to, just enter c
in the menu
Analog Crossbar Array
chip A chip B chip C chip D
0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7
0 ─█───────────┼────────┼─ AI 0 ────█──┼──────────────┼─ AB0 0 ─┼──┼────────█─────█──── AC0 0 ────█────────█─────┼──── AD0
1 ─█───────────┼────────┼─ AJ 1 ────┼──█──────────────┼─ AB1 1 ─┼──█────────┼─────█──── AC1 1 . │ . . │ . │ . AD1
2 ─┼───────────█────────┼─ AB0 2 ────┼──┼──────────────█─ BI 2 │ │ . . │ . │ . BC0 2 . │ . . │ . │ . BD0
3 ─┼───────────┼────────█─ AB1 3 . │ │ . . . . │ BJ 3 │ │ . . │ . │ . BC1 3 . │ . . │ . │ . BD1
4 │ . . . │ . . │ AC0 4 . │ │ . . . . │ BC0 4 ─█──┼────────┼─────┼──── CI 4 ────█────────┼─────┼──── CD0
5 │ . . . │ . . │ AC1 5 . │ │ . . . . │ BC1 5 ─█──┼────────┼─────┼──── CJ 5 . │ . . │ . │ . CD1
6 │ . . . │ . . │ AD0 6 . │ │ . . . . │ BD0 6 ─┼──┼────────█─────┼──── CD0 6 . │ . . │ . │ . DI
7 │ . . . │ . . │ AD1 7 . │ │ . . . . │ BD1 7 │ │ . . │ . │ . CD1 7 . │ . . │ . │ . DJ
8 │ . . . │ . . │ AE0 8 . │ │ . . . . │ BE0 8 │ │ . . │ . │ . CE0 8 . │ . . │ . │ . DE0
9 │ . . . │ . . │ AK 9 . │ │ . . . . │ BE1 9 │ │ . . │ . │ . CL 9 . │ . . │ . │ . DE1
10 │ . . . │ . . │ AF0 10 . │ │ . . . . │ BF0 10 │ │ . . │ . │ . CF0 10 ────┼────────┼─────█──── DF0
11 │ . . . │ . . │ AF1 11 . │ │ . . . . │ BK 11 │ │ . . │ . │ . CF1 11 . │ . . │ . │ . DL
12 │ . . . │ . . │ AG0 12 . │ │ . . . . │ BG0 12 │ │ . . │ . │ . CG0 12 . │ . . │ . │ . DG0
13 │ . . . │ . . │ AL 13 . │ │ . . . . │ BG1 13 │ │ . . │ . │ . CK 13 . │ . . │ . │ . DK
14 │ . . . │ . . │ AH0 14 . │ │ . . . . │ BH0 14 │ │ . . │ . │ . CH0 14 ────┼────────█─────┼──── DH0
15 │ . . . │ . . │ AH1 15 . │ │ . . . . │ BL 15 │ │ . . │ . │ . CH1 15 . │ . . │ . │ . DH1
u 1 2 3 4 5 6 7 u 8 9 10 11 12 13 14 u 15 16 17 18 19 20 21 u 22 23 24 25 26 27 28
chip E chip F chip G chip H
0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7
0 ─────────────█─────█──── AE0 0 . . . │ . │ . . AF0 0 ────█───────────█─────── AG0 0 ────█─────█───────────┼─ AH0
1 . . . . │ . │ . EK 1 . . . │ . │ . . AF1 1 . │ . . . │ . . GL 1 . │ . │ . . . │ AH1
2 . . . . │ . │ . BE0 2 . . . │ . │ . . BF0 2 . │ . . . │ . . BG0 2 . │ . │ . . . │ BH0
3 . . . . │ . │ . BE1 3 . . . │ . │ . . FK 3 . │ . . . │ . . BG1 3 . │ . │ . . . │ HL
4 . . . . │ . │ . CE0 4 . . . │ . │ . . CF0 4 . │ . . . │ . . CG0 4 . │ . │ . . . │ CH0
5 . . . . │ . │ . EL 5 . . . │ . │ . . CF1 5 . │ . . . │ . . GK 5 . │ . │ . . . │ CH1
6 . . . . │ . │ . DE0 6 ──────────┼─────█─────── DF0 6 . │ . . . │ . . DG0 6 ────┼─────┼───────────█─ DH0
7 . . . . │ . │ . DE1 7 . . . │ . │ . . FL 7 . │ . . . │ . . DG1 7 . │ . │ . . . │ HK
8 . . . . │ . │ . EI 8 . . . │ . │ . . EF0 8 . │ . . . │ . . EG0 8 . │ . │ . . . │ EH0
9 . . . . │ . │ . EJ 9 . . . │ . │ . . EF1 9 . │ . . . │ . . EG1 9 . │ . │ . . . │ EH1
10 . . . . │ . │ . EF0 10 . . . │ . │ . . FI 10 ────┼───────────█─────── FG0 10 . │ . │ . . . │ FH0
11 . . . . │ . │ . EF1 11 . . . │ . │ . . FJ 11 . │ . . . │ . . FG1 11 . │ . │ . . . │ FH1
12 . . . . │ . │ . EG0 12 ──────────█─────┼─────── FG0 12 . │ . . . │ . . GI 12 . │ . │ . . . │ GH0
13 . . . . │ . │ . EG1 13 . . . │ . │ . . FG1 13 . │ . . . │ . . GJ 13 . │ . │ . . . │ GH1
14 . . . . │ . │ . EH0 14 . . . │ . │ . . FH0 14 . │ . . . │ . . GH0 14 . │ . │ . . . │ HI
15 . . . . │ . │ . EH1 15 . . . │ . │ . . FH1 15 . │ . . . │ . . GH1 15 . │ . │ . . . │ HJ
u 31 32 33 34 35 36 37 u 38 39 40 41 42 43 44 u 45 46 47 48 49 50 51 u 52 53 54 55 56 57 58
chip I chip J chip K chip L
0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7
0 ─┼──┼──┼──█──┼────────── nA0 0 │ │ │ . . . . . nD0 0 │ . . . . . . . 29 0 . . . . . . . . 30
1 │ │ │ │ │ . . . nD1 1 ─┼──█──┼──────────────── nA1 1 │ . . . . . . . 59 1 . . . . . . . . 60
2 │ │ │ │ │ . . . nA2 2 ─┼──┼──█──────────────── nD2 2 ─█────────────────────── BFi 2 . . . . . . . . BFo
3 │ │ │ │ │ . . . nD3 3 │ │ │ . . . . . nA3 3 │ . . . . . . . ARF 3 . . . . . . . . 5V
4 ─█──┼──┼──┼──┼────────── nA4 4 │ │ │ . . . . . nD4 4 │ . . . . . . . TRl 4 . . . . . . . . GP1
5 ─┼──┼──█──┼──┼────────── nD5 5 ─█──┼──┼──────────────── nA5 5 │ . . . . . . . BRl 5 . . . . . . . . GP2
6 ─┼──█──┼──┼──┼────────── nA6 6 │ │ │ . . . . . nD6 6 │ . . . . . . . Da1 6 . . . . . . . . GP3
7 ─┼──┼──┼──┼──█────────── nD7 7 │ │ │ . . . . . nA7 7 ─█────────────────────── Da0 7 . . . . . . . . GP4
8 │ │ │ │ │ . . . nD1 8 │ │ │ . . . . . nD8 8 │ . . . . . . . Ad0 8 . . . . . . . . GP5
9 ─┼──┼──┼──┼──█────────── nD9 9 │ │ │ . . . . . nD1 9 │ . . . . . . . Ad1 9 . . . . . . . . GP6
10 │ │ │ │ │ . . . nD1 10 │ │ │ . . . . . nD1 10 │ . . . . . . . Ad2 10 . . . . . . . . GP7
11 │ │ │ │ │ . . . I+ 11 │ │ │ . . . . . I- 11 │ . . . . . . . Ad3 11 . . . . . . . . GP8
12 │ │ │ │ │ . . . IL 12 │ │ │ . . . . . JL 12 │ . . . . . . . KL 12 . . . . . . . . LI
13 ─┼──┼──┼──█──┼────────── IJ 13 ─┼──█──┼──────────────── IJ 13 │ . . . . . . . KI 13 . . . . . . . . LJ
14 │ │ │ │ │ . . . IK 14 │ │ │ . . . . . JK 14 │ . . . . . . . KJ 14 . . . . . . . . LK
15 │ │ │ │ │ . . . uRX 15 │ │ │ . . . . . uTX 15 │ . . . . . . . GND 15 . . . . . . . . GND
AI BI CI DI EI FI GI HI AJ BJ CJ DJ EJ FJ GJ HJ AK BK CK DK EK FK GK HK AL BL CL DL EL FL GL HL
Bridge array
Enter b
in the menu. This is generally the most helpul one for me to troubleshoot what's going on if your issue has anything to do with routing or connections. It probably looks like nonsense to you but I've been in it so long it makes perfect sense to me.
Net list
Enter 'n' in the menu to show this one. If you have anything that's doing any measurement (gpio
input or ADC
s), it'll stay up and live update if any of them change. (And just like basically any menu not asking for input, entering anything will bring you back to the main menu.)
Arduino UART passthrough
With an Arduino Nano in the header and the UART lines connected, anything on those lines should be passed through to the second serial port that shows up when you plug in your Jumperless.
(You can also set the config option ``[serial_1] print_passthrough = true;` and have it print on both. Don't worry about the baud rate, the Jumperless senses what the host computer is set to and changes the speed accordingly.
The shortcuts to connect D0
and D1
to the Jumperless's UART Tx
and Rx
is A
to connect, and a
to disconnect.
It will even sense when Arduino IDE is trying to upload code and twiddle the reset lines to allow you to flash code with just a single USB cable going to your Jumperless.
3D printable stand
Here are the 3D models for you to print your own stand for your Jumperless. It's extremely handy to have it propped up like this to read text on the breadboard.
Yes, the model is at a weird angle, just drop it down in the slicer, if you want it to hold at a shallower angle, just drop the model through the bed a bit when you slice.
These stick-on rubber feet also make it a lot more solid on your desk (and having the different sizes lets you shim the angle by putting different ones on the front and back.)
That's all the brand spankin' new stuff, there's some more general info in the updates on the Crowd Supply page.
Come hang out in the Discord if you have any questions or just want to chat.
Odds and ends
-
GPIO 1-8
will show a subtle animation while they're floating and go red / green when they're pulledhigh
/low
-
Added commands to just add or remove nodes
+uart_tx-43, 1-2, 2-3
,-2-3
(will just remove the bridge 2-3 and leave 1-2,-2
will remove the node, so both 1-2 and 2-3 will be removed) -
x
will clear all connections in the current slot -
Configuration options are saved to a file and any option can be changed with `, or print it out with
~
(there's also a help menu~?
) -
Arduino flashing works through the second serial port, a DTR signal will pull down the Reset lines and then let avrdude pass through whatever. So if you tell Arduino IDE there's an Arduino Nano connected to Jumperless port 2, it should flash as expected.
-
There's also a shortcut to connect the Jumperless's UART lines to D1 and D0,
a
to disconnect andA
to connect -
You can manually toggle the 2 Reset lines with
r
(both),rt
(top),rb
(bottom) -
LED brightness menu updated (pro tip, try
l?
,lc
, andlb
) -
v
will just return all the ADC readings once, you can dov2
to get just ADC 2's reading -
g
will show the state of all thegpio
-
#
[any text] will print text on the breadboard (typem
or whatever to go back)
Firmware changes in 5.1.2.7
- Commands from Routable UART
- Starting a UART message (that would normally just be passed through to the second serial port) with
0x02
(non-printable ASCII code for Start of Text / STX) and ending with0x03
(End of Text / ETX) will cause the Jumperless to interpret that as something that was sent though the menu on the main serial port. So you can send commands to make connections and such while also using serial passthrough.
- Starting a UART message (that would normally just be passed through to the second serial port) with
What's that BUFFER_IN - DAC_0
bridge that's always there?
That gets added to power the probe LEDs
, it's kinda weird, but to multiplex 3.3V, GND, LED data, 2 buttons, and a +-9V tolerant analog line over the 4 wires on a TRRS cable, the line powering those LEDs is shared.
The connect
/measure
switch is a Dual Pole Dual Throw (DPDT) switch. The probe tip needs to be at a steady 3.3V to be read by the probe sense pads
which is a big resistive divider sensed by a single ADC
.
When you have it in select
mode, the probe tip is getting 3.3V from a GPIO
on the RP2350B driven high
, and the LEDs get their power from the analog line, which is ROUTABLE_BUFFER_IN
connected to DAC 0
set to 3.3V.
When you switch to measure
mode, those roles get swapped, the LEDs are powered by that GPIO
, and the probe tip is now ROUTABLE_BUFFER_IN
. In the current firmware, that just stays at 3.3V so you can kinda sense pads in either mode (you may notice the sensing is a lot wonkier, that's because the DAC
isn't perfectly calibrated to output exactly 3.3V.) But in the future, there will be some other stuff you can do in that mode treating it as an analog line (and of course, I'll forget to update this, if it's after like June 2025, double check this is still true.)
Why am I using one of the precious two DACs and not another GPIO?
The answer is switch position sensing. You may notice there's no obvious way for the Jumperless to know where the switch is set, so I had to get creative on this one. DAC 0
's output is hardwired to go through a current sense
shunt resistor, so when DAC 0
is powering the probe LEDs
, they'll be drawing some current I can measure with one of the INA219
s, and therefore I can be reasonably confident that the switch is in the select
position.
If you need both DAC
s, you can just get rid of this connection and the probe LEDs
won't light up, but other than aesthetics, it really has no effect on functionality. Or you connect ROUTABLE_BUFFER_IN
to a GPIO
and set it high
and just lose the ability to sense where the switch is.
Glossary of terms:
net
= a group of all the node
s that are connected together (enter n
to see the list {there's a colorful update to that I'm working on right now})
node
= anything the crossbar array can connect to, which includes everything on the breadboard and Nano header, as well as the internal special function
node
s like routable GPIO
, ADC
s, DAC
s
row
= kinda the same thing as node
but I generally use it to mean stuff on the breadboard (so special function things like routable GPIO
, ADC
s, DAC
s that don't have a set location are excluded)
rail
= I use this to refer to the 4 horizontal power rails on the top and bottom (top_rail
, bottom_rail
, gnd
), I will never call a vertical row
a rail
. (I know they're columns but it's easier to say a lot)
bridge
= a pair of exactly two node
s (this is what you're making when you connect stuff with the probe, enter s
to print the (kinda misnamed) node file
s to see a list of bridges)
path
= the set of crossbar connections needed to make a single bridge
, so it can have multiple hop
s if it doesn't have a direct connection and needs to make a bounce
through an intermediate chip
enter b
to see them
node file
/ slot file
= this is an actual text file on the filesystem that stores the list of bridges, there's one of these for each slot
(enter s
to see all of them, they start with an f {
to make it east to just copy paste them from the terminal)
slot
= one of the 8 node files stored that you can switch between with <
/>
or the menu
s. Named nodeFileSlot[0-7].txt
(there's no actual limit, there's so much flash storage on this thing, but by default it's 8)
menu
= I generally mean the onboard clickwheel menu
when I say this (click
the wheel to enter those and scroll
around)
chip
= shorthand for the CH446Qs specifically, lettered A-L. The first 8 (A-H) are considered "breadboard chips
, and the last 4 are considered "special function" chips (enter c
to see their connections)
That's probably more than you need to worry about but that gives me a nice start on real docs