Base kernel Logo(4,742bytes) Electronics branch Logo(5,335bytes)

■PICNICキット/完成品 概要は→  こちら

PICNIC Ver.1  秋月電子通商などで販売されている Tristate 製 PICNICの紹介です。
 PICNICは、それ単体ではあまり面白いことは出来ません。
 応用はPICNICを 手にした方々自身が開拓していく代物です。
 PICNIC自体がそれ自身で完結していない代物だからです。

 弊社では、PICNICを、温度センサーの計測データを Web サイト に表示させるために使用するLANインタフェースに利用しています。

 PICNICには Ethernet と RS232C、Web ブラウザ経由で制御できる簡単な I/O ポート制御ファームウェアが PIC16F877 に組み込まれていますが、 これだけだと出来る事が限られてしまうことも事実です。

 加えて、まとまったデータがトランジスタ技術 2001年1月号にしかなく、 当方のようにこれを買えなかったり、2001年1月以降に PICNIC を知った方々にとっては、 「使って見たくてもなかなか使えない」代物であることも否定できません。

 ここでは、PICNIC の制御方法を紹介します。(LCDを除く)

PICNIC 使用温度センサーについては  → こちら

■ PICNIC 制御方法

●予備知識として...(PICNIC 付属の説明書と合わせてご覧ください)
  • PICNIC を制御するには、ある程度、PIC に関する知識が必要です。
  • PICNIC を制御するには、パラレルポートにおけるプロトコルを知る必要があります。
    この情報があまり無いことが、PICNICを遠い存在にしている一つの理由です。
  • PICNIC は パラレルポートと呼ばれるポート番号を使用して、UDP プロトコルで制御します。
  • PICNIC の パラレルポート番号は、「ブートストラップモード」と呼ばれるモードにて変更できます。
    (デフォルト= 10001)
  • PICNIC は、Ethernet 側と RS232C の 双方向通信が可能で、その時の Ethernet 側の入出力ポートを、
    「シリアルポート」と言います。
  • PICNIC の シリアルポート番号は、「ブートストラップモード」と呼ばれるモードにて変更できます。
    (デフォルト= 10002)
  • Perl で PICNIC の制御プログラムを記述する場合、他の言語のようにライブラリを使うより、
    直接 PICNIC を制御するようにした方が格段に判りやすいです。
    当方では、その方針を基本にしています。(複雑なプロトコルではないので)
  • PICNIC の制御対象とする装置類は、CN2 の 26ピンコネクタを介して接続するようにしてください。
    CN5 の 14ピンコネクタはLCD用です。
●CN2 ピンアサイン(PICNIC 付属の説明書と合わせてご覧ください)

26252423222120 191817161514 RA0-RA3 回路
RB4-RB7 回路
GNDGNDGNDGNDGNDGNDGND GNDGNDGNDGNDGNDGND
RA0RA1RA2RA3RB0RB1RB2 RB3RB4RB5RB6RB7+5V
1234567 8910111213

 RA0-RA3、RB4-RB7 に外部装置を接続する際、PICNIC 側の回路は提示するような回路になっているので、
場合によっては考慮する必要があります。

RA0-RA3 はアナログ入力ピン(A-Dコンバータ内蔵)、RB0-RB7 はディジタル入出力ピン。
RA4は PIC16F877 の仕様上、オープンドレインです。
RA5は アナログ出力タイプの温度センサー LM35DZ を接続するように意図されています。
RAポートのA−D変換精度は 10bit 、Vref は電源電圧(+5V) です。
ディジタル入出力ピンのうち、RB0-RB3 は初期状態では入力、RB4-RB7 は初期状態では出力。
RB0-RB7 の入出力は、パラレルポートに対して後述するプロトコルに従ってデータを送信することで、変更可能です。

●パラレルポートプロトコル

コマンド機能の説明コードデータ
GetStatusPICNIC 側の現在のI/O ポートの状態取得 00 
SetHigh/SetInputPIC16F877のPortのビット番号 Bitを「H」/入力にする 01PortBit 
SetLow/SetOutputPIC16F877のPortのビット番号 Bitを「L」/出力にする 02PortBit 
SetWholePIC16F877のPortへデータ出力 03PortSizeMaskValue[MaskValue].....
GetADCPIC16F877の指定ch のA−D変換 04chWait 
SetRBPUPIC16F877 RB ポートの内蔵プルアップ 05flag 

 上記のバイナリデータ列をバイト単位でパラレルポートに送信することで、
必ず以下の8バイト長のレスポンスが返る仕様になっています。
(UDPなので、レスポンスが確認出来ない時の再送処理等のリトライがアプリケーションプログラム側で必要です)

RARBTRIS_RATRIS_RBAD_HAD_LADCON100

 ※後ろ1バイトは、必ずしも 00H ではなく、無意味なデータが入る場合があります。

 レスポンス時に得られる情報は、PIC16F877 の内部レジスタのデータそのものです。
 AD_H、AD_L は、A−D変換の結果が入り、GetADC コマンド以外は、意味の無いデータになります。
 RA0-RA3 の実測値は、(AD_H * 256 + AD_L) / 1024 * Vref で計算できます。

※データ部に指定できるパラメータなど
PortPIC16F877 のレジスタアドレス 05H=PORTA/06H=PORTB/85H=TRISA/86H=TRISB
Bitレジスタのビット位置 0=LSB .... 7=MSB
Size出力データ数 Mask+Value の対の数(1以上でなければならない)
Mask出力データマスク(通常は 00H を指定) I/O 状態を維持したいビットを1にする(AND演算)
Value出力実データ 出力したいデータそのもの
chA−D変換対象チャンネル指定 81H=RA0/89H=RA1/91H=RA2/99H=RA3/A1H=RA5
WaitA−D変換サンプリング時間 5μs 単位で指定。00H 指定の場合は、100H 指定と同様。
flag有効/無効00H で無効、00H 以外の値で有効。

トップページへ
days:0002 yesterday:0002 Total:005468