These pages describe modifications I have made to my Deck Keyboard. What started out as a simple backlighting mod eventually turned into something much more substantial (and time consuming). The end result of the mod is a keyboard in which individual LEDs can be software controlled. The software communicates via a custom USB interface, and can direct changes fast enough to allow interesting effects. The LEDs can be individually set to any one of 16 different brightness levels achieved by supplying PWM (pulse-width-modulation) signals from the USB controller. These new functions work in parallel with the original brightness functions built into the Deck, so no original functionality is lost. Here are some short video clips (mp4 encoded, codec available here), showing some of the capabilities:
A key goal of the project was to keep the Deck looking stock. I almost succeeded in this, and in fact the first build did succeed, however KVM issues prevented me from using it this way (I've included a section about the problems I ran into doing that). In the end everything looks stock except the cable coming out the back, which has been changed but is not very noticeable.
I considered trying to document exactly everything I did to mod the keyboard, however that quickly became an impossible task. So instead I decided to show what I could, including pics/schematics/PCB layouts/etc., and then add in some theory of what I did, such that someone could duplicate it using a better technique or better components (for the most part I used whatever I had lying around).
I originally bought the Deck to get a quality keyboard made with actual mechanical switches instead of the usual dome/membrane type construction. I've been through all types of those keyboards before - slimline laptop-style ones with short-throw dome keys or using those scissor switches, and countless full-size ones using the cheap dome/membrane switches. They were all cheaply built and they functioned as such.
So after seeing a comment on slashdot about the Deck boards I did some research into the Deck products and eventually bought a Fire Deck Legend. I got the Legend over the reduced form factor 82-key version they sell because I'm not a big fan of reduced size keyboards. It's not so much that I want a numeric keypad, I hardly ever use it, it's more that every reduced size keyboard I've ever run across has managed to mangle the placement of certain essential keys (such as the arrow keys and the insert/home/pg up/pg down/delete/end block). My version of a reduced keyboard would be to take a normal full-size one out to the bandsaw and cut off the whole numeric keypad while leaving everything else unchanged (keeping the arrows and insert block where they are ... well ok I would probably take out those damn Windows keys while I was at it too).
Once I got the keyboard I found it to have a good weight with keys that have a smooth motion without the clicky tactile feedback. I personally like the smooth action that the Deck keys have, but for those who like tactile feedback there are other options out there. For buckling spring keys check out Unicomp keyboards, and for tactile Cherry switches try out Das Keyboard (hope you know how to touch type). I have a Unicomp keyboard at work which I use all the time, but I still prefer the Deck key feel over the buckling springs of the Unicomp, and the Deck is much quieter too (relatively speaking).
Of course besides the mechanical switches the other selling point of the Deck is the backlighting. I was actually formulating a backlighting mod before I even had the keyboard in my hands. The thought that I had was this - one of the major selling points of the Deck is that it backlights the keys individually, every key has a LED. There are 105 keys and the spacebar has two LEDs so there are actually 106 LEDs on the keyboard (not including the 3 "lock" lights). Well being an EE, I can tell you that you don't just give an EE something that has 106 LEDs in it with only a single on/off switch. No, what you have there is lost potential ;) What occurred to me is wouldn't it be nice if the LEDs could be controlled individually. You know for games you could load in a preset map and only the keys that were used would be lit. That was my first thought, but eventually I would come to discover that with individual LED control I could do much more than that.
To start, I tried to gauge whether it would even be possible. I knew roughly what components it would take to do it because of previous projects I have done, the question was just whether I could fit the parts inside the keyboard's casing.
The photos on the website aren't all that clear on what the Legend casing was like, in particular the bottom of it (under the keyboard). I was hoping for a flat diamond plate, like the 82-key, since that would give me substantial internal space to work with, but the Legend has a rather ordinary plastic casing on it. Nevertheless, it turns out the Legend has a ridge along the bottom back of the keyboard (see pic). That's what props up the back end to give it the usual tilt. Once I had the Deck in hand I opened the case to determine what is in that space. It turns out internally that ridge is just empty (aside from a few plastic reinforcements), and when I discovered this I knew that I could use that as the mod space.
The next bit was to figure out if the LEDs could even be controlled individually. If the Legend were built with just switches mounted on a 2-layer PCB it would certainly be possible. Unfortunately the keys sit on a metal plate and then are soldered through-hole to the underlying PCB. The metal plate blocks nearly all the top-side PCB connections. The only way to remove the plate that I can tell is to de-solder ALL the switches, which was just not going to happen. Therefore to do the mod I would have to break apart and control the LEDs entirely from the back side of the PCB.
The LEDs on the Fire Legend that I have are arranged like this:
As far as current draw goes this is a pretty clever way of doing it, as a given bias will supply two LEDs. At say 5mA per LED this halves the USB current draw from ~530 mA (106 LEDs x 5mA) to ~265 mA (53 LED pairs x 5mA). In order to keep the USB draw low like this, whatever method I used would have to also allow this current reuse.
In addition, the built-in brightness controls work by adjusting the LED VCC supply voltage. In order to keep the stock functions working the new control method would have to work in parallel with this built-in method of control.
So taking all this into consideration, after studying this for a bit I found the best way to modify and control the LEDs individually would be to cut the connection at the center resistor and insert new control signals directly on each LED (more on this later). For the moment, knowing this meant I would have to be able to access/cut the resistor connections from the back side of the Legend board. Well it turns out after tracing out all 53 pairs of LEDs, all but two pairs could be cut on the backside. The two that could not be done on the backside were the resistors between the NUM LOCK and PG UP, and between the TAB and Q keys. Fortunately the TAB / Q resistor is on the edge of the board and is easily accessible. The NUM LOCK / PG UP resistor however, well lets just say it takes some de-soldering skill to get that one out.
In the end though it seemed feasible, so the next step was to work out the control circuit.