RS-485等の半二重通信線にてデーターを送受する際は、
トランシーバーICの送受切替を行う必要がありますね。
細かい事を言ってしまえば、レシーバーはイネーブルのままでも構わないので、
厳密に制御が必要なのはドライバーの方です。
ではそのドライバーの制御タイミングは どうするかと言いますと、
他の端末がデーター送信を行ってない事を確認した上で、
シリアルポートからデーター送出する直前にドライバーをONにし、
データー送出を終わったら速やかにドライバーをOFFにする、
という至極簡単な動作。
この動作中で問題になるとしたら、データー送出完了をどう判断するか。
これをミスると、送出データーが欠如してしまう事態が発生しちゃったり、
無駄にドライバーがONしたままになって、コンフリクトを起こしたりします。
PICマイコンにてこの辺の判断を行うのに使えそうなのが、TRMTビット。
送信バッファーの空き状態を表すビットだそうな。
単純に考えるなら、TRMTビットを見て、送信バッファーが空になったなら、
直ちにドライバーをOFFにすれば良さそう。
しかし本当にそのタイミングで支障が無いのか?
ちょっと気になったので調べてみることにしました。
使ったPICは12F1822で、トランシーバーICとしてLT1785が繋がってます。
今回、差動信号線までは見ないので、トランシーバーICは無くてもOKなのですが(笑)
ということで早速見てみたのが以下の波形。
ボーレートは約230kbpsです。
PICのポート操作のレスポンスを良くする為、MAXの32MHzで動かしてます。
送信バッファーエンプティモニターはTRMTビットの状態表示です。
これを見ると、EUSARTからシリアルデーターを送出完了次第、
TRMTビットが変化していますね。
これならばTRMTビットをドライバーON/OFFの参考にしても問題無さそうです。
上記の波形ではデーター送出が完了してからドライバーがOFFになるまで、
約1msくらい間がありますが、これはわざと遅延を入れてる為です。
安全を見てタイミングに余裕を取っていたのですが、
実際のところ不要の様ですね。
0 件のコメント:
コメントを投稿