mikroCでPICのプログラミングをしてみる(環境導入とLCDでHello World!)

今までPICはアセンブリで書いてましたがC言語でのプログラミングも試してみたくなったのでmikroCコンパイラを使ってみました。


PIC向けのCコンパイラはいくつかあります。有名所で言えばCCSのCコンパイラでしょうか。ただこれは有償なので今回はパス。
無償のCコンパイラはHI-TECH PICC LiteとmikroC PRO for PICを知っていたので、このうちmikroCを導入してみました。

mikroCの特徴

  • 専用IDE(MPLABにも組み込める?)
  • プログラム容量2kwordまでは無償で作成可能
  • 最新PICにもしっかり対応
  • 関数群が充実。リファレンスも分かりやすい(但し英語)
  • 日本語資料が少ない。書籍も出ていない?

導入

mikcoCの提供元のMikroElektronika(http://www.mikroe.com/eng/home/index/)のmikroC PRO for PICダウンロードページ(http://www.mikroe.com/eng/products/view/7/mikroc-pro-for-pic/)から「Download mikroC PRO for PIC [21.76MB] (current build v4.60)」をクリックしてダウンロード。このエントリーを書いた時点ではバージョンは4.60でした。

ダウンロード後インストール。特に迷うことなくデフォルトの設定のままで大丈夫でした。インストール完了後に小さなダイアログで書き込みの環境なのか、他にもインストールするか聞かれましたがこれはインストールしませんでした。

プログラミング

これが作業画面です。


新しいプロジェクトを作ると使用PICやクロック周波数、各コンフィグレーションビットの設定を聞いてくるウィザードが開きます。今回はPIC16F88を使い、以下のように設定。


とりあえずLCDに"Hello World!"を表示させてみます。PICは20MHzセラロックで動作させ、LCDには一般的な16×2のキャラクタ液晶を使用。mikroCではLCDのR/Wピンは使わないで制御するようなのでGNDに接続。
PIC側のピン割り当て

  • RA0 - D4
  • RA1 - D5
  • RA2 - D6
  • RA3 - D7
  • RB0 - RS
  • RB3 - EN


次にコーディング。Help→mikroC PRO for PIC Libraries→Hardware Libraries→Lcd Libraryと辿って行きリファレンスを参照します。下の方にサンプルコードがあるので拝借。

// LCD module connections
sbit LCD_RS at RB0_bit;
sbit LCD_EN at RB3_bit;
sbit LCD_D4 at RA0_bit;
sbit LCD_D5 at RA1_bit;
sbit LCD_D6 at RA2_bit;
sbit LCD_D7 at RA3_bit;

sbit LCD_RS_Direction at TRISB0_bit;
sbit LCD_EN_Direction at TRISB3_bit;
sbit LCD_D4_Direction at TRISA0_bit;
sbit LCD_D5_Direction at TRISA1_bit;
sbit LCD_D6_Direction at TRISA2_bit;
sbit LCD_D7_Direction at TRISA3_bit;
// End LCD module connections

void main() {
     ANSEL = 0x00;

     Lcd_Init();
     
     Lcd_Cmd(_LCD_CLEAR);
     Lcd_Cmd(_LCD_CURSOR_OFF);
     Lcd_Out_Cp("Hello World!");

     while(1) {
     }
}

以前アセンブリで書いた時とは比べ物にならない程の簡潔さ・・・!
Build→Build(Ctrl + F9)でビルドします。コンパイルエラーがあればIDEの下ペインに赤で表示されます。
コンパイルされてアセンブリへと変換された結果はプロジェクトディレクトリの.lstファイルで確認できます。

書き込み

PICへの書き込みにはPICkit2を使いました。mikroCでビルドするとプロジェクトディレクトリに.hexファイルができているので、これをPICkit 2 Programmerを使って書き込みます。PICkit2じゃない他の書き込み器でも同様に.hexを書きこんであげるだけですね。

PICkit 2 Programmer右下にある「Auto Import Hex + Write Device」を有効にしておくとmikroC側でビルドする度に自動でPICに書きこんでくれるので便利です。


以上で無事にLCDに"Hello World!"を表示させることができました。

今回困ったポイント

  • PICのコンフィグレーションビットの設定画面が出せない

  →最初にウィザードで設定したはいいけどまた設定をやり直す時はどこで変更できるのかと困ってました。Project→Edit Project...(Shift+Ctrl+E)で設定画面が開く。

  • コンフィグレーションビット設定で、デフォルトでは「RA5/MCLR Pin Function Select」が「MCLR」に設定されている

  →これに気付くまでPICが動かなくて悩んでました。「RA5」に変更して解決。

  • 使わないLCDのR/Wピンを開放にしてたためLCDが動作しない

  →GNDに接続して解決。

まとめ

C言語で簡単にPICのプログラムを書くことができました。IDEも使いやすいと思います。2kwordの制限があるといえ、そこまで大きなプログラムは滅多に書くこともないので普段の使用には制限は無いと言ってもいいのではないでしょうか。
様々なライブラリも用意されており、無償でこれだけのことができるので非常に魅力的なツールだと思います。