電子工作

PIC18F

8ビットPICの最上位に相当するPIC18Fシリーズ。16Fシリーズに比べると、お値段も高めで使うのに躊躇していたのですが、それでも、16Fシリーズの高機能のものと比較するならば、それほど、価格の違いがありません。

16ビットコア(命令語調が16ビット)で、14ビットコア(大部分の16Fシリーズ)と、ほぼ、同じ命令のほかに、使いにくかった部分が大幅に改善されています。欲しかった乗算命令も入っているのも大きなポイント。また、当然、プログラムメモリもデータメモリもそれなりに大きなものが用意されています。

最近、秋月のライターのバージョンが上がって、秋月取り扱いの18Fシリーズに関してはすべてかけるようになったので、環境も整いつつあります。


入手できるのは…

秋葉原で入手できるPIC18Fを調べてみました(2012/03/13)。


機能をまとめてみた

いくつかのPIC18Fの機能をまとめてみました。

namepinsProgram
(Word)
EEPROM
(Bytes)
RAM
(Bytes)
I/OADC
10bit
Comp8bit
Timer
16bit
Timer
USARTI2C/SPIMax
MHz
intOSCCCP/ECCPEx.Inst
PIC18F4524016k2561536348-221I2C/SPI(MSSP)40-2/0
PIC18F1220182k256256167(30ksps)-131408M/32k0/1
PIC18F1320184k256256167(30ksps)-131408M/32k0/1
PIC18F14K50208k25651215112131USB2.0/I2C/SPI4832M/31k0/1
PIC18F2320284k2565122510(30ksps)2131I2C/SPI408M/32k2/0
PIC18F24J10288k-10242110(100ksps)2121I2C/SPI4032k2/0ExInst
2.0-3.6v
PIC18F2450288k-7682310(100ksps)-131USB2.0488M/32k1/0ExInst
PIC18F24552812k25620482311(100ksps)2131USB2.0/
I2C/SPI
488M/32k2/0ExInst
PIC18F25152824k-39682510(100ksps)2131I2C/SPI408M/32k2/0ExInst/ no SelfWrite
PIC18F25502816k25620482311(100ksps)2131USB2.0/
I2C/SPI
488M/32k2/0ExInst
PIC18F45204016k25615363613(100ksps)2131I2C/SPI408M/32k1/1ExInst
PIC18F45504032k25620483513(100ksps)2131I2C/SPI488M/32k1/1ExInst
PIC18F87208064k1024384068162232I2C/SPI25-5/0
PIC18F87228064k102439367016(100ksps)22322I2C/2SPI408M/32k2/3ExInst

28ピンでは、PIC18F2550/PIC18F4550が機能を考えるとお買い得。USBが付いているけれど、これを使わなくても十分っぽいパフォーマンスです。秋月で@400。

PIC18F24J10は、プログラム/RAMが小ぶりだけれど、秋月で@250と安いのが魅力。ただし、フラットパッケージで電源2.0-3.6Vが使いにくい点。

PIC18F8722はここで掲載した最大規模のもの(@900秋月)。大きな規模ではこれしかない。搭載したボードが@3000なので、これを利用することになるでしょう。


16Fとの相違点

プログラミング上での、気がついた相違点です。

  1. 条件分岐が充実

    いままで、条件分岐は、BTFSS、BTFSCを使ってSTATUSレジスタのビットを判定するというワイルドなものしかなかったのですが、一般的なCPU同様に条件分岐専用命令が増えました。また、STATUSにオーバーフロービットが追加されたので、条件もより人間的(?)になりました。

  2. キャリー(ボロー)つき演算がサポートされた。

    これが無かったために、プログラムが複雑になっていたのですが、この苦労から開放されたわけです。また、減算は逆向きのものがサポートされたのも嬉しい。

    同様に大小判別用に比較命令も追加されています。

  3. 乗算命令がサポートされた。

    欲しかった高速の乗算命令がサポートされました。

  4. レジスタ間複写が1命令で出来る。

    要するに割り込みの先頭でレジスタ保存をするときに便利になったのでした。ステータスが変わらないし、Wレジスタも壊さないので、SWAPF命令を使った変則的な退避、回復処理が不要。ちょっと美しくなったかな。

  5. WREGがマッピングされた。

    マニュアルには大きく書いていないのですが、Wレジスタにレジスタアドレスがつきました。この結果、ファイルレジスタに対する操作のすべてがWレジスタにも使えます。

    意外なことですが、今までは、Wレジスタをシフトしたり、DECFSZを使ったループカウントに使ったり出来なかったのですが、これが可能になりました。

  6. プログラム空間がリニアになった。

    全空間、面倒なバンクの切り替えをせずに使えるようになりました。

  7. プログラムメモリを読める!

    専用のTBLRD命令でプログラム上のデータを読めます。おかげで、RETLW k を使った変則的なテーブル読み込みから開放されました。また、条件付ですがプログラムメモリへの書き込みも出来ます。

  8. FSRが増え、インデックスアクセスのモードも強化された。

    間接アクセスに使用するFSRが三つになりました。これで、まとまったデータの処理で、頻繁にFSRを入れ替える必要がなくなりました。また、INDFのほかにPOSTINCなどのレジスタ窓が用意され、これによって、ポスト・インクリメント/デクリメント、プリ・インクリメント/デクリメント、WREGをオフセットにしたアクセスなどが出来るようになりました。

    FSRへの読み込みも、定数だけですが1命令で出来るようになって便利。

    FSRも長くなって、全データメモリを直接アクセスできます。これも大きなポイント。

  9. データメモリの読み込みが整理された。

    相変わらず256バイトのバンク単位のアドレス指定ですが、BSR(バンクセレクト)レジスタでバンクを指定するようになりました。また、レジスタアクセスの際に、バンク指定とアクセスバンク指定の二種類が選べます(命令に記述)。バンク指定ではBSRを使った通常のアクセスですが、アクセスバンク指定では、メモリーの最初の方と、SFR(機能レジスタ)を強制的にアクセスします。

  10. 割り込みが2段階になった。

    多重割り込みがサポートされたので、本当に楽です。規模が小さいのですから、二段階もあれば十分かと思います。

メニューへ戻る
アルゴ算法堂へ戻る