RS232C(シリアルポート)に接続する汎用入力、汎用出力用インターフェイス2
(8チャンネルアナログ入力、8ビットデジタル入力、8ビット×2デジタル出力)


●概要
 パソコンの汎用I/Oインターフェイスを実現するためのものです。 PIC(ワンチップマイコン)を利用して、アナログ入力8チャンネル、デジタル入力8ビット、デジタル出力8ビット×2を有しています。 パソコンにはRS-232C(シリアル)ポートを通して通信を行います。アナログ入力のAD変換は10ビットであり、10ビット値をそのまま返します。
 温度センサー、気圧センサー、加速度センサーなどを接続することによってパソコンでのデータの収集や、SSR等を接続し、様々な機器の制御に応用が可能です。
 また、繰り返し処理、PIC単体処理に対応しており(詳細は別記)、ごく簡単なシーケンサー的な処理が可能であり、ご自身でコマンドを作成することによって様々な動作をさせることができ、非常に広範囲に応用可能です。
 RS232Cとの接続にMAX232を省略した簡易インターフェイスとしています。長距離伝送する場合は、MAX232等を使用した回路に変更する必要が有ると思われます。

●お送りする部品リスト
部品名 型式等 数量
PIC 16F887 1個
ICソケット 40ピン 1個
D-SUBコネクタ メス 1個
抵抗 1kΩ、33kΩ前後×2本 一式
LED 赤色等 1個


●仕様
 ・電源電圧は5Vまたはその近傍でお使いください。
 ・RS-232Cの通信速度は9600bpsです(8ビット、パリティー無し、ストップビット1、フロー無し)。
 ・データサンプリング、制御出力の周期は使用条件に変化するかもしれません。最大で数回/秒程度とお考えください。
 ・電源をA/Dコンバータのレファレンスとして使っておりますので,安定(温度的にも)した5Vの電源が必要です。
 ・デジタル出力は、8ビット毎(ポート毎)に行うことができます。
 ・アナログ入力の入力インピーダンスはオペアンプ等を利用し出来るだけ低いものを使用してください。時間応答は犠牲になりますが、0.1uF程度のコンデンサを使用することで比較的高インピーダンスでも使用可能です。
 ・PCからのコマンドの送出周期が短すぎると正常に動作しません。必要に応じて返答を確認して下さい。
 ・PICの6番ピンをVdd/GNDに接続することによって、パソコンとのデータ信号を論理反転できます。これによって、MAX232等のレベル変換ICを使用する際は6番ピンをGNDに接続してください。

