8pin PICと言えば
これまで8pin PICといえばずっとPIC12F1822を使ってきた。
今のお値段は二百円だ。高くなってきたがRaspberry Pi PICOに比べたらまだまだ安い。でもPickit4が買えなくなってPickit5が1万8千円近くすることを考えると、PICを使い始めるハードルがずいぶん高くなった印象だ。
ただ何かの中に組み込んだりするには千円弱のPICOやXIAOはちょっと使いにくいので、まだまだPICの出番は多いはず。まぁ今は40円のRISC-V に駆逐されそうなんだけど。。。
8pinのPIC16F
8pinのPIC16Fシリーズでは、150円のPIC16F15313と160円のPIC16F18313が秋月電子で買える。機能の差異はほとんどないので、今回は数字が大きい(15<18)し、これまで使ってたPIC12F1822と名前が近いPIC16F18313を選んでみた。
PIC12F1822のオシレータブロック
これまでのPIC12F1822 のオシレータブロックはこんな感じだ。
内部オシレータを使う場合、CONFIGレジスタ「#pragma config」で内部オシレータ(INTOSC)とPLLの有無(PLLEN)を選び、OSCCONレジスタでMUXを指定すると32M/16M/8M/4M/2M/1M/500k/250k/125k/62.5k/31.25kの11種類のシステムクロックが選べる(動作はこの1/4)。
ブロック図を見ると速い方の内部オシレータは500kでこれをPLLで32倍の16Mにしてさらに半分の8Mに落としてから4倍PLLに入れて32Mを得ている。複雑すぎ〜w
PIC16F18313のオシレータブロック
一方のPIC16F18313の方は、やはり桁が増えた(1822→18313)おかげで中身がだいぶ変わっている。
PIC16F18313の内部オシレータを使う場合、Config Word(#pragma config)で32M(HFINT32)、1M(HFINT1)または31k(LFINT)を選ぶ。OSCCONレジスタを設定したい場合はConfig Word中のCSWENをONにしないといけないので、基本的にOSCCONレジスタは設定しないようになってるようだ。
32MHz駆動の場合はCONFIG1を以下のようにすれば、mainに来た時にはもう32MHzになっている。
// CONFIG1
#pragma config FEXTOSC = OFF
#pragma config RSTOSC = HFINT32
#pragma config CLKOUTEN = ON
#pragma config CSWEN = OFF
#pragma config FCMEN = OFF
1MHz駆動ならHFINT32ではなくHFINT1、31kHz駆動ならLFINTにすればいい。OSCCONで再設定したければCSWENをONにしてPostscalerをOSCCON1bits.NDIVで切り替える。入力が3種、分周設定が10種あるので、多彩な動作クロックが得られるがここまで必要なのか。。。31k入力512分周でCLKOUT端子から15Hzが出る。おっそw
まとめ
- 8pin PICはPIC12F1822(200円)より新しいPIC16F15313(150円)やPIC16F18313 (160円)の方が安いが機能面ではそれほど大きな差がない。
- よく使ってたPIC12F1822と新しいPIC16F18313はオシレータブロックの設計がまるで違うので、内部オシレータの指定方法を再確認した。
- PIC16F18313のオシレータ設定は多彩だが、ほとんど使わないのではないかという印象。32MHzと1MHzの2択で十分か。
投稿者の人気記事
-
akira.kei
さんが
2025/01/19
に
編集
をしました。
(メッセージ: 初版)
-
akira.kei
さんが
2025/01/19
に
編集
をしました。
-
akira.kei
さんが
2025/01/19
に
編集
をしました。
-
akira.kei
さんが
2025/01/25
に
編集
をしました。
-
akira.kei
さんが
2025/01/26
に
編集
をしました。
-
akira.kei
さんが
2025/01/26
に
編集
をしました。
ログインしてコメントを投稿する