Improve documentation
This commit is contained in:
		
							parent
							
								
									16a583d7fd
								
							
						
					
					
						commit
						208f6d7f91
					
				
					 4 changed files with 201 additions and 233 deletions
				
			
		| 
						 | 
					@ -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
									
								
							
							
						
						
									
										135
									
								
								keyboard/hhkb/README.md
									
										
									
									
									
										Normal 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)
 | 
				
			||||||
| 
						 | 
					@ -1,67 +1,16 @@
 | 
				
			||||||
Alternative Controller for HHKB pro
 | 
					Internal of HHKB pro
 | 
				
			||||||
===================================
 | 
					=====================
 | 
				
			||||||
I want to add vi cursor and mouse keys to HHKB. Original HHKB controller is not programmable and
 | 
					HHKB pro has MCU and some chips on separate two PCBs.
 | 
				
			||||||
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.
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
This is just a proof of concept for replacing controller of HHKB, not a complete firmware.
 | 
					Controller PCB
 | 
				
			||||||
 | 
					--------------
 | 
				
			||||||
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:
 | 
					 | 
				
			||||||
    M38K07M4    Renesas MCU with USB function
 | 
					    M38K07M4    Renesas MCU with USB function
 | 
				
			||||||
                http://documentation.renesas.com/eng/products/mpumcu/rej03b0192_38k0ds.pdf
 | 
					                http://documentation.renesas.com/eng/products/mpumcu/rej03b0192_38k0ds.pdf
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    (HHKB_controller.jpg)
 | 
					    (HHKB_controller.jpg)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Keyswitch PCB:
 | 
					Keyswitch PCB
 | 
				
			||||||
 | 
					-------------
 | 
				
			||||||
    HC4051      Analog Multiplexer: select a row line.
 | 
					    HC4051      Analog Multiplexer: select a row line.
 | 
				
			||||||
                http://www.alldatasheet.com/datasheet-pdf/pdf/203989/KODENSHI/KK74HC4051A.html
 | 
					                http://www.alldatasheet.com/datasheet-pdf/pdf/203989/KODENSHI/KK74HC4051A.html
 | 
				
			||||||
    LS145       BCD Decoder: select a column line.
 | 
					    LS145       BCD Decoder: select a column line.
 | 
				
			||||||
| 
						 | 
					@ -76,13 +25,16 @@ Keyswitch PCB:
 | 
				
			||||||
    (HHKB_TP1684.jpg)
 | 
					    (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
 | 
					    Keyswitch PCB connector                                 Teensy++ pins
 | 
				
			||||||
    -------------------------------------------------------------------------------
 | 
					    -------------------------------------------------------------------------------
 | 
				
			||||||
     1  Vcc(5V)                                             5V
 | 
					     1  Vcc(5V)   Not exist on Pro2                         5V
 | 
				
			||||||
     2  Vcc(5V)
 | 
					     2  Vcc(5V)                                             5V
 | 
				
			||||||
     3  Vcc(5V)
 | 
					     3  Vcc(5V)                                             5V
 | 
				
			||||||
     4  TP1684    KEY: Low(0) when key pressed              PE6 input(with pullup)
 | 
					     4  TP1684    KEY: Low(0) when key pressed              PE6 input(with pullup)
 | 
				
			||||||
     5  TP1684    KEY_PREV: assert previous key state???    PE7 output
 | 
					     5  TP1684    KEY_PREV: assert previous key state???    PE7 output
 | 
				
			||||||
     6  HC4051    A(bit0) select 8 rows(0 to 7)             PB0 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
 | 
					    10  LS145     B(bit1)                                   PB4 output
 | 
				
			||||||
    11  LS145     C(bit2)                                   PB5 output
 | 
					    11  LS145     C(bit2)                                   PB5 output
 | 
				
			||||||
    12  LS145     D(enable) Low(0) enable selected column   PB6 output
 | 
					    12  LS145     D(enable) Low(0) enable selected column   PB6 output
 | 
				
			||||||
    13  GND
 | 
					    13  GND                                                 GND
 | 
				
			||||||
    14  GND
 | 
					    14  GND                                                 GND
 | 
				
			||||||
    15  GND                                                 GND
 | 
					    15  GND       Not exist on Pro2                         GND
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    NOTE: guessing pin5(KEY_PREV) may work for hysteresis of capacitive sensing.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    (HHKB_connector.jpg)
 | 
					    (HHKB_connector.jpg)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -104,7 +58,7 @@ Keyswitch matrix
 | 
				
			||||||
60 keyswitches in 8*8 matrix. It is ghost-free and bounce-free.
 | 
					60 keyswitches in 8*8 matrix. It is ghost-free and bounce-free.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      COL 0     1       2       3       4       5       6       7
 | 
					      COL 0     1       2       3       4       5       6       7
 | 
				
			||||||
ROW ---------------------------------------------------------------
 | 
					    ROW ---------------------------------------------------------------
 | 
				
			||||||
      0|  2     q       w       s       a       z       x       c
 | 
					      0|  2     q       w       s       a       z       x       c
 | 
				
			||||||
      1|  3     4       r       e       d       f       v       b
 | 
					      1|  3     4       r       e       d       f       v       b
 | 
				
			||||||
      2|  5     6       y       t       g       h       n       _NONE_
 | 
					      2|  5     6       y       t       g       h       n       _NONE_
 | 
				
			||||||
| 
						 | 
					@ -116,6 +70,7 @@ ROW ---------------------------------------------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Matrix diagram:
 | 
					Matrix diagram:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
             +-------------------------+-+-+-+-+-+-+-+     Vcc
 | 
					             +-------------------------+-+-+-+-+-+-+-+     Vcc
 | 
				
			||||||
             |bias control?            - - - - - - - -     ---
 | 
					             |bias control?            - - - - - - - -     ---
 | 
				
			||||||
             |                  3.9K*8 R R R R R R R R      |
 | 
					             |                  3.9K*8 R R R R R R R R      |
 | 
				
			||||||
| 
						 | 
					@ -141,7 +96,8 @@ Matrix diagram:
 | 
				
			||||||
                    to controller
 | 
					                    to controller
 | 
				
			||||||
                                    
 | 
					                                    
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Signals charts:
 | 
					Signals charts
 | 
				
			||||||
 | 
					--------------
 | 
				
			||||||
    While pressing space bar, watched HHKB original controller signals by logic analyzer.
 | 
					    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.
 | 
					    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.
 | 
					    A key is scaned every about 15ms, so scan rate is 66Hz.
 | 
				
			||||||
| 
						 | 
					@ -157,7 +113,8 @@ Signals charts:
 | 
				
			||||||
    (HHKB_chart2.jpg)
 | 
					    (HHKB_chart2.jpg)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Matrix scan pseudo code:
 | 
					Matrix scan pseudo code
 | 
				
			||||||
 | 
					-----------------------
 | 
				
			||||||
    for (row: 0-7) {
 | 
					    for (row: 0-7) {
 | 
				
			||||||
        SELECT_ROW(row);        // set HC4051(A,B,C)
 | 
					        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
 | 
					EOF
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										32
									
								
								keyboard/hhkb/iwrap.txt
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								keyboard/hhkb/iwrap.txt
									
										
									
									
									
										Normal 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).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue