PIC関連メモ/用語集

Last-modified: 2011-12-07 (水) 17:19:23

キーマトリクス

(1)4つのポートにスイッチを直列で各ポートにつき4つずつつなぐ(16個)。
(2)スイッチのもう一方に横から4つのアウトポートをつなげる
(3)(2)を順番にONして、(1)の状態を読み取る

8個のポートで16個のボタンの状態を読み取れるというストーリ。

コンフィギュレーション

コンフィギュレーションには3つあるような気がする
(1)プログラムと直接関係ないが、周辺機能的な内容の決定
(2)複数の役割があるPINのどの機能を使うかを決める
(3)I/Oの入力と出力の方向を決定する
 
(1) に関しては、コードプロテクトとか、クロックは外部or内部とか、ウォッチドッグタイマは使うのかとか、リセットは有効かとか。
どのようにして使うかは、コンパイラによっても異なるけど、
__CONFIG _CP_OFF & _WDT_OFF & _MCLRE_OFF & _IntRC_OSC
のようにして設定する。
 
(2)に関しては、GP2/TOCKI/FOSC4 みたいにあったら、はI/0ポートとして使用することもできれば、
タイマ割り込み用のクロックの入力、あるいは内部クロックの1/4周波数の出力にも使える(兼用になってる)。
だから、どの機能として使うかをコンフィギュレーションしてやる必要がある。
これは、特定のレジスタのビットを立てたり下したりすることもあれば、
(1)の結果、変わるものもある。たとえば、リセットを無効にすると(_MCLRE_OFF)I/Oピンになれる…というものもあるようだ。

 
(3)に関しては、
bsf STATUS,RPO ;bank=1
bcf TRISI0,0
bcf STATUS,RPO ;bank=O
のようにして、TRISIOのビットを0にすると出力になる。
PICで、I/Oポートのデフォルト(POR:Power On Reset)値は入力である。
 
上記では、バンクの切り替えをしているが、どのバンクにどのレジスタがあるかは、
そのCPUのデータシートを見ないとわからない。
 
なお、貧弱なCPUの中では、
movlf b'11111110'
TRIS GPIO
のように、命令が存在しないために、妙な命令での代用が必要なこともある。

サイクル(1サイクル)

1つの処理。PICでは1サイクル=4クロックであるのが標準。
どうも、命令の読み出しに2クロック、命令の実行に2クロック使っているらしい。
4MHzで動作するCPUは、1命令1μsecで動くよとか言われるのは、このため。
ちなみに、CALLとgotoなどは例外で、2サイクル使用するらしい。
DECFSZ(decrement f skip if zero)などは、DECREMENTは1サイクルだが、skip(=goto)は2サイクルなので、
条件が成立したときだけ2サイクル使用する。
 
結構、いい加減な時間測定にはこいつを使用することもある。
いい加減な時間測定になる理由は2つあって
(1)サイクル数がぴったり1000とかにするのは難しい
(2)内部クロックがずれている
 
(2)は要するにOSCCALのこと。
起動時にWレジスタにOSCCALの値が入るようになっていて、movwf OSCCAL (move w to file register)としてやるが、
このとき、movlw Ox26のようにして、リテラルとしてwに別の値を入れれば、OSCCALを補正できる。
 
BSFでOSCCALのFOSC4ビットをオンにすると、これによりPICの3番ピンはI/0としてではなく、
1/4クロックの周波数出力ピンとして動作させられるので、
ここにオシロを当ててチェックするという流れ。

バリコン:

バリアブルコンデンサーの略。電気容量を変えられるようにしたコンデンサ。
コンデンサの金属板を回転させることで、コンデンサのSを可変にしている。

メイク接点(a接点)とブレイク接点(b接点)

アクティブハイのスイッチがa接点で、アクティブローのスイッチがb接点

ブロックダイアログ

PIC10F200の内部を表した図。BLOCK DIAGRAM。
ALUとかのブロック図が書いてあって、「どうでもいいよ」と読み流してしまいがちだが、
実はプログラムのときに見ておくべき内容がある。

プログラム可能なステップ数

Flash 256X12 Program Memory
12bit の命令を 256個(256ステップ)まで書けるよという意味

I/Oピンの入出力

GPIOというブロック図から、外側のPINにどういう矢印が出ているか。
双方向の矢印なら入出力として使える。
外側から内側(GPIOとある方向)にしか矢印がない場合は、入力としてしか使えない。

メイク接点(a接点)とブレイク接点(b接点)

:アクティブハイのスイッチがa接点で、アクティブローのスイッチがb接点

リセットベクタ

PICに電源が投入されたり、あるいはリセット動作が行われた場合、最初に実行されるアドレスのことで
PICは000番から順番に命令を実行する。
 
したがって、PICのプログラムは#includeや__CONFIGの後に

 ORG 0x000

と書くのがお約束である。

ワード

そのCPUで最も自然な命令幅のこと。
32ビットCPUなら4バイトが1ワード。
PICでは,CPUのグレードによって12bitだったり、もう少し高機能だと14bitが1ワードだったり。
CPUによっては命令ごとに命令幅がまちまちなことも多いが、PICは全ての命令が1ワードに収まっている。

割り込みベクタ

割り込み機能を持つCPUだけが持つアドレスのこと。
割り込みが発生すると、このアドレスに飛んでくる。
PICでは、0x004である。

したがって、下記のようなプログラムはお約束となっている。

 ORG 0x000
 goto main
;割り込みハンドラ
 ORG 0x004
 (割り込み処理)
 retfie
main
 (メイン処理)