PIC16F1シリーズの5桁バージョン

秋月などでも販売が始まったPIC16F1シリーズの5桁バージョンであるが、高機能な割に価格がかなり安いので、今後のことも考えて自分の使用しているライブラリを対応させるべく、データシートを見て、はまりどころを確認してみることにした。

2017年6月15日現在、販売されているチップは以下の通り

PIC16F18877 40pin 32kw
PIC16F18857 28pin 32kw
PIC16F18346 20pin 16kw
PIC16F18326 14pin 16kw
PIC16F18325 14pin 8kw
PIC16F18313 8pin 2kw

内蔵されるメモリが比較的多いのが特徴となる。従来、8ピンはコアに関係なく12Fとなっていたが、今回から16Fに統一している。また、比較的チップ番号から仕様が見えるようになった。例えば、下1桁目はメモリ容量を表しているらしく、3が2kwで1増えるごとに倍になるようだ。下2桁目はピン数のようである。ここで驚いたのが18ピンDIPのシリーズが無いことで、マイクロチップのサイトに行って調べても、今後の予定の中にも18ピンが見当たらないことから、もう出さないのかもしれないと勘ぐっている。18ピンPICの代名詞のPIC16F84A互換のチップは、ポートへの機能割り当てが個人的には使いにくかったのでPIC16F628以来、F1使いたいがばかりに仕方なしに使用したPIC16F1827以外使用していない。個人的には無くなっても困らない。ただ、数字の割り当てからみると3が18ピンを表しそうなので、例えばPIC16F18336とかの型番で出るかもしれない。

さて、自作ライブラリをアップデートするに当たり、はまりどころをいろいろ見つけたので備忘録としてとっておくことにする。

1.クロックの指定方法が変わった
とりあえず、自分が使う分には最速の32MHzしか頭にないので、他のF1シリーズから変わった点をチェック。まずはconfigで次のように指定するだけでよいことが判明。従来のF1ではPLLをうんぬんとかあったのが無くなり、すっきりした。(追記:2017/06/15 その後、実際に動作させてみるとRA5が使えない状態となり、データシートを眺めているとクロックが2系統取れるような記述があり、内蔵クロックと外部クロックを切り替えながら使えるらしいことが判明。RA5がこの外部クロックのINに指定されており、configでこれをオフにしておく必要があることがわかった。ということで次のように要追加)

#pragma config RSTOSC=HFINT32, FEXTOSC=OFF

2.タイマー0の仕様が大幅に変わった
ここが一番のはまりどころになると思っている。従来のPICではタイマー0の設定はOPTIONレジスタでやっていたのだが、なんと5桁F1はOPTIONレジスタが無い!!タイマー0関連のレジスタが追加されて、他のタイマーのように独自のレジスタで設定する形式になった。データシートのタイマー0のダイアグラムを見ればすぐに気がつくのだが、設定できる項目がかなり増えた。というか16ビットモードにもなるらしい。ということなので、これはすぐにわかったのだが、OPTIONレジスタにはほかの用途もあるので、どうするのかなと思い、データシートをくまなく探してOPTIONレジスタが無くなったことがわかった。これに気がつくまでちょっと時間がかかった。では、タイマー0の設定以外のプルアップの設定などはどこに行ったのか?簡単に言えば無くなったということになる。個々のポートごとの設定でプルアップは設定できるので、一括設定なんていらないのだろう。ということにしておく。

3.A/D用アナログポートの仕様が大幅に変わった
従来は、A/D変換入力は各ポートに割り当てられているチャンネル番号で指定するようになっていた。5桁F1は、大幅にA/D入力に使用できるポートが増えた(ほぼすべてのポートでA/D入力可能になった)ので、チャンネル指定ではなくポート番号(A0やC5のようなポートの英文字とビット番号の組み合わせ)で指定することになった。

その他、PPSでほとんどの機能の入れ替えができるところあたりが従来からパワーアップしたことといえるだろう。

現在、新旧通じてどのPICを使用するのがよいか考えてみる。とりあえずコストとパフォーマンスの点からF1以外を選ぶことはおすすめしない。(価格は2017年6月現在)

