keychron_qmk_firmware/keyboard/hhkb
2013-06-19 22:04:18 +09:00
..
doc Improve documentation 2012-11-01 14:24:21 +09:00
config_iwrap.h Change tapping parameter for hhkb/iwrap 2013-06-19 22:04:18 +09:00
config_vusb.h Remove common/controller_teensy.h 2013-04-13 11:30:08 +09:00
config.h Remove common/controller_teensy.h 2013-04-13 11:30:08 +09:00
iwrap.txt Improve documentation 2012-11-01 14:24:21 +09:00
keymap.c Fix deprecated 'prog_*' typedef - Issue #34 2013-05-21 10:16:55 +09:00
led.c Made directories for keyboard and converter projects. 2012-06-08 13:32:38 +09:00
Makefile.iwrap Add support of iWRAP5 2013-04-18 15:52:23 +09:00
Makefile.lufa Fix makefile, debug print and keymap of HHKB 2013-05-15 00:22:27 +09:00
Makefile.pjrc Changed Makefile and config.h for new options 2013-03-21 15:34:36 +09:00
Makefile.vusb Changed Makefile and config.h for new options 2013-03-21 15:34:36 +09:00
matrix.c Fix makefile, debug print and keymap of HHKB 2013-05-15 00:22:27 +09:00
README.md Fix image link 3 :( 2012-11-01 14:40:24 +09:00
usbconfig.h Made directories for keyboard and converter projects. 2012-06-08 13:32:38 +09:00

Alternative Controller for HHKB Pro

I wanted to add some features like vi cursor and mouse keys to my HHKB but its controller is not programmable and firmware source code is not open, of course. This means customizing this keyboard needs to replace original controller with programmable one. For this purpose I used PJRC Teensy++ as alternative controller.

My keyboard firmware source tree is here: http://github.com/tmk/tmk_keyboard See directory keyboard/hhkb to build firmware for HHKB.

##Features

  • Customizable keymap
  • More keymap layers(more Fn keys)
  • Mouse keys
  • USB NKRO

###Pros

  • Without PCB trace cutting, case mod or any destructives
  • Can keep original controller intact
  • Can change all HHKB behaviour as you like

###Cons

  • Void your warranty
  • Lose USB hub function in case of Pro2

##DISCLAIMER I'm not a professional of electronics or MCU programming. This may damage your HHKB. And my English writing is poor, I'm not sure I can convey my notions accurately.

##Build Firmware You can choose some combination of MCU and USB protocol stack.

Teensy++(AVR USB family) with LUFA

  1. Edit matrix.c to use your pin configuration. See doc/HHKB.txt for detail.

  2. Edit keymap.c to use your favoirte keymap.

  3. Edit Makefile if you want to use other MCU than Teensy++ 2.0.

  4. Build firmware binary file: $ make -f Makefile.lufa

  5. Program MCU with PJRC Teensy Loader tool. If you install command line version of the loader just run: $ make -f Makefile.lufa teensy

###AVR Mega with V-USB Follow below if you want to use AVR with V-USB as .

  1. Edit matrix.c to use your pin configuration. See doc/HHKB.txt for detail.

  2. Edit keymap.c to use your favoirte keymap.

  3. Edit usbconfig.h to configure V-USB options.

  4. Edit Makefile.vusb to define MCU and F_CPU.

  5. Build firmware binary file: $ make -f Makefile.vusb

  6. Program MCU with AVR programmer like AVRISPmkII. If you already have USBaspLoader on MCU just run: $ make -f Makefile.vusb program

###How to Customize Keymap Later... See keymap.c.

##Hardware

###Teensy++ installation Angled USB mini B adapter is used to install Teensy++ laterally.

Image of Teensy install

Bread baord wires are used to connect Teensy++.

Image of Teensy wiring

Image of Connector

###PJRC Teensy++ 2.0 connection +---------------+ | Teensy++ | | | | | HHKB | | ~~~~ | PB0-2|------->ROW(6-8) | PB3-5|------->COL(9-11) | PB6|------->ENABLE(12) | PE6|<-------KEY(4) | PE7|------->PREV(5) | | | | | | +---------------+

###V-USB circuit +---+ +---------------+ USB GND | | ATmega168 | ~~~ C3 | | 5V <-------+--------+---|Vcc,AVCC | HHKB R1 | | ~~~~ D- <----+--+-----R2-----|INT1 PB2-4|------->ROW(6-8) D+ <----|---+----R3-----|INT0 PC0-2|------->COL(9-11) Z1 Z2 | PC3|------->ENABLE(12) GND<----+---+-----------|GND PB0|<-------KEY(4) | PB1|------->PREV(5) | | GND+-C2--+--|XTAL1 RXD|------->Debug Console X1 | TXD|<-------Debug Console GND+-C3--+--|XTAL2 RST|---SW--+GND +---------------+ R1: 1.5K Ohm R2,R3: 68 Ohm Z1,Z2: Zener 3.6V C1,C2: 22pF C3: 0.1uF X1: Crystal 20MHz(16MHz/12MHz) SW: Push Switch(Optional for bootloader)