ErgoDash Build Log 3

このほど、 ErgoDash を組み立てました。

最終的にはちゃんと組み立ては終了し、実際に使い始めています。もしErgoDashを作ってみようかな、とお思いの方が今後いらっしゃった際に、僕の経験が少しでもお役に立てるように、Build Logを日々残しておきました。このエントリは、その第3回です。

  1. ErgoDash Build Log 1
  2. ErgoDash Build Log 2
  3. ErgoDash Build Log 3
  4. ErgoDash Build Log 4
  5. ErgoDash Build Log 5
  6. ErgoDash Build Log 6
  7. ErgoDash Build Log 7
  8. ErgoDash Build Log 8
  9. ErgoDash Build Log 9
  10. ErgoDash Build Log 10

2020/08/21

今日は、ProMicro のコネクタのモゲ対策に取り掛かります。ダイソーで買ってきたエポキシ2液混合タイプの接着剤を使います。

まず、それぞれの液を出します。

つまようじで、混ぜ混ぜします。

コネクタの周りに「盛って」行きます。混ぜた直後に結構ドロドロだったりするので、塗る、というよりは、盛る、って感じです。

1つ目が盛り終わりました。

さて2つ目に取り掛かろう、と思った時には、ダンボール上の接着剤は「最初よりもかなり固まってきている」状態でした。約10分で固まるタイプなので「そうは簡単に固まらないだろう」と思っていましたが、3,4分後には結構なドロドロになってて、糸も引き始めます。

2つ目も終わりましたが、1つ目と比べて接着剤の扱いが固まってきてしまって難しかったため、ちょっと汚くなってしまいました。とはいえ、コネクタの中にまで入ってしまったとか、ピンを刺す穴が埋まってしまったとか、そういうことはなさそうなので、大丈夫かなと思ってます。

数時間放置して、完全に固まるのを待ってから、コネクタを抜き差ししてみたいと思います。

4時間後くらいに、Pro MicroにUSBケーブルを挿してみました。なるほど、きつい!結構な力を入れないと、両方とも入ってくれなかったです。幸いにも、接着剤がちゃんと効いたのか、コネクタがもげてしまうような不安定さは感じませんでしたが、これは何も対処せずにケーブル挿したら、一発目でもげてしまったかもしれないなぁ、と思いました。

コネクタの補強もできたので、このPro Microにファームウェアを書き込んでみたくなりました。そこで、手元の自作PCで動いているKubuntu 20.04に、Qmk FirmwareをPro Microに書き込む環境を作ってみたいと思います。

Terminalから、以下のコマンドを実行しました。

$ mkdir keyboard
$ cd keyboard
$ git clone --recurse-submodules https://github.com/qmk/qmk_firmware
$ docker run --rm -v $PWD/qmk_firmware:/qmk_firmware qmkfm/qmk_firmware make ergodash/rev1:default

おおお、なにやらMakeが進んでいきます。

QMK Firmware 0.9.54
Making ergodash/rev1 with keymap default

