PICマイコンを使って測定ツールを作ってみよう(4) ―― ネットワークでセンサ・データを集めて省電力生活を目指す

中西 紫朗

tag: 組み込み 電子回路

エレキ系DIY 2011年6月10日

 実際の送受信の順序関係を図6に示します.

 

図6 ホストとマスタとスレーブの送受信ハンドシェーク

 

 また,電源を入れたときのマスタとスレーブの液晶ディスプレイの表示を写真1に示します.

 

写真1 電源を入れたときのマスタとスレーブの液晶ディスプレイ

 

 ホストとマスタとスレーブの間のコマンドと応答のやりとりは,単一のスレーブに送るコマンドと全スレーブに送るコマンドで異なります.

 単一のスレーブへのコマンド送信では,まず,ホストがマスタにコマンドを送信します.これを受けてマスタのPICマイコンは,ホストのパソコンに受信したことを示すACKを返します.何らかの理由でコマンドを実行できないときはNAKを返します.現在は,まだそのまま受けとったパケットを返しています.これは,VBの画面では各スレーブ・フレーム内の応答メッセージのテキストボックス(Text7,8,9)に表示されます(図7).

 

図7 電源を入れたときのVB6の表示画面

 

 これに対して,最初にこのVB6のプログラムを実行したときは,すでにframe_Load()関数の中で,全スレーブIDに対するリセット・コマンドを発行しています.マスタへの応答メッセージとして,マスタ・フレーム内のテキストボックス(text11)に「C0 FE 4 A 1 2 3」が表示されます.コマンドはRS-485ネットワークのものと区別するため,リセットは0xC0,PINGは0xC1,READは0xC2,WRITEは0xC3と,それぞれ0xC0を足した値を使っています.0xFEはブロード・キャスト用のIDで,全スレーブIDに送りたいときに使います.通常,全スレーブから同時に返信を返すとぶつかってしまうので,応答は行いません.

 ここで,例えばスレーブ#1にリセット・コマンドを発行しましょう.するとスレーブ#1の液晶ディスプレイには「RST #1」の文字が現れ,スレーブ#2とスレーブ#3には,「8//q1311」とスレーブ#1が返信したパケットが表示されます(写真2図8).見やすくするためにすべて0x30を足して表示しています.

 

写真2 スレーブ#1に対してリセット・コマンドを発行したときの液晶ディスプレイ

 

図8 スレーブ#1に対してリセットコマンドを発行したときのVB6の表示画面

 

 最初の数字は受信したバイト数です.次の「/」はスタート・フラグの0xFFに0x30を足した結果の0x2Fというコードを表示したものです.デバッグ・モードでないときは,関係ないスレーブにはいっさいメッセージは表示されません.しかしこのように,実際には自分に向けられたメッセージかどうかを判別するために受信しています.

 先のUSBの送受信と同じように,タスク同士の衝突を避けるために,巧妙にフラグを利用しています.マスタでは,通信ステージ(COM_stage)という状態変数を利用しています.通信ステージは,マスタからスレーブへの送信では0,逆にスレーブからマスタへの送信では1になります.例えば通信ステージが1のときは,決して新たなコマンド送信が行えないことになります.こうやって,まだ応答の受信が終了していないのに新たなコマンドを発行する,といった状態を防ぎます.

 また,応答の受信は割り込みで受けるため,rcv_completeという受信完了フラグを利用しています.パケットを受信して,その中のパケットの長さからどこまでパケットを受信すればいいかを決定します.全部受信してから,この受信完了フラグを1にします.それから実際のメイン・ループで,それを応答メッセージとしてホストに返信します.これでホスト,マスタ,スレーブの間の送受信プロセスが終了します.

 今回は,まだリセット・コマンドとPINGコマンドの差はありません.受け取ったスレーブはほとんど何もしません.しかし次回以降は,ネットワークを利用したA-D変換測定などが加わり,大きく差が出てきます.つまりPINGは,内部状態を何も変えないで応答のみを返すのに対し,リセットではA-D変換の諸設定やI/Oバッファ内容など,すべてをクリアしてしまいます.

 

なかにし・しろう
(有)NSL

 

 

組み込みキャッチアップ

お知らせ 一覧を見る

電子書籍の最新刊! FPGAマガジン No.12『ARMコアFPGA×Linux初体験』好評発売中

FPGAマガジン No.11『性能UP! アルゴリズム×手仕上げHDL』好評発売中! PDF版もあります

PICK UP用語

EV(電気自動車)

関連記事

EnOcean

関連記事

Android

関連記事

ニュース 一覧を見る
Tech Villageブログ

渡辺のぼるのロボコン・プロモータ日記

2年ぶりのブログ更新w

2016年10月 9日

Hamana Project

Hamana-8最終打ち上げ報告(その2)

2012年6月26日