|
|
@@ -1,67 +1,16 @@
|
|
|
-Alternative Controller for HHKB pro
|
|
|
-===================================
|
|
|
-I want to add vi cursor and mouse keys to HHKB. Original HHKB controller is not programmable and
|
|
|
-firmware source code is not open. So, customizing HHKB needs to replace original controller with programmable one.
|
|
|
-I used Teensy++ as alternative controller. Though a Teensy has enough ports to drive HHKB,
|
|
|
-Teensy++ has clean pinout and it makes programing and wiring easier.
|
|
|
+Internal of HHKB pro
|
|
|
+=====================
|
|
|
+HHKB pro has MCU and some chips on separate two PCBs.
|
|
|
|
|
|
-This is just a proof of concept for replacing controller of HHKB, not a complete firmware.
|
|
|
-
|
|
|
-My prototype firmware source tree is here:
|
|
|
- github(http://github.com/tmk/tmk_keyboard)
|
|
|
-This firmware is a port of my previous project:
|
|
|
- HHKB style Mod(http://geekhack.org/showwiki.php?title=Island:11930)
|
|
|
-PJRC:
|
|
|
- Teensy++/Teensy(http://www.pjrc.com/teensy/)
|
|
|
-
|
|
|
-
|
|
|
-Pros:
|
|
|
- * without pattern cutting, case mod and soldering
|
|
|
- * can keep original controller intact
|
|
|
- * can change HHKB behaviour as you like(by C programming)
|
|
|
-
|
|
|
-Cons:
|
|
|
- * void your warranty
|
|
|
- * unavailability of Teensy++/Teensy(because of PS3 cracking boom?)
|
|
|
-
|
|
|
-Features:
|
|
|
- * customized keymap
|
|
|
- * more keymap layers
|
|
|
- * mouse keys for minimum mouse operation(never comfortable for normal use)
|
|
|
- * and more...(in the future)
|
|
|
-
|
|
|
-Any suggestions or ideas are welcome.
|
|
|
-
|
|
|
-
|
|
|
-NOTE:
|
|
|
- My HHKB is just "Professional". This means followings may not be applied to "Professional2".
|
|
|
-
|
|
|
-DISCLAIMER:
|
|
|
- I'm not a professional for electronics and MCU programming. This may damage your HHKB.
|
|
|
- And my English writing is poor, I'm not sure I can convey my notions accurately.
|
|
|
-
|
|
|
-
|
|
|
-Teensy++ installation
|
|
|
----------------------
|
|
|
-Angled USB mini B adapter is used to install Teensy++ laterally.
|
|
|
-(teensy_install.jpg)
|
|
|
-
|
|
|
-Bread baord wires are used to connect Teensy++.
|
|
|
-(teensy_wiring.jpg)
|
|
|
-(connector_contact.jpg)
|
|
|
-
|
|
|
-
|
|
|
-HHKB internal
|
|
|
--------------
|
|
|
-HHKB pro has some chips on separate two PCBs.
|
|
|
-
|
|
|
-Controller PCB:
|
|
|
+Controller PCB
|
|
|
+--------------
|
|
|
M38K07M4 Renesas MCU with USB function
|
|
|
http://documentation.renesas.com/eng/products/mpumcu/rej03b0192_38k0ds.pdf
|
|
|
|
|
|
(HHKB_controller.jpg)
|
|
|
|
|
|
-Keyswitch PCB:
|
|
|
+Keyswitch PCB
|
|
|
+-------------
|
|
|
HC4051 Analog Multiplexer: select a row line.
|
|
|
http://www.alldatasheet.com/datasheet-pdf/pdf/203989/KODENSHI/KK74HC4051A.html
|
|
|
LS145 BCD Decoder: select a column line.
|
|
|
@@ -76,13 +25,16 @@ Keyswitch PCB:
|
|
|
(HHKB_TP1684.jpg)
|
|
|
|
|
|
|
|
|
-Two PCBs are connected by 15 lines. Vcc and GND use 3 lines each, other 9 lines are for keyboard signaling.
|
|
|
+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) 5V
|
|
|
- 2 Vcc(5V)
|
|
|
- 3 Vcc(5V)
|
|
|
+ 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
|
|
|
@@ -92,9 +44,11 @@ Two PCBs are connected by 15 lines. Vcc and GND use 3 lines each, other 9 lines
|
|
|
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
|
|
|
- 14 GND
|
|
|
- 15 GND GND
|
|
|
+ 13 GND GND
|
|
|
+ 14 GND GND
|
|
|
+ 15 GND Not exist on Pro2 GND
|
|
|
+
|
|
|
+ NOTE: guessing pin5(KEY_PREV) may work for hysteresis of capacitive sensing.
|
|
|
|
|
|
(HHKB_connector.jpg)
|
|
|
|
|
|
@@ -103,19 +57,20 @@ Keyswitch matrix
|
|
|
----------------
|
|
|
60 keyswitches in 8*8 matrix. It is ghost-free and bounce-free.
|
|
|
|
|
|
- COL 0 1 2 3 4 5 6 7
|
|
|
-ROW ---------------------------------------------------------------
|
|
|
- 0| 2 q w s a z x c
|
|
|
- 1| 3 4 r e d f v b
|
|
|
- 2| 5 6 y t g h n _NONE_
|
|
|
- 3| 1 Esc Tab Control LShift LAlt LMeta Space
|
|
|
- 4| 7 8 u i k j m _NONE_
|
|
|
- 5| \ ` Delete Return Fn RShift RAlt RMeta
|
|
|
- 6| 9 0 o p ; l , _NONE_
|
|
|
- 7| - + ] [ ' / . _NONE_
|
|
|
+ COL 0 1 2 3 4 5 6 7
|
|
|
+ ROW ---------------------------------------------------------------
|
|
|
+ 0| 2 q w s a z x c
|
|
|
+ 1| 3 4 r e d f v b
|
|
|
+ 2| 5 6 y t g h n _NONE_
|
|
|
+ 3| 1 Esc Tab Control LShift LAlt LMeta Space
|
|
|
+ 4| 7 8 u i k j m _NONE_
|
|
|
+ 5| \ ` Delete Return Fn RShift RAlt RMeta
|
|
|
+ 6| 9 0 o p ; l , _NONE_
|
|
|
+ 7| - + ] [ ' / . _NONE_
|
|
|
|
|
|
|
|
|
Matrix diagram:
|
|
|
+
|
|
|
+-------------------------+-+-+-+-+-+-+-+ Vcc
|
|
|
|bias control? - - - - - - - - ---
|
|
|
| 3.9K*8 R R R R R R R R |
|
|
|
@@ -141,7 +96,8 @@ Matrix diagram:
|
|
|
to controller
|
|
|
|
|
|
|
|
|
-Signals charts:
|
|
|
+Signals charts
|
|
|
+--------------
|
|
|
While pressing space bar, watched HHKB original controller signals by logic analyzer.
|
|
|
Row and column is looping between 0-7 each for selecting a key.
|
|
|
A key is scaned every about 15ms, so scan rate is 66Hz.
|
|
|
@@ -157,7 +113,8 @@ Signals charts:
|
|
|
(HHKB_chart2.jpg)
|
|
|
|
|
|
|
|
|
-Matrix scan pseudo code:
|
|
|
+Matrix scan pseudo code
|
|
|
+-----------------------
|
|
|
for (row: 0-7) {
|
|
|
SELECT_ROW(row); // set HC4051(A,B,C)
|
|
|
|
|
|
@@ -190,10 +147,5 @@ Matrix scan pseudo code:
|
|
|
}
|
|
|
|
|
|
|
|
|
-Keymap layers
|
|
|
--------------
|
|
|
-Followings are added layers with additional Fn keys.
|
|
|
-
|
|
|
-see keymap.c
|
|
|
|
|
|
EOF
|