Fix README and doc
This commit is contained in:
		| @@ -2,128 +2,144 @@ Alternative Controller for HHKB Pro | ||||
| =================================== | ||||
| I wanted to add some features like vi cursor and mouse keys to my [HHKB][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++][Teensy] as alternative controller. | ||||
| controller with programmable one. This controller can work with HHKB Professional and Professional 2 model. | ||||
|  | ||||
| See [this thread][AltController] in geekhack.org. | ||||
|  | ||||
| [HHKB]: http://www.pfu.fujitsu.com/hhkeyboard/ | ||||
| [AltController]: http://geekhack.org/index.php?topic=12047.0 | ||||
| [Teensy]: http://www.pjrc.com/teensy/ | ||||
|  | ||||
|  | ||||
| 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 | ||||
|  | ||||
| See README of [tmk_keyboard] for more. | ||||
|  | ||||
| [tmk_keyboard]: http://github.com/tmk/tmk_keyboard | ||||
|   | ||||
| ###Pros | ||||
| * No risk: Everything is all reversible | ||||
| * 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 | ||||
| * Lose USB hub function of Pro2 | ||||
|  | ||||
| ##DISCLAIMER | ||||
| I'm not a professional of electronics or MCU programming. This may damage your HHKB. | ||||
| I'm not a professional of electronics nor MCU programming. This may damage your HHKB. | ||||
| And my English writing is poor, I'm not sure I can convey my notions accurately. | ||||
|  | ||||
|  | ||||
| ##Documents | ||||
| See [doc/HHKB.txt](doc/HHKB.txt) and files under [doc/](doc/) for internal of HHKB and this controller. | ||||
|  | ||||
|  | ||||
| ##Build Firmware & Program | ||||
| You can choose some combination of hardware and USB protocol stack([LUFA], [PJRC]). | ||||
|  | ||||
| ### Install Tools | ||||
| See [this document](../../doc/build.md). | ||||
|  | ||||
| ### TMK Alt Controller Board | ||||
|     $ make -f Makefile.tmk | ||||
|  | ||||
| This programs the controller with [dfu-programmer] if the tool is intalled and configured properly. | ||||
|  | ||||
|     $ make -f Makefile.tmk dfu | ||||
|  | ||||
| Push reset button and program with [FLIP]. The tool should be intalled and configured properly. | ||||
|  | ||||
|     $ make -f Makefile.tmk flip | ||||
|  | ||||
| Or you can also program with FLIP GUI. | ||||
|  | ||||
| [dfu-programmer]: http://dfu-programmer.sourceforge.net/ | ||||
| [FLIP]: http://www.atmel.com/tools/FLIP.aspx | ||||
|  | ||||
|  | ||||
| ##Build Firmware | ||||
| You can choose some combination of MCU and USB protocol stack. | ||||
| ### PJRC Teensy++ | ||||
| Build with [LUFA] USB stack: | ||||
|  | ||||
| ### Teensy++(AVR USB family) with [LUFA] | ||||
| 0. Edit **matrix.c** to use your pin configuration. See doc/HHKB.txt for detail. | ||||
|     $ make -f Makefile.lufa | ||||
|  | ||||
| 1. Edit **keymap.c** to use your favoirte keymap. | ||||
| or with [PJRC] USB stack: | ||||
|  | ||||
| 2. Edit **Makefile** if you want to use other `MCU` than Teensy++ 2.0. | ||||
|     $ make -f Makefile.pjrc | ||||
|  | ||||
| 3. Build firmware binary file: | ||||
|     `$ make -f Makefile.lufa` | ||||
| Push reset button and program with [Teensy Loader(command line)]. The tool should be intalled and configured properly. | ||||
|  | ||||
| 4. Program MCU with PJRC [Teensy Loader] tool. If you install command line version of the loader just run: | ||||
|     `$  make -f Makefile.lufa teensy` | ||||
|     $  make -f Makefile.lufa teensy | ||||
|     $  make -f Makefile.pjrc teensy | ||||
|  | ||||
| Or you can also program with [Teensy Loader(GUI)]. | ||||
|  | ||||
| [LUFA]: http://www.fourwalledcubicle.com/LUFA.php | ||||
| [Teensy Loader]: http://www.pjrc.com/teensy/loader.html | ||||
| [PJRC]: http://www.pjrc.com/teensy/usb_keyboard.html | ||||
| [Teensy Loader(command line)]: http://www.pjrc.com/teensy/loader_cli.html | ||||
| [Teensy Loader(GUI)]: http://www.pjrc.com/teensy/loader.html | ||||
|  | ||||
|  | ||||
| ###AVR Mega with [V-USB] | ||||
| Follow below if you want to use AVR with V-USB as . | ||||
| Build: | ||||
|     $ make -f Makefile.vusb | ||||
|  | ||||
| 0. Edit **matrix.c** to use your pin configuration. See doc/HHKB.txt for detail. | ||||
| Program [USBaspLoader] on MCU with AVR programmer like [AVRISPmkII] and tool like [avrdude]. | ||||
|  | ||||
| 1. Edit **keymap.c** to use your favoirte keymap. | ||||
| You can programs with [avrdude] once you have programmed [USBaspLoader] on MCU. | ||||
|     $  make -f Makefile.vusb program | ||||
|  | ||||
| 2. Edit **usbconfig.h** to configure V-USB options.  | ||||
|  | ||||
| 3. Edit **Makefile.vusb** to define `MCU` and `F_CPU`. | ||||
|  | ||||
| 4. Build firmware binary file: | ||||
|     `$ make -f Makefile.vusb` | ||||
|  | ||||
| 5. Program MCU with AVR programmer like AVRISPmkII. If you already have [USBaspLoader] on MCU just run: | ||||
|     `$  make -f Makefile.vusb program` | ||||
|  | ||||
| [V-USB]: http://www.obdev.at/products/vusb/index.html | ||||
| [USBaspLoader]: http://www.obdev.at/products/vusb/usbasploader.html | ||||
| [AVRISPmkII]: http://www.atmel.com/tools/AVRISPMKII.aspx | ||||
| [avrdude]: http://www.nongnu.org/avrdude/ | ||||
|  | ||||
|  | ||||
| ###How to Customize Keymap | ||||
| Later... | ||||
| See **keymap.c**. | ||||
| ##How to Customize | ||||
| See [tmk_keyboard] documents. | ||||
|  | ||||
|  | ||||
| ##Hardware | ||||
| You have some options for hardware. Development boards with USB AVR family(ATMega32U4, AT90USB1286) like Teensy will work while MegaAVR with V-USB library is also cheapear option for DIY. | ||||
|  | ||||
| ###Teensy++ installation | ||||
| Angled USB mini B adapter is used to install Teensy++ laterally. | ||||
|  | ||||
|  | ||||
|  | ||||
| Bread baord wires are used to connect Teensy++. | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
| ###1. TMK Alt Controller Board | ||||
| TMK designed [Keyboard Controller Board for HHKB Pro2(KiCad project)](https://github.com/tmk/HHKB_controller). | ||||
| See [this post](http://geekhack.org/index.php?topic=12047.msg948923#msg948923). | ||||
|  | ||||
|  | ||||
| ###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) | ||||
|                             |               | | ||||
|                             |               | | ||||
|                             |               | | ||||
|                             +---------------+ | ||||
| ###2. PJRC Teensy++ 2.0 connection | ||||
|     +---------------+ | ||||
|     |   Teensy++    | | ||||
|     |               | | ||||
|     |               |               HHKB pro    HHKB pro2 | ||||
|     |               |               ~~~~~~~~    ~~~~~~~~~ | ||||
|     |          PB0-2|------->ROW    (6-8)       (5-7) | ||||
|     |          PB3-5|------->COL    (9-11)      (8-10) | ||||
|     |            PB6|------->ENABLE (12)        (11) | ||||
|     |            PE6|<-------KEY    (4)         (3) | ||||
|     |            PE7|------->PREV   (5)         (4) | ||||
|     |               | | ||||
|     |               |   5V---       (1-3)       (1-2) | ||||
|     |               |  GND---       (13-14)     (12-13) | ||||
|     +---------------+ | ||||
|  | ||||
| - NOTE: PJRC [Teensy](http://www.pjrc.com/teensy/) | ||||
| [Teensy Loader]: http://www.pjrc.com/teensy/loader.html | ||||
|  | ||||
| ###V-USB circuit | ||||
| ###3. V-USB connection | ||||
|                     +---+   +---------------+ | ||||
|     USB            GND  |   |   ATmega168   | | ||||
|     USB            GND  |   |   ATmega328p  | | ||||
|     ~~~                 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) | ||||
|     5V <-------+--------+---|Vcc,AVCC       |               HHKB pro    pro2 | ||||
|                R1           |               |               ~~~~~~~~    ~~~~ | ||||
|     D- <----+--+-----R2-----|INT1      PB2-4|------->ROW    (6-8)       (5-7) | ||||
|     D+ <----|---+----R3-----|INT0      PC0-2|------->COL    (9-11)      (8-10) | ||||
|             Z1  Z2          |            PC3|------->ENABLE (12)        (11) | ||||
|     GND<----+---+-----------|GND         PB0|<-------KEY    (4)         (3) | ||||
|                             |            PB1|------->PREV   (5)         (4) | ||||
|                             |               | | ||||
|                 GND+-C2--+--|XTAL1       RXD|------->Debug Console | ||||
|                          X1 |            TXD|<-------Debug Console | ||||
| @@ -134,5 +150,11 @@ Bread baord wires are used to connect Teensy++. | ||||
|     Z1,Z2:  Zener 3.6V | ||||
|     C1,C2:  22pF | ||||
|     C3:     0.1uF | ||||
|     X1:     Crystal 20MHz(16MHz/12MHz) | ||||
|     SW:     Push Switch(Optional for bootloader) | ||||
|     X1:     Crystal 12MHz | ||||
|     SW:     Push Switch(for bootloader) | ||||
|  | ||||
| - NOTE: See [V-USB] documentation for more detail of hardware and the USB stack. | ||||
| - NOTE: [USBaspLoader] is very useful for firmware update. | ||||
|  | ||||
| [V-USB]: http://www.obdev.at/products/vusb/index.html | ||||
| [USBaspLoader]: http://www.obdev.at/products/vusb/usbasploader.html | ||||
|   | ||||
| @@ -30,25 +30,27 @@ Connector Cable | ||||
| Two PCBs are connected by 15 lines(13 in case of Pro2). | ||||
| Vcc and GND use 3(2) lines each, other 9 lines are for keyboard signaling. | ||||
|  | ||||
|     Keyswitch PCB connector                                 Teensy++ pins | ||||
|     ------------------------------------------------------------------------------- | ||||
|      1  Vcc(5V)   Not exist on Pro2                         5V | ||||
|      2  Vcc(5V)                                             5V | ||||
|      3  Vcc(5V)                                             5V | ||||
|      4  TP1684    KEY: Low(0) when key pressed              PE6 input(with pullup) | ||||
|      5  TP1684    KEY_PREV: assert previous key state???    PE7 output | ||||
|      6  HC4051    A(bit0) select 8 rows(0 to 7)             PB0 output | ||||
|      7  HC4051    B(bit1)                                   PB1 output | ||||
|      8  HC4051    C(bit2)                                   PB2 output | ||||
|      9  LS145     A(bit0) select 8 columns(0 to 7)          PB3 output | ||||
|     10  LS145     B(bit1)                                   PB4 output | ||||
|     11  LS145     C(bit2)                                   PB5 output | ||||
|     12  LS145     D(enable) Low(0) enable selected column   PB6 output | ||||
|     13  GND                                                 GND | ||||
|     14  GND                                                 GND | ||||
|     15  GND       Not exist on Pro2                         GND | ||||
|     Keyswitch connector | ||||
|     pro  pro2           Description                               Teensy++ pins | ||||
|     -------------------------------------------------------------------------------------------- | ||||
|      1       Vcc(5V)    Not exist on Pro2                         5V | ||||
|      2   1   Vcc(5V)                                              5V | ||||
|      3   2   Vcc(5V)                                              5V | ||||
|      4   3   TP1684     KEY: Low(0) when key pressed              PE6 input(with pullup) | ||||
|      5   4   TP1684     KEY_PREV: make threshold                  PE7 output | ||||
|      6   5   HC4051     A(bit0)\                                  PB0 output | ||||
|      7   6   HC4051     B(bit1) > select row(0 to 7)              PB1 output | ||||
|      8   7   HC4051     C(bit2)/                                  PB2 output | ||||
|      9   8   LS145      A(bit0)\                                  PB3 output | ||||
|     10   9   LS145      B(bit1) > select column(0 to 7)           PB4 output | ||||
|     11  10   LS145      C(bit2)/                                  PB5 output | ||||
|     12  11   LS145      D(enable) Low(0) enables selected column  PB6 output | ||||
|     13  12   GND                                                  GND | ||||
|     14  13   GND                                                  GND | ||||
|     15       GND        Not exist on Pro2                         GND | ||||
|  | ||||
|     NOTE: guessing pin5(KEY_PREV) may work for hysteresis of capacitive sensing. | ||||
|     NOTE: 1KOhm didn't work as pullup resistor on KEY. AVR internal pullup or 10KOhm resistor was OK. | ||||
|  | ||||
|     (HHKB_connector.jpg) | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user