弊社では、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 以外の値で有効。 |