RS232C(シリアルポート)に接続する汎用入力、汎用出力用インターフェイス2-2
(2チャンネルアナログ入力、4ビットデジタル入力、4ビット×2デジタル出力)
●概要
パソコンの汎用I/Oインターフェイスを実現するためのものです。
PIC(ワンチップマイコン)を利用して、アナログ入力2チャンネル、デジタル入力4ビット、デジタル出力4ビット×2を有しています。
パソコンにはRS-232C(シリアル)ポートを通して通信を行います。アナログ入力のAD変換は10ビットであり、10ビット値をそのまま返します。
温度センサー、気圧センサー、加速度センサーなどを接続することによってパソコンでのデータの収集や、SSR等を接続し、様々な機器の制御に応用が可能です。
また、繰り返し処理、PIC単体処理に対応しており(詳細は別記)、ごく簡単なシーケンサー的な処理が可能であり、ご自身でコマンドを作成することによって様々な動作をさせることができ、非常に広範囲に応用可能です。
RS232Cとの接続にMAX232を省略した簡易インターフェイスとしています。長距離伝送する場合は、MAX232等を使用した回路に変更する必要が有ると思われます。
※これは先に作成した16F887を使用した物を変更し,お手軽に使用出来るようにしたものです。
●お送りする部品リスト
部品名 |
型式等 |
数量 |
PIC |
16F88 |
1個 |
D-SUBコネクタ |
メス |
1個 |
抵抗 |
1kΩ、33kΩ前後×2本 |
一式 |
LED |
赤色等 |
1個 |
SWダイオード |
(汎用) |
1個 |
●仕様
・電源電圧は5Vまたはその近傍でお使いください。
・RS-232Cの通信速度は9600bpsです(8ビット、パリティー無し、ストップビット1、フロー無し)。
・データサンプリング、制御出力の周期は使用条件に変化するかもしれません。最大で数回/秒程度とお考えください。
・電源をA/Dコンバータのレファレンスとして使っておりますので,安定(温度的にも)した5Vの電源が必要です。
・デジタル出力は、8ビット毎(ポート毎)に行うことができます。
・アナログ入力の入力インピーダンスはオペアンプ等を利用し出来るだけ低いものを使用してください。時間応答は犠牲になりますが、0.1uF程度のコンデンサを使用することで比較的高インピーダンスでも使用可能です。
・PCからのコマンドの送出周期が短すぎると正常に動作しません。必要に応じて返答を確認して下さい。
●データ要求等のコマンド
・「アナログ入力」、「デジタル入力」、「デジタル出力」、「ウェイト」、「繰り返し」の5種類が有ります。また条件によって処理を行う「条件判定」が有ります。
・正常に受け付けたことを確認するため、受信したコマンドをそのまま返します。また、下記のフォーマットと一致しない場合や、コマンドが96バイトより長すぎる場合は「ERR」を返します。
・また、それぞれのコマンドは内部で処理しやすい形に変換しますが、ステップ数が47を越えると実行出来ずに「ERR」を返します。
・「アナログ入力」のA/D変換後の数値の取得は、「g0」に続いてチャンネル番号(「0」〜「1」)を送信します。例:0チャンネルに入力されているアナログ電圧のA/D変換値は、「g00」を送信することによって10進数で取得できます。
・「デジタル入力」の取得は、「z」を送信することによってポートの状態を4ビットと考え、10進数で返します(0〜15)。
・下記の繰り返し処理を使って、アナログ入力、デジタル入力を自動的に連続的に行うことも可能です。例えば、「g00L」とすれば、0チャンネルのアナログ入力のA/D変換値を繰り返し受け取ることが可能です(処理は少し遅いです)。
・「デジタル出力」は、X,Yの2つのポートに送信します。コマンドは、ポート名(「X」または「Y」)に続いて16進数2桁で指定します(上位の桁は0である必要がある。16F887使用のセットと仕様を合わせているため。)。例:ポートYをすべてHにするのは「Y0F」を送信します。
・「ウエイト」は0.1秒単位で指定することが出来ます。「w」に続く2桁の10進数で指定します。1秒のウエイトは「w10」とします。9.9秒以上のウェイトが必要な場合は、このコマンドを複数繰り返すことで可能です。時間精度はそれほど高くないです。
・繰り返しコマンドは「L」です。繰り返しコマンドは通常は一連の最後に置き、これによって最初に処理が戻ります。また、このコマンドを実行すると「CONTINUE」を返信します。条件判定文の中にも入れることによって多彩な処理が可能となります。
・アルファベットの大文字と小文字は(条件判定の「z」および「Z」のみ例外)同様に使用可能です。
・ハイパーターミナルではなく、プログラムを作成する場合、一連のコマンドの最後に改行コードも送信してください(0x0dまたは0x0a)。また、PICからの応答の最後には0x0aのみを送信します。ハイパーターミナルでは正常(次行先頭)に改行が行われません。
・ウェイトを中断したい場合は、何か1文字を送信します(繰り返し処理の中にウェイトが無い等、処理状態によっては中断を受け付けにくい時が有りますので、その場合は送信を繰り返してください。)。
・ハイパーターミナルを使用した動作の例が下に有ります。
・例:
「X0Fw20Y0Fw10X00」とすると、ポートXを0x0Fとし、2秒後にポートYを0x0Fとし、1秒後にポートXを0x00とします。
●条件判定の文法
条件判定は、「if ...then ...else ... endif」をイメージして作成しました。制約は多いですが、簡単な動作ならプログラム可能です。
制約1:if文の中にif分を入れるような構造や、複数の条件のand,
orを判定することはできません。
制約2:条件が一致した場合の処理は可能ですが、条件が成立しなかったときの処理(else以下)の処理は直接できませんので工夫が必要です。
制約3:アナログ入力の比較は、"<"および">"のみが可能であり、"="、"<="、"=>"は使えません。
条件判定文は、文字列をできるだけ短く表現できるように、「if」という文字列を省略します。また、条件記述部分で、アナログ入力は「g0」〜「g7」と表現します(「0」を省きます)。
例えば「(g0<512,x0f)」とカッコでくくる文を条件判定文と解釈し、「,」より前が条件、後が条件が一致したときに実行するコマンドを意味し、この場合0チャンネルのアナログ入力をA/D変換し、その値が512未満の場合、ポートXをすべてHにします。
また、条件判定文の条件部分で、デジタル入力に関する記述はビット毎の判定と、4ビット一括の判定があり、ともにz、Zを使用し、次の様に記載します。
ビット毎の判定は、zまたはZに続く数値がビットを意味し、小文字のzは入力がLを、大文字のZは入力がHで有ることを表します。例えば「(z0,x00)」と記載すると、デジタル入力の0ビット(最下位ビット)がLの場合ポートXをすべてLにします。
4ビットすべての判定は「Z=」または「Z!」に続き2桁の16進数(上位4ビットは0,有効なのは下位4ビット分)を記述します。例えば「Z=0a」とは「デジタル入力が0x0aと一致」を「Z!02」とは「デジタル入力が0x02と不一致」を意味します。
これらデジタル入力に関する条件文についてのみ大文字と小文字を区別します。
文章で表現すると難しいですが、わかりやすいように下記に例文を記載しておきます。
また、条件に一致した場合は「TRUE」を、一致しなかった場合は「FALSE」を返します。
●PIC単体処理
パソコンと接続しなくても単体で処理をすることができる機能です。
パソコンから送ったコマンドを解析した後にその都度内部のEEPROMに保存しております。また、電源投入時に、EEPROMの中身を確認し、解析済みコマンドが保存されている場合、それを実行します(この時パソコンは不用です)。
要するに、パソコンでコマンドを書き込み、パソコン無しでコマンドを実行することができます。また、アナログ入力、デジタル入力の状態によって処理を変える様な「条件判定」も可能です。
これを使えば、PIC単体で、例えば、イルミネーション的にLEDを順次点灯するものの様にシーケンサー的に動作させるオリジナル回路を製作可能です。
パソコンと接続してコマンドを書き込むための基板と実際に組み上げる基板を別々に作成した場合、後者の基板では、D-SUBコネクタ、LED、抵抗等のパソコン接続のためのパーツが不用であるため、大変シンプルな回路構成となります。
(注意)PCからの正常なコマンド受信のたびにEEPROMに書き込むため、書き込み回数が相当多くなる場合などはEEPROMが寿命に達してしまい使えなくなる可能性が有ります。EEPROMが使用できなくなっても内部RAMを使用したPCとの連携処理は可能ですが、単体処理は使用できなくなってしまいます。
●コマンドの例
例:「(Z=00,X0f)(Z!00,X00)L」の実行例
デジタル入力がすべてLならポートXをすべてHに、デジタル入力1ビットでもHならポートXをすべてLにする。
例:「x00y00(z0,x01w01x02w01x04w01x08w01)x00(z1,y01w01y02w01y04w01y08w01)L」の実行例
デジタル入力0ビットがLならばポートXの出力が順次Hに、デジタル入力1ビットがLならポートYの出力を順次Hにする。途中0.1sのウェイトを入れている。
例:「(g1<100,x00L)(g1>120,x01)L」の実行例
アナログ1チャンネルの入力が約0.6V(=120/1023*5)以上ならポートXの最下位をHに、約0.5V(=100/1023*5)以下ならLにする(電源電圧5V時)。
例:「(g0<200,x00y00L)(g0>400,x0f)(g0>600,y0fy00)L」の実行例
アナログ0チャンネルの入力が約3V(=600/1023*5)以上ならポートYをHL繰り返し、約2V(=400/1023*5)以上ならポートXをすべてHに、約1V(=200/1023*5)以下なら両ポートともすべてLにする(電源電圧5V時)。
例えばアナログ入力に温度センサーを接続し、温度が上昇しある値になればファン用ON出力、さらに温度が上昇すれば2台目のファン用ON出力なども可能です。
●応用例
・温度などの長期計測
・アナログ値の監視
・照明等の制御
●通信ソフト
・通信ソフトは添付しておりません。WINDOWS付属のハイパーターミナル等が使用可能です。
・EXCELのマクロを作成してみました。環境によっては動作しないかもしれません。これを参考に拡張してください。(サポートはできません。)
★仕様変更対応の範囲
・仕様変更はありません
●サポートについて
コマンドの作成依頼や、問い合わせ等はご遠慮願います。また上記文例では動作することを確認しておりますが、想定外のコマンドによって正常に処理できないことが有るかもしれません。この場合の補償はお許し願います。
●類似品について
40ピンと大きなPIC(16F887)を使用した物を作成しております(これを先に作成しました)。
動作例等も掲載しております。

テスト回路(デジタル入力としてタクトスイッチを、デジタル出力としてLEDを実装しています)
写真撮影時点では実装しておりませんが、PIC4番ピンのSWダイオードは必要です。

テスト回路

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