
さて、導入したAVRですが、LED点滅試験プログラムを動作させ、書き込みができるところまではわりとすんなりできました。計測アンプに使いたいという考えでAVRを試していますので、まずはパソコンとの接続をルートを確保したいところです。
オーソドックスなところではRS232C、トレンドはUSBや10BASEになるのでしょうが、あえて、RS485で通信を行うことにします。これは、
*USBは、専用チップがあり開発がラクであるが、仕事で出荷するには、やや問題がある。
*RS232Cは、12Vを扱うため、昇圧回路(ICでやりますが)が必要でノイズの問題もある。
という理由によるものです。FA分野ではRS485(422)結構使われています。速度も自由に選べるし通信自由度はRS232Cなみにあるし、0-5Vしか使わないし、1:nの通信もできるしといいことがたくさんあります。
ネックとしては、パソコン側のインターフェースが高額なことです。インターフェース社やコンテック社からボードが出ていますが、安いものでも1万円以上します。でも、実験用に使うのであれば、
USBからRS485の変換アダプタが5000円までで購入可能です。 まずは、実験なので、ケーブルダイレクトさんから、USB-RS485変換ケーブルを購入しました。通信線のプラスマイナスを間違うこともあるだろうということで端子台タイプを購入しました。
マイコン側には、LTC1485を使います。(秋月で300円)テキサスからも同様のICが発売されていてdigikeyで買うなら断然、テキサスのほうが安いのですが、今回は量が少なく、digikeyに頼むついでがなかったこともあって、秋月から購入しました。(ちなみにピンコンパチです)
RS232Cをやったことがある人なら、RS485も簡単です。マイコンにシリアル機能がついているのであれば、ほぼ同等の処理でOKです。ただ、半二重なので、自分が送信中、受信中をはっきり管理する必要があります。無線マイクのように、自分がしゃべる時はボタンを押すという操作が加わります。
このスイッチ(LTC1485の3ビン)をAVRの適当なポートに接続し、送信時にはHに、受信時にはLに切り替えます。ちょっとした注意としては、送信完了時に、HからLに戻す部分で、「送信完了」を確認してからLにする必要があることです。
シリアル通信は、(たとえ1バイトしかバッファがないタイプでも)1バイトデータを渡した後、ただちに送信が完了するわけではありません。プログラムから最後の1文字を送った直後であればCPUから見れば送信完了ですが、実際の回線には最終バイトはまだ出ていません。スタートビットくらい出始めているかもしれませんが・・・
そこで、周辺IOのステータスを見て、落とすタイミングを確認します。AVRの場合、送信バッファ書き込み可能フラグと、送信完了フラグが別にあります。(とてもいい設計(^^))今回の用途では送信完了フラグを見て、送受信を切り替える必要があります。この部分、まだ、実験ソフトにバグがあるようで、うまく切り替えできていません。まあ、大したことないだろうということで、次に進みます。(おいおい)