Skip to content

レバー配線図 — RKJXV122400R → Pico 2 → Dock PMOD(#15) ​

ファーム: firmware/pico-lever/ / Dock 側ピン: fpga-famicom#17 コメント(2026-09-01)

 RKJXV122400R                Pico 2 (RP2350)                 Tang Primer 20K Dock
 ┌───────────┐              ┌───────────────┐               ┌──────────────────┐
 │ X pot  A ─┼─ 3V3 ────────┤ 3V3_OUT (36)  │               │                  │
 │ X pot  C ─┼─ GND ────────┤ GND           │               │                  │
 │ X wiper B ┼──────────────┤ GP26 / ADC0   │               │                  │
 │ Y pot  A ─┼─ 3V3         │               │  GP2 ─────────┤ P6  (PMOD0 上段1) 上
 │ Y pot  C ─┼─ GND         │               │  GP3 ─────────┤ T7  (PMOD0 上段2) 下
 │ Y wiper B ┼──────────────┤ GP27 / ADC1   │  GP4 ─────────┤ P8  (PMOD0 上段3) 左
 │ SW  1 ────┼──────────────┤ GP16 (PULL_UP)│  GP5 ─────────┤ T9  (PMOD0 上段4) 右
 │ SW  2 ────┼─ GND         │               │  GP6 ─────────┤ T11 (PMOD1 左端上) Start
 └───────────┘              │ GND ──────────┼───────────────┤ GND (PMOD0)      │
                            │ VSYS (39) ◄── 5V (USB-C 分岐)  │                  │
                            └───────────────┘               └──────────────────┘

端子表 ​

信号RKJXVPico 2Dock備考
X 軸ポテンショ 両端 → 3V3 / GND、中点 →GP26(ADC0)—10kΩ
Y 軸同上GP27(ADC1)—10kΩ
中央プッシュSW 2 端子(片側 GND)GP16(内蔵 pull-up)—押下 LOW
上—GP2(open-drain)P6 PMOD0 上段1押下 LOW
下—GP3(open-drain)T7 PMOD0 上段2
左—GP4(open-drain)P8 PMOD0 上段3
右—GP5(open-drain)T9 PMOD0 上段4
Start(プッシュ)—GP6(open-drain)T11 PMOD1 左端列 上Select は P11(本ファーム未使用)
GND共通GNDPMOD0 GND必ず共通にする
電源—VSYS ← 5V—Dock の PMOD 3V3 からは取らない

Joystick2 エミュレーション(#22・現行 bitstream でレバーを動かす主経路) ​

現行の LCD bitstream は M5Stack Unit Joystick2(I2C 0x63)をポーリングしている。Pico 2 がそのレジスタ形式で応答すれば FPGA を再ビルドせずにレバー 4 方向+Start が効く。

信号Pico 2Dock備考
SDAGP20(I2C0)T8 PMOD0 下段34.7kΩ で 3V3 にプルアップ(Pico 側)
SCLGP21(I2C0)P9 PMOD0 下段4同上。100kHz
GNDGNDPMOD0 GND共通

プロトコル(fpga-famicom core/src/joystick2_i2c.v): レジスタ 0x60 → X, Y の int8(正 = 右 / 下)。しきい値 48 で ON・32 で保持は FPGA 側。レジスタ 0x20 → bit0 = 0 で押下(Start)。 Pico を外すと Dock は neutral に戻る(fail-neutral)。MicroPython は v1.26 以降(machine.I2CTarget)。

上段 P6 T7 P8 T9 の GPIO 4 方向(#17)は展示後の改善。ファームは両方に出力しているので、bitstream を替えても配線追加だけで移行できる。

起動時 ROM 送信(#24・筐体単体起動) ​

Dock の bitstream は起動後に UART で iNES を受け取るまでグレー画面で待つ。筐体では Pico 2 が電源投入時に rom/aidopagaki.nes を送る(firmware/pico-lever/rom_boot.py)。

信号Pico 2Dock備考
ROM 送信GP0(UART0 TX)J16 PMOD1(cab_uart_rx)115200 8N1。NESTang パケット形式
状態受信GP1(UART0 RX)J14 PMOD1(cab_uart_tx)"Game loading done." を待って再送判定

#24 の bitstream(PMOD1 の led[1:0] を UART に転用)が必要。従来の 820e2b3f では J14/J16 は LED 出力なので繋がない。

ボタン(#19・4 ボタン+Start/Select) ​

ボタンキャップ色スイッチPico 2 入力(pull-up・GND へ)Pico 2 出力(open-drain)Dock
A赤TVGP01-G73BB 赤GP7GP11R8(Dual Button A・PMOD0 下段2)
B黒TVGP01-G73BB 黒GP8GP12T6(Dual Button B・PMOD0 下段1)
A連射赤(A の奥)TVGP01-G73BB 赤GP9(GP11 を 15Hz で駆動)—
B連射黒(B の奥)TVGP01-G73BB 黒GP10(GP12 を 15Hz で駆動)—
Start赤 LEDLS601-CR——T11 ← レバー中央プッシュ(GP6)。ボタンを使う場合は直結(GND へ)
Select青 LEDLS601-CU——P11 に直結(GND へ・Pico 不要)
  • Dock の R8 / T6 は fpga-famicom の Dual Button 入力(pull-up・押下 LOW)。Pico の open-drain 出力をそのまま繋ぐ
  • 照光タクトの LED は 電源 → 抵抗(330Ω 目安)→ LED → GND で常時点灯にする(Pico を介さない)。赤(LS601-CR)は 3V3、青(LS601-CU)は 5V から取る(青は Vf≈3.1V で 3V3 ではほぼ光らない)。5V を繋ぐ前に、LED 端子とスイッチ端子が導通していないことをテスターで確認する
  • 4 ボタン共通 GND と Pico GND、Dock GND を共通にする

Dock 側の前提 ​

  • PMOD0 上段 P6 T7 P8 T9 / PMOD1 T11 P11 は LVCMOS33・内蔵 pull-up・押下 LOW(fpga-famicom#17 の arcade_lever_gpio.v、branch claude/issue-17-arcade-lever commit 8104a58)
  • PMOD0 下段 T6 R8 T8 P9 は既存の A/B/Joystick2、PMOD1 の T12 R11 M14 M15 J14 J16 は LED 出力 → 触らない
  • 上+下・左+右の同時押しは Dock 側で neutral(SOCD)。Pico 側も原理上同時に立たない

RKJXV の端子確認(実装前に必ず) ​

RKJXV122400R は X/Y 各 3 端子 + プッシュ SW 2 端子。データシートの端子番号に頼らず、テスターで **両端(回転しても 10kΩ 固定)と中点(回転で 0〜10kΩ に変化)**を実物で確認してから配線する。 プッシュ SW の 2 端子は押下時のみ導通する組。

方向の向き ​

RKJXV のポテンショ回転方向は基板への実装向きで決まる。実機で左右/上下が逆なら main.py の INVERT_X / INVERT_Y を True にする(配線を入れ替えない)。

通電順序 ​

Pico の出力はオープンドレインなので、Pico と Dock のどちらを先に通電しても衝突しない。