PIC(Peripheral Interface Controller)は、言わば、小型のワンチップマイコンと 言うことができます。
PICとしては、MicroChip社からいろいろなシリーズが発売されており、手軽に使えるコンパクトなPICから、本格的な用途に使える高機能な PICまで、各種のPICが揃っています。
今回の実習では、PIC12F629というチップを使い、LED点灯回路の実験をすることにします。このチップを選んだ理由は、
ということです。
- 値段が100円程度と、非常に安価である。
- その割には高機能で、使いやすい。
- 実装が8ピンDIPで、ピン数が少ないので、初心者には回路が製作しやすい。
- アセンブラーの命令数が少なく、比較的習得しやすい。
なお、巷でよく話題になっているPIC12F675は、今回使うPIC12F629の姉妹品で、A/D変換が付いているかどうかだけの違いです。今回は A/D変換は使いませんので、PIC12F629で充分です。その方が、ほんの少しだけ安価に作ることができます。
PICを使って電子回路を設計する場合には、
という手順を踏むことになります。実際には、2.と4.とは互いに関連しますので、同時進行しなければなりません。5.で設計通りの動作をしなかった場 合、プログラ ムを修正して、PICに焼き直します。また、プログラムの修正だけで解決できない場合は、電子回路の設計変更をしなければならない場合もあります。
- PICの内部構造を理解する。
- 電子回路を設計する。
- 電子回路を製作する。
- アセンブラーでプログラムを作る。
- プログラムを焼き込む。
まず、PIC12F629の内部構造について、説明します。
このPICの中には、CPU、メモリー、周辺回路の3つが入っています。
CPUは8ビットで、クロック周波数は最大20MHzです。
メモリーは RAM と ROM の2種が入っており、さらに、ROM としては、FLASHメモリーと EEPROM の2種が入っています。
周辺回路としては、入出力(I/O)、コンパレータ、割り込み、タイマー、リセット、ク ロック発振などの機能が入っており、さらに、入出力はデジタルモードとアナログモードの両方を持っています。
こんな高機能なワンチップマイコンが、わずか一個100円で手に入るとは、いい時代になったものです!
PICを、さらに詳しく見てみます。CPUは、大体、電源電圧が2.5Vから5Vの間で動作させるのが良いようです(規格上は、2Vから 5.5Vまでが 動作電圧範囲)。最大クロック周波数は20MHzとなっていますが、これは電源電圧と共に変わります。大体の目安として、電源電圧3V以下では最大クロッ ク周波数は4MHz、電源電圧3V以上4.5V以下では最大クロック周波数10MHz、電源電圧4.5V以上では最大クロック周波数20MHzと考えてお けば良いようです。クロック発振の方法には、水晶発振子またはセラミック発振子を用いて発振させる方法(発振子の周波数により、LPモー ド、XTモード、 HSモードに分かれる)、抵抗とコンデンサーで発振させる方法(RCモードとRCIOモードの2種がある)、外部発振器からクロック 信号を注入する方法 (ECモード)、PICの内部発振器を使う方法(INTOSCモードとINTOSCwCLKOUTモードの2種がある)があります。このう ち、内部発振 モードは手軽なのですが、手持ちのPICライターが対応していないので使えません。また、ECモードも外部発振器が必要なので使わないことにします。そう すると、残るのは、セラミック発振子を使うか、抵抗とコンデンサーを使うかの2つです。考え方としては、クロック周波数が4MHz以下でしかも周波数安定 度が必要ない場合は抵抗とコンデンサーを用い、クロック周波数が4MHz以上かあるいは4MHHz以下でも周波数安定度が必要な場合(例えば、通信をする 場合など)は、セラミック発振子を用いることになります。電源電圧が高ければ高いほど、また、クロック周波数が高ければ高いほど、PICの消費電流(従っ て、消費電力)が大きくなります。LPモードで電源電圧3Vで動作させれば、消費電流はわずかに20μA以下ですが、HSモードで電源電圧5Vクロック周 波数20MHzとすると、消費電流は約2.4mAまで増加します(それでも大した電流ではないですが)。
これから作るLED点灯回路ではクロックは遅くても良いし周波数安定度も必要ないので、抵抗とコンデンサーとで発振させることにします。 クロック周波数が遅いので、電源電圧は3Vで充分です。そこで、乾電池2個で動作させることにします。これならば、消費電流は300μAぐ らいだと思います。ただし、それはPIC本体の消費電流であり、点灯するLEDの消費電流も加算されますから、全体の消費電流は数mAとなります。
PIC12F629のパッケージは、図のように、8ピンDIPです。図は上面図で、切り欠きのある方が上、1番ピンのところにマークがあります。そこか ら反時計回りに、8番ピンまであります。今回の実習で使う各ピンの意味は、以下の表の通りです。
ピン番号
ピンの意味
1
Vcc (電源電圧)
2
クロック入力
3
クロック出力
4
ポート3(入力)
5
ポート2(出力/入力)
6
ポート1(出力/入力) 7
ポート0(出力/入力) 8
GND (電源のマイナス)
これらのピンには、他の用途として使えるものもあります。例えば、3ピンはRCモードではクロック出力ですが、RCIOモードでは入出力に使えます。ま た、5ピン、6ピンはコンパレータ用のアナログ入力として使うこともできます。4ピンはPICに書き込みを行うときのプログラム電圧入力端子としても使え ます。その他、いろいろな用途があります。このように、このPICは高機能であるのにピン数が少ないため、どのピンもいくつかの用途を兼用して使え るようになっています。どのピンをどの用途で使うかは、プログラム中で指定できるようになっています。
さて、この実習では、PICを用いてLEDを点灯させます。そのためには、5ピンから7ピンまで を、デジタルモードの出力設定にします。4ピンには出力機能がありませんので、このピンは使いません。クロック発振は抵抗とコンデンサーとを用いたRC モードとします。その場合、電源の+と2ピンの間に抵抗を、2ピンと電源の−の間にコンデンサーを入れます。クロックの発振周波数は、この抵抗とコンデン サーの値の組み合わせによって変化します。発振周波数は、必ずしも C*R に反比例した形にはならないのですが、大体の目安として、R[kΩ]の抵抗とC[pF]のコンデンサーの場合、
100/(R*C) [MHz]
ぐらいの周波数で発振すると見ておいて良いでしょう。RCモードでの最大発振周波数は4MHzですので、コンデンサーは10[pF]ぐらいから、抵抗は3 [kΩ]ぐらいから発振します。1[kΩ]程度の低い抵抗では発振しません。この実習では、発振周波数は低いほうが良い(発振周波数が高す ぎると、LED の点灯が早すぎるから)ので、思い切って、非常に低い周波数で動作させることとし、R=470[kΩ]、C=0.001[μF](つまり1000 [pF])で発振させることとします。
作るべき回路図を以下に示します。
R1とC1とで、RC発振回路を形成しています。発振周波数は実測で、約800Hzとなりました。何とも遅いクロックです!
3ピンからはクロック波形が出力されますが、とくに使いませんので、オープン(何もつながない)としておきます。
4ピンも使いませんが、このピンは入力専用ですので、1[kΩ]を通してグランドにつなぎました。これを、プルダウンと言います。同じように、抵抗を通 して電池の+に接続することをプルアップと言います。使わない出力端子はオープンでかまいませんが、使わない入力端子はプルダウンまたはプルアップ しなけ ればなりません。どちらかと言うとプルアップのほうが良いと言われていますが、配線の関係上、ここではプルダウンすることにしました。
C2とC3は電源のインピーダンスを下げるためのコンデンサーで、これはもう定番です。注意としては、C2はなるべくPICの近くに取り付けることです (特に、PICを高いクロック周波数で動作させるとき。今のように低いクロック周波数の場合はそれほど神経質にならなくても良いが、しかし、電源のパスコ ンはICの近くに配置をするということは知っておくほうが良い)。
R3からR5はLEDの電流制限抵抗です。これをつけないと、LEDが壊れてしまいますし、PIC自体も傷める可能性もありますので、最低でも、330 [Ω]以上にする必要があります。ここでは、470[Ω]をつけました。電池を節約したければ1[kΩ]ぐらいでもかまわないと思います。ただ、抵抗値が 大きい分には回路に損傷を与えることはありませんが、あまりに抵抗値が大きすぎると、LEDが暗くなってしまいます。
では、この回路を実際に製作してみることにします。
回路製作の様子は、ここをクリックしてください。
次に、アセンブラーによるプログラミングに移ります。最初に、PIC12F629のアセン ブラーの命令について解説します。
PIC12F629 のアセンブラーの命令については、ここをクリックしてください。
では、それを、実際に機械語に翻訳することにします。それには、MicroChip社から 提供されている無料ソフトの、MPLABを使います。
MPLAB の使い方は、ここをクリックしてください。
最後に、それをPICに焼き込まなければなりません。そのためには、PICライターが必要 です。 PICライターは、焼き込むためのハードウェアと、焼き込むためのソフトウェアからなっています。ここでは、秋月電子のPICライターキットVer.3を 使うことにしました。これは、いろいろなPICの焼き込みに対応したライターで、パソコンのシリアルポートに接続して使います。電源電圧は15V以上が必 要ですので、古いノートパソコン用の19Vの電源を使うことにしました。ソフトは「PIC Programmer V3」が付属しているので、それを使います。Windows XPでもちゃんと動作します。ただし、このライターキットは、PIC12F629の内 部発振モードに対応していません(そのようなプログラムを焼くことはできません)。新しいVer.4は対応しているようですが、手元にありません ので、今回は内部発振モードは使用できません。
PICへの焼き込みの様子は、ここをクリックしてください。
全部できたら、配線をもう一度確かめ、PICの向きを間違わないように、ソケットに差し込 みます。電池をつないでみて、LEDがプログラムした通りに点灯すれば完成です。
サンプルプログラムでは、まず、一番上のLEDが点灯します。
その次に、真ん中のLEDが点灯します。
最後に、下のLEDが点灯します。
以後、また、上のLEDに戻って点灯し、あとは順に繰り返します。
プログラムを変更すれば、どのようにでもLEDを点灯させることができます。