PIC12C509

Microchip社のPIC12C509はある意味で世界最小のコンピュータといえるかもしれません。CPUはもちろん、メモリもI/Oも含み、外付け部品なしでのパワーオンリセット回路とクロック発振回路まで内蔵しているため、電源を接続するだけでプログラムを動作させることのできる完全なコンピュータです。そして、これがその外観です。

PIC12C509

8ピンDIPパッケージで1 cm角よりも小さな実装面積で済みます。表面実装用のパッケージなら、もっと小さくなるわけです。
いくつかの動作モードがありますが、外付け部品最小のモードなら、バイパスコンデンサ1個が必要なだけで、入出力ポートが6端子使えるようになり、内蔵発振回路の4 MHzクロックで動作できます。プログラムは内蔵のROMに書き込まれていなくてはなりませんが、これは専用のROMライターで開発者が書き込めます。ただし、このパッケージの場合は消去できません。
ROMは12 bit×1024語入っていて、RWMは41 Byte内蔵の、1命令12 bit構成の8 bitコンピュータです。I/Oポートの他、8 bitですがタイマ回路も入っています。プログラム用のメモリサイズだけなら、TK-80なんかの初期のトレーニングキットよりも大容量です。
こんなものが何の役に立つのか、疑問をもたれるかもしれません。
たとえば一定時間のパルスを出力するようなタイマ回路や低い周波数の発振回路などは専用のICがいくつもありますが、外付け部品がいらないということでこちらを使った方が良いかもしれないと考えさせられるほど、広い使いみちが存在します。発振回路として使う場合でも、たとえば多項式シフトレジスタをプログラムで実現して擬似乱数出力を行うようにすればホワイトノイズ発生器にもなりますし、単一周波数を出力するだけでなく(方形波だから音が濁るかもしれないけど)ピーポーピーポーといったシーケンスを持った音をスイッチが押されたときにだけ出力する回路が、8ピンのICとバイパス用コンデンサ1個で実現できるとしたら、ちょっとおもしろいと思いませんか。あるいは、あるポートが1になった間、数個のLEDが少々複雑なパターンで点滅するというおもちゃとか、電源のオンオフ時に一定の手順で内部回路の電源投入順序を決定する保護回路といった応用だって考えられます。
コンピュータなのだけれど、コンピュータとしてではなく、いや制御装置としてでもなく、ひとつの回路部品のふりをさせることのできる素材として扱った方がおもしろいのではないかと思います。なにせ8ピン、小売り価格も現在は200円を切っていますから。
あるいはApple社のDesktop busのような低速の簡易LANのようなプロトコルをソフトウェアで実装して、ごく簡単なI/O制御を行うことも可能でしょう。中枢で制御を行うコンピュータからのコマンドを簡易LANから受け付けて、1, 2本のスイッチの状態を簡易LANに送り返すとか、コマンドを簡易LANから受け付けて1, 2接点分の出力を行う部品として使用することも可能でしょう。簡易LANの入出力に2本の端子を使用して、リセットに1本と電源2本の端子が占有されるとすれば、残り3本のI/Oポートが外部入出力として使用可能です。昔と違って、今は半導体のコストより電線とコネクタなどを含む配線のコストの方が高く付く場合も多くなっていますから、このような簡易LANを単一の機器の中に張り巡らして、配線の量を減らすことも行われていくでしょう。多数の電線を機器内に配線する人件費というのも考慮すれば、なおさらです。ただ、こういった場合には入出力に使用できる端子が10本ほど残るPIC16C54のような18ピン系のPICを使用した方が有利かもしれません。

なお、パワーオンリセット回路が内蔵されていて、リセット端子をI/Oポートとして使用することができるようになっていますが、この内蔵パワーオンリセット回路には注意が必要です。この素子は3 Vから5 .5 Vまで動作することになっています。最初に電源が入っていない状態でスイッチを入れれば、おそらく正常にリセットがかかります。ただし動作中に電源供給が一瞬オフになり、電源電圧が0 Vにならないうちに再び電源が投入されるような場合、リセットがかからない場合があります。電源電圧が1 V程度にまで低下しても内蔵リセット回路がリセット信号を発生しないのに、プロセッサとしての動作は正常に行えなくなっていて、再び電源が回復しても、暴走してしまうのです。このような条件が生じると予想される場合、リセット端子を(抵抗を介して)Vccに接続するか、より確実な外部リセット回路を作成してリセット端子をそこに接続する必要があります。この場合、入出力に使える端子数は5本になります。

具体的なピン配置は、こうですね。
           VDD 1     8 VSS
GP5/OSC1/CLKIN 2     7 GP0
      GP4/OSC2 3     6 GP1
 GP3/MCLR*/VPP 4     5 GP2/T0CKI
GP0からGP5がI/Oポートとして使用するときの端子の名称です。GP3だけは入力専用ポートで、他は双方向ポートです。5番ピンはT0CKIは内蔵タイマのクロック入力としても使用できます。同様に4番ピンはGP3以外にリセット入力とプログラム書き込み時のプログラム用電源供給端子としても使用されます。I/Oポートとして使用する場合にはMCLR*でリセットできなくなるわけですが、その場合には前述のように内蔵のパワーオンリセット回路を使用することになり、注意が必要です。GP4とGP5はクロック発振回路の端子と兼用になっています。水晶発振子などを外付けしてクロック発振する場合はGP4とGP5が使えなくなります。CR発振回路やクロック信号を外部供給する場合にはGP5だけが使えなくなります。外付け部品不要の内蔵クロック発振回路を使用する場合にはGP4もGP5もI/Oポートとして使用できます。
このように、クロック発振回路やリセット回路のオプション選択によって、2本のI/Oだけが使用可能な状態から6本のI/Oが使用可能な設定まで、決められます。
クロック周波数は水晶発振素子を利用するのが周波数精度が高いのですが、外付け部品不要の内蔵クロック発振回路でも数パーセントの偏差にあわせることができるので、調歩同期のシリアル通信を行う程度なら、それなりに内蔵クロックでも間に合います。実は製造時に内蔵クロック発振回路の周波数を測定して、その補正用のデータをプログラム用メモリの一部に書き込んでくれているので、それをリセット直後にクロック周波数微調整用レジスタに書き込むことで精度を補償します。

Return to IC Collection