
 秋月電子通商などで販売されている Tristate 製 PICNICの紹介です。弊社では、PICNICを、温度センサーの計測データを Web サイトに表示させるために使用するLANインタフェースに利用しています。
PICNICには Ethernet と RS232C、Web ブラウザ経由で制御できる簡単なI/O ポート制御ファームウェアが PIC16F877 に組み込まれていますが、これだけだと出来る事が限られてしまうことも事実です。
加えて、まとまったデータがトランジスタ技術 2001年1月号にしかなく、当方のようにこれを買えなかったり、2001年1月以降に PICNIC を知った方々にとっては、「使って見たくてもなかなか使えない」代物であることも否定できません。
ここでは、PICNIC の制御方法を紹介します。(LCDを除く)
PICNIC 使用温度センサーについてはこちら → DS1820温度センサーRA0-RA3 回路![]()  | 
        RB4-RB7 回路    | 
        26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 | 15 | 14 | 
| GND | GND | GND | GND | GND | GND | GND | GND | GND | GND | GND | GND | GND | ||
| RA0 | RA1 | RA2 | RA3 | RB0 | RB1 | RB2 | RB3 | RB4 | RB5 | RB6 | RB7 | +5V | ||
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 
 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 の入出力は、パラレルポートに対して後述するプロトコルに従ってデータを送信することで、変更可能です。
| コマンド | 機能の説明 | コード | データ | ||||||
|---|---|---|---|---|---|---|---|---|---|
| GetStatus | PICNIC 側の現在のI/O ポートの状態取得 | 00 | |||||||
| SetHigh/SetInput | PIC16F877のPortのビット番号 Bitを「H」/入力にする | 01 | Port | Bit | |||||
| SetLow/SetOutput | PIC16F877のPortのビット番号 Bitを「L」/出力にする | 02 | Port | Bit | |||||
| SetWhole | PIC16F877のPortへデータ出力 | 03 | Port | Size | Mask | Value | [Mask | Value]..... | |
| GetADC | PIC16F877の指定ch のA−D変換 | 04 | ch | Wait | |||||
| SetRBPU | PIC16F877 RB ポートの内蔵プルアップ | 05 | flag | ||||||
 上記のバイナリデータ列をバイト単位でパラレルポートに送信することで、
      必ず以下の8バイト長のレスポンスが返る仕様になっています。
  
| RA | RB | TRIS_RA | TRIS_RB | AD_H | AD_L | ADCON1 | 00 | 
 レスポンス時に得られる情報は、PIC16F877 の内部レジスタのデータそのものです。
      AD_H、AD_L は、A−D変換の結果が入り、GetADC コマンド以外は、意味の無いデータになります。
      RA0-RA3 の実測値は、(AD_H * 256 + AD_L) / 1024 * Vref で計算できます。
| Port | PIC16F877 のレジスタアドレス | 05H=PORTA/06H=PORTB/85H=TRISA/86H=TRISB | 
| Bit | レジスタのビット位置 | 0=LSB .... 7=MSB | 
| Size | 出力データ数 | Mask+Value の対の数(1以上でなければならない) | 
| Mask | 出力データマスク(通常は 00H を指定) | I/O 状態を維持したいビットを1にする(AND演算) | 
| Value | 出力実データ | 出力したいデータそのもの | 
| ch | A−D変換対象チャンネル指定 | 81H=RA0/89H=RA1/91H=RA2/99H=RA3/A1H=RA5 | 
| Wait | A−D変換サンプリング時間 | 5μs 単位で指定。00H 指定の場合は、100H 指定と同様。 | 
| flag | 有効/無効 | 00H で無効、00H 以外の値で有効。 |