PICチップの選び方

前回の投稿では、PICkit3と44ピン デモボードを紹介しましたが、改めてPICについて調査したことを書いておこうと思います。

型番の見方

売場には様々な種類のPICが並べられており、最初は違いがさっぱりわかりませんでした。恐らく、古い製品も修理用として売られているのだと思います。しかも、古い製品が新しい製品よりも高かったりするのだと思います。私は新参者なので、安くて新しい製品を選びたいと思いました。そのためには、型番のパターンを見つける必要がありました。

とりあえずいくつか購入して研究しているうちに、以下の事がわかりました。

まずPICの次に来る2桁の数字が重要です。よく雑誌やWebで目にするのはPIC12, PIC16, PIC18です。これらはPIC18アーキテクチャと呼ばれるようです。他にもアーキテクチャの異なるPIC24やPIC32があるようです。まとめると以下のようになります。

型番 PIC10
PIC12
PIC16
PIC18
(PIC18アーキテクチャ)
PIC24 PIC32
ビット数 8 16 32
言語 アセンブラ
C
アセンブラ
C
アセンブラ
C
C++

型番の続きですが、次に書かれているFはFlashの略かと思われます。何回も書き込み可能という事です。FではなくCだと1回のみ書き込み可能なようです。Cは全く見たことがありませんが。(^^; Fの前にLがついてると低消費電力モデルです。

PIC18アーキテクチャにはPIC10, PIC12, PIC16, PIC18があります。これらの違いは以下のようになります。

PIC18 アーキテクチャ

また、Fの次の番号が1で始まるものはエンハンスド ミッドレンジです。これが今イケているPICチップです。(^^;

これらをまとめると、以下のようになります。

ライン ベースライン ミッドレンジ エンハンストミッドレンジ ハイエンド
型番 PIC10Fxxx

PIC12Fxxx

PIC16Fxxx

PIC10Fxxx

PIC12Fxxx

PIC16Fxxx

PIC12F1xxx

PIC16F1xxx

PIC18Fxxxx

PIC18FxxJxx

PIC18FxxKxx

ピン数 6~40 8~64 8~64 18~100
機能 コンパレーター 左記のすべて
+
SPI/I2C
UART
簡易PWM
10-bit ADC
左記のすべて
+
多機能PWM
左記のすべて
+
CAN
USB
Ethernet
12-bit ADC

What are the differences among the 8-bit PIC MCU sub-families?」に概要が掲載されています。また製品検索のページでは製品を検索できます。

製品検索のページ

[CTRL]キーを押しながら製品名を検索すると、複数製品を一覧に追加できます。

どのPICを買えばいい?

私は基本的にRaspberry Piの補助として動作させようと思っていました。しかし、色々とPICチップを購入して試しているうちに、Raspberry Piに関係なくPIC単体で色々とできることがわかりました。そのため、私が検索をするときにチェックするのは、色々と機能があるものとなります。例えば、内蔵オシレーター、DA/ADコンバーター、PWM、UART、SPI、I2Cです。また、これらの機能を自由な端子に変更できるものをお勧めします。先ほどの検索画面にて「Peripheral Pin Select / Pin Muxing」がYesになっているものです。

結局、よく使うことになったのは、PIC16F18346です。これを買っておけば、上記の機能をすべて使用できます。そのため勉強をしたり試作品を作ったりするのに向いています。このPICで色々試しておいて、本番採用するチップは後で選べばいいと思います。

機能以外でも重要なのがメモリ容量です。特にUART (シリアルケーブルによる転送)を使う場合に注意してください。例えばPIC12F1822には80bytesのデータ容量と2048wordのプログラム容量があります。特に何もプログラムしていない状態での使用量は2%位です。

PIC12F1822 特に何もプログラムしていない状態

しかし、慣れてくると、printf(“.”);などとしたくなるものです。1バイトでも出力しようとすると、メモリ使用量は一気に上がります。

PIC12F1822 printfで1バイト出力

10バイト出力した場合 (例えばprintf(“1234567890”);)の場合は、単純にProgramメモリが10word減ります。

PIC12F1822 printfで10バイト出力

しかし、引数つきprintfをしようものなら、メモリがほぼなくなります。

char a = 10;
printf("%d", a);

コードはこれだけですが、メモリを95%使用してしまいます。

PIC12F1822 引数付きprintf

まとめると、このようになります。

プログラム なし printf(“.”); printf(“1234567890”); char a=10;
printf(“%d”, a);
Data Memory 2bytes 74bytes 74bytes 121bytes
Program Memory 51words 375words 384words 1260words

というわけで、まずはPIC16F18346をお勧めします!

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です