123 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			123 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| PS/2 to USB keyboard converter
 | |
| ==============================
 | |
| This firmware converts PS/2 keyboard protocol to USB and supports only Scan Code Set 2.
 | |
| This will works on USB AVR(ATMega32U4, AT90USB) or V-USB(ATMega168, 328...).
 | |
| 
 | |
| 
 | |
| Features
 | |
| --------
 | |
| Mouse keys
 | |
|     You can emulates mouse move and button click using keyboard.
 | |
| System/Media control
 | |
|     You can sends Power event, Volume down/up and Mute.
 | |
| USB NKRO(actually 120KRO+8Modifiers)
 | |
|     You can tolggles NKRO feature.
 | |
| Keymap customization
 | |
|     You can customize keymaps easily by editing source code. See keymap.c.
 | |
| 
 | |
| 
 | |
| PS/2 signal handling implementations
 | |
| ------------------------------------
 | |
| Following three methods are used to implement PS/2 signal handling.
 | |
| a. Simple and stupid busy-wait(ps2.c)
 | |
|     This is expected to implemented with portable C code for reference.
 | |
| b. Interrupt driven(ps2.c)
 | |
|     Uses external interrupt to detect falling edge of clock line.
 | |
| c. USART hardware module(ps2_usart.c)
 | |
|     Uses AVR USART engine to recevie PS/2 signal. Recomended and default.
 | |
|     This is required to work with V-USB, preceding two methods tend to
 | |
|     miss signal edges while V-USB handles USB.
 | |
| 
 | |
| To select method edit Makefile.
 | |
| 
 | |
| 
 | |
| Connect Wires
 | |
| -------------
 | |
| In case of Teensy2.0(ATMega32U4):
 | |
| 0. Connect Vcc and GND.
 | |
| 1. Connect Clock and Data line. 
 | |
|     For a. Clock is on PF0 and Data on PF1.
 | |
|     For b. Clock is on PD1 and Data on PD2.
 | |
|     For c. Clock is on PD5 and Data on PD2.
 | |
| 2. Optionally you need pull-up register. 1K-10K Ohm is OK.
 | |
| 
 | |
| To change pin configuration edit config.h.
 | |
| 
 | |
| 
 | |
| Build Frimware
 | |
| --------------
 | |
| 1. Edit Makefile for build options and MCU setting.
 | |
|     Use 'atmega32u4' for Teensy 2.0 or 'at90usb1286' for Teensy++ 2.0.
 | |
| 2. make
 | |
|     Just type `make` in a terminal.
 | |
|     Use `-f Makefile.vusb` option to build V-USB converter.
 | |
|     Use `-f Makefile.jis` option to use JIS keyboard.
 | |
| 3. program MCU.
 | |
|     In case of Teensy use `Teensy Loader`.(http://www.pjrc.com/teensy/loader.html)
 | |
|     Otherwise you want to use `avrdude` or `dfu-programmer`.
 | |
| 
 | |
| 
 | |
| Demonstration of Features
 | |
| -------------------------
 | |
| In default configuration, you can try several keymaps, mousekeys and USB NKRO.
 | |
| Use following magic key combinations to enable some features.
 | |
| 
 | |
| keymaps and NKRO:
 | |
|     Magic+0:    Qwerty with mousekeys(default)
 | |
|     Magic+1:    Qwerty without mousekeys
 | |
|     Magic+2:    Colemak
 | |
|     Magic+3:    Dvorak
 | |
|     Magic+4:    Workman
 | |
|     Magic+N:    toggles NKRO/6KRO(6KRO by default)
 | |
|     Magic+Esc:  sends Power Event(Power button)
 | |
| 
 | |
|     where Magic=(LShift+RShift) or (LControl+RShift)
 | |
| 
 | |
| Fn layer function:
 | |
|     Fn0+(hjkl): Mousekey move(vi cursor like)
 | |
|     Fn0+(yuio): Mouse wheel(left,down,up,right)
 | |
|     Fn0+space:  Mouse left button
 | |
|     Fn0+(mnb):  Mouse buttons(m=left, n=right, b=middle)
 | |
|     Fn0+(zxc):  Media control(Volup, Voldown, Mute)
 | |
|     Fn1+(hjkl): Cursor move(vi cursor like)
 | |
|     Fn1+(nm,.): Cursor move(Home,PageDown,PageUp,End)
 | |
| 
 | |
|     where Fn0=;, Fn1=/
 | |
| 
 | |
| 
 | |
| Keymap
 | |
| ------
 | |
| You can change a keymap by editing code of keymap. See common/keycode.h for key symbols.
 | |
| 
 | |
| 
 | |
| V-USB Support
 | |
| -------------
 | |
| You can also use this converter on ATmega(168/328) with V-USB instead of Teensy.
 | |
| The converter on V-USB lacks some features for now: USB NKRO and System/Media control.
 | |
| 
 | |
| Circuit
 | |
| -------
 | |
|                 +---+   +---------------+
 | |
| USB            GND  |   |   ATmega168   |
 | |
| ===                 C3  |               |
 | |
| 5V <-------+--------+---|Vcc,AVCC       |        PS/2
 | |
|            R1           |               |        ====
 | |
| D- <----+--+-----R2-----|INT1        RXD|------->DATA
 | |
| D+ <----|---+----R3-----|INT0        XCK|------->CLOCK
 | |
|         Z1  Z2          |               |      ->5V
 | |
| GND<----+---+--+--+-----|GND            |      ->GND
 | |
|                |  |     |               |
 | |
|                |  C2-+--|XTAL1          |
 | |
|                |     X1 |               |
 | |
|                +--C3-+--|XTAL2          |
 | |
|                         +---------------+
 | |
| R1:     1.5K Ohm
 | |
| R2,R3:  68 Ohm
 | |
| Z1,Z2:  Zenner 3.6V
 | |
| C1,C2:  22pF
 | |
| C3:     0.1uF
 | |
| X1:     Crystal 20MHz(16MHz/12MHz)
 | |
| 
 | |
| 
 | |
| EOF
 |