Improve documentation

This commit is contained in:
tmk 2012-11-01 14:24:21 +09:00
parent 16a583d7fd
commit 208f6d7f91
4 changed files with 201 additions and 233 deletions

View File

@ -1,151 +0,0 @@
Alternative Controller for HHKB
===============================
Feature
-------
- Mouse Keys
- NKRO on USB(PJRC Tennsy only)
- Keymap Layers
Customize Keymap
----------------
see keymap.c.
Build
=====
PJRC Teensy
-----------
0. Edit matrix.c.
adjust scan code to your pin configuration.(see doc/HHKB.txt for pinouts)
1. Define macros in config_pjrc.h.(Optional)
VENDOR_ID, PRODUCT_ID and string descriptor.
IS_COMMAND
2. Edit Makefile for MCU setting and build options.
MCU, F_CPU
MOUSEKEY_ENABLE, EXTRAKEY_ENABLE, NKRO_ENABLE
3. Build hex file.
$ make -f Makefile.pjrc
4. Program MCU.
$ make -f Makefile.pjrc program
V-USB
-----
0. Edit matrix.c and usbconfig.h.
adjust scan code to your pin configuration.(see doc/HHKB.txt for pinouts)
define macros for V-USB in usbconfig.h.
1. Define macros in config_vusb.h.(Optional)
IS_COMMAND
2. Edit Makefile.vusb for MCU setting and build options.
MCU, F_CPU
MOUSEKEY_ENABLE, EXTRAKEY_ENABLE
3. Build hex file.
$ make -f Makefile.vusb
4. Program MCU.
$ make -f Makefile.vusb program
Using a bootloader to program for convenience is recommended.
Once program this V-USB bootloader at first, you can program MCU without
extra programmer. You should have reset switch to start up as bootloader
mode in this case.
USBaspLoader:
http://www.obdev.at/products/vusb/usbasploader.html
iWRAP
-----
0. Edit matrix.c and usbconfig.h.
adjust scan code to your pin configuration.(see doc/HHKB.txt for pinouts)
define macros for V-USB in usbconfig.h.
1. Define macros in config_iwrap.h.(Optional)
IS_COMMAND
2. Edit Makefile.iwrap for MCU setting and build options.
MCU, F_CPU
MOUSEKEY_ENABLE, EXTRAKEY_ENABLE
3. Build hex file.
$ make -f Makefile.iwrap
4. Program MCU.
$ make -f Makefile.iwrap program
Hardware
========
PJRC Teensy
-----------
+---------------+
| Teensy++ |
| |
| | HHKB
| | ~~~~
| PB0-2|------->ROW(6-8)
| PB3-5|------->COL(9-11)
| PB6|------->ENABLE(12)
| PE6|<-------KEY(4)
| PE7|------->PREV(5)
| |
| |
| |
+---------------+
V-USB
-----
+---+ +---------------+
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)
iWRAP
-----
+---------------+ WT12
5V | ATmega168 | 5V/3.3V~~~~
+-----+---|Vcc,AVCC PC4|---/--->iWRAP(RxD)
USB | C3 | PC5|<--/----iWRAP(TxD)
~~~ | + | |
5V <--BATT + GND | | 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 12MHz
SW: Push Switch(Optional)
BATT: Li-Po Battery, Battery Charger and Voltage Regulator(5V and 3.3V).
EOF

135
keyboard/hhkb/README.md Normal file
View File

@ -0,0 +1,135 @@
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.
[HHKB]: http://www.pfu.fujitsu.com/hhkeyboard/
[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
###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]
0. Edit **matrix.c** to use your pin configuration. See doc/HHKB.txt for detail.
1. Edit **keymap.c** to use your favoirte keymap.
2. Edit **Makefile** if you want to use other `MCU` than Teensy++ 2.0.
3. Build firmware binary file:
`$ make -f Makefile.lufa`
4. Program MCU with PJRC [Teensy Loader] tool. If you install command line version of the loader just run:
`$ make -f Makefile.lufa teensy`
[LUFA]: http://www.fourwalledcubicle.com/LUFA.php
[Teensy Loader]: http://www.pjrc.com/teensy/loader.html
###AVR Mega with [V-USB]
Follow below if you want to use AVR with V-USB as .
0. Edit **matrix.c** to use your pin configuration. See doc/HHKB.txt for detail.
1. Edit **keymap.c** to use your favoirte keymap.
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
###How to Customize Keymap
Later...
See **keymap.c**.
##Hardware
###Teensy++ installation
Angled USB mini B adapter is used to install Teensy++ laterally.
![doc/HHKB_img/teensy_install.jpg]
Bread baord wires are used to connect Teensy++.
![doc/HHKB_img/teensy_wiring.jpg]
![doc/HHKB_img/connector_contact.jpg]
###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)

View File

@ -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

32
keyboard/hhkb/iwrap.txt Normal file
View File

@ -0,0 +1,32 @@
iWRAP
-----
+---------------+ WT12
5V | ATmega168 | 5V/3.3V~~~~
+-----+---|Vcc,AVCC PC4|---/--->iWRAP(RxD)
USB | C3 | PC5|<--/----iWRAP(TxD)
~~~ | + | |
5V <--BATT + GND | | 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 12MHz
SW: Push Switch(Optional)
BATT: Li-Po Battery, Battery Charger and Voltage Regulator(5V and 3.3V).