PIC16F877周辺機能の使用
タイマーモードと割り込み
タイマーモードはPIC16F877のタイマ0モジュールを使って実現しています。
割り込み回数をカウントするレジスタ(割り込み数カウンタ)と秒数をカウントする
レジスタ(秒数カウンタ)を用意し、割り込み回数から1秒を判断して秒数カウンタ
をインクリメントしてゆき、インターバルになるたびに指定されたコマンド群を実行します。
1秒間あたりの割り込み回数(K)
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ページ割り当て
ページ範囲 | ページ数 | 内容 |
0 | 1 | 未使用 |
1〜400(H'1'〜H'190') | 400 | データの保存。1ページにつき1レコード |
401(H'191') | 1 | コマンドファイル中のラベルのアドレステーブル |
402〜511(H'192'〜H'1FF') | 110 | コマンドファイルの保存 |
RS232C通信の設定
RS232C通信はPIC16F877のUSARTモジュールを使用して実現しています。
USARTモジュールを以下の設定で使用します。
- ボーレート :9600bps
- データ長 :8ビット
- ストップビット :1
- フロー制御 :なし
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ページ分
に対する書き込みはほとんど終わる計算になる。
- PIC16F877のRAMエリアBANK2、BANK3のそれぞれに連続した
64バイトのエリアを用意する。
- パソコンから送られてきたデータをBANK2に格納してゆく。
- BANK2がいっぱいになったら(64バイト格納したら)格納先をBANK3に
切り替えて、BANK2の内容を24LC256に転送し、ページ書き込み機能で書き
込みを行う。
- BANK3がいっぱいになったら(64バイト格納したら)格納先をBANK2に
切り替えて、BANK3の内容を24LC256に転送し、ページ書き込み機能で書き
込みを行う。
- パソコンから送られてくるデータがなくなるまでBCを繰り返してデータの受信・
書き込みを行う。