mikroC を利用した PIC 12F675 / 12F629 のプログラミング


PIC 12F675 の使用を前提に書いてます。12F629 は試してない。
PIC用のC言語「mikroC」を利用したサンプルコード。
フリーで使用なので使用制限有り版。 (2kワードまでの生成限度)


基本的に PICとMikroC - PICとMikroC のコピーに近い。

プロジェクト作るときのセッティング

  • MCLRE を使用せず汎用ピンとして使う
  • ウォッチドッグタイマーは、いらん
  • クロックは 4MHz に (Deviceの下。clockの入力項目)
  • 内蔵発振。外部出力せず。






サンプルコード

例文 ソース exsample





12F675/12F629 利用時の注意、というか見落としがちな点

デジタルで使用するときはアナログ機能をOFFする!

ANSEL  = 0;              // Configure AN pins as digital
CMCON  = 7;              // Turn off the comparators

これを main() の冒頭へ記述!忘れずに。
データシート中でもよく記述されてる。
っていうか、PIC設計自体に問題有りだろ・・・。

I/O の方向設定を忘れないで

ピンの Low/High 設定は GPIOレジスタ。
I/O 方向の設定は TRISIO。
例)
    TRISIO     = 0b00000010;  //GP1 pin input
    GPIO       = 0;

ピン割り込み時は IOC の設定を忘れないで

IOCレジスタ で割り込みを監視するピンを設定できる。
0 のままだと割り込み検知できないよ
例)
    IOC = 0b00000010;               // Interrupt pin GP1 only
    INTCON.GPIF = 0;                // Port Change Interrupt Flag clear
    INTCON.GPIE = 1;                //Enables the GPIO port change interrupt

内部弱プルアップしたピンを忘れないで!

このように
    OPTION_REG.NOT_GPPU = 0;           //GPIO pull-ups are enabled
    WPU = 0b00000010;                  //PULL-UP REGISTER setting ,only GP1 pull-up
内部プルアップすると自動的にI/O方向がInputになる。
ここでは、GP1が Input pin になる。
あと、VCCに張り付いているわけだから、VDDにスイッチングしないと検出できない。
通常スイッチはVCCにスイッチングしがちなので注意。




PIC 12F675 / 12F629 を使用する理由

  • AD変換のある 12F675 の方が断然おすすめです
  • 内蔵発振あるので、電源繋ぐだけでアプリケーションが完成する
  • 小さい
  • 秋月電子通商で120円。安い!壊しちゃっても財布痛くない -リンク
  • 組み込み小型機器作るときは丁度良い
  • AVRだと100円からあるけど、サイズが大きい
  • 日本ではPICが一般的
  • 小さいパッケージながら機能が豊富
  • 電源ピン以外全て I/O ピンにすることができる
  • 製作例が増えて来たので、サンプルコードを見つけやすい
  • mikroCの無料版機能制限はコンパイル後バイナリ 2kワードまでだが、
    12F675はプログラムメモリ1kワード。
    無料制限範囲内で十分使える。



mikroCを使用する理由

  • mikro C
    2kワードまでならフリー
    2kくらいしかプログラムは作らない
    ライブラリが充実
    サンプルコードが充実かつシンプル
    マニュアルが読みやすい英語
    10F〜16F 18Fにも対応してるかも?
    IDEが優秀。VisualBASICのような感覚で使える。
    流行のマイコン Arduino からコードが転用しやすい
  • CCS C
    高機能だが有料
    12F 16F などシリーズ違いごとに出費が必要
  • WIZ Cなど
    どうもイマイチ。
    ライブラリ不足でアセンブラとほぼ同じ労力が必要など




mikroC エディターのタブ間隔が使いにくいんですけど

初期のままだと、タブが上の行のスペースと並ぶような位置で動く。
全然4スペース毎に追従してくれない。

解決方法は
Tools - options - Editer Option dialog - Options

こんな感じ。
たぶん、Maintain caret column のチェックを外す。