Lチカ |
「Harmonyは敷居が高い」ですね。何しろ英文の長大なマニュアル。見るのも大変です。しかし、厄介なUSBの処理などHarmonyが裏方でやってくれるので、ソースの行数は短く書けます。 いろいろなサンプルプログラムがありますが、ターゲットのボードを持っていないとよくわかりません。そこで一番簡単なLチカのプロジェクトを作ってみます。 |
プロジェクトの作成 |
先ずはプロジェクトを作成します。 [File]-[New Project...] をクリックします。 32-bit MPLAB Harmony Project を選び[Next]ボタンをクリックします。 プロジェクト名 led_blink Target Device お使いのPIC を入力します。 [Finish]ボタンをクリックします。 Harmony Configratorの画面が表示されます。 何も設定しないで赤の矢印で示したボタンをクリックします。 |
[Generate]ボタンをクリックします。 これで空の処理をするプロジェクトができました。 subversionでリポジトリの登録をしてください。 |
ポートとタイマーを設定する |
Lチカをするには出力ポートとタイマーの設定が必要です。 Harmony Cofigrator を起動します。 Timerの設定 System Serviceの中にあるTimerを選びます。 LEDはRB7に接続します。 これを保存します。 Harmony Configratorがどのようにファイルを作成したかをsubversionで確認します。 をクリックします。 Harmony Configuratorがタイマーに必要な宣言や関数の定義を自動でやってくれます。これって凄く便利です。 |
ソースコードを書く |
やることは、 「タイマーによってLEDのON・OFFをする」 といたって簡単です。 ポートを制御する関数は、 PLIB_PORTS_PinWrite(PORTS_ID_0, PORT_CHANNEL_B, PORTS_BIT_POS_7, 0); 最後のパラメータがON/OFFをする。 PLIB_PORTS_PinToggle(PORTS_ID_0, PORT_CHANNEL_B, PORTS_BIT_POS_7); これは便利な関数でポートを反転させてくれる。 最初は、イニシャルでLEDを点灯させる。 追加したところに緑の四角が表示されています。 デバッグしてみます。 コンパイルは成功。 Run状態になるとLEDが点灯します。今はこれだけ。 タイマーはダイマードライバーを使う方法: タイマー割り込みのイベントハンドラーを実装して行うPICでよくあるやり方 システムサービスでタイマーを監視するやり方: があります。今回はLEDを周期的にON/OFFするだけなので正確性を確保する必要がないので システムサービスをつかうことにします。 追加するソースは次のようになります。 SYS_TMR_HANDLE delayHandle; でタイマーのハンドラーを割り当てます。 次に delayHandle = SYS_TMR_DelayMS(1000); で1000msecのタイマー値をセットします。 if (SYS_TMR_DelayStatusGet(delayHandle)) で1000msec経過するとtrueになります。 PLIB_PORTS_PinToggle(PORTS_ID_0, PORT_CHANNEL_B, PORTS_BIT_POS_7); でRB7の出力値を反転させます。 そしてタイマーを再セットします。 これでLチカが完成です。 |