9keyビルドログ
9keyを作りました
9key: qmk_firmware/keyboards/9key at master · qmk/qmk_firmware
デフォルトのキーマップは以下のようになっています。
/* LAYER 0 * ,-----------------------. * | 1 | 2 | 3 | * |-------+-------+-------| * | 4 | 5/ENT | 6 | Dbl Tap 5 for Enter * |-------+-------+-------| * | 7/0 | 8 | 9/FN | 7/0 = Dbl Tap 7 for 0 - 9/FN = Hold 9 for FN * `-----------------------' */ /* LAYER 1 * ,-----------------------. * | ESC | + | - | * |-------+-------+-------| * | BSPC | * | / | * |-------+-------+-------| * | 00 | . | | * `-----------------------' */
5
のダブルタップでEnter
、7
のダブルタップで0
が入力されます。
また、9
キーと同時押しで、演算子やバックスペースも入力できます。
キーボードのダブルタップって今まで使ったことがなかったので新鮮でした。
回路図
配線の交差をなくしたかったためROWとpro microの結線を変更しています。
組み立て
— yskoht (@_yskoht) 2018年1月8日
ユニバーサル基板に電動ドリルで穴を開けて無理やりキースイッチを取り付けています。
スイッチは千石電商でばら売りされているのを買ってきました。
ファームウェア
QMKのkeyboards/9key/config.h
を変更して、ピンの順番とダイオードの方向(スキャンする方向)を修正。
diff --git a/keyboards/9key/config.h b/keyboards/9key/config.h index eee8407..3e03474 100644 --- a/keyboards/9key/config.h +++ b/keyboards/9key/config.h @@ -33,7 +33,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. #define MATRIX_COLS 3 /* 9Key PCB default pin-out */ -#define MATRIX_ROW_PINS { D1, D0, D4 } +#define MATRIX_ROW_PINS { D4, D0, D1 } #define MATRIX_COL_PINS { F4, F5, F6 } #define UNUSED_PINS @@ -45,7 +45,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. #define ws2812_DDRREG DDRD /* COL2ROW or ROW2COL */ -#define DIODE_DIRECTION COL2ROW +#define DIODE_DIRECTION ROW2COL #define TAPPING_TERM 200
ビルド・書き込み
書き込みのためにUSBaspを購入しました。
ビルド
$ make 9key:default
書き込み
$ sudo avrdude -p atmega32u4 -c usbasp -e -U flash:w:9key_default.hex
これで無事に動作しました。よかった。
参考
キーマップの変更
今現在、MiSTEL BAROCCO MD600を使っていてDELキーと矢印キーがないのが辛いので、キーマップを以下のように変更しました。
,-----------------------. | HOME | BSCP | DEL | |-------+-------+-------| | END | ↑ | ENT | |-------+-------+-------| | ← | ↓ | → | `-----------------------'
参考
ROW_PINS, COL_PINSについてのメモ
以下、QMKのピンの指定方法について自分用のメモです。
ピンはconfig.h
で指定される。
#define MATRIX_ROW_PINS { D4, D0, D1 } #define MATRIX_COL_PINS { F4, F5, F6 }
このD?
、F?
はコントローラのピンを表していて、pro microの回路図を見ると基板のどのピンに繋がっているのかがわかる。
D?
、F?
はquantum/config_common.h
で定義されていて、
例えばD4
は0x94
。
quantum/matrix.c
を見てみると、
MATRIX_ROW_PINS, MATRIX_COL_PINS
は
それぞれrow_pins, col_pins
に入れられて、
init_rows
の中でピンの初期化をしている。
static void init_rows(void) { for(uint8_t x = 0; x < MATRIX_ROWS; x++) { uint8_t pin = row_pins[x]; _SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF); // IN _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI } }
ここで出てくる_SFR_IO8
については以下に詳しく書かれている。
pinがD4
のとき、以下の動作をしていることになる。
uint8_t pin = 0x94; // #define D4 0x94 _SFR_IO8(9 + 1) &= ~_BV(4); // IN _SFR_IO8(9 + 2) |= _BV(4); // HI
一方、AVRのIOピンは<avr/io.h>
で定義されていて、<avr/iom32u4.h>
を見てみると以下のように記述されている。
#define DDRD _SFR_IO8(0x0A) #define PORTD _SFR_IO8(0x0B)
つまり、DDRD &= ~_BV(4);
でD4を入力にして、
PORTD |= _BV(4);
でプルアップしている。
これなら入門書でよく見る記述なので分かりやすい。
参考