6809SBCやFM-7からSPI通信でADコンバータMCP3208を制御してみました
これは以前の報告(6809SBCボードやFM-7にArduinoを接続してRTCやLCDを制御 2021年8月24日)の続編です。
実現しようとしているのは6809SBCボードやFM-7にArduinoやRaspberry Piのようなマイコンを接続して、その先の様々なセンサー等を制御することです。そのスタートが上記の報告だったのですが、SBCボードやFM-7に搭載したPIAとArduinoの通信にハードI2Cを用いざるを得なかったために、肝心のセンサー等の制御にソフトI2Cを用いることになり、これでは制御の自由度が狭まってしまっていました。
ということで、PIAとArduino間にSPI通信を用いることができれば、Arduinoに接続したセンサー等をI2C(ハード、ソフト)やSPIで自由に制御できると考えました。
手始めに、Arduinoを仲介せずにPIAにADコンバータMCP3208 を直接接続して制御してみました。写っていませんが前回同様にフラットケーブルの先でPIAと接続しています。
接続図です。
プログラムを示します。
以前のI2C通信で用いたサブルーチンと同じ名称のものがありますが、その内容は細かいところで異なっているものがあります。またMCP3208のSPI通信に特化したものですので、制御信号は5ビットのみで良く、制御信号の書き込み、データの読み出しはいずれもSCLKをH->Lにするタイミングで行われます。
示したのは6809のFLEX9でのアセンブラプログラムですが、FLEX9特有のサブルーチンは15~18行目の4つ(WARMS, GETCHR, PCRLF, OUTADR)のみです。
これで、6809SBCやFM-7にマイコンを接続してその先に色々なセンサーをつなぐことができ、マイコンの高級言語(!)でセンサーを自由に制御できることになります。
間にマイコンを挟む場合ですが、ArduinoのようにSPI通信が1回路のみのものでは、センサー側がI2CかSPIかによってPIA側の接続を選ぶことになります。
Raspberry PiやBeaglebone blackのようにSPI通信を2回路持っているものではセンサーとの通信もSPIを使うことができます。
MCP3208の制御に関しては、データシートの他に「最新Raspberry Piで学ぶ電子工作」(金丸隆志著)の解説がとても分かりやすくて大変参考になりました。感謝いたします。
I2Cに続きSPIもPIAから通信できるようになったんですね^^
返信削除PIAでSPI通信もやってみたかったので参考にさせて頂きます!
コメントありがとうございます。I2CとSPIの両方で通信できるようになりましたので、いよいよセンサー等の実用的な利用ができそうです。とりあえずはセンサー等用の拡張基板を製作する予定です。
削除