avr-gcc (GCC) 5.4.0
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Compiling: keyboards/ergodash/ergodash.c                                                            [OK]
Compiling: keyboards/ergodash/rev1/rev1.c                                                           [OK]
Compiling: keyboards/ergodash/rev1/keymaps/default/keymap.c                                         [OK]
Compiling: quantum/quantum.c                                                                        [OK]
Compiling: quantum/keymap_common.c                                                                  [OK]
Compiling: quantum/keycode_config.c                                                                 [OK]
Compiling: quantum/matrix_common.c                                                                  [OK]
Compiling: quantum/split_common/matrix.c                                                            [OK]
Compiling: quantum/debounce/sym_g.c                                                                 [OK]
Compiling: quantum/split_common/split_util.c                                                        [OK]
Compiling: quantum/split_common/transport.c                                                         [OK]
Compiling: quantum/process_keycode/process_space_cadet.c                                            [OK]
Compiling: quantum/process_keycode/process_magic.c                                                  [OK]
Compiling: quantum/process_keycode/process_grave_esc.c                                              [OK]
Compiling: drivers/avr/i2c_master.c                                                                 [OK]
Archiving: .build/obj_ergodash_rev1_default/i2c_master.o                                            [OK]
Compiling: drivers/avr/i2c_slave.c                                                                  [OK]
Archiving: .build/obj_ergodash_rev1_default/i2c_slave.o                                             [OK]
Compiling: drivers/avr/serial.c                                                                     [OK]
Archiving: .build/obj_ergodash_rev1_default/serial.o                                                [OK]
Compiling: tmk_core/common/host.c                                                                   [OK]
Compiling: tmk_core/common/keyboard.c                                                               [OK]
Compiling: tmk_core/common/action.c                                                                 [OK]
Compiling: tmk_core/common/action_tapping.c                                                         [OK]
Compiling: tmk_core/common/action_macro.c                                                           [OK]
Compiling: tmk_core/common/action_layer.c                                                           [OK]
Compiling: tmk_core/common/action_util.c                                                            [OK]
Compiling: tmk_core/common/print.c                                                                  [OK]
Compiling: tmk_core/common/debug.c                                                                  [OK]
Compiling: tmk_core/common/sendchar_null.c                                                          [OK]
Compiling: tmk_core/common/util.c                                                                   [OK]
Compiling: tmk_core/common/eeconfig.c                                                               [OK]
Compiling: tmk_core/common/report.c                                                                 [OK]
Compiling: tmk_core/common/avr/suspend.c                                                            [OK]
Compiling: tmk_core/common/avr/timer.c                                                              [OK]
Compiling: tmk_core/common/avr/bootloader.c                                                         [OK]
Assembling: tmk_core/common/avr/xprintf.S                                                           [OK]
Compiling: tmk_core/common/magic.c                                                                  [OK]
Compiling: tmk_core/protocol/lufa/lufa.c                                                            [OK]
Compiling: tmk_core/protocol/usb_descriptor.c                                                       [OK]
Compiling: tmk_core/protocol/lufa/outputselect.c                                                    [OK]
Compiling: lib/lufa/LUFA/Drivers/USB/Class/Common/HIDParser.c                                       [OK]
Compiling: lib/lufa/LUFA/Drivers/USB/Core/AVR8/Device_AVR8.c                                        [OK]
Compiling: lib/lufa/LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.c                                [OK]
Compiling: lib/lufa/LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.c                                      [OK]
Compiling: lib/lufa/LUFA/Drivers/USB/Core/AVR8/Host_AVR8.c                                          [OK]
Compiling: lib/lufa/LUFA/Drivers/USB/Core/AVR8/PipeStream_AVR8.c                                    [OK]
Compiling: lib/lufa/LUFA/Drivers/USB/Core/AVR8/Pipe_AVR8.c                                          [OK]
Compiling: lib/lufa/LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.c                                 [OK]
Compiling: lib/lufa/LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.c                                  [OK]
Compiling: lib/lufa/LUFA/Drivers/USB/Core/ConfigDescriptors.c                                       [OK]
Compiling: lib/lufa/LUFA/Drivers/USB/Core/DeviceStandardReq.c                                       [OK]
Compiling: lib/lufa/LUFA/Drivers/USB/Core/Events.c                                                  [OK]
Compiling: lib/lufa/LUFA/Drivers/USB/Core/HostStandardReq.c                                         [OK]
Compiling: lib/lufa/LUFA/Drivers/USB/Core/USBTask.c                                                 [OK]
Linking: .build/ergodash_rev1_default.elf                                                           [OK]
Creating load file for flashing: .build/ergodash_rev1_default.hex                                   [OK]
Copying ergodash_rev1_default.hex to qmk_firmware folder                                            [OK]
Checking file size of ergodash_rev1_default.hex                                                     [OK]
 * The firmware size is fine - 17912/28672 (62%, 10760 bytes free)

qmk_firmware ディレクトリの中に、めでたく ergodash_rev1_default.hex ファイルができていました。ただ、本来は qmk_firmware ディレクトリの下にある util/docker_build.sh を使うのが正解っぽいです。

では、そのままPro Microに書き込みまでやってしまいます。まず、PCとPro MicroをUSBケーブルでつなぎます。すると、Pro MicroのLEDが「緑1つ」と「赤2つ」が点灯します。この状態で、先ほど見つけた util/docker_build.sh ファイルを使って、以下のようにコマンドを実行します。sudo を忘れずに。

$ sudo ./util/docker_build.sh ergodash/rev1:default:avrdude

すると、以下の表示で止まります。

QMK Firmware 0.9.54
Making ergodash/rev1 with keymap default and target avrdude

avr-gcc (GCC) 5.4.0
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Size before:
   text	   data	    bss	    dec	    hex	filename
      0	  17912	      0	  17912	   45f8	.build/ergodash_rev1_default.hex

Copying ergodash_rev1_default.hex to qmk_firmware folder                                            [OK]
Checking file size of ergodash_rev1_default.hex                                                     [OK]
 * The firmware size is fine - 17912/28672 (62%, 10760 bytes free)
Detecting USB port, reset your controller now.....................................................

ずっと待ってる状態になる(ドット文字が増えていく)ので、Pro MicroのUSBコネクタ付近の右列の2番めと3番目をピンセットでショートさせます。これにより、リセットされたことになります。うまくいけば、デバイスが発見されて、書き込みが始まります。

