PS/2 + Arduino = USB

Similar projects worth following
Arduino code to use a PS/2 based "Creative Labs Prodikeys DM" MIDI keyboard on USB

The "special sauce" is: Programming the Arduino UNO's USB controller to report as a class MIDI and keyboard device!

What's this?

I have seen a video about the Creative Labs Prodikeys range of products - these are computer keyboards with a row of piano keys attached to them. I instantly wanted to have one. (More info on these weird things)

Unfortunately, when searching eBay I could only find a "Prodikeys DM" which is the PS/2 version - no USB, no DIN jacks... There is also some proprietary "driver magic" going on: The included Windows XP software sends some "magic" commands to the keyboard in order to activate its MIDI capabilities. After that, it sends MIDI data to the Windows MIDI subsystem. This, unfortunately, does NOT work with PS/2-to-USB dongles or any non-XP operating system :-(

So: We need a specialized PS/2-to-USB adaptor. That's what this is.

The Solution

Since PS/2 is a very simple protocol, it is easy to use an Arduino to "speak PS/2" without using any additional parts. This part is quite easy. What's left is the whole USB MIDI/HID keyboard stuff... LUFA for the rescue!

The trick is to split the problem up into two parts: a PS/2 part (talking to the Prodikeys) and an USB part (talking to the computer). This can both be done on one regular Arduino UNO R3 without any additional parts!

Note: You need an ISP programmer (or just a second Arduino running the "ArduinoISP"-sketch) to program the USB-controller.

Please refer to the Arduino sketch for wiring information.

Zip Archive - 64.49 kB - 11/11/2022 at 23:17


  • 1 × Arduino UNO R3 (with ATMEGA32U2 USB Controller) Only the original one, which uses an ATMEGA32U2 USB controller!
  • 1 × PS/2 Mini DIN jack Optional

  • Major update!

    Bernhard "HotKey" Slawik11/11/2022 at 23:38 0 comments

    Fixed polyphonic note-off, added almost all keys, including pitch bend, volume, media keys, cursors, ...

    Added Octave-keys! Shift+Octave changes patches, Alt+Octave changes semitones.

    Shift+key is still not working correctly, tho... PS/2 mod flags are hard...

View project log

  • 1
    Wire up the PS/2 connector to an Arduino UNO R3
    PS2 PinDesccriptionColorArduino Pin
  • 2
    Upload the PS/2 sketch

    Open the sketch "PS2-Part__Arduino_Sketch_for_ATMEGA328P/ProdikeysDM" in your Arduino IDE and upload it to the Arduino

  • 3
    Flash the Arduino's USB controller

    Connect an ISP programmer (or secondary Arduino running the "Arduino ISP" example sketch) to the secondary ISP port near the USB jack to reprogram the USB controller. After this step, the Arduino UNO does not offer a serial port any more, unless you re-flash the factory USB firmware.

    Use avrdude or any other ISP programming software to upload the included HEX file. Select "atmega32u2" as the target device. This might look something like this:

    avrdude -p atmega32u2 -c usbtiny -P usb -v -v -V -U flash:w:KeyboardMIDI.hex -U eeprom:w:KeyboardMIDI.eep

View all 4 instructions

Enjoy this project?



jacobstom wrote 04/26/2020 at 12:12 point

Has this ever got anyone anywhere ? i tried my DM with 3 computers but none work.

If I can buy a ready made adapter for it i would love to.

  Are you sure? yes | no

Bernhard "HotKey" Slawik wrote 11/11/2022 at 23:35 point

Just updated the project! MIDI works 100%, regular typing is usable but not perfect. Just give it a try!

  Are you sure? yes | no

Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates