- Home
- 一覧
- 雑記
-
[自キ]8mm厚の低背左手デバイスを手配線で作る
FDM3DP製のケースと手配線で自作キーボードを作ります。
デスクからプレートまでの厚さ8mmの薄型のFPSゲーム用左手デバイスです。
ゲーミングキーボードです。
カーブした配列やxiao rp2040を新しく採用しました。
設計方針
今回は手配線でゲーム用の左手デバイスを作ります。
以前制作したものから乗り換えられるモノを作ります。
あと銅箔テープ使ったら楽だよなとずっと思ってたのですが手配線キーボードを組む機会がなく放置していたのでそれをやっておきたいなというものです。
もう数年使用してきて愛着もあるものですが不満点もまああります。こんなんだし。
高さ
立体形状でパームレストもあり、高さがあるということです。
高さがあると現在のスライドデスクと相性が悪いことや、マウスを持つ右手と高低差ができてしまいます。
よって以前アクリル板を初めて使用した時と同じ構造で薄型のキーボードを作ります。薄くすることでパームレストも不要にします。
私は手配線のメリットは試作の早さと薄型化にあると思っています。
ピンを折り曲げた手配線でPCB分の厚さを浮かし、本体の厚み=スイッチの厚みにしたものです。
配列
配列としてはwasdがひし形になっており移動キーは打ちやすいのですが、その分数字キーがやや遠く感じられます。
FPSにおいて数字キー1, 2を薬指で、3, 4を人差し指で押します。
また人差し指でx, cを押します。
このことから、FPS向けのデバイスに関しては縦の運指に特化したカラムスタガードよりも、ロウスタッガードをベースとするほうが向いていると判断しました。
引き続きANSIに比べてzは左寄りに、xcは右寄りに配置することとします。
またWillowやGRINのようなカーブした配列に挑戦してみました。
キー密度が下がるので全体としてはキー配置が広がってしまいますが、やや押しにくい5, T, G等のキーの位置が下がり押しやすくなること、親指キーが全体的に上ずっていることを解消されることを期待します。
材料
3dpでケース作ればスイッチキーキャップ除いて材料費はマイコン+手元にあるものといった風で安い。
物理配列のデザイン
今回配列は19mmの四角をブロック化して配列決定、後に必要な14mm四角や爪部分等を追加し一斉適用しました。
ここら辺はどうするのが最適解なのかなかなかわからずです。使いやすい2dcadソフトがそもそも見つからない続けている。
カーブ配列の決定は手作業でちまちま動かしてしっくりくるまで試行錯誤しました。
ロウスタッガードとキー位置を比較すると端のキーが手前に下がってきています。
使用者によってキーボードの傾き具合は異なると思うので人によりそうですが
親指キーが下がってくることで指を伸ばし気味のスタイルの人にとってはキーが押しやすくなるのではなかろうか。
逆に手前に下がってきている分上のキーと下のキーとで遠くなってしまったと感じる人もいるかもしれない。
私としては、親指を伸ばさずにn, m, spc, hと6キーを操作することができて親指操作性が向上しました。
5, t, gあたりは指を伸ばす関係上誤打することもあったのですがそこらへんが下に下がり近くなったことで誤打が減ったと感じます。
ここは変更点ではありませんがz, c, vの位置が左右に開いたことで薬指と人差し指を内側に入れ込まずにスムーズに操作することができます。
マイコンにxiao rp2040を採用するためピンが11なため5×6で30キーのマトリクスに収めました。(ほかのマトリクス方式を採用すればもっとキー数は増やせますが)
組み立て
dxfファイルを出力してfusion360で適当に押し出してケース作ります。
とりあえず作ろうと思ったので何もこだわらずにプレートと容器をねじ止めする感じです。
出力したらキースイッチはめて接着剤で止めて配線していきます。
薄型化のためにピンを折り曲げておきます。
使用したスイッチは5pinスイッチですが、端の2pinとボトムの合わせするよりも取り除いたほうが楽なので取り除いてしまいました。
手配線で何がめんどくさかったかというと配線のはんだ付けです。
ワイヤーとワイヤーを保持してはんだとはんだごてを持ってはんだ付けをするのは腕が二本しかない人にとっては単純作業でもめんどくささがあります。またワイヤーははんだのノリがあまりよくないですからそこもちょっとめんどくさいです。
そこで銅箔 テープ
の出番です。貼ってしまえば手で保持する必要はありません。また銅箔ははんだののりが非常によくささっと作業できます。
これでダイオードのみをピンセットで持ちはんだ付けするだけで済みます。
やってることプリント基板の下位互換だと言われればそうだし強度とか知りません。
colの配線もペタペタ銅箔テープで行いましたが、パッドとして銅箔テープの切れ端を貼ってすずメッキ線でやるほうがよさそうです。
単純にはんだ付けの補助として銅箔テープは有用ですね
とても作業は楽でした。見た目をこだわりたいのでなければ空中配線<貼り付け配線なのではなかろうか。
xiao rp2040にetfe線をはんだ付けします。
xiao rp2040を嵌めて、colとrowにはんだ付けします。
デジタルテスター
ではんだ付けがちゃんとできていることを確認します。
なんか緩衝材にevaシート
貼り付けてみたり
ボトムケースと合わせて完成です。
3dpケースだしラフな設計なのでまあゆがみが出てます(ちゃんとデータ作れ)。ゴム足として液状のスーパーX
を使ってその歪みを均してしまいます
適当に塗りたくって、クッキングシートの上において固めて剥がせば平面だし完了です。
qmk firmware
rule.mk
空欄
config.h
空欄
info.json
{ "keyboard_name": "fd06", "manufacturer": "Tsuiha", "maintainer": "Tsuiha", "processor": "RP2040", "bootloader": "rp2040", "board": "GENERIC_RP_RP2040", "diode_direction": "ROW2COL", "features": { "mousekey": true, }, "build": { "debounce_type":"sym_eager_pk", "firmware_format": "uf2" }, "debounce":5, "matrix_pins": { "cols": ["GP3", "GP4", "GP2", "GP1", "GP0", "GP7"], "rows": ["GP6", "GP29", "GP28", "GP27", "GP26"] }, "usb": { "device_version": "0.0.3", "pid": "0x0012", "vid": "0x0121", "polling_interval":1 }, "layouts": { "LAYOUT": { "layout": [ {"label":"0", "x":0, "y":0}, {"label":"1", "x":1, "y":0}, {"label":"2", "x":2, "y":0}, {"label":"3", "x":3, "y":0}, {"label":"4", "x":4, "y":0}, {"label":"5", "x":5, "y":0}, {"label":"tab", "x":0, "y":1}, {"label":"q", "x":1, "y":1}, {"label":"w", "x":2, "y":1}, {"label":"e", "x":3, "y":1}, {"label":"r", "x":4, "y":1}, {"label":"t", "x":5, "y":1}, {"label":"caps", "x":0, "y":2}, {"label":"a", "x":1, "y":2}, {"label":"s", "x":2, "y":2}, {"label":"d", "x":3, "y":2}, {"label":"f", "x":4, "y":2}, {"label":"g", "x":5, "y":2}, {"label":"h", "x":6, "y":2}, {"label":"sft", "x":0, "y":3}, {"label":"z", "x":1, "y":3}, {"label":"x", "x":2, "y":3}, {"label":"c", "x":3, "y":3}, {"label":"v", "x":4, "y":3}, {"label":"b", "x":5, "y":3}, {"label":"ctrl", "x":0, "y":4}, {"label":"esc", "x":1, "y":4}, {"label":"n", "x":2, "y":4}, {"label":"space", "x":3, "y":4}, {"label":"m", "x":4, "y":4} ] } } }
qmk_firmware/docs/reference_info_json.md at master ?? qmk/qmk_firmwareOpen-source keyboard firmware for Atmel AVR and Arm USB families – qmk/qmk_firmwareqmk_firmware/data/schemas/keyboard.jsonschema at master ?? qmk/qmk_firmwareOpen-source keyboard firmware for Atmel AVR and Arm USB families – qmk/qmk_firmwareここらの公式ドキュメントとqmk_firmware内の他の人のデータ参考にすれば書けそうです。
最近のqmkは全部info.jsonに記述するようです。
“processor”: “RP2040”, “bootloader”: “rp2040”, “board”: “GENERIC_RP_RP2040”,
rp2040の使用を宣言します。
debounce_type”:”sym_eager_pk
デバウンスタイムをキー入力の後入れして実質デバウンスタイム0になります。
“firmware_format”: “uf2”
rp2040はhexファイルでなくuf2ファイルというのを使用します。
“matrix_pins”
xiao rp2040の場合マトリクスのピンはPの数字を入れればよいです。
“polling_interval”:1
ポーリングレートを1000hzにします。デフォルトが1000hzになっているという話も聞きましたがどうなんでしょう。そもキー入力だけであれば1000hzの恩恵を受けるのか?という話はありますが。
fd06.h
#pragma once #include "quantum.h" #define LAYOUT( \ K00, K01, K02, K03, K04, K05, \ K10, K11, K12, K13, K14, K15, \ K20, K21, K22, K23, K24, K25,K35, \ K30, K31, K32, K33, K34, K45, \ K40, K41, K42, K43, K44 \ ) \ { \ { K00, K01, K02, K03, K04, K05 }, \ { K10, K11, K12, K13, K14, K15 }, \ { K20, K21, K22, K23, K24, K25 }, \ { K30, K31, K32, K33, K34, K35 }, \ { K40, K41, K42, K43, K44, K45 } \ }
上にkeymap.cで使用する行列を、下にmatrixで指定した行列を記述し通し番号で対応を取ります。
keymap.c
#include QMK_KEYBOARD_H const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [0] = LAYOUT( KC_0, KC_1, KC_2, KC_3, KC_4, KC_5, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_J, KC_A, KC_S, KC_D, KC_F, KC_G,KC_H, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_LCTL, KC_ESC, KC_N, KC_M, KC_SPC ), [1] = LAYOUT( _______,_______,_______,_______,_______,_______, _______,_______,_______,_______,_______,_______, _______,_______,_______,_______,_______,_______,_______, _______,_______,_______,_______,_______,_______, _______,_______,_______,_______,_______ ), [2] = LAYOUT( _______,_______,_______,_______,_______,_______, _______,_______,_______,_______,_______,_______, _______,_______,_______,_______,_______,_______,_______, _______,_______,_______,_______,_______,_______, _______,_______,_______,_______,_______ ), [3] = LAYOUT( _______,_______,_______,_______,_______,_______, _______,_______,_______,_______,_______,_______, _______,_______,_______,_______,_______,_______,_______, _______,_______,_______,_______,_______,_______, _______,_______,_______,_______,_______ ) };
キーコードを自由に決めます。
qmk_firmware/docs/keycodes.md at master · qmk/qmk_firmwareOpen-source keyboard firmware for Atmel AVR and Arm USB families – qmk/qmk_firmwareとりあえずレイヤーなしにしましたが必要に応じて増やします。
QMKMSYSでコンパイルしてuf2ファイルを出力します。
xiao rp2040のbootボタンを押しながらpcに接続するとドライブのように認識されるのでuf2ファイルを突っ込みます。自動で再起動してキーボードとして認識するので動作確認しましょう。
反応しないキーや対応しないキーがあったらmatrixピンを見直したりはんだ不良の個所を探します。
rp2040だとちょっと頑張らないとremap対応できないようですがどうなんでしょう。
完成
model->FloppyKBD06:WLP-HWとか適当に型名をつけておきます。
もともとはusbはマイコンから引っ張ってきてtypecコネクタで出したかったのですがまあxiaoそのままでいいかという感じです。xiao小さくていいですね。これから使っていきたいと思います。
本体厚さ8mmと薄型で、ロープロスイッチのキーボードと同等の高さとなりました。よいです。
見栄えもコンパクトでかっこいいのではないでしょうか。
yushakobo fairyスイッチ 多くの市販キーボード搭載品よりも静かで軽く、とてもコスパいいスイッチと感じました。強く底打ちした時ぶにっとした感じがありますがまあ実用上問題ないので。
終わり
配列決めた後はちゃちゃっと作ったので完成度は高くありませんがいいものができたのではないでしょうか。
(手元のanycubic kobraに合わせてありますしこの通り不完全なデータですが)投げてあるので興味ある人は作っていただけたら嬉しいです配列は結構きれいにできたと思っているので。↓
Build software better, togetherGitHub is where people build software. More than 150 million people use GitHub to discover, fork, and contribute to over…目的としてまず手配線は薄型化に有効であるという話ができたのでよしとします。
またゲームで十分に使用できて薄いこととカーブした配列は有効だと感じました。
wootingやそれに続いて多く発表されている流行の応答性の高いキーボードとは方向性が異なりますが、MXでありながら薄型、0デバウンス、スイッチ選択の自由度、(人によるが)運指のしやすさ、とゲーム用途で選択肢に入るものができたと私は思っています。これでいえば費用7k程度で安いし。
配列に関しては今後に生かしたいところで、今まで完成度高いものをつくってきていないのもあるしゲーム用左手デバイスとしてもうちょっと詰めてみようかと思ったりもします。
-
[マウス]SOSPACER SS GRIPS V2 BETA レビュー
SOSPACER から発売されたマウスグリップ SS GRIPS V2 BETA を紹介します。
SS GRIPSはFPS等のゲームでゲーミングマウスの操作性を向上させるためのグリップテープ亜種のような製品で、シリコン製のチップをマウス表面に貼り付け使用します。
今まで各自が自作していた便利アイテムを製品化したような商品となります。Pulsar Gaming Gearsのマイクロバンジー
やエレコムのケーブルリフトのようなノリでしょう。
スペック
2023/2/25発送のロットになります。
SOSPACERのサイトで販売されており3組1300~1400円程度で販売されています。
色は赤黒の2色が展開されています。(V3では白も追加)
18mm x 8mm x 3.5mm程度のサイズです。
への字型で2個で1組となります。対称でないです。
トップの印字が異なり見分けることができます。まあ見ればわかりますが。
質感はハードな感じ。
内容物は3組、6片のグリップチップとアルコールで拭くやつ2つです。
接着力
両面テープはがっつりシリコンに貼り付いているわけでないので、交換用の両面テープついてるとありがたかったかもしれない。自前で用意すればよい話ですが。
またシリコンが結構ハードなこともあり、曲面に貼ることに適しません、浮きます。幾分かソフトな素材であれば使い勝手が良かったと思います。
貼り付けばぽろぽろ剝がれることもなく、貼り直しも利くので十分な粘着力と思います。
使用感
公式サイトでこのような例が紹介されています。マウスに貼って指の位置を固定する使い方です。
MBに貼る場合は指とマウスとの接地面積が増えて押しやすくなったりするのでしょうか。
私にはチップの盛り上がり方が急で、MBに貼る使い方ではあまり良い感触を得ることができませんでした。
もう少しなだらかであるか薄い形状であれば違ったかもしれませんが、人によるところだと思います。
そのほかプレイ中に指がどんどんズレていくような場合には素直に有効なのだと思います。
個人的には側面に貼るほうが良い感触を得ることができました。
g303等のくっきりと ハ の字型でなければマウスを手前に引き付ける感触を得られませんでしたが、チップを貼り付けることによってそうでないマウスでも感触を得られるようになりました。
おわり
購入はこちらから->https://sospacer.com/
現在個人輸入する必要(ポチるだけだけど)がありますが、ブランドが立ち上がった春ごろには代理店を通しての販売も考えているとのことなので国内で入手できるようになるかもしれません。
貼り付けるだけでフィット感を向上することができてよいのではないでしょうか。
まあ見たままの商品なんだからみりゃわかるじゃーんなんだよな。他に何か面白い使い方があったら教えてください。
こちら貼るだけでよいですが使っていると粘土等で自分でフィット感や遊びを決定して成形したくなってきますね。
次の記事:ゲーミングマウスの保管収納
-
[PC設定]メモリタイミング等のDRAM設定を行ってみる
先日購入したゲーミングPCのメモリタイミングを調整してみて、メモリ設定によってゲーム性能が上がるのか見てみます。
ゲーム性能の指標としてはベンチマークのスコアとその際のFPS値を使用します。
またメモリの設定を行うにあたり調べ学習をしました。それらを引用しまくったメモを張り付けます。
実際に行ったのはメモリOCではないです(1.35VもOCっちゃOCなのだろうけど)。タイミング調整のみです。
参考資料
参考というかパクリ元です。ここら辺を読んで、ちょろっとまとめたメモを作成しました。
なのでここよりこっちを見るとよいと思いますよ。
メモリOC・タイミング調整
ハリフーン (hurriphoon)さんのゆっくり解説動画。動画なので気楽にメモリのタイミング調整について学べます。今回のFPS値検証はハリフーンさんの結果を再現させているだけではあります。
ゲーム向けのメモリ設定の最適化・選び方について述べられています。
メモリの設定手順について解説しています。大体これに従って設定してみています。
諸タイミングが何を指しているか等、メモリ設定を解説しています。
仮想メモリ・レジストリ
メモリ関連のレジストリ公式ドキュメント
メモリ関連のレジストリについてまとめられています。
DRAMのしくみ
メモリって何?なざっくりとした読み物です
メモリの仕組みからタイミングとは何か解説しています
メモリについてデジタルな話をしています。
- https://www.micron.com/-/media/client/global/documents/products/technical-note/dram/tned03_gddr6.pdf
micronのテクニカルノートで検索すると専門的な話をしたものがいろいろあります。
安定性テスト
不安定な設定だと完走できずに落ちることがあるので簡単なテストに使えます
高い負荷をメモリに長時間かけエラーが出ないかテストします。
ほかにもいろいろあるぽいけど一杯やるのめんどくさいしいいかになってしまった
メモリタイミングと設定方法等
上記参考資料をパクって自分用にまとめたのです。
値の設定はBiosで行います。PCを起動したらF2を押しDRAMの設定を行います。
不明な単語は上記参考資料見たりすればいいのではないだろうか
安定性
条件を厳しくしていき動作が不安定にならないところに決定します。
安定して動作する中での最良の条件を見つけます。
下記手順ごとにOSが起動したらベンチマークを回し安定性をテストする。
簡易的に安定性を見る。不安定だと落ちる。
- cinebench r23 multi
- FF15bench
条件が固まってきたらprime95で長時間高負荷時の安定性を見る。
メモリ情報の確認
Thaiphoon Burnerで見れるらしい(環境では動作しなかった)
biosでinfomationから一部確認することができる
ダイの種類で詰めやすさが変わるらしい
シングルランクよりデュアルランクのほうが高速らしい
Voltage
標準は1.2V、XMP適用で1.35Vのものが多いと思います。
~1.5VはOCと言ってよいのではないでしょうか(1.35VもOCではあるのでしょうけど)
GEAR MODE
メモリコントローラのクロックを決定します。GEARMODE1はDRAMと同じクロックで動作し、2は半分で動作するようです。
ますGEARMODE1にします。
Clock
言うまでもないですがクロックが高いほうが高速で動作します。
タイミングAutoでクロックを上げていき起動しなくなる周波数を探り、使用するクロックを決定します。
timing
タイミングの実時間速さは何クロック使用するか、であるのでクロックの高さに依存します。
primary timing
- tCL
CAS latency (Column Address Strobe)
アクティブ化した行でアクティブ化した要求列のアドレスを読み込みデータを取得するまでの時間
tCLを不安定になるまで下げていき値を決定し設定します。 サイクル実時間は下記から求められます $$\sf{timing}\ast\frac{2000}{clock} [ns]$$ - tRCD
Row to Column Delay
行をアクティブ化した後、列をアクティブにするまでの時間
行アクティブ後列データ読み込みまでにかかる時間はtCL+tRCD
- tRP
Row Precharge Time
プリチャージ=非アクティブ化してから次の読み込み行をアクティブ化するまでの時間
読み取り後、非アクティブにし次の列アドレスをアクティブしようとするまでの時間
tRCD, tRPを同値で不安定になるまで下げていき値を決定し設定します。 - tRAS
Row Active Time
行をアクティブ化してから非アクティブまでの、行がアクティブである最小時間
通常tCL+tRP tRAS=tCL+tRPを最小値として設定し不安定なら上げていき値を決定し設定します。 - CR
Command Rate
コマンド送信回数。少ないほうが高速だが、複数回コマンドを送信すれが当然エラー率は下がる
クロックが割と高くなければ1で通るらしい
1から設定し、不安定なら上げ値を決定し設定します。 secondary timing
- tWR
Write Recovery Time
書き込み回復時間
書き込み終了後にバンクが非アクティブ化されるまでの時間
- tRTP
Read to Precharge Delay
読み取りから非アクティブ化までの時間
tWR=2*tRTPとなります tWR tRTP safe 20 10 tight 16 8 extreme 12 6 - tRRD_S
RAS to RAS Delay Different Bank Group
異なるバンクへグループの遅延時間。メモリは複数のバンクおよびバンクグループがある
RRDS分だけ待機する
- tRRD_L
RAS to RAS Delay Same Bank Group
- tFAW
Four Activate Window
同ランク内で4つの行のアクティブ化が発生できる時間
tRRDS tRRDL tFAW safe 6 6 24 tight 4 6 16 extreme 4 4 16 - tRFC
Refresh Cycle Time
メモリは一定期間でリフレッシュが入る。リフレッシュにかかる時間なので短いほど良い
周囲温度が高いときつくなるためややマージンを持つとよいかも
下記表のとおりに加減も決まってるようで台に応じて徐々に下げていくとよい $$\sf{tRFC timing}=\sf{tRFC[ns]}\ast\frac{clock}{2000}$$ IC tRFC (ns) S8B 120 – 180 N8B 150 – 170 H8D 240 – 260 H8A、H8C 260 – 280 M8E、M16B 280 – 310 S8C 300 – 340 - tCWL
CAS Write Latency
CASの書き込み版。列アクティブから書き込みまでの時間
tCWL1 safe tCL tight TCL-1 extreme TCL-2 tCWL を変更すると tWRRD_dg/sg に影響し、したがって tWTR_S/L に影響します。 tCWL を 1 下げる場合、同じ tWTR 値を維持するには、tWRRD_dg/sg を 1 下げる必要があります - tWTR_S
Write to Read Delay Different Bank Group
異なるバンクグループでの書き込みから読み込みまでの待機時間
- tWTR_L
Write to Read Delay Same Bank Group
tWTRS tWTRL safe 4 12 tight 4 10 extreme 4 8 tWTRS/L を auto のままにし、それぞれ tWRRD_dg/sg で制御する必要があります。 tWRRD_dg/sg を 1 下げると、tWTRS が 1 下がります。 tWRRD_sg も同様です。可能な限り低くなったら、tWTRS/L を手動で設定します tCWL→tWRRD→tWTRの順に設定 third timing
- tREFI
リフレッシュを行う間隔。リフレッシュ中は動作できないため間隔は長いほどよい
周囲温度が高いときつくなるためややマージンを持つとよいかも
tREFI safe 32768 tight 4000 extreme 65534 - tCKE
Clock Enable Time
- tRC
Row Cycle Time
RASは行がアクティブにされてから非アクティブにするまでの時間、
RPが非アクティブにされてから次の行をアクティブにするまでの時間
よって最小値は tRAS + tRP
tRAS+tRPを最小値として不安定なら増やす turn around timing
- tRDWR
Read Write Command Spacing
読み取りコマンド後書き込みコマンドまでの間隔
- tWRRD
Write Read Command Spacing
書き込みコマンド後読み取りコマンドまでの間隔
- tRDRD
- tWRWR
tRDRD sg dg d r dd safe 8 4 8 8 tight 7 4 7 7 extreme 6 4 6 6 tWRWR sg dg dr dd safe 8 4 8 8 tight 7 4 7 7 extreme 6 4 6 6 tWRRD_sg/dgは上記参照 tRDWRは9/9/9/9 のような感じで1ずつ下げていきます drはデュアルランクに関するもので、シングルランクでは無視できます。 メモリ設定の違いによるFPS値の変化
前回(HWiNFOとRTSSでPCのベンチマークを記録してGNU Octaveからグラフを出力してみる)作成したものを使用してベンチマーク中のFPS値を測定します。
使用するメモリはこちらです。XMP 3600MHz
Patriot Viper Steel DDR4 3600MHz 16GB x 2枚
余談ですがこのメモリXMPを適用するとやや不安定で、たまに落ちます。あまり良い個体を引けなかったようです。
XMP運用できません。最初からタイミング調整するつもりだったとはいえ設定されてるんだから動いてくれよなんですけど。XMPとの比較はできません。無意味では?
というわけでそもそもの目的としてOCして限界に挑むとかでなく1.35V3600MHzで安定動作する設定を探すという風です。
ついでに設定の差によるFPS値やスコアの変動も見てみます。
使用ベンチマーク
7zipベンチマークcompression
3D Mark Timespy
ff14ベンチマーク
条件
それぞれの条件で安定動作したものを使用しています。
clock MHz
- 2666(SPD)
- 3200
- 3400
- 3600
timing
- 自動
- 一次のみ
- その他も
結果
スコア
- 7zip comp
タイミングを設定するごとにスコアが上昇しています。一次のみで見てみると3200MHzがなんかスコア高いですね。
一次タイミング以降を設定するとスコアがめちゃくちゃ伸びています。
ゲームにおいてここまで差がつくかといわれるとですが、一次以降のタイミングも重要であることはわかります。
- timespy physics
こちらも同様の傾向です。
2666MHzとの差が大きく見え、クロックが高いほうが性能がよさそうです。
- ff14
ff14は一次タイミングでの伸びと+一次以降との伸びが同じくらいです。
fps
ff14の結果から
- 2666auto VS 3600 all
拡大しないと見づらいですが、どこの地点でも20fps程度の差があります。
SPDとの比較ですが、2666等の一番安いものを買うのと数千円盛って安いOCメモリを買うのとでこれぐらいの差がある感じでしょうか。
- 3200all VS 3400all VS 3600all
拡大しないと見えない。
3200と3400と3600とでそれぞれ調整しましたが、周波数は高いほうがFPSがちょっと高いです。
3200→3400の伸びは目に見えますが、3400→3600の伸びはそれに比べるとかなり小さいです。
- 3600 auto VS primary VS all
自動→一次のみ、一次のみ→全部 でそれぞれ10fps程度伸びています。
まとめと調整した感想
タイミングを手動調整することで、ちゃんとFPSが向上することがわかりました。
何よりBiosやメモリ設定をいじるという食わず嫌いがなくなるのがよいと思います。こうでもしなきゃめんどくさくて触ろうとすることなかったでしょうからね。
あとちゃんとOCメモリを安定させられるというのが性能面よりも大きいですよね
下記調べながら等環境でメモリを設定してみた結果です記録用。ちゃんとできてるのかは知らないけど。
Gear 1 tCL 19 tRCD 21 tRP 21 CR 1 tWR 12 tRFC 549 tRRD_L 6 tRRD_S 4 tWTR_L 6 tWTR_S 4 tRTP 6 tFAW 16 tCWL 17 tREFE 65534 tCKE 4 tRC 61 tRDRD_sg 7 tRDRD_dg 4 tRDRD_dr 7 tRDRDdd 7 tRDWR_sg 12 tRDWR_dg 12 tRDWR_dr 14 tRDWR_dd 14 tWRRD_sg 29 tWRRD_dg 27 tWRRD_dr 10 tWRRD_dd 10 tWRWR_sg 8 tWRWR_dg 4 tWRWR_dr 8 tWRWR_dd 8 仮想メモリとレジストリ
レジストリ
参考資料のところで示しましたが
あたりを読んだり試してみたりしました。
これらレジストリ自体古くて機能していないものも多いようです。
Microsoftに高スぺの場合カーネルを物理メモリに常駐させるようレジストリをいじると性能が上がる可能性があると書いてあったりします。
インターネットでも見てるとレジストリからメモリの最適化できますというのはいっぱい出てきます。
まあ等環境では目に見えたfps向上などの変化は見られませんでしたので、わざわざレジストリをいじる必要性は感じられませんでした。とりあえずデフォルト推奨です。(そのうち要検証?)
ソフトウェアなどによって勝手にレジストリが変更されている、ということがあるというのも見ましたので、そういう場合は元に戻しておくのがよいかな。
仮想メモリ
仮想メモリもレジストリから編集することはできますがパフォーマンスオプションから設定することができます。
win+rからSystemPropertiesPerformanceを実行するか、ショートカットを作っておきましょう。
パフォーマンスオプション>詳細設定>仮想メモリ
仮想メモリのオンオフや割当量を設定することができます。
メモリ量が十分であれば仮想メモリをオフにする方がよい、ということも聞きますがどうなのでしょうか。fps値向上等の目に見えた変化は見られませんでした。好きな方でよさそう。仮想メモリ割り当てないと不安定になるゲームもあるとか聞いたことがあります。
確かに計算機等の基本的な本等に書いてある理屈の上では仮想メモリのデータにアクセスする際遅延が発生しそうですが、そのレベルが実際に影響を及ぼすのかは疑問です。逆に物理メモリのスペースを空けることで良い効果もあるとか。(そのうち要検証?なんかどうでもよさそう)
おわり
メモリタイミングを調整することで10程度規模のfps差が生じました。大きいか小さいかはちょっとの値段の差をどう捉えるか人それぞれでしょうか。
おすすめのメモリの買い方は自分で設定したくない人はネイティブ3200を買う。ちょっと安いし。OCメモリならXMP当てずにタイミングを手動設定する。です
ただ今回調整する中でBiosも立ち上がらなくなったのがありました(片方のメモリを抜き原因のタイミングを再設定し対処。ダメだったとしてもCMOSクリアすれば大丈夫かな?)。なのでまあなにかしらのリスクはあることは想定してやるべきなのだなあ。
……めんどくさいしネイティブでよくね?ちょっと安いし。
XMPは不安定だったのでゴミです。どこを見てもOCメモリが当たり前におすすめされててなんだかなあと思ったりしました。不安定なことはまれなのだろうか?それでも不安定な可能性を孕んでいるよなあ……など。
何より今回はメモリに関する知識が多少身についたことと、メモリタイミングの設定を実際に行ってみた経験が収穫です。
前回:HWiNFOとRTSSでPCのベンチマークを記録してGNU Octaveからグラフを出力してみる
次の記事:Windows11インストール後の初期設定(MS-settings)
-
USBハブは接続機器の入力遅延を引き起こすか?
USBハブにマウス等のゲーミングデバイスを接続したときに、直接USBポートに接続するより良くないのではないか?と考えたことはあるでしょうか。
特に違和感を感じたことがないからとUSBハブを使用している人も、良くないと聞いたから良くなさそうだからと使用していない人も、特に何も気にしたことがない人もいると思います。
USBポートをデスク上に引っ張ってこれるのは単純に便利です。
複数マウスを使用する場合いちいち接続しなおすのもめんどくさいです。
でも接続していいのか?ちょっと気になったりもします。
実際にUSBハブはどうなのか?を雑検証してみたいと思います。
検証方法
詳細については下記の記事を参照してみてください。
そこから派生しているというかめんどくさくて放置していた雑ネタです。
前回はマウスとpromicro(qmkによる自作キーボード的なもの)を接続してマウスの遅延を検証する方法を紹介しました。
今回はそれを2つ用意してUSBに直接接続したりハブにつないだりして比較してみます。
仕組みとしてはスイッチを押すと左クリックを入力する装置となっています。
それらが同じスイッチに接続されているため、2つの機器が同時にクリックを行うことができます。
カチカチしているのをdualモードのmousetesterのインターバルグラフで観測し、その入力タイミングポーリングタイミングで比較を行います。
使用するUSBハブはなんかエレコムのやつです。特に選定理由に意味はなく部屋にあったから。またほかのUSBハブを所有していないため、他製品では結果が異なることがあります。
条件
①両方ともUSBに直接接続し比較を行います。
刺し直したり、ポートを交換したりしてまあ有意な差がないことを確かめます。
②片方をUSBハブに接続してUSB接続と比較を行います。
こちらも両者交換したり刺し直したりします。この時ハブには他に何も接続していません。
③2番にプラスして、ハブにトラックボールを接続しボールをころころしながら測ったりウェブカメラを接続し映像を送信しながら測ったりしました。トラボとウェブカメなのは手の届くところに転がってたからです。
その他は試したいないためどうなるかわかりません
結果
結果のデバイス1(青)とデバイス2(緑)の関係は統一されています。
USB接続同士
どれがどういった条件かはまあいいでしょう(雑)。
とりあえずUSB接続同士だとポーリング間隔に~0.05ms程度私の環境だとありました、ということにします。
②USB vs USBハブ(promicroのみ)
どれもUSBハブが0.1ms程度遅れていることがわかります。
③USB vs USBハブ(+トラボ、ウェブカメ)
名前変え忘れてますがまあトラボとウェブカメがつながってます。
ハブにほかの機器を接続してもpromicroのみでも入力遅延の様子は変わらず0.1ms程度であることがわかります。
まとめ
今回の検証においては、USBハブは0.05ms程度USB接続よりも入力遅延があることがわかりました。
またUSBハブにほかの機器を接続してもその結果は変わりませんでした。
まあUSBのデータ転送速度を考えればいくつつないでも送信できるかと思えます。差が0.05msということは単純にワンテンポポーリングが遅れているとかではなさそうです。
通信方式がHIDデバイスとは何か違ったりするのでしょうか。(何も知識がないです。)
単純に結果だけを見ると、
USBハブに遅延はない!という主張や、USBハブは遅延するから使うな!という主張はどちらも誤りであるように思います。
遅延は確かにあるため直接USB接続するに越したことないが、0.05ms程度であるため神経質になるほどではない(無線マウスの遅延のほうがはるかに大きいため無線マウス使用時は無視できる)。と適当にまとめます。
元も子もないっちゃ元も子もないです。
バスパワーの不安定さとかUSB多すぎとかのほうが気にしたいところ。
今回の検証はすべてが適当であり、鵜吞みにされると責任持てないしそれホントかよと言われたらいやあ……であります。気になったらやり方は全部投げられているのでやってみてください。
検証したのはクリック(on,offのみの2値単発信号)でありマウスセンサーとか継続してアナログな感じのデータ送信したときどうか?はこれだとわかりませんし。変わらんやろと勝手に思ってるけど。
終始適当でしたがそんな時間かけてやろうとも思えなかったのでとりあえず雑に検証してみました。
そのうち何か詳しく検証する機会があったらこれもやろうとは思いますが。
私はUSBハブに1msとか遅延があるのかな?と勝手に思っていたので収穫です。(いままでハブにマウスをつなぐ機会がなかったので放置してました)
入力遅延の検証関連:[マウス]クリックとセンサーの入力遅延を測定してみる
promicroで検証関連:[計算機]VALORANTの感度と視野角の仕様を調べてみた
-
HWiNFOとRTSSでPCのベンチマークを記録してGNU Octaveからグラフを出力してみる
ゲーミングPCを買ったので紹介します。
せっかくなのでベンチマークを行ってゲーム性能を見たりしたいです。
ベンチマークの結果をGNU Octaveで出力してみます。
測定に使用したMSI AfterburnerとRTSSとHWiNFOを紹介します。
PC買った
今までcore i5 8400にGTX1060の10万程度のPCを使っていましたがこの度ちょっといいやつに買い換えました。
なんとなくPCでも買うかという気分だったので。
という記録を残しておきます。どうせまた先5年とか買い換えないんだから
61800円。i5 8400が微妙でCPUはi7にしとこうと。 29980円。Z790で一番安いけど3万なら悪くないと思いたい。 99800円。3080これぐらいしか売ってなかった品薄。流行ゲーム軽いのばかりだし240HzモニターかVR無かったらオーバースペック感ある。 14100円。一か月くらい待ったらgskillsとかかなり安くなってたなど。
DDR5言われてるほど高くないと思いましたがDDR5対応のM/Bがとても高かったのでDDR4。13480円と8080円。KIOXIA安い。 17980円。750Wでいいと思ったけど値段変わらんかったので850W。superflowerは安くていいらしい。 13730円。ドライブ付くやつで調べてなんか出てきたやつ。ドライブが下につくのいいね。 16800円。CPUクーラー品薄すぎる。これぐらいしかなかった grease シミオシ OC Master 666円。なんかいいらしいgreaseでどれくらい変わるもんなのかしら。 15200円。今見たら安くなってるなあ。11は慣れ以前に使いづらいUIである。
できるだけ安いものを選びましたがそれでも30万円。高い。
ゲームとか重い作業とかしないんだったら8400に1060の旧PCでも何ら不満ないですからこりゃ仕事用かゲーム用かって感じがします。
最新FPSでも大抵1060で60FPSは出ますしね。快適かどうかは置いといて。
VRやらないんだったらいよいよ3080は使いこなせてない感があるし144から240とか360とかに買い換えたほうがいいなと思います。散財の連鎖です。
今見るといろいろ安くなってるし4070ti出てるし時期じゃなかった感がある。間が悪い。
外付けドライブ・内蔵ドライブの話
外付けドライブをすっと使用してきましたがあまり好ましくなかったです。
バスパワーは安定感にかけて不安だし、セルフパワーにするとUSBケーブルが2本生える羽目に。
ドライブ用スペースをデスクに用意したりしないのであればCDやBlu-ray使う人は内蔵にした方がいいと思います。
というか今回PC買うかという気分になった半分ぐらいは外付けドライブ怠いなというところから来てる気もします。
買ったのは7kの安いやつですが、内蔵ドライブもスペックとか考え始めるとパイオニアのやつとかこだわったりするんでしょうか、、、何が違うのか気になったりはします。
RTSSとHWiNFOのセットアップ
FPS測定用とOSD用にMSI AfterburnerとRTSSをインストールします。
MSI Afterburner 4.6.5 (ベータ 4) ダウンロード-Guru3D.com
MSI AfterburnerはRTSSを一緒にインストールします。
MSI Afterburnerを起動し設定(歯車)を開きます。
全般->Windowsと一緒に起動、最小化で起動にチェックを入れます。
オンスクリーンディスプレイ->ハードウェアのポーリング間隔で統計の更新間隔を入力します。ベンチマーク記録するときは間隔早めのほうがよさそう(HWiNFOと揃える)。
グラフ->フレームレートにチェック
オンスクリーンディスプレイでの表示にもチェックを入れます。
設定を適用しMSI Afterburnerは最小化してしまいます。
RTSSを開きます。
Start with Windowsをオンにします。
Show On-Screen Displayをオンにします。
RTSSを最小化してしまいます。
これでゲーム画面にFPSが表示されるようになります。Geforce experienceとかゲームプラットフォームでオンにしてる?じゃあいらんな、、、
温度等測定用にHWiNFOをインストールします。
センサーのみ使用するのでセンサーのみ表示にチェックを入れます。
センサー画面で項目設定を行えます。ベンチマークで測定したい項目を残します。
いらない項目を監視を無効にし消す
表示したいけどデータは取らなくていいものをログ無効にする
歯車から設定を行います。
レイアウト->センサー画面に表示する項目を整理できます(消した項目を戻したり)。
カスタマイズ->項目名を変更したりできます。
OSD->RTSSで一緒に表示したいものを設定できます。
センサー設定->ポーリング間隔を設定します。
主な設定->自動起動と起動時最小化の設定を行います。
以上で設定完了です。統計の取得とゲーム画面への統計表示ができました。
設定は適当なので参考にならんかも。自動起動最小化しとくだけ
を押してログを開始し、ベンチマークを開始します。
ベンチマーク終了したらログを停止しcsvファイルが保存されます。
csvをじゃかじゃか保存しましょう。
GNU Octaveでcsvファイルを読み込んでグラフを出力する
octaveを使ったのは調べてたら出てきたからというだけですが、きっとpythonとか使えるようになっておいた方が役に立つのだろうなと思ったりします。matlabなんて一生使うことないだろうし。
ダウンロードしインストールします。
matlabのコピーソフトらしいのでmatlabのコマンドが基本らしいです。
困ったらoctaveでなくてmatlabとつけて検索するか、matlabのサイトの検索欄で検索します。
octaveを起動しcsvのlogdataが保存されている場所に適当に.mファイルを保存してグラフを描くように書いていきます。
エディタのところにいろいろ書き込んでいきます。
左に変数に入力されたり計算された値が表示されています。変数名をクリックすると変数エディタのタブに詳細が表示されます。
コマンドウィンドウはコマンドウィンドウです。実行結果やエラーが表示されます。直接コマンドを打ち込むことができます。
使い方はそんな感じです。グラフ出しただけでそれ以外わかってません。なので対象はこれやる前の私みたいななんもわからん人と忘れたころに読み返してる私です。
グラフ出すやつ。
まずHWiNFOで出力されたcsvファイルの形式ですが、1列ごとに測定した項目が並んでいます。
ポーリングを0.1秒に設定しましたが実際はずれながら計測されているのがわかります。またパソコン時間での0,1秒なので使用タイマーによって実時間が変動したりします。
そこらへんも厳密に反映するべきなのでしょうがめんどくさいので0.1秒間隔である、としました。(文字列読み込むのめんどくさい)
これらのほしい項目を変数に突っ込んでグラフに出力します。
%がコメントアウトです。デフォルト ctrl+r <-> ctrl+shift+r です。
図を出力する部分を関数化しているので、一度関数の下から見たほうがわかりやすいかもしれません。
forの中にforが入りまくるのでぱっと見よくわからんですね
また関数化すると変数が関数の外に持ち出せず変数エディタであとから見れずデバッグしにくいので最後に関数化します。
%前回実行時の計算データを消しておきます。 %行列のサイズが固定されたりしてしまった。 clear all %前回実行時の出力グラフを消しておきます。 close all %プロットするコードを関数化しています。 %繰り返し実行するため function plotgraph(fname,lcolor,colnum,colname,line,xratio) %読み込んだファイル数 %length:行列の長さ(ここではfnameにいくつのcsvファイルを読み込んだか) flength=length(fname); %;をつけるとコマンドラインに結果を表示されません(実行が早い) %;をつけなければ計算結果が表示されて変数の中身が確認できます。 %ファイル数だけ繰り返します for i=1:flength %ログファイルごとに行列サイズ微妙に差が出るので繰り返しごとに行列をクリアする clear A B C %csvの中身を読み込んでいきます。 %.name:ファイル情報の「ファイル名」を指定する %dlmread:ファイル内の行列を読み込み(ここではファイル名という文字列) %Aにファイル名を読み込みます。 A = dlmread( fname(i).name ); %matlabの配列は 1 始まり %必要なログデータの列をそれぞれ抜き出す(fps,cputemp,gputemp,・・・みたいな行列) %:でその行や列全部を選択 for j=1:length( colnum ) B(:,j) = A(2:end-2,colnum(j):colnum(j)); end %ログデータの行数がいくつか入れる rownum=length(B); %x軸ずれたとき用 for h=1:rownum x(h)=h.*xratio; end %開始オフセットを求める for j=1 : rownum if B(j,1) > 200 start = j; break endif end for j=start : rownum if B(j,1) < 100 start2 = j; break endif end %fpsが200以上出た後にfpsが100以下に下がったところを開始地点とする %終了オフセットを求める for j=1 : rownum +1 if B(rownum -j,1) >61 stop = rownum -j; break endif end %fpsが最後に60以上出ていたところを終了地点とする %必要なベンチマーク実行中の行を抜き出す(開始~終了まで) C = B(start2:stop,:); %項目の数だけグラフを表示する for j=1:length( colnum ) figure(j) %軸ラベル ylabel( colname(j) ) xlabel('0.1s') %figureにグラフを表示 graph=plot(x(1:stop-start2+1), C(:,j) ); %線の色を変える(ここではベンチマーク条件ごとに色を変えている) set(graph,'Color',lcolor) %線の種類を変える set(graph,'LineStyle',line) %グラフを上書き可能にする(hold offだと毎回消えてしまう) hold on end %plot終わり end %ファイル数分繰り返し終わり end %関数終わり %拡張子含む対象ファイル名のリストを作成 %dir:「ファイルの情報」を読み込みます fname_1 = dir('01-ff14-*.csv'); fname_2 = dir('02-ff14-*.csv'); fname_3 = dir('03-ff14-*.csv'); fname_4 = dir('04-ff14-*.csv'); fname_5 = dir('05-ff14-*.csv'); fname_6 = dir('06-ff14-*.csv'); fname_7 = dir('07-ff14-*.csv'); %読み込みたい項目列の配列を作る(csvの22列目のfps値を読み込む等) colnum=[ 22 10 11 12 13 14]; colname={'fps' ,'cpuTemp' ,'cpuPower' ,'gpuTemp' , 'gpuPower' , 'gpuClock'}; %条件ごとに関数呼び出し %条件ごとに色を変える plotgraph(fname_1,'b',colnum,colname,":",1) plotgraph(fname_2,'r',colnum,colname,":",1) plotgraph(fname_3,'g',colnum,colname,":",1) plotgraph(fname_4,'m',colnum,colname,":",1) plotgraph(fname_5,'k',colnum,colname,":",1) plotgraph(fname_6,'c',colnum,colname,":",1) plotgraph(fname_7,'y',colnum,colname,":",1) hold off
なんか見づらいのでコメントなしも載せときます
clear all close all function plotgraph(fname,lcolor,colnum,colname,line,xratio) flength=length(fname); for i=1:flength clear A B C A = dlmread( fname(i).name ); for j=1:length( colnum ) B(:,j) = A(2:end-2,colnum(j):colnum(j)); end rownum=length(B); for h=1:rownum x(h)=h.*xratio; end for j=1 : rownum if B(j,1) > 100 start = j; break endif end for j=start : rownum if B(j,1) > 100 start2 = j; break endif end for j=1 : rownum +1 if B(rownum -j,1) >61 stop = rownum -j; break endif end C = B(start2:stop,:); for j=1:length( colnum ) figure(j) ylabel( colname(j) ) xlabel('0.1s') graph=plot(x(1:stop-start2+1), C(:,j) ); set(graph,'Color',lcolor) set(graph,'LineStyle',line) hold on end end end fname_1 = dir('01-ff14-*.csv'); fname_2 = dir('02-ff14-*.csv'); fname_3 = dir('03-ff14-*.csv'); fname_4 = dir('04-ff14-*.csv'); fname_5 = dir('05-ff14-*.csv'); fname_6 = dir('06-ff14-*.csv'); fname_7 = dir('07-ff14-*.csv'); colnum=[ 22 10 11 12 13 14]; colname={'fps' ,'cpuTemp' ,'cpuPower' ,'gpuTemp' , 'gpuPower' , 'gpuClock'}; plotgraph(fname_1,'b',colnum,colname,":",1) plotgraph(fname_2,'r',colnum,colname,":",1) plotgraph(fname_3,'g',colnum,colname,":",1) plotgraph(fname_4,'m',colnum,colname,":",1) plotgraph(fname_5,'k',colnum,colname,":",1) plotgraph(fname_6,'c',colnum,colname,":",1) plotgraph(fname_7,'y',colnum,colname,":",1) hold off
実行してみます。グラフが出てきました(これは2条件のみですが)
FPS値のグラフをコマンドラインに軸の範囲等打ち込んで成形してみました。
おまけ ベンチマーク結果
こちらRTX3080の電力制限をかけてベンチマークを回した結果です。
横軸が電力制限、縦軸がscore fpsです。(fps値も比較しようとしましたがscoreとほぼ一致しているのを見て途中でやめました)
ゲーム中ずっと300W食われ続けるのもあほくさいし80%ぐらいに制限かけてもいいのかなと思います。scoreやclockの降下幅は5%程度ですし、どうせ最近の軽いゲームだとfpsは十分出ますから。
CPU13700KFは電力制限するまでもなく100W程度しかゲーム中消費せず、PL1をそれ以上に設定しておくだけでよさそうです。またFPS値はHTを切ったほうが明らかに高く出ました。
おわり
これでベンチマークの結果を比較することができるようになりました。
やってることは所詮excelの自動化ですがexcelは有料で高いのだなあ。
こんなことしなくてももっと簡単な方法もありそうだけどどうなんでしょうか