Device /dev/ttyACM0 has appeared; assuming it is the controller.
Waiting for /dev/ttyACM0 to become writable.

Connecting to programmer: .
Found programmer: Id = "CATERIN"; type = S
    Software Version = 1.0; No Hardware Version given.
Programmer supports auto addr increment.
Programmer supports buffered memory access with buffersize=128 bytes.

Programmer supports the following devices:
    Device code: 0x44

avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.00s

avrdude: Device signature = 0x1e9587 (probably m32u4)
avrdude: NOTE: "flash" memory has been specified, an erase cycle will be performed
         To disable this feature, specify the -D option.
avrdude: erasing chip
avrdude: reading input file ".build/ergodash_rev1_default.hex"
avrdude: input file .build/ergodash_rev1_default.hex auto detected as Intel Hex
avrdude: writing flash (17912 bytes):

Writing | ################################################## | 100% 1.30s

avrdude: 17912 bytes of flash written
avrdude: verifying flash memory against .build/ergodash_rev1_default.hex:
avrdude: load data flash data from input file .build/ergodash_rev1_default.hex:
avrdude: input file .build/ergodash_rev1_default.hex auto detected as Intel Hex
avrdude: input file .build/ergodash_rev1_default.hex contains 17912 bytes
avrdude: reading on-chip flash data:

Reading | ################################################## | 100% 0.12s

avrdude: verifying ...
avrdude: 17912 bytes of flash verified

avrdude: safemode: Fuses OK (E:FB, H:D8, L:FF)

avrdude done.  Thank you.

検証もOKとなり、Thank you と表示されました。うまく書き込めたようです。同じことを、もう一つのPro Microにも行っておきます。

試しにPro MicroをUSBケーブルに挿し直すと、今度は赤のLEDは点灯せず、緑だけが点灯されるようになりました。

試しにmacbook proに挿してみたら、キーボードとして認識されて、キーボードの種類を識別するためのウィザードが無事両方のPro Microとも出てきました。ファームウェアの書き込みは成功したようです。

ここで、コンスルー(スプリングヘッダ)を基板に刺して、そこにPro Microを差し込み(ハンダ付けはせずに挿しただけ)、macbook pro に繋いでみました。

おおお、無事ErgoDashと認識されてる!

そして、キースイッチが刺さるピンをピンセットでショートさせます。Karabiner-Elementについてくるキーイベントを表示してくれるアプリがあるので、それで確かにキー入力がされるかどうか確認します。

あれ、一切来ない。。。

それもそのはず、Pro Microの表裏が逆でした。正しく挿し直します。

来たー!ちゃんとキーイベントが発生しました。やったぁ!

一通りキーをショートさせていったんですけど、どちらのPro Microとも、反応してくれないキーが存在しました。しかも、Pro Microそれぞれで別のキーが反応しない、という状況です。

全部キレイに反応してくれればよかったのですが、Pro Microをハンダ付けしていないので、すべてのピンがPro Microと接触してくれているのか、怪しいんですよね。特定のキーではなく、ある列がだめっていう感じなので、ダイオードのハンダ付け不良ではない気がしています。

横着してはダメそうです。愚直にテスターで全てのキースイッチとPro Microのピンの導通確認をしていきます。

抵抗を付けた面を上に、ハンダ付けした面を下にして机の上に置きます。そして、各キースイッチの端子に赤のプローブをあてて、Pro Microのピンに黒のプローブをあてます。Pro Microのピンに黒のプローブを次々にあてていって、導通するピンがあるかどうかをチェックしていきます。全部行った結果、全てのキースイッチの端子において、Pro Microのどれかのピンと導通していることを確認できました。その結果が、以下となります。

左から3列目の上から4つ目だけが、緑と黄色の左右が逆になってるのが、ものすごく気になります。配線図を見ていないので、間違いかどうかわからないけど、何はともあれ導通していることは確かめられたので、良かったかなと。ちなみに、上の図はErgoDashのGitHubリポジトリから持ってきたものだけど、おそらくPro Micro とタクトスイッチの記載は、左右逆かなと思います。

今日はPro Microにファームウェアを書けたし、導通確認もしたし、実際にPCにキーイベントを飛ばせたし、組み立ては進んでいないけどいろいろやった一日でした。明日からハンダ付けを再開します。

ErgoDash Build Log 4 に続く。。。

このエントリーをはてなブックマークに追加

関連記事

2023年のRemap

Remapにファームウェアビルド機能を追加しました

Google I/O 2023でのウェブ関連のトピック

2022年を振り返って

現在のRemapと今後のRemapについて