花岡ちゃんのウィークエンド
今回のウィークエンドはPICシリーズの16bitマイコン、PIC24FJ64GA002を試してみます。最近、PICの開発環境をMPLAB-Xに乗り換えたついでに、手を出してみることにしました。

PIC16シリーズは、マイコン一つで完結する小型の電子機器の製作には十分な性能があります。僕も公私ともPIC16で様々な機械を作ってきました。安定でコストが安いのも魅力です。反面、RAMが極端に少ない、シリアルポートが1本しかないなど、複数のマイコンを通信で結んだ、マルチプロセッサの機械の中核に使おうと思うと、さすがに力不足の感は否めません。そんなときにはSTM32やSH-Tinyを使えばよい訳ですが、DIPパッケージがないので「気楽」に始められる雰囲気がありません。その点、24Fシリーズは28pinDIPパッケージがあるので、思い立ったらすぐ、ブレットボードで実験が始められます。スピードではSTMなどには及ばないものの、PIC16よりははるかに高速ですし、数値演算やテキスト処理に何かと必要なRAMは8KBもあります。さらに、UARTとI2Cが2チャンネル搭載されており、マルチプロセッサのアプリケーションにも十分対応できそうです。
作成したのは下記の機能を持つテストプログラムです。
■Timer1の割り込みでLEDを周期1Hzで点滅(タイマーの使い方と出力ポートの確認)
■ボタンを押している間LEDがつきっぱなしに(入力ポートの確認)
■シリアルポートからのコマンド受け取り(シリアルポートの使い方の確認)
■I2Cバスに接続したEEPROMの読み書き(I2Cバスの使い方とEEPROMアクセスの確認)
MPLAB-XとXC16でのプロジェクトを参考までに公開します。全てmain.cに記述されているので、そこだけ見てもらえば、タイマー割り込み、割り込みでハンドルするUART通信、I2Cの制御とEEPROMの読み書きなどの実装方法がわかると思います。
「pic24f_test_1.X.zip」をダウンロード
実験した回路図はこれです。TX,RXはレベルコンバータを経由してパソコンのシリアルポートに接続します。
「pic24f.pdf」をダウンロード
テストプログラムをPICKIT3(2でも可能です)で実験機にダウンロードするとLEDが1秒周期で点滅を始めます。ボタンを押すとその間LEDがつきっぱなしになるはずです。
いったん電源を切り、レベルコンバータで実験機をパソコンのシリアルポートに接続、ターミナルソフトを起動してボーレートを9600bpsに、ローカルエコーをONにセットします。
電源を入れるとスタートアップメッセージとコマンドプロンプト">"が表示されます。コマンドはエコーバックするeコマンド、EEPROMに書き込むwコマンドと読み出すrコマンドが使えます。実行の様子は下記スクリーンショットを見てください。">"の右がPCに打ち込んだコマンドです。

PIC16シリーズとはポート設定の方法がかなり違います。この辺は初心に戻ってきちんとデータシートを読むなり、参考書を買うなりした方が賢明です。特に下記には気をつけた方がよいと思います
・アナログ入力兼用のGPIOポートは初期状態では「アナログ入力」になっている。これを解除しないとデジタル入力ポートとして使えない。
・I2Cはマルチマスター対応なので、明示的にマスターとして設定できず、送信するまではスレーブとして動作する。そのため、使用するポートをまずGPIO出力として0に初期化し、その後これをI2Cとして設定するとプルアップで1になるのでスタートコンディションが入って受信中になることがある。これではクロックがこないので受信終了にならない。こうなると、その後、送信コマンドなどを一切受け付けなくなる。そのため、I2Cを先に設定し、その後GPIOの設定をしなければならない。
・シリアルRXを割り当てたポートはTRISで入力に設定する必要がある。
ともあれ、ひとまずPIC24のコードのひな形が出来ました。機会があれば何か作ってみたいと思います。