After reverse engineering the OSR USB FX2 firmware, I wanted to build a USB based project. I decided to build a game controller. The controller has two processors, one for the USB interface and one for the analog data captures. The analog stick information is transferred to the USB controller through the I2C communication lines. All the buttons on the controller use hardware debouncing circuits. The firmware for the USB controller is stored in an I2C based EEPROM and was assembled using my custom made 8051 assembler.
Game Controller RepositoryThe Atmel microcontroller firmware was written in C using AVR Studio. The Cyprus EZUSBFX2 firmware was written in assembly using my custom 8051 assembler.
ATMega128 firmware source files:
Game Controller Atmel FirmwareEZUSBFX2 firmware source files:
Game Controller Cyprus FirmwareBefore I built the controller above, I built one with no printed parts. The firmware is exactly the same and the schematic is nearly identical. Below are pictures of the controller and its PCB design.