PIC16F1823

最近、Arduinoばかりだったので、新しいPICはほとんど知らなかったのですが、秋月電子のサイトを見ていて、新製品のところで、いいのを見つけました。

●いいの見つけた

PICは種類が多く、次から次へと新しいデバイスが登場するので、とても追いきれません。

仕事では、16シリーズならF886とかF887、F88をよく使っていたのですが、今回、比較的単純な機能をモジュールとして、ピン数の少ないPICで作れないか検討していたのですが、ちょうどよいものを見つけました。

16シリーズで4桁のシリーズは新しいタイプのもので、マニュアルによると、enhanced mid-range coreとなっています。

なんと、RAMのアドレッシングに16ビットが使えるようになって、バンク切り替えが必要なくなりました。そのため、C言語でも大きな配列が効率よくアクセスできます。さらに、スタックレベルが従来の8から2倍の16に拡張されています。これだけでも、新世代の16シリーズは魅力的です。

●16F1823

そこで目に留まったのが、16F1823という、14ピンのMCUです。私が注目してる機能は次のものです。

  • 秋月で@90円
  • スタックレベル16
  • 最大クロック32MHz(PLL使用時、内部クロックで発生可能 ±1%)
    クロック出力可能
  • ピンチェンジ割込みで両エッジで割込み発生が可能
  • AD、アナログコンパレータ用に基準電圧1.024V/2.048V/4.096V発生
  • 5ビットDAコンバータ内蔵
  • DSM(Data signal modulator)内蔵
  • MSSP(I2Cマスタ/スレーブ、SPI)
  • その他、EUSART、ECCP1、TIMER0/1/2などは一般的なものと同じ
  • タッチパネル用の静電センサ入力

16F88はMSSPでなく、SSP(I2Cマスタなし)だったのが不満でしたが、それが解消です。

価格も、安くなったとはいえF88は@250円ですが、F1823は@90です。1度に50個ぐらいは軽く使うので、この差は大きいです。機能的にもF88を使う必要はなくなります。

それと、注目すべきはDSMです。私は赤外線で通信することが多いのですが、38KHzのキャリア波にUARTのTXで変調をかけたものを良く使いました。その際、ゲート回路が必要となりますが、DSMはそのゲートをPICの中に内蔵したものです。CCP1で38KHzを生成して、TXの出力で変調掛けるというのが、外付け部品なしにPICの中だけでできます。

また、5bitで分解能は低いですが、DAコンバータを内蔵しているので、これでのこぎり波を作ってコンパレータと併用して音声信号をPWM変調するということもできます。

同一ピンに多機能がアサインされているため、同時使用できないもの(I2CとSPIなど)もあります。また、コンフィギュレーションビットでピンアサインを切り替える必要がある場合もあり、多少複雑になりますが、価格とか機能を考えると許容できます。

同時使用できないものも、比較的単機能の専用ICとして製作するときは問題ないと思っています。@90というのは、TTL ICとあまり変わりませんので、TTL IC感覚でたくさん使えます。

●問題はコンパイラ

私は、ずっと、FED社のWIZ-Cを使ってたのですが、新世代の16シリーズに対応してません。最近、WIZC MXという新しいバージョンがリリースされたみたいで、プログラム2KW限定付きの評価版をダウンロードして、立ち上げてみましたが、サポートPICは増えていないみたいでした。新しいデバイスを追加する機能があるのですが、新世代はアーキテクチャが変わっているので現状では多分使えないでしょう。

●HI-TECH C

最近主流のようですが、現在マイクロチップ社が供給しているHI-TECH Cを使ってみることにしました。現在、HI-TECHの名称はなくなって、MPLAB(r) XC Compilersとなっています。
HI-TECH Cは、昔、MC68000用のを使ったことがありまが、それ以来です。

このコンパイラはPIC12/14/16/18に対応した”8″シリーズで無償版とスタンダード版とプロ版の3種類あります。あと、”24″とか”32″のシリーズもあります。ちなみに、スタンダード版は日本円に換算すると、6万円ぐらいです。HI-TECH Cのときと比べると低価格になっていますが、PIC専用なので、MPLABみたいに無償または、もっと低価格で発売してくれないかなぁ。

デバイスクラスによる分類

  • XC8 PIC12, 14, 16, 18シリーズ
  • XC16 dSPIC, PIC24シリーズ
  • XC32 PIC32シリーズ

バージョンの違いはオプティマイズの性能だけのようですが、無償版も60日はプロ版の機能が使えます。

ダウンロードは、以前はユーザ登録が必要だったみたいですが、現在は何もせずにいきなりダウンロードできるようになっています。

スタンドアロンでも作動するようですが、単独でインストールしても起動できなかったので、MPLABの最新のものをダウンロードしてインストールした後にコンパイラを再インストールしました。

取り敢えず、レジスタアクセスとか簡単な処理を書いてコンパイルエラーが取れる程度は確認しました。さっそく、PIC16F1823など購入して動作確認したいと思います。

シリアルとかI2Cのライブラリがネット探せばどこかにあるかもしれませんが、作らないといけないですね。リングバッファを大きくしたりとか、調整したいので自作した方がいいかもしれません。このへんは、WIZ-Cとか、Arduinoを使っているとその便利さに慣れているので不便に感じますが、昔は自分で作っていたので、むかし作ったものとか引っ張り出してきます。

元々、部品として使える、専用機能を持ったIC的なものの製作を目指しているので、それほど大きなプログラムを作るわけではありません。
オプティマイズも、フロート演算を多用するとかではなく、ほとんどレジスタ操作とか、I/O、メモリの操作なので、あまり関係ないような気がします。

UARTが2つ付いたのがほしいのですが、PIC18シリーズでないとないみたいですね。

●プログラム書き込み

まだ未確認ですが、MPLABのツールでPICKit2とかが指定できるので、MPLABから直接、PICKit2で書き込みでできるみたいです。まあ、当然でしょうけど。

●覚書

これだけわかれば、取り敢えず、プログラムが書けます。

  • レジスタアクセスする際は”xc.h”をインクルードする。”TRISA”や”PORTC”といった標準的なシンボルでアクセス可能
  • コンフィギュレーションワードは
    “#pragma config BOREN=OFF, FOSC=HS, WDTE=OFF, LVP=OFF, MCLRE=ON”のようにプラグマで指定できる

コメントは受け付けていません。