Hey all,
I've been gone a while and was only here very briefly. Life got busy and my previous project (a Wii portable) was put on hold until I am inspired.
My current project may interest many of you though! I call it GCShuffle, a fun little board that is capable of mixing up Gamecube controller inputs and outputs, as well as (should all go well) controls.
To mix up controller inputs and outputs, I use 4 low on-resistance analog multiplexers (SN74LV4051A), each receiving data from all controller inputs, with the COM pin going to the output data line of a single controller port.
To mix up the controls, I am planning on leveraging the RP2040's PIO (which is sweet for real-time applications - people use it to make VGA drivers, but I'm starting a bit smaller) to deal with the Gamecube communication protocol (detailed here). The RP2040 will take in raw Gamecube serial data and output altered serial data - another 4 multiplexers allow you to choose between the altered and raw signals.
I'm using a Pi 0 as a master for the RP2040 - it probably all could have been handled by the RP2040 (including the input/output switching, technically), but I'm thinking I will make either a web interface or similar to allow for easy (and cool) switching between modes.
A couple other neat features include:
Schematic:

PCB:

Render:

I'm currently waiting on the first board revision, which only implemented switching controllers. I'll try to keep you all posted regarding progress past that.
I've been gone a while and was only here very briefly. Life got busy and my previous project (a Wii portable) was put on hold until I am inspired.
My current project may interest many of you though! I call it GCShuffle, a fun little board that is capable of mixing up Gamecube controller inputs and outputs, as well as (should all go well) controls.
To mix up controller inputs and outputs, I use 4 low on-resistance analog multiplexers (SN74LV4051A), each receiving data from all controller inputs, with the COM pin going to the output data line of a single controller port.
To mix up the controls, I am planning on leveraging the RP2040's PIO (which is sweet for real-time applications - people use it to make VGA drivers, but I'm starting a bit smaller) to deal with the Gamecube communication protocol (detailed here). The RP2040 will take in raw Gamecube serial data and output altered serial data - another 4 multiplexers allow you to choose between the altered and raw signals.
I'm using a Pi 0 as a master for the RP2040 - it probably all could have been handled by the RP2040 (including the input/output switching, technically), but I'm thinking I will make either a web interface or similar to allow for easy (and cool) switching between modes.
A couple other neat features include:
- USB-C to both the Pi 0 and and RP2040, using a USB switch (MAX4983E)
- I'm using the Sparkfun breakout board, because I'm scared of USB-C
- RP2040 allows for drag and drop programming, which is dope AF
- I'm using the Sparkfun breakout board, because I'm scared of USB-C
- Buzzer for some feedback regarding switches
- 1 controller in, 4 controllers out (1 physical player controls 4 virtual players)
- 4 controllers in, 1 controller out (periodically selected from the 4 inputs)
- If you press a certain button, all controllers are shuffled
- 2v2, but you swap with your teammate periodically
- Any many many more.
Schematic:

PCB:

Render:

I'm currently waiting on the first board revision, which only implemented switching controllers. I'll try to keep you all posted regarding progress past that.