NISHIO Hirokazu[Translate]
Ergodox
Ergodox EZに関する情報を未来の自分のためにまとめる。

これは何?
回路図とファームウェアが公開されているキーボード
Atmega32U4
右手と左手が別れていて、間の通信はI2C
物理的には4極ステレオケーブルで接続されている
先端を1として、4がGND。回路図的には1からSCL, SDA, VCCだと思うのだけど未検証
VCCは5V
I2Cエキスパンダが両側についている

ソース

:
$ cd /home/nishio/ergodox/qmk_firmware/keyboards/ergodox $ make nishio

!2C関連
keyboards/ergodox/ez/i2cmaster.h
keyboards/ergodox/ez/twimaster.c

回路図
僕が買ったErgodox EZの基板は2260
中を開けて確認した
中を開けるときは裏のシールを剥がす

ファーム読解
keyboard_task
c
/* * Do keyboard routine jobs: scan mantrix, light LEDs, ... * This is repeatedly called as fast as possible. */ void keyboard_task(void) {...
中で matrix_scan(); を呼びまくっている
matrix_scan
左側のキーボードがつながってるかどうか接続を挑戦してみてる
c
uint8_t matrix_scan(void) { if (mcp23018_status) { // if there was an error if (++mcp23018_reset_loop == 0) { // since mcp23018_reset_loop is 8 bit - we'll try to reset once in 255 matrix scans // this will be approx bit more frequent than once per second print("trying to reset mcp23018\n"); mcp23018_status = init_mcp23018(); if (mcp23018_status) { print("left side not responding\n"); } else { print("left side attached\n"); ergodox_blink_all_leds(); } } }
init_mcp23018

deleyのやりかた
c
_delay_ms(50);

デバッグコンソール
CDC
USBの上でR232Cが走る
デバッグコンソール
デバイスが見つからない
ソース読んだらhid = rawhid_open_only1(0, 0, 0xFF31, 0x0074);してreadしてる
これの実装はここにある

LEDデバッグ
ergodox_right_led_1_on();
ergodox_led_all_off();
ergodox_led_all_set(LED_BRIGHTNESS_HI);


右側のみ、通常接続では1が半分つく
ケーブルを抜くと1が消える
その後さしても戻らない
右側のみで起動して、ブレッドボードをさすと1が消える
c
void init_7seg(void) { ergodox_led_all_off(); ergodox_led_all_set(LED_BRIGHTNESS_HI); i2c_init(); ergodox_right_led_2_on(); i2c_start(0x70); ergodox_right_led_3_on(); i2c_write(0x21); i2c_stop(); _delay_ms(10); i2c_start(0x70); i2c_write(0x81); i2c_stop(); _delay_ms(10); i2c_start(0x70); i2c_write(0xEF); i2c_stop(); _delay_ms(10); ergodox_right_led_1_on(); }

TRRS
グランドは正しそう
枝付きバスは4つが4つに正しく導通していることを確認済み
TRRS順で緑黒緑黒、1と2にシールを貼って置いた
VCCとGNDだけLEDにつないだ状態でI2Cバスとして機能しなくなる
GNDは正しそう
VCCを3に指すとバスが機能しなくなる
抜くと戻る
2に指すと機能しなくなり、抜いても復活しない
1に指すとバスが機能する
一歩進んだ!
Raspiから蹴ってみて7セグは生きてることを確認済み
Raspiを左手キーボードに接続してi2cdetect -y 1して0x20にいることを確認済み
この時SDAが2である
それに合わせて配線して、i2cdetectで0x20と0x70が見つかることを確認済み

レジスタで直接LEDを操作
LED 1 ON
inline void ergodox_right_led_1_on(void) { DDRB |= (1<<5); PORTB |= (1<<5); }
LED 2
DDRB |= (1<<6); PORTB |= (1<<6);
LED 3
DDRB |= (1<<7); PORTB |= (1<<7);

ロジアナ
1bitずれてる



ErgoDoxでマクロを使う - Qiita
💥🍣emojiキーを設定しよう🍣💥 - Qiita
I2C

"Engineer's way of creating knowledge" the English version of my book is now available on [Engineer's way of creating knowledge]

(C)NISHIO Hirokazu / Converted from [Scrapbox] at [Edit]