コメを噛め

コメを噛め

rerofumi の電子工作メモ

hatena bookmark

PSパッドとのシリアル通信については頭に入っているものの、それでちゃんとやりとりができるということをひとまずマイコンで確認してみるの巻。
使用マイコンは毎度の PSoC。個人的に使い慣れまくっているので、ちょいと試したい向きには(私が)楽。


使用デジタルモジュールは、シリアル通信の SPI master と、ACK 待ちタイムアウト計測用の 8bit Counter。上の二つ。
下にある 8Bit Counter は、通信を 16ms 間隔で行うためのタイマーとして使うもので、パッド間通信本体ではなく、それを駆動するため外側に位置するもの。
あと、実験確認時に LCD モジュールに情報を表示しながらデバッグしていくための、LCD ライブラリ。

PSoC の足と、PSPAD の接続は以下の様に。
P0(0) = PSPAD DAT (in)
P0(1) = PSPAD CMD (out)
P0(2) = PSPAD SEL (out)
P0(3) = PSPAD CLK (out)
P0(4) = PSPAD ACK (in)
DAT と ACK は 1kΩ程度でプルアップする。

MSX側は以下のように設定してある。
P1(0) = DSUB9-2 (down)
P1(1) = DSUB9-1 (up)
P1(2) = DSUB9-4 (right)
P1(3) = DSUB9-3 (down)
P1(4) = DSUB9-6 (TriggerA)
P1(5) = DSUB9-7 (TriggerB)
GND = DSUB9-8

パッド間通信部分は、SPI master モジュールと、8bit Counter、それと ACK 信号の GPIO 割り込みで構成されている。
まずは 1byte SPI 送信、転送完了割り込みを設定しておいて転送が終わったら 8bit COunter を start。8Bit Counter の完了と ACK 信号のGPIO割り込み、どちらが先に届いたかで次の byte に進むか、そこで終了するかの処理分け。
_startPadRead を呼び出して通信開始したら、割り込みを用いて非同期で通信が進行していくので、メイン側では m_pad_read をフラグとして監視し、これが 0 になったら通信完了と判断する。


作成したコードとPSパッドとの通信の様子。
もちろん、制作中はこの自作ロジアナが大活躍なのです。
無事やりとりできていることが確認できてよかったよかった。

ついでなので、1chip MSX のジョイスティック端子へ接続する部分も作成。
無事に動いたので、PSパッドを 1chip MSX に繋いで操作できた。


「できた」といっても、自作実験基板とそこに繋ぐケーブルで構成されている実験環境なのでバラック感満点。

なんとはなしに、この時点で当初の目的自体は達成されているような気もする。
しかし、私としてはマイコンでできるということは見えていたので、あまり挑戦的な部分はなくて今ひとつだったり。
なので PLD 版を作っていたわけですが。

今回のソースコード。
psoc_pspad2msx.zip

—–

Leave a Reply