Given specific wants/needs for a circuit, what's your mentality on selecting switches when you start designing?
Worry about it later.
Often when first 'sketching' out an idea I'll allow myself extra poles than usually exist on common switches with the hope that I can rearrange and simplify once I have something that functions correctly. By "sketching" I don't mean in the sense of drawing, I do this textually: switches with one pole per line and (usually) the common in the first column. (I almost always break that second rule with double throw switches.) That allows me to focus on the logic and allows a much quicker pace of revisions rather than worrying about visual layout and legibility — plus if it's written in a consistent enough format I can double check the switching logic programmatically. (There's a reason why the below is
almost exactly valid python syntax
)
I'll try my best to illustrate this with a recreation of a real life example. The scheme in question was to have two modes: the first is regular Strat switching (albeit with a master tone, so no switching of tone pots); the second, alternate mode, is a bit Red Special & a tiny bit Tele — more specifically it gives B×M, B×−M, B+N, N×−M, N×M.
Firstly I'll look at permanent connections to the pickups, we want series and OoP combos so we can't permanently ground all three pickups. But, looking at these combos they all contain the middle pickup. The bridge & neck are only
both selected when in parallel, therefore it's easier to have B & N permanently connected to ground & leave the middle 'floating' (for now). Written out, that gives something this:
pickup_b(pos='b+', neg=GRND),
pickup_m(pos='m+', neg='m-'),
pickup_n(pos='n+', neg=GRND),
Also, since we are doing regular Strat switching with the first mode (throughout which the middle pickup can be grounded) we can fill out one pole of our mode toggle switch:
toggle_mode(
# thrw1 commn thrw2
GRND, 'm-', '--',
),
In the above '--' is a currently unused net which I'll come back to later, but I've included it now because we know 'm-' will need to be connected to *something* in order to get the series combos. It's a separate net because if we used 'm-' directly that would cause problems since in the parallel mode 'm-' is joined with ground.
Next I'll start filling out the selector switch. Purely from intuition it's very unlikely that a regular Strat switch will do, so I'll use a switch with 5 independent throws.
In positions 1 & 2 we want the bridge connected to the hot output but only in Strat mode. In position 3 we want the opposite: the bridge connected to output only in the alternate mode. That would look like this:
selector_switch(
# com t1 t2 t3 t4 t5
'b+', 'OS', 'OS', 'A3', None, None,
),
Both a help and a hindrance of doing this textually means that I need to name the nets of the circuit, this makes the result somewhat self documenting — however meaningful names are hard, and harder when I'm restricting myself to just two characters for the sake of easy column alignment. In the above 'OS' stands for "Output: Strat mode" — i.e. connected to hot output in the Strat mode, disconnected in the alternate mode.
Similarly, 'A3' is "Alternate position 3 output", it could be overall "Output: Alternative mode" (i.e. 'OA') but that could be getting ahead of ourselves — later potentially finding out we've painted ourselves into a corner — so at this stage, whilst just trying to get something functional without worrying about efficiency, 'A3' it remains.
Despite naming the nets, we've yet to actually implement their functionality, for that we'll need to add another pole to the mode toggle switch:
toggle_mode(
# thrw1 commn thrw2
GRND, 'm-', '--',
'OS', OUTP, 'A3',
),
And we can sort out the neck pickup via a second pole on the selector switch:
selector_switch(
# com t1 t2 t3 t4 t5
'b+', 'OS', 'OS', 'A3', None, None,
'n+', None, None, 'A3', 'OS', 'OS',
),
Now we just have to figure out what to do with the middle pickup. If the selector switch were a megaswitch we'd have a further two poles, we can use one to switch 'm+' and the other to switch '--' from earlier. I'll start with the Strat position 3 first, all that requires is that 'm+' is connected to hot, but only in the Strat mode — we already have a net that does this, 'OS'. For now I'll leave all the other throws disconnected:
selector_switch(
# com t1 t2 t3 t4 t5
'b+', 'OS', 'OS', 'A3', None, None,
'n+', None, None, 'A3', 'OS', 'OS',
'm+', None, None, 'OS', None, None,
'--', None, None, None, None, None,
),
For the remaining 1,2,4,5 series positions we basically need a phase switch that swaps the selection between 'm+' and '--', for now I'll call these 'xx' & 'yy'. Since we want the both outer positions to be in phase and the notch positions out of phase, these must be arranged thusly:
selector_switch(
# com t1 t2 t3 t4 t5
'b+', 'OS', 'OS', 'A3', None, None,
'n+', None, None, 'A3', 'OS', 'OS',
'm+', 'xx', 'yy', 'OS', 'yy', 'xx',
'--', 'yy', 'xx', None, 'xx', 'yy',
),
Again, these new nets don't actually do anything useful yet, so let's add another two poles to the mode toggle:
toggle_mode(
# thrw1 commn thrw2
GRND, 'm-', '--',
'OS', OUTP, 'A3',
None, 'xx', None,
None, 'yy', None,
),
First, let's concentrate on Strat mode. In positions 1 & 5, 'm+' is connected to 'xx', since in Strat mode 'm-' is grounded 'm+' and thus 'xx' should remain disconnected from any other net. In positions 2 & 4, 'm+' is connected to 'yy', thus for the middle pickup to be selected as needed 'yy' must connect to the output — so let's do that:
(The connections from '--' to 'xx' or 'yy' matter not, since in Strat mode '--' is disconnected.)
toggle_mode(
# thrw1 commn thrw2
GRND, 'm-', '--',
'OS', OUTP, 'A3',
None, 'xx', None,
OUTP, 'yy', None,
),
Since the bridge & neck are the ground-most in the series combos, one end of the middle pickup must connect to the output — in order to get the specified phasing behaviour that end is: 'm+' for positions 1 & 5; and 'm-' (via '--') in positions 2 & 4. Thus in the alt mode we need 'xx' connected to the output.
Now we only have to figure out what to do with 'yy': in positions 1 & 2 it should connect to 'b+' and in positions 4 & 5 connect to 'n+'. We could establish a new net & add a fifth pole to the megaswitch to accomplish this, however we already have a net that seems to fit the bill: 'OS'. There just two questions we have to answer before we can be confident of that choice. Does 'OS' connect to anything else in those positions that could cause issues? Remembering that we're currently considering alternate mode, the answer to that is no. Secondly, what about position 3: here we have 'OS' connected to 'm+' — is adding 'yy' to that a problem? Again the answer is no.
So, finally, putting everything together we have a functional scheme:
pickup_b('b+', GRND),
pickup_m('m+', 'm-'),
pickup_n('n+', GRND),
toggle_mode(
# thrw1 commn thrw2
GRND, 'm-', '--',
'OS', OUTP, 'A3',
None, 'xx', OUTP,
OUTP, 'yy', 'OS',
),
selector_switch(
# com t1 t2 t3 t4 t5
'b+', 'OS', 'OS', 'A3', None, None,
'n+', None, None, 'A3', 'OS', 'OS',
'm+', 'xx', 'yy', 'OS', 'yy', 'xx',
'--', 'yy', 'xx', None, 'xx', 'yy',
),
If we had no further constraints we could stop there. However, whilst a megaswitch can be fairly easily obtained and substituted in place of an original Strat switch, the 4PDT for the mode toggle may not as be feasible due to considerations of space or aesthetics (4PDT push/pulls are extremely rare, so you're pretty much limited to a Fender S-1 switch if you want a stealth installation). If we could reduce the requirement to only a DPDT it'd mean we could use a regular push-pull or push-push.
The most obvious starting point is the net 'yy', in the Strat position it's connected to OUTP and therefore connected to 'OS', thus actually connected to 'OS' in both positions. As such we can permanently merge 'yy' into 'OS', freeing up one pole:
pickup_b('b+', GRND),
pickup_m('m+', 'm-'),
pickup_n('n+', GRND),
toggle_mode(
# thrw1 commn thrw2
GRND, 'm-', '--',
'OS', OUTP, 'A3',
None, 'xx', OUTP,
),
selector_switch(
# com t1 t2 t3 t4 t5
'b+', 'OS', 'OS', 'A3', None, None,
'n+', None, None, 'A3', 'OS', 'OS',
'm+', 'xx', 'OS', 'OS', 'OS', 'xx',
'--', 'OS', 'xx', None, 'xx', 'OS',
),
We can do similar with 'xx', that can be safely merged with 'A3'. Both are connected to the output in the alt mode and disconnected in the Strat mode, and there'll be no interaction connecting the two since 'xx' is only connected to other nets in positions 1, 2, 4 & 5 and 'A3' only in position 3. For symmetry I'll name this new net 'OA' for 'alternate output' — we've now completed the objective for the simplified wiring:
pickup_b('b+', GRND),
pickup_m('m+', 'm-'),
pickup_n('n+', GRND),
toggle_mode(
# thrw1 commn thrw2
GRND, 'm-', '--',
'OS', OUTP, 'OA',
),
selector_switch(
# com t1 t2 t3 t4 t5
'b+', 'OS', 'OS', 'OA', None, None,
'n+', None, None, 'OA', 'OS', 'OS',
'm+', 'OA', 'OS', 'OS', 'OS', 'OA',
'--', 'OS', 'OA', None, 'OA', 'OS',
),
Something I set out to show was swapping nets between the commons & throws of a switch for our advantage, however the above failed at that. It could be applied here, but is unnecessary. For example you can rearrange the selector switch such that the two 'throw nets' are exchanged with the four 'common nets', like so:
selector_switch(
# com t1 t2 t3 t4 t5
'OA', None, None, 'b+', None, None,
'OA', 'm+', '--', 'n+', '--', 'm+',
'OS', 'b+', 'b+', None, 'n+', 'n+',
'OS', '--', 'm+', 'm+', 'm+', '--',
),
I know I have applied this to my own wiring schemes, but I can't remember a specific instance. And with the midstage virtual circuits being ephemeral, it's difficult to search for after the fact.
What I did find is an example from a circuit by
alexis, namely this one:
New SSS all combinations mod - invisible - original 5 way.
In particular I'm looking at switch 2, the rotary 4P6T 'mode switch', over on the right-hand side. Here's my textual representation thereof:
rotary_4P6T(
# c 1 2 3 4 5 6
'gr', OUTP, OUTP, 'pk', 'li', OUTP, 'li',
'li', None, None, None, None, GRND, 'pk',
'pp', None, None, None, None, None, OUTP,
'pk', None, GRND, None, 'pp', 'pp', None,
),
(Here the net names are purely based upon the wire colours from the diagram: 'gr' — green; 'pk' — pink; 'li' — lilac; 'pp' — purple.)
With the first pole being full but the rest being pretty sparse, this is a good candidate for modification. So, looking at the first pole's third throw this connects 'pk' to 'gr' we can move that connection such that it occurs on the pole with 'pk' connected to the common.
We can also do similar for the connections between 'gr' & 'li' at positions 4 & 6. Position 4 is easy, but at position 6 'li' is already connected to 'pk'. Thankfully there's a pole with 'pk' at its common and throw 6 open, therefore we can connect 'gr' there. Alternatively we can swap the connection between 'li' & 'pk' to there, then use throw 6 of the 'li' pole to connect to 'gr' — this is what I've done in the below:
rotary_4P6T(
# c 1 2 3 4 5 6
'gr', OUTP, OUTP, None, None, OUTP, None,
'li', None, None, None, 'gr', GRND, 'gr',
'pp', None, None, None, None, None, OUTP,
'pk', None, GRND, 'gr', 'pp', 'pp', 'li',
),
Now we've done that, the first pole only makes connections between 'gr' & OUTP, thus we can swap the two — i.e. have OUTP on the common and 'gr' on the throws. We can also do the same with the third pole that connects 'pp' & OUTP. After doing such, we get the following:
rotary_4P6T(
# c 1 2 3 4 5 6
OUTP, 'gr', 'gr', None, None, 'gr', None,
'li', None, None, None, 'gr', GRND, 'gr',
OUTP, None, None, None, None, None, 'pp',
'pk', None, GRND, 'gr', 'pp', 'pp', 'li',
),
Finally, since there's now two poles that share the same common and have non-overlapping throw connections we can merge the two poles into one, giving us a spare pole or enabling the use of a switch with one less pole:
rotary_4P6T(
# c 1 2 3 4 5 6
OUTP, 'gr', 'gr', None, None, 'gr', 'pp',
'li', None, None, None, 'gr', GRND, 'gr',
'pk', None, GRND, 'gr', 'pp', 'pp', 'li',
None, None, None, None, None, None, None,
),
Anyway, I hope the above has been insightful, even if long-winded and probably hard to follow if you're not accustomed to reading circuits as text.