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があります。これらの違いは以下のようになります。
また、Fの次の番号が1で始まるものはエンハンスド ミッドレンジです。これが今イケているPICチップです。(^^;
これらをまとめると、以下のようになります。
ライン | ベースライン | ミッドレンジ | エンハンストミッドレンジ | ハイエンド |
型番 | PIC10Fxxx
PIC12Fxxx PIC16Fxxx |
PIC10Fxxx
PIC12Fxxx PIC16Fxxx |
PIC12F1xxx
PIC16F1xxx |
PIC18Fxxxx |
ピン数 | 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%位です。
しかし、慣れてくると、printf(“.”);などとしたくなるものです。1バイトでも出力しようとすると、メモリ使用量は一気に上がります。
10バイト出力した場合 (例えばprintf(“1234567890”);)の場合は、単純にProgramメモリが10word減ります。
しかし、引数つきprintfをしようものなら、メモリがほぼなくなります。
char a = 10; printf("%d", a);
コードはこれだけですが、メモリを95%使用してしまいます。
まとめると、このようになります。
プログラム | なし | printf(“.”); | printf(“1234567890”); | char a=10; printf(“%d”, a); |
Data Memory | 2bytes | 74bytes | 74bytes | 121bytes |
Program Memory | 51words | 375words | 384words | 1260words |
というわけで、まずはPIC16F18346をお勧めします!
コメントを残す