2016年11月9日水曜日

ベースマシン UIとSequencerを再び統合

UIとSequencerでNucleo Boardを分けてSPI通信させていたのを再び統合した。I/Oピンが足りないのはI/OエキスパンダのMCP23S17を使う目論見。

配線図


NucleoからのSPI出力は(MISOを使わないので出力のみ)、バスバッファの74HC541でバッファリングして信号を補強した。

mbed repository:
https://developer.mbed.org/users/ryood/code/BaseMachine/ revision:2

UIとSequencerのハードウェアを分けたときに互いの結合度を下げたので、プログラムも変更してUI関係の処理はUIController Classとして分離した。

普通のGPIOピンを使ったUI部とシーケンサー部のプログラムの結合はまあまあうまく行ったようだが、I/Oエキスパンダを使ったUI部のプログラミングはまだ。機能としては9月下旬の「ベースマシンの音出し動画」まで戻った感じだ(^q^;

この間を振り返ってみると

  • SPIでプロセッサ間の通信。UARTは遅いし信頼性が低い。I2Cは遅い上に難解。
  • SPI信号の波形を整えた。バスバッファの74HC541を使う実験。ダンピング抵抗を入れる実験。
  • I/Oエキスパンダを使う実験。


というようなことをやっていたようだ。

ToDo:


BaseMachineUIController Class内でI/Oエキスパンダを使えるようにコーディング。

配線、パラメータ等のドキュメント整理。

74HC541を使ったSPIバスバッファをユニバーサル基板で実装。http://dad8893.blogspot.jp/2016/10/spi-tc74hc541.html

PSoC4 DCOにリセット線をつける。電源の立ち上げ時にSPI信号が入るタイミングで起動に失敗するようだ。オンボードの青色LEDが点滅する。これはPSoC 4 Prototyping Kitがプログラミングモードに入っていると思う。←未確認。

<追記:2016.12.26>

SPIの信号線のCSの初期値がLo(0)になっていたのが原因だったようです。対処療法でちゃんとは把握できていないですが、初期値をHi(1)にすると起動時に青色LEDがチカチカして停止する現象はなくなりました。

SPIのCSはReset信号とうと同じく負論理で、Active Lowです。一方CやC++では0で初期化するのが普通なのでプログラミングするときはCSを1で初期化するように気をつけたほうがいいと思います。

</追記>


電源ボードを検討。±9V(安定化なし)、±5V(7805/7905で安定化?)、+3V(安定化)


メモ:


よく言われることだと思うが、規模が大きくなると掛け算でエラー発生要因が増える。ハードウェアもプログラムもユニット・テストを今まで以上に慎重にやらないといけないようだ。

完成しても、DCOやDCFをいろいろ作って遊びたいので、今回はあまり妥協はしたくない。