|  |  |  | Internal of HHKB pro | 
					
						
							|  |  |  | ===================== | 
					
						
							|  |  |  | HHKB pro has MCU and some chips on separate two PCBs. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Controller PCB | 
					
						
							|  |  |  | -------------- | 
					
						
							|  |  |  |     M38K07M4    Renesas MCU with USB function | 
					
						
							|  |  |  |                 http://documentation.renesas.com/eng/products/mpumcu/rej03b0192_38k0ds.pdf | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     (HHKB_controller.jpg) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Keyswitch PCB | 
					
						
							|  |  |  | ------------- | 
					
						
							|  |  |  |     HC4051      Analog Multiplexer: select a row line. | 
					
						
							|  |  |  |                 http://www.ti.com/lit/ds/schs122j/schs122j.pdf | 
					
						
							|  |  |  |     LS145       BCD Decoder: select a column line. | 
					
						
							|  |  |  |                 http://www.ti.com/lit/ds/symlink/sn74ls145.pdf | 
					
						
							|  |  |  |     BU9831      Non-volatile electronic potentiometer: for calibration? | 
					
						
							|  |  |  |                 https://www.spezial.com/doc/rohm-a/bu9831.pdf | 
					
						
							|  |  |  |     TP1683/4    Capacitive Sensing controller: no datasheet available. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     (HHKB_keyswitch.jpg) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     Topre original chip? | 
					
						
							|  |  |  |     (HHKB_TP1684.jpg) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Connector Cable | 
					
						
							|  |  |  | --------------- | 
					
						
							|  |  |  | Two PCBs are connected by 15 lines(13 in case of Pro2). | 
					
						
							|  |  |  | Vcc and GND use 3(2) lines each, other lines are for keyboard signaling. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     HHKB connector lines: | 
					
						
							|  |  |  |     JP   Pro2   Pro     Function    Description                               Teensy++ pins | 
					
						
							|  |  |  |     -------------------------------------------------------------------------------------------- | 
					
						
							|  |  |  |                  1      Vcc(5V)                                               5V | 
					
						
							|  |  |  |      1    1      2      Vcc(5V)                                               5V | 
					
						
							|  |  |  |      2    2      3      Vcc(5V)                                               5V | 
					
						
							|  |  |  |      3    3      4      TP1684      KEY: Low(0) when key pressed              PE6 input(with pullup) | 
					
						
							|  |  |  |      4    4      5      TP1684      KEY_PREV: make threshold                  PE7 output | 
					
						
							|  |  |  |      5    5      6      HC4051      A(bit0)\                                  PB0 output | 
					
						
							|  |  |  |      6    6      7      HC4051      B(bit1) > select row 0-7                  PB1 output | 
					
						
							|  |  |  |      7    7      8      HC4051      C(bit2)/                                  PB2 output | 
					
						
							|  |  |  |      8    8      9      LS145       A(bit0)\                                  PB3 output | 
					
						
							|  |  |  |      9    9     10      LS145       B(bit1) > select column 0-7               PB4 output | 
					
						
							|  |  |  |     10   10     11      LS145       C(bit2)/                                  PB5 output | 
					
						
							|  |  |  |     11   11     12      LS145       D(enable) Low(0) enables selected column  PB6 output | 
					
						
							|  |  |  |     12   12     13      GND                                                   GND | 
					
						
							|  |  |  |     13   13     14      GND                                                   GND | 
					
						
							|  |  |  |                 15      GND | 
					
						
							|  |  |  |     14                  HC4051(Z2)  ~Enable of Z2   row0-7 | 
					
						
							|  |  |  |     15                  HC4051(Z3)  ~Enable of Z3   row8-15 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     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. | 
					
						
							|  |  |  |     NOTE: JP has two HC4051(Z2,Z3) and line 5, 6 and 7 are connected to both of them. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     (HHKB_connector.jpg) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Keyswitch matrix | 
					
						
							|  |  |  | ---------------- | 
					
						
							|  |  |  | HHKB switch matrix is ghost-free and bounce-free. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     Pro/Pro2(8x8): | 
					
						
							|  |  |  |       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_ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     JP(16x8): | 
					
						
							|  |  |  |       COL 0     1       2       3       4       5       6       7 | 
					
						
							|  |  |  |     ROW --------------------------------------------------------------- | 
					
						
							|  |  |  |       0|                ESC     TAB     LFn     LShift  LCtrl | 
					
						
							|  |  |  |       1|                4       E       MuHKN   C       D | 
					
						
							|  |  |  |       2|                3       W       LAlt    X       S | 
					
						
							|  |  |  |       3|                1               HHK | 
					
						
							|  |  |  |       4|   | 
					
						
							|  |  |  |       5|                5       R               V       F | 
					
						
							|  |  |  |       6|                2       Q       LGui    Z       A | 
					
						
							|  |  |  |       7|                6       T       Space   B       G | 
					
						
							|  |  |  |       8|                9       I       Kana    ,       K | 
					
						
							|  |  |  |       9|                8       U       Henkan  M       J | 
					
						
							|  |  |  |       A|                7       Y               N       H | 
					
						
							|  |  |  |       B|                0       O       RAlt    .       L | 
					
						
							|  |  |  |       C|                BS              Right   RShift  Enter | 
					
						
							|  |  |  |       D|                \       [       Down    Up      ] | 
					
						
							|  |  |  |       E|                -       P       RFn     /       ; | 
					
						
							|  |  |  |       F|                ~       @       Left    Ro      : | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Matrix diagram: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     Pro/Pro2: | 
					
						
							|  |  |  |              +-------------------------+-+-+-+-+-+-+-+     Vcc | 
					
						
							|  |  |  |              |bias control?            - - - - - - - -     --- | 
					
						
							|  |  |  |              |                  3.9K*8 R R R R R R R R      | | 
					
						
							|  |  |  |     +--------^+      +--------+        - - - - - - - -      |   | 
					
						
							|  |  |  |     |        2|      | HC4051 <0-------|-|-|-|-|-|-|-|--|R|-+ | 
					
						
							|  |  |  |     |         |capa. |        <1-------|-|-|-|-|-|-|-|--|R|-+ | 
					
						
							|  |  |  |     | TP1684  |sense |        <2-------|-|-|-|-|-|-|-|--|R|-+ | 
					
						
							|  |  |  |     |       11<------|        <3-------|-|-|-|-|-|-|-|--|R|-+ | 
					
						
							|  |  |  |     |         |      |        <4-------|-|-|-|-|-|-|-|--|R|-+ | 
					
						
							|  |  |  |     |         |      |        <5-------|-|-|-|-|-|-|-|--|R|-+ | 
					
						
							|  |  |  |     |         <-+    |        <6-------|-|-|-|-|-|-|-|--|R|-+ | 
					
						
							|  |  |  |     |   1   4 | |    |        <7-------|-|-|-|-|-|-|-|--|R|-+ | 
					
						
							|  |  |  |     +---V---^-+ |    +-^-^-^--+        0 1 2 3 4 5 6 7  33K*8 | 
					
						
							|  |  |  |        KEY PREV |      A B C         +-----------------+ | 
					
						
							|  |  |  |         |   | +-^----+ | | |         |      LS145      | | 
					
						
							|  |  |  |     Vcc |   | |BU9831| | | |         +-^--^--^--^------+ | 
					
						
							|  |  |  |     --- |   | +------+ | | |           A  B  C  D   +-------+ | 
					
						
							|  |  |  |      |  |   |          | | |           |  |  |  |   |       | | 
					
						
							|  |  |  |     1-3 4   5          6 7 8           9 10 11 12 13-15 Pro | | 
					
						
							|  |  |  |     1-2 3   4          5 6 7           8  9 10 11 12-13 Pro2| | 
					
						
							|  |  |  |     +--------------------------------------------------+    | | 
					
						
							|  |  |  |     |                connector                         |   --- | 
					
						
							|  |  |  |     +--------------------------------------------------+   GND | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     JP: | 
					
						
							|  |  |  |              +-----------------------------+-+-+-+-+       Vcc | 
					
						
							|  |  |  |              |bias control?                - - - - -       --- | 
					
						
							|  |  |  |              |                  3.9K*5     R R R R R        | | 
					
						
							|  |  |  |     +--------^+      +--------+            - - - - -        |   | 
					
						
							|  |  |  |     |         |      | HC4051 <0-----------|-|-|-|-|----|R|-+ | 
					
						
							|  |  |  |     |         |capa. |    Z2  <1-----------|-|-|-|-|----|R|-+ | 
					
						
							|  |  |  |     | TP1684  |sense |        <2-----------|-|-|-|-|----|R|-+ | 
					
						
							|  |  |  |     |         <---+--|        <3-----------|-|-|-|-|----|R|-+ | 
					
						
							|  |  |  |     |         |   |  |        <4-----------|-|-|-|-|----|R|-+ | 
					
						
							|  |  |  |     |         |   ~En|        <5-----------|-|-|-|-|----|R|-+ | 
					
						
							|  |  |  |     |         | +---->        <6-----------|-|-|-|-|----|R|-+ | 
					
						
							|  |  |  |     |         | | |  | A B C  <7-----------|-|-|-|-|----|R|-+ | 
					
						
							|  |  |  |     +---V---^-+ | |  +-^-^-^--+            | | | | |        | | 
					
						
							|  |  |  |        KEY PREV | |    | | |               | | | | |        | | 
					
						
							|  |  |  |         |   |   | |  +--------+            | | | | |        | | 
					
						
							|  |  |  |         |   |   | |  | HC4051 <8-----------|-|-|-|-|----|R|-+ | 
					
						
							|  |  |  |         |   |   | |  |    Z3  <9-----------|-|-|-|-|----|R|-+ | 
					
						
							|  |  |  |         |   |   | +--|        <A-----------|-|-|-|-|----|R|-+ | 
					
						
							|  |  |  |         |   |   |    |        <B-----------|-|-|-|-|----|R|-+ | 
					
						
							|  |  |  |         |   |   |    |        <C-----------|-|-|-|-|----|R|-+ | 
					
						
							|  |  |  |         |   |   | ~En|        <D-----------|-|-|-|-|----|R|-+ | 
					
						
							|  |  |  |         |   |   |  +->        <E-----------|-|-|-|-|----|R|-+ | 
					
						
							|  |  |  |         |   |   |  | | A B C  <F-----------|-|-|-|-|----|R|-+ | 
					
						
							|  |  |  |         |   |   |  | +-^-^-^--+        0 1 2 3 4 5 6 7  33K*8 | 
					
						
							|  |  |  |         |   |   |  |   | | |         +-----------------+ | 
					
						
							|  |  |  |         |   |   |  |   | | |         |      LS145      | | 
					
						
							|  |  |  |     Vcc |   |   |  |   | | |         +-^--^--^--^------+ | 
					
						
							|  |  |  |     --- |   |   |  |   | | |           A  B  C  D   +-------+ | 
					
						
							|  |  |  |      |  |   |   |  |   | | |           |  |  |  |   |       | | 
					
						
							|  |  |  |     1-2 3   4  14 15   5 6 7           8  9 10 11 12-13     | | 
					
						
							|  |  |  |     +--------------------------------------------------+    | | 
					
						
							|  |  |  |     |                connector                         |   --- | 
					
						
							|  |  |  |     +--------------------------------------------------+   GND | 
					
						
							|  |  |  |                                      | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Signals charts | 
					
						
							|  |  |  | -------------- | 
					
						
							|  |  |  |     While pressing space bar, watched HHKB Pro 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. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     (HHKB_chart1.jpg) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     Space bar locate at ROW:3 COL:7. A key is selected by HC4051(C,B,A) and LS145(C,B,A). | 
					
						
							|  |  |  |     Key state can be read on TP1684(4/KEY) while asserting low on LS145(D).  | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     (HHKB_chart2.jpg) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     Signal of JP: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     1) Select row | 
					
						
							|  |  |  |     rowC    ____~~~~____~~~~    3.8/3.8ms(JP) 7.7/7.7ms(Pro)   S2 of HC4051 | 
					
						
							|  |  |  |     rowB    __~~__~~__~~__~~    1.9/1.9ms(JP) 3.8/3.8ms(Pro)   S1 of HC4051 | 
					
						
							|  |  |  |     rowA    _~_~_~_~_~_~_~_~    1.0/1.0ms(JP) 1.9/1.9ms(Pro)   S0 of HC4051 | 
					
						
							|  |  |  |             0123456701234567    selected row(Pro) | 
					
						
							|  |  |  |             0123456789ABCDEF    selected row(JP) | 
					
						
							|  |  |  |     rowEn0  ________~~~~~~~~    7.7/7.7ms(JP only)              ~Enable of Z2 HC4051(JP only) | 
					
						
							|  |  |  |     rowEn1  ~~~~~~~~________    7.7/7.7ms(JP only)              ~Enable of Z3 HC4051(JP only) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     2) Select column | 
					
						
							|  |  |  |     colC    ____~~~~____~~~~    550/410us(JP)      /   us(Pro) | 
					
						
							|  |  |  |     colB    __~~__~~__~~__~~    200/210us(JP)   450/460us(Pro) | 
					
						
							|  |  |  |     colA    _~_~_~_~_~_~_~_~    100/110us(JP)   220/230us(Pro) | 
					
						
							|  |  |  |             0123456701234567    selected column | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     3) Wait 5us after column select, then set prev, strobe colD to spit out key status and read it. | 
					
						
							|  |  |  |     prev    _~~~~_____          20us if previous key state is low | 
					
						
							|  |  |  |     colD    ~~~__~~~~~          10us strobe | 
					
						
							|  |  |  |     key     ~~~____~~~          22us indicates current state of the key | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     NOTE: JP scans twice fast as Pro/Pro2 does. So Pro/Pro2 scans 8x8 matrix in 15.4ms while JP scans 16x8 in that time. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | EOF |