最近、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”のようにプラグマで指定できる