8ピン:メモリがいるならPIC12F1840(¥120)しかない。値段と性能から考えればPIC16F18313(¥75)、とにかく安いのよければPIC10F322(¥45)となり、他のチップは型番指定がなければ選ばれることはないだろう。メモリの大きな(8kw以上)の5桁PIC16F1が欲しいところ。まだ実在してないけど・・・

14ピン:メモリがいるならPIC16F18326(¥130)、バランスでPIC16F18325(¥100)、安さでPIC16F1503(¥80)、アナログ機能がいるならPIC16F1705(¥100)となる

18ピン:興味ない。F1827(¥130)の1点

20ピン:メモリでPIC16F18346(¥160)、バランスでPIC16F1579(¥140)、アナログでPIC16F1709(¥150)。最安のF1508(¥130)使うくらいなら10円出してでもF1579を勧める

 

以上、参考まで

広告
  1. こんにちは。
    私もメモリ不足で苦労することが度々あったので、PIC16F18xxxシリーズを使っていくことにしています(数十円の差ならメモリが大きい方が良いですね)。

    私もRA5の件でハマってしまいました(PIC16F18346)。
    RA5をデジタル入力、弱プルアップに設定したにもかかわらず、開放状態でも電圧はゼロボルトで、Hiを入力してもゼロしか読み込まないのでチップが壊れたかと思って取り替えてみました。が、やはり同じ状況でした。ともかく最終的には解決しました(この問題についてはデータシートには明確に書かれていないように思います)。

    もう一つ、クロックでもハマりました。訳あって8MHzで動作させたかったので、1MHzで起動後、8MHzに「クロック変更」することになりましたが、上手くいくまでちょっと苦労しました(単純に32MHzか1MHzで動かせば問題なかったのですが)。
    結局、以下のような手順でOKとなりました。

    #pragma config RSTOSC = HFINT1 // 起動時HFINTOSC 16MHz/ CDIV 16 = 1MHz
    #pragma config CSWEN = ON // NOSC、NDIV書き込み有効

    OSCCON3bits.CSWHOLD = 0; // clock switch proceeds
    OSCFRQbits.HFFRQ = 0b0100 // HFINTOSC 8MHz
    OSCCON1 = 0b01100000; // HFINTOSC no divider
    while(!OSCCON3bits.NOSCR); // wait ready

    • こんにちは。16Fの5桁バージョンも今後主流となっていくと思われるのでクロックの設定はおさえておきたいモノですね。

      クロックは結構複雑になっているので、指定の周波数にする方法がいくつかあるようです。
      データシートによると、CONFIGで設定したクロックは、リセット時に各クロック設定用レジスタの値を次のように書き換えるそうです。
      HFINT1(1MHz)のときは、NDIV=0100(1/16倍、データシートでは0010となっているが間違いと思われる), HFFRQ=110(16MHz),NOSC=110(PLL Off)で1MHz
      HFINT32(32MHz)のときは、NDIV=0000(1/1倍), HFFRQ=110(16MHz),NOSC=000(2x PLL ON)で32MHz

      つまり、この設定から希望の周波数にするためのレジスタを変更すればよいことになります。
      8MHzで動作させたいなら、vabene さんのように1M設定を基準に書き換える方法もありますが、32MHzを基準に書き換える方法もあり、
      #pragma config RSTOSC=HFINT32, FEXTOSC=OFF
      としておいて
      OSCCON1bits.NDIV = 0b0010; // 1/4 divider enable 32*1/4=8
      のNDIVのみで設定する方法や、データシートではN/Aになっているのですが、PLLをONのまま4MHzに設定する方法、
      OSCFRQbits.HFFRQ = 0b0011;
      のようにすると8MHzになるようです。

      また、1M設定からでも、NDIVのみを1/2に変更する方法、
      OSCCON1bits.NDIV = 0b0001; // 16M with 1/2 divider
      これでも8MHzになります。

      これらの設定は、実際に18325で動作確認しています。
      参考まで

  1. トラックバックはまだありません。

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。