From 208f6d7f9146782d4c437aedf75a0a7043db7765 Mon Sep 17 00:00:00 2001 From: tmk Date: Thu, 1 Nov 2012 14:24:21 +0900 Subject: Improve documentation --- keyboard/hhkb/doc/HHKB.txt | 116 +++++++++++++-------------------------------- 1 file changed, 34 insertions(+), 82 deletions(-) (limited to 'keyboard/hhkb/doc/HHKB.txt') diff --git a/keyboard/hhkb/doc/HHKB.txt b/keyboard/hhkb/doc/HHKB.txt index ace931de38..f99a074437 100644 --- a/keyboard/hhkb/doc/HHKB.txt +++ b/keyboard/hhkb/doc/HHKB.txt @@ -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 -- cgit v1.2.3