Sega Genesis Controller to USB Adapter for $2

Introduction: Sega Genesis Controller to USB Adapter for $2

This adapter allows a Sega Genesis / Mega Drive controller emulate dual XBox 360 gamepads for use with retroarch or other software. It uses a Arduino-compatible stm32f103c8t6 blue pill for the electronics.

Ingredients:

Teacher Notes

Teachers! Did you use this instructable in your classroom?
Add a Teacher Note to share how you incorporated it into your lesson.

Step 1: Prepare Bootloader and Development Environment

Prepare a bootloader and an Arduino development environment.

1. Start by following the instructions here.

2. Note: Unfortunately, there are now floating around fake stm32f103c8t6 boards, with a relabeled IC. This relabeled IC has only 32K flash and 10K ram as opposed to the 64K (or even 128K) flash and 20K ram of the originals, and is perhaps an stm32f103c6. If you have one of these, then when you're about to flash the booloader, the STM32 Demonstrator will tell you that you have a low density 32K device (see screenshot). If you're in that position, make sure you have the latest Arduino core and bootloader, as they now support this lower-end device. And you'll need to select the Generic stm32f103c6 in the Arduino IDE.

3. In your libmaple core, replace the contents of STM32F1/libraries/USBComposite with the latest version (or at least 0.92) from here. This is needed to support dual XBox360 controllers.

4. The blue pills have a wrong USB resistor, typically 10K instead of 1.5K. With some computers, they'll work fine, but they may give trouble with others. Check your resistance between 3.3V and A12. If it's not 1.5K, add a resistor in parallel between these pins to get 1.5K. For instance, if you have 10K, then add a 1.8K resistor.

Step 2: Install Sketch

Get my sketch and upload it to the board. There are two sketch options, depending on which Xbox 360 controller you want to emulate (compatibility may vary):

For my retroarch purposes, the sketch sends left stick movements in response to the dpad buttons by default, but if you hold down the START button while pressing the dpad buttons, it sends XBox dpad buttons instead. If you don't need this, comment out the line:

#define START_ACTIVATED_DPAD

Plug the board into a computer and check that two gamepads show up (they won't move, of course, since you don't have anything hooked to the board). On Windows, press win-R and type joy.cpl to see the two gamepads.

Step 3: Solder

Get or make your two DB9 male sockets (or just one if that's all you want; in that case, you may want to modify the code).

Now connect them as in the two pictures to your blue pill. The view here is from the back of the socket (or, equivalently, the front of the female jack on the controllers).

Step 4: Optional: Case

I have a design for a 3D-printable case for the project here, assuming you are using my 3D printed DB9 sockets.

Be the First to Share

    Recommendations

    • Magnets Challenge

      Magnets Challenge
    • Raspberry Pi Contest 2020

      Raspberry Pi Contest 2020
    • Wearables Contest

      Wearables Contest

    Discussions