If you browse this forum you’ll notice one of the major commandments is “thou must have a pcb with common ground” if you want to do any sort of modifications and/or build your own stick.
Before I get into my question, let me describe how I believe a common-ground PCB works. From what I can tell, every signal has an internal pull-up resistor that keeps the signal high in steady-state and when you push the button, the signal is pulled low. The voltage difference across the buttons are all referenced to the same place, hence ‘common ground’.
So the question is how do the non-common ground PCB’s work, why are they used over common-ground and what precludes you from using them for your own custom stick?
So is the problem just that it’s a PITA to do physically since you have 2x more solder points, or does it actually just not work?
Usually circuits that have their own signal and return (aka non-common ground) are used for differential instead of single ended inputs. However, since I haven’t seen anybody mention non-common ground PCB’s using twisted pair wires, I would highly doubt they were differential. I’ve also never heard of differential buttons either. Looking forward to some technical answers.
Hmm, so it actually is differential. I wonder if there are any non-common PCB schematics out there, I’m curious what the signal and return line are connected to on the PCB, I would imagine an op-amp?
That makes a lot of sense, since if somehow you got a ground loop going, all the buttons would be affected. Although I don’t know how much that buys you by isolating them since a stick not working at 100% might as well be working at 0%; I think this is what you were getting at.
Oh ok, I see. Because you would basically have to not only split the signal lines off for each button, you would have to tie their individual ground lines together as well.
Is that because the JLF uses a common ground for all its microswitches? So I’m guessing you’re saying that you have to cut the common-ground trace to each microswitch then solder from the cut still connected to the microswitch to the corresponding pcb’s direction ground pad?
They usually use banks. An easy-ish example is having say 4 output lines from the controlling chip going, and 4 ‘input’ lines. Those put together can be used for 16 inputs; each microswitch uses one output line and one input line, in a unique combination. The chip puts one output set to low, and the other three outputs set to ‘high impedance’, where its just left hanging instead of pulled high or low. It then reads the four input lines, and the ones that are low tells it that the button with the combination of that output and input is pressed. Then it changes the ‘output’ line so a new a new bank of four can be checked.
This is pretty close to what the xbox360 does, except its just a hair more complicated because of the analog issue.
Why do that? Because instead of:
max number of switches = number of pins
you can make it:
max number of switches = number of pins^2/4
Controlling 16 input with 8 lines. Given 12 wires, that’s 36 possible inputs. Not bad for only 4 additional pins.
Why can’t we use them? because we don’t know when each one is checked. Even if we came up with such a solution that would handle some pad’s specific implementation, then we’d have to have a whole 'nuther solution for the next pad. And the folks who need these instructions are not the folks that can relibly know the difference.
If you don’t use common ground, run two wires to every direction switch and button, and kiss off any hope of any kind of cool hacked like dual pcb or LED mods.
So below is what I drew based upon what you are saying. For time sake, I only drew two out of the four ‘banks’ of buttons, each bank having 4 buttons for a possible total of 16. This controller IC seems to be a combination of a counter/scanner and encoder. I’ll assume there would be some other output pins not drawn that would go to the USB cable to communicate to the Xbox360 which button was pressed.
So for example, the IC would ground O4 (the red line) and tri-state O1 - O3 at high-Z. This is basically an address enable line for the top bank of buttons, S1 - S4. Now if any of those four buttons were pressed, the IC would see a low on their corresponding input line, I1 - I4. Using an internal lookup table, it would know that having O4 grounded and seeing a low on I1 means that button S1 is being pressed.
The same process can be repeated by having O3 grounded and O1,O2,O4 held at high-Z, and so on. Sound about right?
Looks good. That exactly depicts the type of setup I was trying to describe.
Odd note: imagine that chip is instead the console, and those 8 wires connecting the array of switches are all inside the cable plugging into the console. Congratz, you’ve pretty much described how the controller communication on a Genesis, Saturn, and Neo-Geo work. “But the Geny and Saturn pads are common ground”. Yup, and they use a multiplexer chip(s) to do the conversion to banked.
RDC did a great little schematic of how the matrixed buttons on a 360 pad were setup. You should check it out.
I can’t find it after a quick google, sadly. RDC is a person, and pretty much the most knowledgable person on the inner workings of the 360 controllers. He has traced out pretty much every 360 controller made. I know he made a schematic showing how the original matrix looked in schematic form, but I’m not sure where it could be found at the moment. You can track down most of his stuff from xbox-scene. http://forums.xbox-scene.com/index.php?act=ST&f=132&t=581799&st=0#entry3867534
So that’s how it is actually implemented. Very interesting using banks and decoders. So how fast are these inputs refreshed? I would assume the refresh rate will be higher than the USB refresh rate of 125 Hz. Question, I would assume that multiple button presses are really scanned serially but who determines if the buttons are pressed “simultaneous” vs one after another?
I would imagine it scans through the banks at a very high rate, at least in the KHz range. With such a high sample rate, you are guaranteed to catch all of the presses since the Nyquist therom says you need only sample at 2x the frequency; and I doubt people can press buttons faster than 500 times a second (assuming 1KHz sampling frequency.)
The actually clock the pad uses to tell the console that the buttons are pressed simultaneously would be much slower than the sampling frequency. So you would see something like this (scroll to the right to see the labels):
Note that ‘Sampled S1/S2’ means that this is what was seen by the PCB using the high-frequency sample clock, notice that S1 and S2 aren’t going high simultaneously as this is pretty much impossible to do in real life. ‘Console S1/S2’ is using the slower ‘Console CLK’ to downsample the button presses based upon the rising edge of the clock. The fact that the S1 and S2 buttons are depressed at the same time is now much more evident.
Of course take all of this with a grain of salt, this is just my best estimation of what is going on, but I’d say its pretty realistic.