Zuruzuru Blog 🍜< ズルズル
October 17, 2020
Lily58にThinkPadのトラックポイントをつける
自作キーボードの Lily58 に ThinkPad のトラックポイントをつけました.
デバイス
まずジャンク品の ThinkPad を購入して,トラックポイントの基盤部分を取り出しました.
ThinkPad のトラックポイントにもいくつか型があるみたいで, このサイトに一覧が載っているので,自分の基盤のピン情報を確認しました.
僕のトラックポイントは T400 という型でした.
今回の方針として,クリックボタン機能をキーに割り当てて,トラックポイントはカーソル機能だけ使おうと思うので,使用するのはクロック,データ,電源(VCC と GND),リセットの 5 つのピンだけになります. 今回は,ProMicro もトラックポイントも 5V 動作であったため,変圧する必要がありませんでした.
先ほどのサイトに,ProMicro で使用する際の回路図をのせてくれているので ,それの通りに回路を実装します.
最初はこのくらい大きくなってしまったのですが,
ここまで小型化できました.
ソフトウェア
QMK Firmwareを直接編集します. すでにps2 形式のマウスがサポートされているのでドキュメント通りに実装すれば終わりです.
今回は,Lily58 で OLED に使用しているピンを割り当てたいので,公式では非推奨の Busywait バージョンの方法で実装します.
また,トラックポイントは左手につけるので左手の rules.mk と config.h を編集します.
まず,PS2Mouse を有効化して,OLED を無効化します.
rules.mk
PS2_MOUSE_ENABLE = yes
PS2_USE_BUSYWAIT = yes
OLED_DRIVER_ENABLE= no
たまたま使用しているピンが D1 と D2 だったので公式の例通りの実装になります. ここら辺は ProMicro の回路図とキーボードの配線パターンを見ればどのピンが使用されているかわかります.
config.h
#ifdef PS2_USE_BUSYWAIT
# define PS2_CLOCK_PORT PORTD
# define PS2_CLOCK_PIN PIND
# define PS2_CLOCK_DDR DDRD
# define PS2_CLOCK_BIT 1
# define PS2_DATA_PORT PORTD
# define PS2_DATA_PIN PIND
# define PS2_DATA_DDR DDRD
# define PS2_DATA_BIT 2
#endif
以下のように角度を指定して,トラックポイントの軸を回転することもできるのでデバイスに好きな向きで取り付けられます.
config.h
#define PS2_MOUSE_ROTATE 270
プログラムがかけたら ProMicro に焼いて完成です.
完成
自分はまだないですが,Busywait バージョンでは,時々キーの取りこぼしがあるみたいなので 時間があるときに USART か Interrupt バージョンに実装し直したいと思います.