Darkside(リンクエラー修正しました)

2020年7月25日(土) 21:17

ハードウェアSPI

 コネクターは、実装に時間を食う非常に面倒臭いシロモノである。

 旧基板の配線を追ってピンアサインを確認しつつ、実装する。
 DCコンバーターのリモート端子は、面倒になって直結配線した。しかし新基板では、それもコネクター化してしまう。

 PICソケットの左下に基板直接固定のコネクターは、メイントリガー配線の接続用だ。

 MAX186との通信にはピンが5本必要で、その代わりAD入力は8系統使える。結果として、新基板はアナログ入力が3系統余っている。将来的に、温度計の増設等を行う拡張余地がある。

 さて、ハードウェアSPIをマスターとして動作させるのは、初めてだ。果たして、うまく使えるか。
 仮にうまく動作しなくても、ソフトウェアSPIにすれば動作させられる。だが、ソフトウェアSPIの場合、通信速度が100KHz前後に落ちてしまう。というのも、MAX186 は2MHz以下にしか対応していない。dsPIC で最高速のソフトウェアSPIやると、超過する恐れがある。
 だから適切にウエイトを入れることになるが、dsPIC は微小時間のウエイトを入れるのが苦手である。そのため、ウエイトを入れると今度は遅くなり過ぎるのだ。I2CやSPIをソフトウェアで行うと、8ビットPIC並みの通信速度しか出せない。
 これに対し、ハードウェアSPIならば1.4MHzで通信できる。なぜ2MHzではないかと言うと、設定可能な通信速度の種類が限られていて、大雑把な速度しか選べない。

 MAX186 のデーターシートを見て、シングルエンドと差分の混在が可能なことに気付いた。通信ごとに、シングルエンドか差分かを選択可能なのだ。だから、差分接続にしたチャンネルを読むときは差分を指定し、シングルエンドのチャンネルを読むときはそっちを指定すれば良い。
 とは言えわざわざ差分動作で精度を上げたいのが光出力モニターだけである以上、現状の配線でも問題はない。

 いざ MAX186 と通信しようとした場合に問題なのは、コマンドが8ビットで取得データーは16ビットなこと。
 dsPIC のハードウェアSPI利用ルーチンは、8ビット単位の通信と16ビット単位の通信しかない。混在使用できないのだ。試しに8ビットのコマンドを送り、続いて8ビット通信を2回続けて行った。読み取り対象は、分かり易いボリューム。すると、上位バイトは0か1しか返らない。ボリュームの位置に応じて切り替わるものの、0から1になるのが早過ぎる。そしてそれなら2にもなって欲しいが、ならない。下位バイトは暴れまくって読めない。
 そこで、旧レーザー銃の8ビットPICプログラムを確認。アセンブラで、MAX186 と正常通信できていたはずだ。

 すると、内部クロックモードで MAX186 とアクセスしていた。そうだ、これならハードウェアSPIとソフトウェア混在でのアクセスの可能で、分かり易い。速度も犠牲にならない。

written by higashino [ファイバーレーザー] [この記事のURL] [コメントを書く] [コメント(0)] [TB(0)]

この記事へのトラックバックPingURL

Comments

TrackBacks

Darkside(リンクエラー修正しました)

Generated by MySketch GE 1.4.1

Remodelling origin is MySketch 2.7.4