Atari-like joystick adapter to USB.
Adapter is actually a shield for Arduino Pro Micro based on ATmega 32U4.
ATmega 32U4 has a hardware support for fullspeed USB, thus polling rate 1000Hz is not an issue for that chip.
You can use the gerber file to order the PCB.
Attached code uses port registers so that is quite efficient, debouncing is done without delay() function.
The adapter has a toggle C64/Amiga for choosing C64 or Amiga approach for FIRE2/FIRE3. According to wiki.icomp.de website about DE-9 joystick, FIRE2/FIRE3 are pulled to VCC in case of C64 and to GND in case of Amiga. That is not an issue for joy2usb due to XOR magic.
Two footprints are not trivial: DB9 male socket (J1) and SPDT switch (SW2).
Officialy the J1 footprint (joy2usb has been designed in KiCad) is "DSUB-9_Male_Horizontal_P2.77x2.84mm_EdgePinOffset9.90mm_Housed_MountingHolesOffset11.32mm" however it was chosen to fit LD09P13A4GX00LF Amphenol.
SW2 supposed to be Switch SPDT MFP 1220 KNITTER-SWITCH, but it can be replaced with Pinheader 1x3/1x2 (pitch terminal 2.54mm) + jumper or any other SPDT switch with 3 pins and pitch terminal 2.54mm (e.g. EG1218 E-SWITCH).
J2 is redundant -- you can use it to add some new features like autofire switch or sth. In attached firmware connecting PF4 to GND disables debouncing procedure. If you connect PF5 to GND you can read FIRE1 CPS ("$cat /dev/ttyACM0" in Linux).
Sometimes during uploading code to Arduino board you may face some issues -- then you will need to use RESET -- so SW1 can be useful if you like to develope your own code.
BOM:
Qty | Reference(s) | Description |
---|---|---|
3 | D1, D2, D3 | LEDs 3mm |
1 | J1 | DB9 Male Connector LD09P13A4GX00LF Amphenol |
1 | J2 | 2x4 Pinheader. pitch terminal: 2.54mm |
3 | R1, R2, R3 | resistors for D1, D2 and D3 |
2 | R4, R5 | resistors 10KΩ |
1 | SW1 | Tact switch from Arduino breadboard projects |
1 | SW2 | Switch SPDT MFP 1220 KNITTER-SWITCH |
1 | U1 | DIP20 socket (width 15.24mm) + Arduino Pro Micro |