PIC16F877周辺機能の使用

タイマーモードと割り込み

タイマーモードはPIC16F877のタイマ0モジュールを使って実現しています。
割り込み回数をカウントするレジスタ(割り込み数カウンタ)と秒数をカウントする
レジスタ(秒数カウンタ)を用意し、割り込み回数から1秒を判断して秒数カウンタ
をインクリメントしてゆき、インターバルになるたびに指定されたコマンド群を実行します。
1秒間あたりの割り込み回数(K)

=1秒÷{(1/クロック周波数)×1命令サイクル×プリスケール値×タイマ0オーバーフロー値}
=1秒÷{(1/クロック周波数)×  4    ×  4    ×   256      }


20MHz :K≒4883 (+0.00384%の誤差あり)
12.8MHz :K=3128



I2C通信の使用

I2C転送クロックの計算(MSSPモジュールのBRGの設定値)

I2Cのデータ転送はPIC16F877のMSSPモジュールを使って実現しています。
最高動作クロック400KHzで動作させるときの1/2波長('L'または'H')の時間は
(1/400KHz)/2=1.25μS
BRGではQ2、Q4でデクリメントされるため、CPUクロックの2倍の波長を計算すると
20MHz :(1/20MHz)*2=0.1μS
12.8MHz :(1/12.8MHz)*2=0.156μS
よって、SSPADDレジスタに代入する値は
20MHz :1.25μS/0.1μS≒13
12.8MHz :1.25/0.156μS≒8


24LC256(EEPROM IC)の使用

全ページ数512ページを下表のように使用しています。(1ページあたり64バイト)
EEPROMのページ割り当て

EEPROMページ割り当て
ページ範囲ページ数内容
未使用
1〜400(H'1'〜H'190')400データの保存。1ページにつき1レコード
401(H'191')コマンドファイル中のラベルのアドレステーブル
402〜511(H'192'〜H'1FF')110コマンドファイルの保存



RS232C通信の設定

RS232C通信はPIC16F877のUSARTモジュールを使用して実現しています。
USARTモジュールを以下の設定で使用します。
BRGH=1で使用する時のボーレート計算式は
ボーレート=Fosc/(16(X+1))
X=SPBRGレジスタに設定する値
であるので、9600bpsのSPBRGレジスタの値Xは
X=(Fosc/9600*16)−1

20MHz :X≒129
12.8MHz :X≒82


テキストファイルの送受信

24LC256に保存されている測定データとコマンドファイルの送信。

24LC256から1バイトずつ読み込み、USARTに渡してRS232Cに出力する。

コマンドファイルの受信

24LC256のページ書き込みを使って処理している。
24LC256の1ページ分(64バイト)の送信にかかる時間はクロック周波数を400KHz
として計算すると約1.5mS。それに最大書き込み時間5mSを足すと6.5mSになる。一方
RS232Cの通信速度を9600bpsにすると、パソコンから1バイト受信するための時間は
約1mSになる。USARTが7バイト目を読み込んでいる途中で、24LC256の1ページ分
に対する書き込みはほとんど終わる計算になる。

  1. PIC16F877のRAMエリアBANK2、BANK3のそれぞれに連続した
    64バイトのエリアを用意する。
  2. パソコンから送られてきたデータをBANK2に格納してゆく。
  3. BANK2がいっぱいになったら(64バイト格納したら)格納先をBANK3に
    切り替えて、BANK2の内容を24LC256に転送し、ページ書き込み機能で書き
    込みを行う。
  4. BANK3がいっぱいになったら(64バイト格納したら)格納先をBANK2に
    切り替えて、BANK3の内容を24LC256に転送し、ページ書き込み機能で書き
    込みを行う。
  5. パソコンから送られてくるデータがなくなるまでBCを繰り返してデータの受信・
    書き込みを行う。