0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

BEER202にI2Cインターフェースを導入する妄想の話

Last updated at Posted at 2025-12-21

妄想の話は、実際に動作確認した話ではないので、ご注意を。

はじめに

MSX用IDEインターフェースのBEER202には8255というチップが搭載されており、パラレルインターフェースとして利用することができます。

さらに部品を追加してI2C通信ができるようになると、安価に入手可能なセンサ類を接続することが可能になります。
Copilotと対話しながら、環境構築を行いました。

I2CブリッジICの選定

主に二種類あるようです。

  • PCA9564(NXP):I²Cバスコントローラ。8ビットパラレルインターフェースを持ち、MSXのI/Oポートから制御可能
  • PCF8584(古いがMSX世代に近い):同様にI²Cバスをパラレルで制御

検索すると、PCF8584のDIP版が入手できるようです。

BEER202との接続

20ピン2列のコネクタへのPCF8584の接続を想定しています。
以下のような接続になるかと思います。

JP2信号 PCF8584ピン 役割
HD0–HD7 D0–D7 データバス
HA0–HA2 A0–A2 レジスタ選択
HCS /CS チップセレクト
HWR WR 書き込み制御
HRD RD 読み出し制御
RESET RESET リセット
+5V/GND VCC/GND 電源

PCF8584がセンサ類とつながる端子

  • SCL → 外部I²Cバス(プルアップ抵抗は4.7kΩ)
  • SDA → 外部I²Cバス(プルアップ抵抗は4.7kΩ)

初期化例(クロック設定 + I²Cモード有効)

前提

  • HD0–HD7 → データバス
  • HA0–HA2 → レジスタ選択
  • HCS, HWR, HRD → 制御信号
  • PCF8584レジスタ番号:
    • 0 = DR(データ)
    • 1 = CR(制御)
    • 2 = SR(ステータス)
10 OUT &H40, 128        ' 8255モード設定: 全ポート出力

20 REM クロック設定 (CLKレジスタ = 0)
30 OUT &H41, 0          ' HA0-HA2 = 0 (CLKレジスタ)
40 OUT &H40, &H1C       ' HD0-HD7 = クロック値 (100kHz)
50 OUT &H42, 1          ' HCS=1, HWR=1
60 OUT &H42, 0          ' WR解除

70 REM モード設定 (CRレジスタ = 1)
80 OUT &H41, 1          ' HA0-HA2 = 1 (CRレジスタ)
90 OUT &H40, &H80       ' HD0-HD7 = I²Cエンジン有効
100 OUT &H42, 1
110 OUT &H42, 0

1バイト送信例(スレーブアドレス + データ)

120 REM スレーブアドレス送信 (例: 0xA0)
130 OUT &H41, 0         ' HA0-HA2 = 0 (DRレジスタ)
140 OUT &H40, &HA0      ' HD0-HD7 = スレーブアドレス
150 OUT &H42, 1
160 OUT &H42, 0

170 REM スタート条件発行
180 OUT &H41, 1         ' CRレジスタ
190 OUT &H40, &H90      ' STA + WRビット
200 OUT &H42, 1
210 OUT &H42, 0

220 REM データ送信 (例: 0x55)
230 OUT &H41, 0
240 OUT &H40, &H55
250 OUT &H42, 1
260 OUT &H42, 0

270 REM ストップ条件発行
280 OUT &H41, 1
290 OUT &H40, &H40      ' STOビット
300 OUT &H42, 1
310 OUT &H42, 0

320 PRINT "送信完了"
  • OUT &H40 → HD0-HD7(データ)
  • OUT &H41 → HA0-HA2(レジスタ選択)
  • OUT &H42 → HCS/HWR/HRD(制御信号)
  • ACK確認は、HRDを使って読み込み(INP(&H40))でSRレジスタをチェック

ACK確認例

400 REM ステータス確認
410 OUT &H41, 2          ' HA0-HA2 = 2 (SRレジスタ)
420 OUT &H42, 4          ' HCS=1, HRD=1
430 STATUS = INP(&H40)   ' HD0-HD7から読み込み
440 OUT &H42, 0          ' RD解除
450 IF (STATUS AND &H80) = 0 THEN PRINT "ACK OK" ELSE PRINT "NACK"
  • STATUS AND &H80 → ACKビット(0ならACK、1ならNACK)

おわりに

I2CブリッジICを接続することで、I2C通信ができるようになるようです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?