PICはマイクロチップ社が提供する、1チップ(1個のIC)で、制御が可能な小型プロセッサ(計算機)です。PICにもベースライン、ミドルレンジ、ハイエンド、の3シリーズがあります。ハイエンドのPICでは、プログラムのステップ数は16k、データメモリは1.5kバイトになり、10bitのAD変換や、34本の信号を制御可能です。
プログラムメモリは書き換え可能なROM(電源を落としても忘れないメモリ)で、ここにプログラムを記録します。データメモリはRAMで、高速な読みだしや書き込みが可能です。PICはレジスタを通して、PICの外部端子(信号線)を制御します。ポート端子は最大8*3本のディジタル信号の状態を同時に読み出したり、値を出力できます。カウンタ/タイマは、プログラムで指定した周期の信号を出力したり、計数できます。これらの端子は TTL とよぶ通常のディジタルICと直接接続可能です。
シリアル通信は、RS232C方式で外部のプロセッサと情報の交換ができます。RS232Cドライバ用のICを介してシリアル端子をもつWindowsのPCとも接続可能です。アナログ変換はアナログ信号を入力とし、それをディジタル信号に変換する機能があります。
メモリは記憶装置の意味です。メモリには 番地(アドレス)信号があり、指定した番地のメモリに記録をしたり、読み出すことができます。通常の半導体メモリは、電源を切ると記憶した内容が消えてしまいます。電源を切っても記憶内容を忘れないメモリを ROM といいます。ROMにも、特殊な書き込み装置で(時間はかかりますが)値が書き換え可能なROMと、制作時に値を書き込み書き換えできないROMがあります。書き換え可能なROMを フラッシュ型ROMと呼びます。
また、ROMに対し、電源を切ると忘れてしまいますが、読み出しと同じ速度で書き換え可能なメモリをRAMと呼びます。
ここで使用するPICのプログラムメモリはファラッシュ型メモリです。また、データメモリには小容量のRAMが内蔵されています。データメモリはレジスタファイルと呼ばれ、先頭020hはSFR
と呼ばれる周辺機能の制御用レジスタが配置されています。また、データメモリにみ一部フラッシュメモリが内蔵されています。
ここでは、PICシリーズの中から、ミドルレンジでプログラムの書き換え可能な、20ピンの 「16F628」 を紹介をします。これは、2Kバイトのプログラム用命令、224バイトのデータメモリ、128バイトのフラッシュメモリ、16本の入出力信号を持ちます。16本の信号は、入力または出力が可能で、入力信号からプグラム処理を結果を、残りの信号線に出力することができます。また、外部のプロセッサとデータ交換を行うためのシリアル通信機能や、時間を計測するためのタイマ、も組み込まれています。アナログ電圧比較回路を内蔵していますが、アナログーディジタル変換機能は内蔵していません。
プログラムは専用の書き込み回路を利用し、内部のフラッシュROMに書き込みます。このとき利用されるピンは、実行時に利用される制御信号用のピンが共用されます。プログラムされたPICは単独で動作可能です。プログラムの書き込み器(ライター)は、1万円程度でキットが市販されていますし、3万円程度でUSB接続可能なライターも入手可能です。
命令を記録する14bitのメモリと、8bitのデータを記録するデータメモリは分離されています(これを Harvard アークテクチャといいます)。プログラムのアドレス(番地)は11ビットですからプログラムメモリは2kワード(1ワード14ビット)です。PICによってはこの2kのプログラムを別の信号で切替えて、最大16kまで組み込んでいます(これをバンク構成といいます)。
プログラムで直接指定できるメモリは128バイトですが、PICによってはこれを別の信号で切替えて、最大1.5kまで増量しています。データメモリは電源を切ると記憶が失われますが、256バイト単位のフラッシュメモリを内蔵しているPICもあります。
演算は8ビットで、加減算、シフト、論理演算、が可能です。演算によるキャリーフラグが利用できますから、プログラムによる多バイト演算は可能です。
条件付の制御はスキップのみが可能です。条件付のスキップ命令と無条件ジャンプまたは呼び出し命令を組み合わせて制御を行います。
サブルーティン呼び出しで戻り番地を記憶するスタックは8レベルです。また、タイマーや制御信号の変化による割り込み機能もあります。
プログラムは、命令を組み合わせて実行します。命令は
入出力信号のレジスタへの読み込みと書きだし
レジスタとデータメモリとの演算
条件判断と指定命令へのジャンプおよび呼び出し
命令から構成され、合計で35(ミドルレンジ)または77命令(ハイエンド)です。
演算は加減算と論理演算で、乗除算命令はありません。多くのレジスタはデータメモリの先頭の数十バイトを利用します。
割り込みは、ハードウエアの信号により、特定の関数を呼び出す機能です。計算機があるプログラムを実行中に、ハードウエアの要因で別のプログラムを「割り込んで」実行できます。
計算機は、プログラムにしたがって実行をしますが、以下の要因で、「割り込み処理」を実行します。
INTF:INT端子の変化
RBIF:ポートBの上位4ビットの変化
TOIF:タイマー0のオーバーフロー
EERPMへの書き込み完了
割り込み条件が成立すると、プロセッサは4番地からのサブルーティンを呼び出します。「割り込み処理」を実行した後、RETFIE 命令を実行すると、割り込み前の処理を再開できます。
割り込み機能を利用すると、割り込み要件の発生に関する処理は、実行中のプログラムとは独立に要件発生時にリアルタイムで(直ちに)実行することができます。
プログラムの値をそのまま端子に出力したり、端子の値をそのまま変数取り込む機能です。8ビットのポートが1〜3用意されています。
カウンタは外部信号または内部のクロックの値を計数する機能です。タイマーは0,1,2の3種あります。タイマー0は8ビットの計数をしますが、プリスケーラを設定することで、最大
1/256 まで入力のクロック数を分周できます。タイマー1は16ビットの計数ができますが、プリスケーラは最大 1/8 となります。ターマー1,2
はオーバーフローすると、割り込みを起こすことができます。
タイマー2は16ビットのカウンタですが、計数値を取り出したり、設定した値になると割り込みを起こすことができます。
また、指定した周期で指定した幅のパルス(クロック)を生成できます。
RS232Cによるシリアル通信機能がハードウエアで組み込まれています。RS232CはPCの COM:端子と接続できます。他に、近距離の通信機能として、I2CまたはSPIの接続機能があります。これで、外付けのメモリ、時計、などとPICを2本の信号線で接続できます。
アナログ信号をディジタル信号に変換します。これをAD(Analog to Digital Conversion)変換といいます。変換ビット数は10ビットで、複数のアナログ信号を切り替えてAD変換することができます。DAコンバータは組こまれていません。
ここでは、実験に便利な代表的なPICについて少し詳しく紹介します。
16F628Aは小型ですが、多くの機能を積み込んだミドルレンジのPICです。AD変換機の組み込まれていません。以下に特長をまとめます。
形状 | 18ピンDIP |
高速 | 最大1命令400ns |
命令数 | 35個のシングルワード命令 |
動作電圧 | 最小3Vから5.5V |
発振回路 | クリスタル/セラミック発振子、 内部発振の選択設定可能 |
EEROMメモリ | 2KWordのプログラムと128Byteのデータメモリ |
レジスタ(RAM) | 224バイト |
入出力ピン数 | LED直接駆動可能(シンク25mAMax) 入力/出力個別プログラマブル 13PORT |
タイマー | TMR0,TMR1,TMR2 |
アナログ比較 | 2個 |
シリアル | UART搭載 |
参照電圧発生 | 16レベル、1個 |
CCP | Capture/Compare/PWMとして利用可能 |
メモリのみが違います。プログラムメモリはキロワードで、1ワードはここでは12ビットです。
16F627A | 16F628A | 16F648A | |
プログラムメモリ(kw) | 1 | 2 | 4 |
データメモリ(byte) | 224 | 224 | 256 |
EEPROM(byte) | 128 | 128 | 256 |
PIC16F684は18ピンのDIPタイプ(一般のディジタルICと同じ)となっています。
このICのピン配置は下図のようになっています。
各ピンの機能を簡単に紹介します。RA2/AN2/Vref のように / で区切られている場合、そのピンに複数の役割がります。特定の機能を利用するように設定すると、たの機能は利用できません。
RA5は入力専用です。また、RA4はOpenDrainで、出力はLレベルになりますが、Hレベルにはなりません。
端子番号 | 端子名 | 注意 | 用途 |
---|---|---|---|
1 | RA2 | I/O | PORT A(bit2) |
AN2 | アナログ比較1入力 | ||
Vref | アナログ参照電圧生成 | ||
2 | RA3 | PORT A(bit3) | |
AN3 | アナログ比較2入力 | ||
3 | RA4 | PORT A(bit4) | |
TOCKI | 外部カウンタクロック入力端子 | ||
CMP2 | 比較器2出力 | ||
4 | RA5 | 入力専用 | PORT A(bit5) |
MSCLR | マスタークリア | ||
VPP | プログラム書き込み | ||
5 | VSS | 電源(グラウンド) | |
6 | RB0 | 割込使用しないとき | PORT B(bit0) |
INT | 割り込み | ||
7 | RB1 | PORT B(bit1) | |
RX | USART入力 | ||
DT | 同期データ信号 | ||
8 | RB2 | PORT B(bit2) | |
TX | USART出力 | ||
CK | 同期用クロック | ||
9 | RB3 | PORT B(bit3) | |
CCP1 | 比較、PWM出力 | ||
10 | RB4 | PORT B(bit4) | |
PGM | ST | プログラム入力 | |
11 | PB5 | PORT B(bit5) | |
12 | PB6 | PORT B(bit6) | |
T1OSO | タイマー1発振出力 | ||
T1CK1 | ST | タイマー1クロック | |
13 | RB7 | PORT B(bit7) | |
T1OSI | タイマー1発信入力 | ||
PGD | プログラムデータ | ||
14 | VDD | 電源 | |
15 | RA6 | 内部発振のとき | PORT A(bit6) |
OSC2 | 振動子1 | ||
CLKOUT | 外部クロック出力 | ||
16 | RA7 | 内部発振のとき | PORT A(bit7) |
OSC1 | 振動子1 | ||
CLKIN | 外部クロック | ||
17 | RA0 | PORT A(bit0) | |
AN0 | アナログ比較1入力 | ||
18 | RA1 | 要プルアップ | PORT A(bit1) |
AN1 | アナログ比較1入力 |
PICに内蔵されているメモリには幾つかの種類があります。
Workレジスタでプロセッサが演算処理をするとき、一方の値を記録します。
2048個までの14bitの命令が記録できます。記録内容は、ライターと呼ばれる回路で書き込み変更することができます。
変数として利用できるメモリで内部の Register Fileを利用します。データはバイト(8ビット)単位です。
入出力ポートやタイマーなどの機能を設定するレジスタで、ビット毎に固有の機能を持ちます。命令からはレジスタファイルの先頭の数十バイトのレジスタファイルとして扱われます。
電源を切っても消えないメモリです。動作が遅いのと、書き込み回数に制限があるので、一般のプログラム変数としては使えませんが、定数の読み取りや再スタート時の初期値として利用できます。10000回書き込み保証
サブルーチン呼び出し時に戻り番地の記録に利用します。8レベルまで利用できます。
クロック回路は、PICの命令実行の周期を定める、重要な発振回路です。16F628では内部発振機能を持っているため、構成(Configuration)のみを行えば4Mhzで発振可能です。しかし、高速・高精度の発振を行うには、外部に発振用の部品を接続したり、外部発振回路を利用する必要があります。発振には次の種類が選択できます。
モード | 意味 | 周波数 | c1 | c2 | |
---|---|---|---|---|---|
LP | 低電力 | 水晶 | 32k | 68-100 | 68-100 |
XT | 低速 | 水晶 | 4Mhz | 15-68 | 15-68 |
XT | 低速 | セラミック | 4MHz | 15-33 | 15-33 |
HS | 高速 | 水晶 | 20MHz | 15-33 | 15-33 |
HS | 高速 | セラミック | 10Mhz | 15-33 | 15-33 |
INT | 内部 | 4Mhz | 不要 | 不要 | |
EC | 外部 | 発振回路 | 不要 | 不要 |
発振用の部品(水晶、セラミック)は、PICのOSC1、OSC2に接続しますが、各端子からGND(0V,共通電位)にC1,C2のコンデンサを接続することが推奨されています。セラミック振動子では、コンデンサを内蔵した3本足の部品があり、この場合、中央の端子をGNDに接続します。
利用する発振回路に応じて、構成(Configuration)ビットを設定する必要があります。
プログラムメモリのアドレス2007H番地にある特別なメモリで、PICの基本的な条件を設定します。このメモリはROMへのプログラム書き込み時にのみRead/Writeできます。設定内容は、プログラム保護の有無、電源ON時のRESET条件、WatchDog Timerの有無、発振子の種類です。以下の設定を行います。
記号 | 内容 | 意味 |
---|---|---|
BOR | Brown Out Teset | 電圧が低下したとき、回路の誤動作を避けるため、リセットをします |
POR | Power On Reset | 電圧が十分上がるまで、リセットをします。 |
PWRT | Power Up Timer | 電圧が上がってから、72msリセットを続けます |
bit13:CP:codeの保護
bit8:CPD:Dataの保護
bit7:LVP:低電圧プログラムの設定
bit6:BOREN:BrownOutリセットを有効にする
bit5:MCLRE:MCLRを利用する
bit3:PWRTEN:PowerUpTimerを利用しない
bit2:WDTE:WDTを利用する
bit4,1,0;クロックの利用法
111,110:ER:外部RC発振,RA6(110)
101,100:INTOSC:内部発振(4M)、RA6(100)
011:EC:外部発振
010:HS:高速水晶/セラミック利用、8-10M
001:XT:中速水晶/セラミック利用、0.5-4M
000:LP:低速水晶利用、32k-200k
通常の実験では、クロックの利用法、の設定のみを行えば良いでしょう。高速が必要な場合 HS,精度が必要な場合 EC または XT、でそれ以外の場合は、INTOSCで十分です。INTOSC
でない場合、RA7,RA6(ポートA上位2ビット)は利用できなくなります。
電源を入れると、リセット(初期化)が起こり、0番地から実行を開始します。構成ビットで「MCLRを利用する」と設定すると、MCLR信号でもリセットできます。
VSSに対するVDDの許容最大値は6.5V、最低値は-0.3Vです。動作可能電圧は3V〜5.5Vです。ただし、クロックが20MHzの場合4.5V以上の電圧が必要です。最大電力は600mWです。
また、BOR(BrownOutReset)は最大4.35Vでかかりますから、これ以下の電圧で利用する場合、BOR は設定できません。
端子の電圧は、最低-0.3V、最大はVDD+0.3Vです。ただし、MCLRとRA4は最大14Vです。
電流は、ソース、シンクとも最大25mAです。また、ポート全体の最大電流は200mAです。
VDD=5Vで、20MHzクロックの場合、消費電流は5mA程度です。これは発光ダイオード1個を弱く点灯する程度の電力です。スリープ状態では0.1mAになります。