●データ要求等のコマンド
 ・「アナログ入力」、「デジタル入力」、「デジタル出力」、「ウェイト」、「繰り返し」の5種類が有ります。また条件によって処理を行う「条件判定」が有ります。
 ・正常に受け付けたことを確認するため、受信したコマンドをそのまま返します。また、下記のフォーマットと一致しない場合や、コマンドが96バイトより長すぎる場合は「ERR」を返します。
 ・また、それぞれのコマンドは内部で処理しやすい形に変換しますが、ステップ数が47を越えると実行出来ずに「ERR」を返します。
 ・「アナログ入力」のA/D変換後の数値の取得は、「g0」に続いてチャンネル番号(「0」〜「7」)を送信します。例:7チャンネルに入力されているアナログ電圧のA/D変換値は、「g07」を送信することによって10進数で取得できます。
 ・「デジタル入力」の取得は、「z」を送信することによってポートの状態を8ビットと考え、10進数で返します。
 ・下記の繰り返し処理を使って、アナログ入力、デジタル入力を自動的に連続的に行うことも可能です。例えば、「g00L」とすれば、0チャンネルのアナログ入力のA/D変換値を繰り返し受け取ることが可能です(処理は少し遅いです)。
 ・「デジタル出力」は、X,Yの2つのポートに送信します。コマンドは、ポート名(「X」または「Y」)に続いて16進数2桁で指定します。例:ポートYをすべてHにするのは「YFF」を送信します。
 ・「ウエイト」は0.1秒単位で指定することが出来ます。「w」に続く2桁の10進数で指定します。1秒のウエイトは「w10」とします。9.9秒以上のウェイトが必要な場合は、このコマンドを複数繰り返すことで可能です。時間精度はそれほど高くないです。
 ・繰り返しコマンドは「L」です。繰り返しコマンドは通常は一連の最後に置き、これによって最初に処理が戻ります。また、このコマンドを実行すると「CONTINUE」を返信します。条件判定文の中にも入れることによって多彩な処理が可能となります。
 ・アルファベットの大文字と小文字は(条件判定の「z」および「Z」のみ例外)同様に使用可能です。
 ・ハイパーターミナルではなく、プログラムを作成する場合、一連のコマンドの最後に改行コードも送信してください(0x0dまたは0x0a)。また、PICからの応答の最後には0x0aのみを送信します。ハイパーターミナルでは正常(次行先頭)に改行が行われません(下記の動作例をキャプチャした後に変更しました。)。
 ・ウェイトを中断したい場合は、何か1文字を送信します(繰り返し処理の中にウェイトが無い等、処理状態によっては中断を受け付けにくい時が有りますので、その場合は送信を繰り返してください。)。
 ・ハイパーターミナルを使用した動作の例が下に有ります。
 ・例:
  「XFFw20YFFw10X00」とすると、ポートXを0xFFとし、2秒後にポートYを0xFFとし、1秒後にポートXを0x00とします。

●条件判定の文法
 条件判定は、「if ...then ...else ... endif」をイメージして作成しました。制約は多いですが、簡単な動作ならプログラム可能です。
 制約1:if文の中にif分を入れるような構造や、複数の条件のand, orを判定することはできません。
 制約2:条件が一致した場合の処理は可能ですが、条件が成立しなかったときの処理(else以下)の処理は直接できませんので工夫が必要です。
 制約3:アナログ入力の比較は、"<"および">"のみが可能であり、"="、"<="、"=>"は使えません。
 条件判定文は、文字列をできるだけ短く表現できるように、「if」という文字列を省略します。また、条件記述部分で、アナログ入力は「g0」〜「g7」と表現します(「0」を省きます)。
 例えば「(g0<512,xff)」とカッコでくくる文を条件判定文と解釈し、「,」より前が条件、後が条件が一致したときに実行するコマンドを意味し、この場合0チャンネルのアナログ入力をA/D変換し、その値が512未満の場合、ポートXをすべてHにします。
 また、条件判定文の条件部分で、デジタル入力に関する記述はビット毎の判定と、8ビットすべての判定があり、ともにz、Zを使用し、次の様に記載します。
 ビット毎の判定は、zまたはZに続く数値がビットを意味し、小文字のzは入力がLを、大文字のZは入力がHで有ることを表します。例えば「(z0,x00)」と記載すると、デジタル入力の0ビット(最下位ビット)がLの場合ポートXをすべてLにします。
 8ビットすべての判定は「Z=」または「Z!」に続き2桁の16進数(8ビット分)を記述します。例えば「Z=aa」とは「デジタル入力が0xaaと一致」を「Z!12」とは「デジタル入力が0x12と不一致」を意味します。
 これらデジタル入力に関する条件文についてのみ大文字と小文字を区別します。
 文章で表現すると難しいですが、わかりやすいように下記に例文を記載しておきます。
 また、条件に一致した場合は「TRUE」を、一致しなかった場合は「FALSE」を返します。

