In this project, I tried to make use of recycled materials in the construction while trying for a more polished look.
This project was initially inspired by the Microsoft Surface Dial, but has evolved towards supplementing a dial for multimedia purposes. Sometime Youtube video or new video game default volume setting is set too high. In Windows, the access to the volume control on the menu bar can takes seconds. I have implement an automatic attenuation to deal with excessive volume in my Automatic audio source switching, but it would still be nice to have a physical interface that is accessible at all time.
The idea is to map the media keys functions into the very few controls for a rotatory encoder in an intuitive manner. The LED provides visual clue to the operating mode of the device while doubling clicking is used to switch between them.
The dial acts as a USB HID, so there are operating system level device driver support in place. There are additional plug-in/key mapper for media players which are outside of the scope of this project.
The dial communicates with the PC using HID reports. The USB standard defines device Usage Tables that describes the formatting of the data packets for the device that the operating system use for parsing.
I am going to be using the low cost EFM8UB1 series microcontroller as it has native USB 1.1 hardware and comes with a free compiler/debugger suite and USB library.
GPIO Port Match interrupts are used to read the rotatory encoder. The switch is mapped to a different port for its own Port Match interrupt. Hardware timer will be used to determine double clicking/hold timing.
"HID Usage Tables - USB org" http://www.usb.org/developers/hidpage/Hut1_12v2.pdf
HID Descriptor Tool - create, edit and validate HID Report Descriptors
"Enhanced Keyboards and Windows" https://www.microsoft.com/china/whdc/archive/w2kbd.mspx