8ピンのPICマイコンである、PIC12F1840とPIC16F18313を比較します。
自分用の忘備録も兼ねてます。
12F1840は登場してから そこそこ経過しておりますが、
8ピンのPICマイコンとして割と中身が充実していたので、
ベストセラーの1つと言えると思います。
12F1840の完成度が高かったせいなのか、
その後しばらく、8ピンの高機能PICマイコンがお目見えしませんでしたが、
ついに登場した製品が16F18313というわけです。
片や「12F」で、片や「16F」という名称の違いがありますが、
マイクロチップの命名ルールが変わったことに起因しているもので、
12F1840と16F18313は同列に考えて頂いて問題ありません。
まず、サクッと違いを纏めてみた表が以下です。
あまり細かい内容を詰め込むと見づらくなってしまうので、
参考にできる範囲で 割と簡素にしてみました。
改めて見てみると、12F1840の完成度の高さを実感しますね。
割と最近の石である16F18313に対し、基本的な部分のスペックで引けを取りません。
プログラムメモリーは16F18313の方が僅かに少ないのですが、
8ピンのPICマイコンでこの容量を使い切るケースは少ないのでは?
そう考えると この差は大した問題ではないと思われます。
16F18313は16F18300シリーズですので、周辺機能は充実さは素晴らしいところ。
8ピンのPICマイコンに こんなにも必要なのか?という疑問も感じますが、
まぁ無いよりは有った方がベターですね。
それでは差について、もう少し説明していきましょう。
1.TMR0について
TMR0は古のPICマイコンから搭載されている、もっとも基本的なタイマーです。
12F1840は従来通りのTMR0を搭載しておりましたが、
16F18313では16ビット動作可能な、拡張版のTMR0を搭載してます。
2.コンパレーター・PWM等について
表では解釈が紛らわしいかもと思い、補足の意味で記載いたします。
12F1840ではコンパレーターが1つと、ECCPが1つ搭載されています。
ECCPは拡張版CCPですので、キャプチャー・コンパレーター・PWMの、
どれか1つの機能を選択して使用可能です。
12F18313ではCCPだけで2つ存在する他に、
コンパレーターとPWMがそれぞれ2つ搭載されています。
8ピンパッケージでは積みすぎですよね(笑)
3.外部I/Oピンの入れ替え機能について
周辺機能とパッケージ外部のピンとの接続ですが、
12F1840ではAFPCONというレジスタの設定により、
極一部の周辺機能についてのみ、ピンの割り当て選択が可能ですが、
自由度がとても低い為、事実上回路設計段階の考慮が必要という代物です。
それに対し16F18313では「PPS」という割り当て変更システムを搭載してます。
これによりほとんどの周辺機能ピンを自由に割り当てる事が出来ます。
(ICSPで使うピンは変更できませんが)
これだけ自由度が高いと、回路設計の柔軟性が高まりますね。
4.データーEEPROMについて
EEPROMという名称が使用されておりますが、
実際には搭載されているフラッシュメモリーの一部です。
最近のPICでは「NVM」という呼び方に変わってきております。
表の通り、容量等に変化はない様に見受けられますが、
アクセスに関する仕様が変更となってます。
従来のデーターEEPROMには絶対値アドレスとも言うべき値が存在してました。
具体的には12F1840ならば0xF000~0xF0FF領域です。
これにより、以下の例の様にソースコード上に記載する事が可能になります。
DATAEE ORG 0xF000
DE "Hello World"
すると、FLASHメモリーへの書き込み時に、
データーEEPROMへ"Hello World"という文字列も同時に書込んでくれます。
これは結構便利な機能だったのですが、最近のPICマイコンでは使えなくなりました。
なぜならば絶対値アドレスが無くなり、NVM Control レジスタ経由でしか
アクセスできない仕様になったからです。
代替案としては、PICマイコンのブート後のイニシャライズ段階にて、
NVM Control レジスタを使用して"Hello World"を書き込むという手があります。
しかしNVM Control レジスタ経由では1byteずつしか書けませんので、
従来であればたった2行で済んだものが、数十行のコードになってしまうのは、
なんともスマートではありませんし、
PICがブートする度にデーターEEPROMへ書き込むというのも違和感を覚えます。
今後の改善を期待したいところですね。
5.I/Oポートの機能設定について
16F18313ではI/Oポートについての機能が拡張されました。
具体的には以下の3つの設定レジスタが追加されてます。
INLVLA
SLRCONA
ODCONA
INLVLAはデジタル入力ポートとして使用時のスレッショルドレベルの設定です。
TTLレベルかシュミットトリガ―レベルを選択できます。
通常はシュミットトリガ―レベルの方が好ましいわけですが、
CMOSレベルの電圧域となる為、入力信号の電圧レベルを考慮する必要があります。
どちらの設定でも、実際の閾値電圧は電源電圧に依存します。
具体的な値を知りたい場合はデーターシートを参照してください。
SLRCONAはデジタル入力ポートのスルーレート設定です。
スルーレート制限無し設定が、通常のデジタル入力状態です。
CMOSデバイスの特性上、実際の入力レスポンスは電源電圧に依存します。
スルーレート制限有りにした場合の具体的な差ですが、
データーシートを見た感じ4000番シリーズCMOSロジック位でしょうか。
数十nsオーダーの話なので、ものすごくブロードな特性になるわけではありません。
ODCONAレジスタはデジタル出力のタイプ設定です。
これにより、従来と同じトーテムポール出力タイプの他、
オープンドレイン出力タイプも選ぶことが出来るようになりました。
通常のデジタルロジック回路ではトーテムポール出力での使用が多いと思いますが、
繋ぐ回路構成によっては電流引き込みで駆動したいというケースも有り、
そういう時はトランジスターなどを噛ませる等で対処していました。
これらが直結で済ませられる様になり、回路が簡素化できます。
また、不要な出力ポートもオープンドレイン出力に設定しておくことで、
不用意にHレベル電圧が出力されてコンフリクトを起こす事も予防できます。
この様にオープンドレイン出力機能は結構重宝すると思われます。
6.その他
容量センシングモジュールとSRラッチについては12F1840のみの搭載。
対して、CWG・NCO・CLCは16F18313のみ搭載してます。
周辺モジュールの供給電力を個別に制御する「PMD」機能も、16F18313のみの搭載。
もっとも、そもそもPICマイコンはかなり低消費電力ですので、
PMD機能が必須となる場面は少ないかもしれません。
あと、内蔵発振器の1つである「MFINTOSC」についてですが、
12F1840には存在しているのものの16F18313には存在しません。
これは機能削減ではなく、不要になったので削除したと見るのが正解でしょう。
HFINTOSCから生成できる周波数バリエーションが、
MFINTOSCをカバーできてしまうからです。
ですのでMFINTOSCの削除はなんらマイナスポイントになっておりません。
以上の様な感じで、おおまかな違いはご理解頂けると思います。
上記以外でも各周辺機能モジュールについて、
16F18313で少々機能拡張されてる場合がありますが、
その点については逐次確認をお願い申し上げます。




