とある科学の備忘録

とある科学の備忘録

CやPythonのプログラミング、Arduino等を使った電子工作をメインに書いています。また、木製CNCやドローンの自作製作記も更新中です。たまに機械学習とかもやってます。

【PIC】PICとは?

1.PICとは?

PIC(Peripheral Interface Controller)とは、マイコンの一種でこのような概形です。

f:id:pythonjacascript:20181124235242j:plain
f:id:pythonjacascript:20181124235246j:plain
(Wikipediaより)

マイコンとは、Micro Computerの略で「超小型コンピュータ」を意味する電子部品です。プログラムをICに書き込んで、自分の思い通りの動作をさせることができます。


パソコンとPICなどのマイコンが異なる点は、「GPIO」というものがあります。マイコンと呼ばれるICは、多くのピン(通称、「足」とも呼ばれる)がついており、これらを他のデバイスにつないで、データをやり取りすることができます。その機能を利用して、マイコンは多くの家電製品(炊飯器、エアコン、テレビなどのリモコン)に使われています。


マイコンには、PIC以外にもH8マイコンやAVRマイコンなどがあります。Arduinoも、ATmega328というマイコンを搭載した基盤です。*1



PICの利点としては、
・安価!
・回路構成が容易
・インターネット上で情報を得やすく、関連書籍も豊富
・入手性が良い!
秋月電子通商やマルツパーツで購入できる)
というものが上げられます。


PICの内部構造

いきなりですが、結構深いところに突っ込みます。
上の方に、「PICは超小型コンピュータ」という趣旨の文章を書きましたがまさにその通りなのです。

PICにはCPUメモリ (RAM, ROM)、I/Oなどが1チップに収められており、ROMに書き込まれたプログラムにより制御されます。
これは、普段私たちが使っているパソコンと同じような構成なのです。(処理能力が格段に違うことを除いては。)

例えば、これはPICの中でもよくつかわれる、PIC16F84Aの内部構成です。
f:id:pythonjacascript:20181125004052j:plain:h350
(Microchip社、PIC16F84Aのデータシートより)

このように多くの部品で構成されていることがわかります。
そのうちいくつかを紹介します。

CPU

Central Processing Unit の略で「中央処理装置」と訳されます。
主にで演算処理を行い、PICの心臓部と言える部分です。

プログラムメモリ

この中にプログラムが格納されています。
プログラムの書き換えには専用のPICライター(後述)が必要です。

プログラムメモリは SRAM(Static Random Access Memory)なので、プログラムデータは電源を切っても保持されます。

レジスタ

レジスタはデータを保存するための記憶媒体です。尚、ここでいうレジスタDRAMDynamic Random Access Memory)なので、電源を切るとレジスタ内のデータも消えてしまいます。
演算結果(変数の値)はここに保存されます。また、このレジスタにはもう一つ重要な役割があります。CPUは、PICの各種機能をこのレジスタの値をもとに動かしているのです。なので、レジスタ内の特定の値を変更することで、PICの動作状態やI/O出力の処理も操作することができます。

I/O

PICは単独では動作しません。PICには多くのピンがついていて、それぞれが特定の役割を持っており、外部のデバイスを動かしたり通信をしたりすることができます。このようにピンの入出力の値を決定しているのがI/O(Input/Output)と呼ばれる部分です。PICには多くのI/Oポートがあり、PORTA、PORTB...と呼ばれています。名称の詳細は各PICのデータシートを確認してください。


PICの機能

このように多くの部品で構成されているPICですが、どのような役割があるのでしょうか?
ここでは、PICの多くの機能のうち、一部を紹介します。

I/O入出力

多少、上の「I/O」項目と内容がかぶります。

PICに搭載されているそれぞれのピンは、決められた役割を持っています。
その役割には、主に以下のようなものがあります。
・デジタル入出力
・アナログ入出力(出力はPWM)
・A/Dコンバータ
・リセット入力(MCLR)
・割り込み用パルス入力
・パルスカウンター

割り込み機能

PICには「割り込み(Interruption)」と言って、現在実行中の命令を中断して他の処理を行うことができます。

この機能は多くのマイコンに搭載されていますが、とても重宝する機能の一つです。

割り込みを発生させるイベントは多くあり、どのような時に割り込みを行うかをプログラムで細かく指定できます。例えば、特定のピンの入力電圧がHIGHになったら割り込みをしたり、タイマー機能を使って一定時間がたったら割り込みをしたり、A/D変換が終了したりすることができます。


その他諸機能

上で紹介した以外にも、以下のようにPICには多くの機能があります。
・WDT(Watch Dog Timer)
・タイマー
・A/D変換
・カウンター

などなど...

命令ビット長

PICの命令のビット長には8ビット、12ビット、14ビット、16ビット、32ビットが存在します。

ネット上では、8ビットのマイコンがよく使われている気がします。

開発初期段階では8ビットのみでしたが、だんだん命令の数が多くなるに従って、命令ビットの数も増え、PIC32Fシリーズは命令ビットが32ビットになっています。

ピンの数

PICにはピンの数も種類も豊富です。8ピンのPICが最小ですが、144ピンのPICなんてものもあります!

f:id:pythonjacascript:20181124235246j:plain
Wikipediaより、PIC32MZ2048)


プログラムの書き込み方

PICにプログラムを書き込むには、下の写真のような専用のライターが必要です。
f:id:pythonjacascript:20181125003137j:plain
秋月電子通商から購入、 AKI-PICプログラマーVer.4

実は、PICによってプログラムが保存されている内蔵メモリの種類が違い、以下の3種類に分けることができます。
※現在ではほとんどがフラッシュROM品が使われています。

フラッシュROM型

この型のPICは、プログラムを何回でも書き込み&削除することができます。
(「何回でも」とは言っても、約10万回が限度と言われています)

ワンタイム型

ワンタイム型のPICは、プログラムを一度書き込むと、それ以降は一切プログラムの書き換えができません。
なので、実験をこのマイコンで行うのはナンセンスでしょう。

紫外線消去型

この型のPICは、プログラムを何回も下記粉オスとができますが、毎回プログラムを更新する前に、プログラムデータを保存しているEPROMに紫外線を当ててプログラムを消去しなければなりません。

そのため、この型のPICは紫外線を当てるための窓がついています。
f:id:pythonjacascript:20181125000616j:plain
秋月電子より、PIC16C64A)


パッケージの形

パッケージとは、ここではマイコンのピンの配置の仕方を表します。
下の図を見てもらえれば一目瞭然なのですが、PICマイコンにも、通常のICと同じようにDIP表面実装タイプがあります。
f:id:pythonjacascript:20181125001520j:plain
(Microchip社のPICのデータシートより)

PIC32Fに至っては、ピンの数がとても多いものは、上の図の一番右のような「マトリクス型」と呼ばれるパッケージもあります。



*1:Arduino UNOの場合。Arduino DUEは、AVRマイコンが使用されている