●PIC単体処理
 パソコンと接続しなくても単体で処理をすることができる機能です。
 パソコンから送ったコマンドを解析した後にその都度内部のEEPROMに保存しております。また、電源投入時に、EEPROMの中身を確認し、解析済みコマンドが保存されている場合、それを実行します(この時パソコンは不用です)。
 要するに、パソコンでコマンドを書き込み、パソコン無しでコマンドを実行することができます。また、アナログ入力、デジタル入力の状態によって処理を変える様な「条件判定」も可能です。
 これを使えば、PIC単体で、例えば、イルミネーション的にLEDを順次点灯するものの様にシーケンサー的に動作させるオリジナル回路を製作可能です。
 パソコンと接続してコマンドを書き込むための基板と実際に組み上げる基板を別々に作成した場合、後者の基板では、D-SUBコネクタ、LED、抵抗等のパソコン接続のためのパーツが不用であるため、大変シンプルな回路構成となります。

 (注意)PCからの正常なコマンド受信のたびにEEPROMに書き込むため、書き込み回数が相当多くなる場合などはEEPROMが寿命に達してしまい使えなくなる可能性が有ります。EEPROMが使用できなくなっても内部RAMを使用したPCとの連携処理は可能ですが、単体処理は使用できなくなってしまいます。

●コマンドの例
 例:「x01y80x02y40x04y20x08y10x10y08x20y04x40y02x80y01x00y00L」の実行例
   http://www.youtube.com/watch?v=KtuOPa35-kE
   LEDのイルミネーションです

 例:「x01w02x02w02x04w02x08w02x00w01y80w01y40w01y20w01y10w01y08w01y04w01y02w01y01w01y00L 」の実行例
   http://www.youtube.com/watch?v=PWvCZzUL9AQ
   LEDのイルミネーションです

 例:「(z7,x01w02x03w02x02w02x06w02x04w02x0cw02x08w02x18w02x10w02x11w02)x01L」の実行例
   5相のステッピングモータの1−2相励磁を実現しています。デジタル入力のビット7がLになることによって動作します。わかりやすいようスピードを下げるため、各ステップ間に0.2秒のウェイトを入れています。
   http://www.youtube.com/watch?v=JMIliyoMNwk

 例:「(g0<100,x00L)(g0<200,x01L)(g0<300,x02L)(g0<400,x04L)(g0<500,x08L)(g0<600,x10L)L 」の実行例
   http://www.youtube.com/watch?v=lBUO1UvLaA4
   レベルメータ的に動作します。チャンネル0のアナログ入力の数値によってポートXのLEDの点灯位置が移動します。


 その他、アナログ入力やデジタル入力に応じて7セグメントLEDを表示させるなどが考えられます。
 また、アナログ入力に温度センサーを接続し、温度が上昇しある値になればファン用ON出力、さらに温度が上昇すれば2台目のファン用ON出力なども可能です。

●応用例
 ・温度などの長期計測
 ・アナログ値の監視
 ・照明等の制御

●通信ソフト
 通信ソフトは添付しておりません。WINDOWS付属のハイパーターミナル等が使用可能です。

 ポート数が少ない16F88用のものですが、EXCELマクロで作成した物が有ります。こちらをご覧頂ければと思います。

★仕様変更対応の範囲
 ・仕様変更はありません

●サポートについて
 コマンドの作成依頼や、問い合わせ等はご遠慮願います。また上記文例では動作することを確認しておりますが、想定外のコマンドによって正常に処理できないことが有るかもしれません。この場合の補償はお許し願います。


●類似品について
 18ピンのコンパクトなPIC(16F88)を使用した物も作成しております。
 

準備中です
テスト回路(D-sub3番ピンのプルダウン抵抗未実装)

準備中です
テスト回路(D-sub3番ピンのプルダウン抵抗未実装)



準備中です
テスト回路の回路図

準備中です
ハイパーターミナルの動作例
(これでは、ウェイトは1秒単位で指定しておりますが、現在の仕様では0.1秒単位となっています。また、改行コード見直しのため現在の物とは表示が少し異なります。)

準備中です
ハイパーターミナルの設定


●オークション関係トップページへ(他にもいろいろと出品しています)
●PIC関連の出品物の入札を考えている方に(必ずお読み下さい)