On my clearly-in-progress Ergodox keyboard (http://ergodox.org/Hardware.aspx), I finally got the U8glib (https://code.google.com/p/u8glib/) library to compile, link, and run, squirting pixels at a cheap 128x64 OLED display (~$12) via the I2C bus. With u8glib's Hello World, it all just barely fits in 32k of flash :/

It's not clear yet if U8glib's screen updates have slowed down the I2C traffic that the Teensy needs to scan the left keyboard half. The Ergodox is a completely separated design, so there's a MCP23018 I/O expander on the other side doing the key matrix scanning. The MCP doesn't do any work on its own - if it can't be polled quickly enough, keypresses will be lost. You know, that primary thing you use a keyboard for? Since the display controller does (seems to?) persist its contents, if performance is unsatisfactory I can try to update it every N seconds instead.

I've chopped out the Trackpoint module (nipple mouse) of an IBM Thinkpad, the use of which I hope will let me keep my hands from moving to/from a separate mouse; it's still using the (ancient) PS/2 interface under the covers. Farewell another 5k of flash, needed for PS/2 mouse support. Be kind to those electrons.

Still todo: throw together a tiny UI and figure out exactly what information I want to display - definitely the current layer and modifiers, but what else? Should I just move the display control to a separate AVR chip instead and leave the Teensy just chirping status updates at it? Where should that Trackpoint go, and how should it be mounted? And the mouse buttons? How annoying will it be to have a very bright but tiny display updating out of the corner of one's eye while typing, anyway?
2 Photos - View album
Shared publicly