Update 2012-01-22: License changed to GPL v3, and source code is now hosted at SourceForge.

Update 2008-03-08: Released version 0.98.

NOTE: You may want to look at the SpiffChorder Wiki

SpiffChorder is a Chording Keyboard experiment, which means that it is meant as a platform for building your own USB-based chording keyboard, and customizing it any way you like, both in terms of the chord maps, and other functions, including pointing devices etc.

In order for this experiment to be beneficial, it is of course released as Open Source (which is also required by the ObDev AVR-USB license).

With the experimental status, there are certainly many things that are not fully done yet. We have a list of bugs, which are being eliminated one by one, when we have the time. Also, there are plans for more features in the near future. If you need it faster than that, please contribute. But in order to give a better view of the current state of the SpiffChorder project, I think Greg will testify that it is stable (at least stable enough for him to use it about every day). Also, a few other people are building SpiffChorders.

There is no doubt the information regarding this project changes over time. In order to better track these changes, and to have a better way of collaborating on this project, Greg has set up a Wiki for SpiffChorder, where you will likely find more up-to-date information. In any case, I will try to update this page occationally, and my aim with this page is to include a description of the project, and how I got involved.

What is a chording keyboard?

A chording keyboard or chorder is a keyboard, on which you press multiple keys at the same time, forming chords that are translated into characters. Basically you can use just one hand to type on a chording keyboard, but because of symmetry it is supposedly easy to learn to use the other hand once you have learned using one. Then you can use a chorder in each hand, and you can alternate your typing, one letter with each hand, regardless of what letters you need to type (since any character can be typed with either hand).

How it all started

I got interesting in chording keyboards after being contacted by Greg Priest-Dorman, who works with wearable computers, and therefore have a home-made chorder for his rig. Until now, this has been running under Linux with a driver made by a friend of his, and which Greg ported to Linux kernel 2.2 and 2.4. The driver turns 7 keys of a regular keyboard into chording keys. For the hardware, a regular keyboard is ripped apart and wired to the 7 buttons.

While this has worked so far, the driver needs to be updated whenever a new Linux kernel is compiled, and in particular Greg hasn't yet gotten around to porting the driver to Linux 2.6, so at this point you need to use an older kernel for this.

After seeing my C64 USB Keyboard, Greg came up with the idea of making (or rather, asking me to make) a chording keyboard firmware, which could be put in an AVR microcontroller, and work as the commercial ones (that is without special drivers or software).

So he contacted me, explained the details, and immediately got me hooked on the idea. I have always thought that wearable computers were pretty cool, so getting the opportunity to get a little closer to this world was excellent. Also, after seing the basic concept of a chording keyboard, I though this could be cool both to make, and to learn to use. Having my left hand on the chorder and the right one on the mouse appeals to me somehow.

So we mailed back and forth some times, and Greg let me borrow one of his BAT personal keyboards. This is a commercially available chorder, and has been essential in both learning the basics of typing with a chording keyboard, but also uncovering some of the subtle behaviors of this device, which is not all appearant from the manual. It turned out that Greg lives only a few miles from my Aunt and Uncle in NY state, so they were able to bring the BAT to Denmark with them.

The project

The SpiffChorder project is work in progress, but an effort is made to ensure that the code and project is in a usable state all the time. We do have a list of bugs that needs to be squashed, and also a longer list of features that we will try to implement.

During the development-stages I have been using my SpiffChorder prototype, as shown below:

The SpiffChorder prototype

Up until now, the hardware has been based on the ATmega8 microcontroller from Atmel, but I recently decided to switch over to ATmega168, because the constraint of the 8kB flash memory in the ATmega8 was getting nearer and nearer.

With the ATmega8, we had Thomas Fischl's avrusbboot working. When I get some time I will look into what changes may be needed for this to work with ATmega168.

My prototype hardware has been pretty good during development, but due to the switches, which require a considerable amount of force to activate, I have not really been using this hardware much to learn typing on a chorder.

Here is what it looks like when I put my hand on the chorder:

The SpiffChorder prototype being used

Also, a few other people are already building SpiffChorders. Arne Wichmann has some working hardware, as shown below:

The SpiffChorder prototype being used


If you want to build your own SpiffChorder, you can find the schematics here. Once you have the hardware assembled (and have found a way of programming the ATmega168 microcontroller), you will likely also want the code. The following archive contains full source code, schematics and other instructions

The latest version is:

Last updated: 2012.01.23