====== USB Digger Joystick ====== ===== Basic Infos ===== ==== What is this? ==== USB Digger Joystick is an hardware interface designed to connect old school 8 bit home computer joysticks (Atari, Commodore, ecc...) on a modern PCs by USB keyboard emulation, is designed to play [[http://www.digger.org|Digger]]. ==== History ==== The idea was born as a present for my mother, the only videogame as played a lot is Digger. When i upgraded my PC set from [[http://www.seasip.info/VintagePC/prodestpc1.html|Olivetti Prodest PC1]] to a 386 with VGA, my parents was no more able to play with Digger because in the past they worked only on native CGA systems. Many year later Andrew Jenner with a reverse engineering process of the original DOS program, has remastered Digger for VGA machines, its work created also another platform version of the game (see http://www.digger.org) At that point, Digger run on Windows but my parents didn't like keyboard because with the PC1 they used a joystick. Recently my interest was captured by [[http://www.atmel.com/|Atmel]] microcontrollers, [[http://arduino.cc|Arduino]] and [[http://www.obdev.at/products/vusb/index.html|libraries V-USB]] by Objective Development, from this the idea to realize the missing piece :-) | {{:en:tinkering:microcontrollers:usb_digger_joystick.jpg?300|}} | | {{:en:tinkering:microcontrollers:digbuddy.gif|}} | | {{:en:tinkering:microcontrollers:usb_digger_joystick_on_the_go.jpg?300|}} | ==== How it works ==== Connecting the interface to a Windows PC, Linux or Mac it is recognized as a generic USB keyboard, no drivers needed for working, via joystick commands these keys are emulated: ^ ^ EMULATED KEY ^^ ^ JOYSTICK COMMAND ^ PLAYER 1 ^ PLAYER 2 ^ | UP | CURSOR UP | w | | DOWN | CURSOR DOWN | s | | RIGHT | CURSOR RIGHT | d | | LEFT | CURSOR LEFT | a | | FIRE | F1 | TAB | ==== Features ==== * Device seen as [[http://en.wikipedia.org/wiki/USB_human_interface_device_class|USB HID]] (no drivers needed for working) * It's possible to connect 2 standard Atari joystick * Firmware upgradble via USB (only tested under Linux, may work on Windows e Mac) ===== Make your own! ===== USB Digger Joystick is an OpenSource hardware/software project, all detail are available for download / make / modify / hack it. An archive with schematics, PCB layout and software stuff is available in [[#downloads]] section. ==== Make the hardware ==== The schematic and the PCB layout are designed using CadSoft Eagle 6.10 Light, this is the part list exported: Partlist Exported from VUSB_Digger_Joystick.sch at 30/04/12 15:19 EAGLE Version 6.1.0 Copyright (c) 1988-2012 CadSoft Assembly variant: Part Value Device Package Library Sheet C1 22pF C-EU025-025X050 C025-025X050 resistor 1 C2 22pF C-EU025-025X050 C025-025X050 resistor 1 C3 10uF CPOL-EUE2.5-6 E2,5-6 resistor 1 C4 100nF C-EU025-025X050 C025-025X050 resistor 1 D1 BZX 3V6 BZX55 DO35Z10 diode 1 D2 BZX 3V6 BZX55 DO35Z10 diode 1 H1 MOUNT-PAD-ROUND3.0 MOUNT-PAD-ROUND3.0 3,0-PAD holes 1 H2 MOUNT-PAD-ROUND3.0 MOUNT-PAD-ROUND3.0 3,0-PAD holes 1 H3 MOUNT-PAD-ROUND3.0 MOUNT-PAD-ROUND3.0 3,0-PAD holes 1 H4 MOUNT-PAD-ROUND3.0 MOUNT-PAD-ROUND3.0 3,0-PAD holes 1 IC1 ATMEGA328-P MEGA8-P DIL28-3 atmel 1 JP1 JP1E JP1 jumper 1 JP2 PINHD-2X5 2X05 pinhead 1 JP3 PINHD-2X8 2X08 pinhead 1 JP4 JP1E JP1 jumper 1 JP5 JP1E JP1 jumper 1 JP6 JP1E JP1 jumper 1 JP7 PINHD-1X1 1X01 adafruit 1 JP8 PINHD-1X1 1X01 adafruit 1 JP9 PINHD-1X3 1X03 adafruit 1 JP10 PINHD-1X1 1X01 adafruit 1 JP11 PINHD-1X1 1X01 adafruit 1 JP12 PINHD-1X1 1X01 adafruit 1 Q1 12MHz CRYSTALHC18U-V HC18U-V crystal 1 R1 10k R-EU_0207/15 0207/15 resistor 1 R2 68R R-EU_0207/15 0207/15 resistor 1 R3 1k5 R-EU_0207/15 0207/15 resistor 1 R4 68R R-EU_0207/15 0207/15 resistor 1 R5 10k R-EU_0207/7 0207/7 rcl 1 R6 10k R-EU_0207/7 0207/7 rcl 1 R7 100k R-EU_0207/7 0207/7 rcl 1 R8 100k R-EU_0207/7 0207/7 rcl 1 X1 PN61729-S PN61729-S PN61729-S con-berg 1 === Schematic === {{:en:tinkering:microcontrollers:2012_04_21_usbdiggerjoystick_schematic_rev1.1-150dpi.png?600|}} === PCB layout === This layout is only suitable for web pubblication (just for a look :-) ), for etching purpose please use the 1200 DPI version available in [[#downloads]] {{:en:tinkering:microcontrollers:2012_04_21_usbdiggerjoystick_pcb_rev1.1_800x830_web_pub_mirrored.png?400|}} === Rendering of the Eagle project === {{youtube>large:o-vEIc06DIM}} ==== Burn the booloadHID ==== The interfarce use bootloadHID as bootloader to make possibile easy upgrade with newer firmwares. Fuses used to burn the bootloadHID on the atMega328p chip: ^ FUSE ^ VALUE ^ | lfuse | 0xf7 | | hfuse | 0xda | | efuse | 0x03 | to burn after download the HEX binary, you can use various methods, i have tested the burning via the Arduino 2009 that is equipped with an FTDI chip, the procedure is explained [[http://www.geocities.jp/arduino_diecimila/bootloader/index_en.html|here]]. I have use a breadboard with only quartz christal and the two 22pf capacitors connected to X3 Arduino's connector: | Connector X3 PIN on Arduino Duemilanove | PIN atMega328 on breadboard | | 1 | 18 | | 2 | 19 | | 3 | 17 | | 4 | 1 | You can use the Arduino board also as power source for +5V and GND. This [[http://doswa.com/2010/08/24/avrdude-5-10-with-ftdi-bitbang.html|document]] explain how to patch avrdude on Ubuntu Linux (i used Ubuntu 10.04 for all development process) ===== TODO / future development ===== * MAME mode (es. emulation of CTRL key instead of F1 for FIRE button and other MAME keys via spare pins of the board) * emulated keys redefinition on the fly, actually is possible redefine the keys only via firmware re-flash * realizing an Arduino shield, actually is available only the stand-alone version of the PCB layout * Nintendo Wii Nunchuk as contoller instead of joystick ===== Based on... ===== The development of interface is based on Arduino and porting for Arduino of the V-USB by Objective Development Software GmbH * [[http://arduino.cc/|Official Arduino site]] * [[http://www.obdev.at/products/vusb/index.html|V-USB libraries on Objective Development Software GmbH site]] * [[http://code.google.com/p/vusb-for-arduino/|V-USB libraries porting for Arduino]] ===== Licensing ===== The hardware (the schematic and the PCB layout), is released under [[http://creativecommons.org/licenses/by-sa/3.0/|Creative Commons Attribution Share-Alike]] license. The software (the sources and the firmware binary), is released under [[http://www.gnu.org/licenses/gpl-3.0.en.html|GPL]] in execptions of the V-USB librearies, there are released by Objective Development Software GmbH under a [[http://www.obdev.at/products/vusb/license.html|proprietary OpenSource license]], contained in the source directory of USB Digger Joystick project, you can find it in firmware/usbdrv/License.txt The hardware and the software are released by the author Alessio Cavalieri AS IS, without any warranty, the author is not responsible for malfunction and/or damages to devices connected to interface USB Digger Joystick, assemble and use at your own risk. ===== Appendix ===== ==== Atari compatible joystick interface ==== The joysticks are connected to the interface with these pins, via two DB9 male connector: ^ PIN ^ FUNCTION ^ | 1 | UP | | 2 | DOWN | | 3 | LEFT | | 4 | RIGHT | | 6 | FIRE | | 8 | GND (GROUND, 0V) | ==== Functions and MCU pins ==== Functions matching pins using an Arduino or an Atmel atMega328p standalone ^ PLAYER1 ^^^^ ^ FUNCTION ^ DB9 CONNECTOR ^ARDUINO ^ ATMEL ^ | GND | 8 | GND | GND | | FIRE | 6 | 8 | 14 | | UP | 1 | 10 | 16 | | DOWN | 2 | 11 | 17 | | LEFT | 3 | 9 | 15 | | RIGHT | 4 | 12 | 18 | ^ PLAYER1 ^^^^ ^ FUNCTION ^ DB9 CONNECTOR ^ARDUINO ^ ATMEL ^ | GND | 8 | GND | GND | | FIRE | 6 | 3 | 5 | | UP | 1 | A4 | 27 | | DOWN | 2 | A3 | 27 | | LEFT | 3 | A5 | 28 | | RIGHT | 4 | 5 | 11 | ==== On board connectors ==== ^ Connector ^ functions ^ | JP1 | bootloadHID enable jumper (for firmware updates) / Player 2 fire button | | JP2 | Player 1 joystick DB9 connector / suitable for ICSP functions | | JP3 | free for future development, Player 1 analog joystick DB15 connector (not actually implemented in firmware, suitable only as future development / espansion) | | JP4 | free for future development | | JP5 | Player 2 joystick right | | JP6 | free for future development | | JP7 | +5V USB PORT | | JP8 | GND USB PORT | | JP9 | (1) Player 2 joystick down / (2) Player 2 joystick up / (3) Player 2 joystick left | | JP10 | free / suitable for ICSP RESET function | | JP11 | free / suitable for ICSP SCK function | | JP12 | free for future development | | X1 | USB PORT | ==== Some photos... ==== | {{:en:tinkering:microcontrollers:usb_digger_joystick_old_usb_hard_drive_enclosure.jpg?400|}} | | The case is taken from a broken USB 3,5" Hard Drive enclosure, some useful components removed from original PCB: USB Type B socket and 12 MHz quartz.\\ Joysticks DB9 connectors are old serial connectors from trashware PCs | | {{:en:tinkering:microcontrollers:usb_digger_joystick_new_plexyglass_front-panel_make.jpg?400|}} | | Detail of the new plexyglass front-panel make | | {{:en:tinkering:microcontrollers:usb_digger_joystick_front-panel_fit_test.jpg?400|}} | | Front-panel fit test | | {{:en:tinkering:microcontrollers:usb_digger_joystick_two_joy_connected_test.jpg?400|}} | | Two joy connected test | | {{:en:tinkering:microcontrollers:usb_digger_joystick_front-panel_graphic_detail.jpg?400|}} | | Finished front-panel graphic detail | | {{:en:tinkering:microcontrollers:usb_digger_joystick_on_the_go.jpg?400|}} | | On action :-) | ===== Downloads ===== * Complete package (hardware/software/sources) {{:en:tinkering:microcontrollers:2012_04_21_usb_digger_joystick.zip|}} ===== Links ===== * http://www.digger.org * http://www.atmel.com/ * V-USB libraries: http://www.obdev.at/products/vusb/index.html * V-USB Arduino porting http://code.google.com/p/vusb-for-arduino/ * Using an FTDI based Arduino as AVR programmer: http://www.geocities.jp/arduino_diecimila/bootloader/index_en.html * Patching avrdude for working with the FTDI chip under linux http://doswa.com/2010/08/24/avrdude-5-10-with-ftdi-bitbang.html ===== Contacts ===== For contact me, write a mail to info at itink.it