It's an arcade interface board with:

  • 80x digital inputs, configurable de-bounce from 1-8 readings.
  • 8x analogue inputs
  • 4x quadrature inputs which are ppr x4 decode capable. (i.e. 200ppr spec becomes 800ppr)
  • 64x 8bit constant current LED outputs (16bit PWM @ 32MHz with 4 "gamma" tables for RGBW)
  • control for another 192 LEDS through external cards
  • 1 in 16 of all LED controls can be routed to a high power MOSFET (in theory 5A but def 2+ amps)
  • 24x "virtual digital inputs" by assigning any of the analogue/quadrature inputs +Ve and –Ve thresholds (with hysteresis and de-bounce).

When connected to the PC it uses 11 endpoints to create a composite USB device providing:

  • 1x n-k Rollover Keyboard (100+ simultaneous keys register)
  • 2x mice (2x 16bit axis, 8x buttons each)
  • 4x joysticks (9x 8bit axis, 32x buttons each)
  • 1x CDC Serial Port for LED control.

Any of the (real or virtual) digital inputs above can be assigned to up to four buttons on any of the HIDs. A shift button/mode will activate a single, alternative digital output per input. Any of the analogue/quadrature inputs can scaled and assigned to any mouse/joystick axis.

The whole HID device interface runs at around 60Hz.

I’ve replaced the standard LEDWiz dll that comes with LEDBlinky with my own dll which presents 8 “LEDWiz” devices for LEDBlinky to command. The dll then takes those commands and converts them to a serial stream which it sends across the CDC interface to the main card.

I also, as an experiment, created LED inserts that fit in to standard micro-switch buttons. The coloured buttons were a mixed success with some being to opaque to light successfully. However the RGB LEDs within the white buttons worked really well and were very visible in daylight conditions.

As you can see I used an actual arcade track ball, however for the spinner I used a 600p/r optical encoder similar to this: