The LUFA feature can prevent converter's ISR from handing signal instantly. The interrupt can block a while for Standard Device Requests and 500-1000us for keyboard LED report. |
||
|---|---|---|
| .. | ||
| binary | ||
| config.h | ||
| config_mbed.h | ||
| keymap_common.h | ||
| keymap_jis.c | ||
| keymap_plain.c | ||
| keymap_spacefn.c | ||
| led.c | ||
| main.cpp | ||
| Makefile | ||
| Makefile.32u4 | ||
| Makefile.mbed | ||
| Makefile.rev1 | ||
| Makefile.rev2 | ||
| Makefile.vusb | ||
| matrix.c | ||
| README.md | ||
| unimap_plain.c | ||
| unimap_trans.h | ||
| usbconfig.h | ||
PS/2 to USB keyboard converter
This firmware converts PS/2 keyboard protocol to USB.(It supports Scan Code Set 2.)
You can discuss about this converter here.
https://geekhack.org/index.php?topic=14618.0
Preassembled TMK PS/2-USB converter is available here.
https://geekhack.org/index.php?topic=72052.0
Build Firmware
For TMK converter Rev.2:
$ make -f Makefile.rev2 clean
$ make -f Makefile.rev2 KEYMAP=plain
To program firmware push the button on converter and run:
$ make -f Makefile.rev2 KEYMAP=plain dfu
For TMK converter Rev.1 use Makefile.rev1 instead.
If your use DIY converter with ATMega32u4 board you can use Makefile.32u4, but note that progarmming with 'dfu' may not work for your converter.
Build your own converter
Use ATMega32u4 as controller and Makefile.32u4 to build firmware.
- Wire Vcc and GND properly.
- Connect Clock to
PD1and Data toPD0line. (Compatible to Soarer's converter pin configuration) - You need pull-up resistors on both signal lines. 1K-10K Ohm would be fine.
You can configure controller and pin configurations in Makefile and config.h.
Keymap
To define your own keymap copy unimap_plain.c to unimap_<name>.c and edit it. Or just edit unimap_plain.c directly.
See wiki pages and documents.
https://github.com/tmk/tmk_keyboard/wiki
PS/2 signal handling implementations
Following three methods are available to implement PS/2 signal handling.
- Interrupt Uses pin interrupt to detect falling edge of clock line. Recommended. (ps2_interrupt.c)
- Busywait Implementation with portable C code for reference. (ps2_busywait.c)
- USART Uses AVR USART hardware engine to receive PS/2 signal. You must use this fothis for V-USB. (ps2_usart.c)
TMK converter rev1 uses USART and rev2 uses Interrupt for reference.
You can change method by editing Makefile but not needed in most case.
V-USB Support
With V-USB you can use this converter on ATmega(168/328). Use Makefile.vusb to build firmeware. Not supported actively anymore.
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)