よく目にするHarmony( MPLAB Harmony Configurator = MHC )って何?
ってことで、簡単な例として、お決まりのLEDチカチカをやってみる。
環境
MPLAB X IDE v3.30
MPLAB XC32 v1.40
MPLAB Harmony 1.08
MPLAB Harmony Configurator 1.0.8.7
PICkit3
PIC32MX250F128B
参考にしたサイト
SK1632 Tutorial, and Introduction to MPLAB’s Harmony(追記 若干疑問点があったのでのちにこちらで再検討している。)
インストールしてあるツールのバージョンの違うものがあり、やってみて多少異なるところもあったが、まあ、迷って止まってしまうような差ではなかった。
このサイトは、どうもSK1632というボードの使い方を説明していて、その中でこのボードにPIC32MX250F128Bを載せてLEDを点滅させる例を、Harmonyでやってみたということらしい。
なので、回路図はこのボードのものを参考(pdfをもらっておいたSK1632 Schematic)にして必要最低限のものだけを取り付けてある。
ちなみに、最初は1つもコンデンサをつけてなかった。
20ピンのVCAPにつけないとプログラムが書き込めなかったのでここだけ0.1uFをつけた。
出来れば内蔵のオシレータで駆動したかった。
ただ、余計なトラブルを避けるためには最初は参考サイトの通りに正直にやるのがいい。
水晶発振子は手持ちが無かったので8MHzのセラロックを取り付けた。
以下、MPLAB X IDEでの手順を書く。
まずは MPLAB X IDE 上で Harmony の準備をする。
Harmonyをインストールしたフォルダの、¥utilities¥mhc¥com-microchip-mplab-modules-mhc.nbm を指定する。
ここで、MPLAB X IDEを 再起動する。
新規プロジェクトを作る。
ここでHarmonyを使う設定にする。
プロジェクト名を適当につける。
使うチップを決めて[Finish]をクリックする。
プロジェクトの保存場所だが、水色の線がこちらで決めたフォルダの場所だ。
緑色の線は Project Name の欄に入れた名前をもとに自動で作られるようだ。
ユーザーは変更できない模様。
[MPLAB Harmony Configurator]が開いてなかったら、以下のようにして開く。
[MPLAB Harmony Configurator]から[Options]を選ぶ。
MPLAB Harmony & Application Configuration > Harmony Framework Configuration > Drivers > Timer
を開いて、以下のように設定する。
この後、下でクロックを2MHzにするので、
20000000 / 2 / 256 / 78 = 500Hz
となる予定だ。
MPLAB Harmony & Application Configuration > Harmony Framework Configuration > System Services > Clock
を開いてClock Configurator [Execute]をクリックする。
[Clock Diagram]が開くので下のように設定する。
データシートにある図と同じだが、クリックで設定していくことが出来るようになっている。
つまり、データシートと首っ引きでコードを書いていたところを、GUIっぽくしたということのようだ。
確かにこれは煩雑さが減って便利だ。
ちなみに、私の場合は幾度か試行錯誤する過程で右下のFNOSCがPRIPLLになってないのを見落とし、少し悩んだ。
続いて「Pin Settings」からピンの使い道を設定する。
今回はRA0のLEDを点滅させるだけなので以下のように設定する。
あとは、[Save Configuration]の後に[Generate Code]をクリックすれば、設定が保存されて、必要なコードが生成される。
びっくりするほどたくさんのファイルが作られるが、
その詮索はいずれ行うとして、まずはmain.cに自分のやりたいことのコードを書く。
下で、赤線の引いてある部分が、参考サイトを見て追加したりコメントアウトしたりした部分だ。
タイマーのカウントをチェックしてLEDを点滅させるだけのごく普通のコードだ。
#inclide <p32xxxx.h>
入れないとエラーでコンパイルできなかった。
一応、ちゃんと予定通り500ms、2Hzで点滅しているようだ。
少なくとも、データシートを眺めながらちまちまコードするよりは楽だと思う。
ただ、その自動で生成されたコードがどこにあって、どんなのかはまだまったく調べていない。
関連記事
「PIC32MX250F128B MPLABX XC32 Harmony でLチカしてみた。(改めて見直し)」
「PIC32MX250F128B MPLABX XC32 Harmony でLチカしてみた。- Interrupt –」
「PIC32MX250F128B MPLABX XC32 Harmony でLチカしてみた。- Timerを追加 –」
たく on 2017年9月18日 at 10:10 AM said:
お世話になります。
上のブログではClock SourceがDRV_TMR_CLKSOURCE_INTERNALと表示されていますが
私のはTMR_CLOCK_SOURCE_PERIPHERAL_CLOCKとTMR_CLOCK_SOURCE_EXTERNAL_INPUT_PINの選択しか表示されません。
同じ型番のPICマイコンでHarmonyのバージョンはv1_06_02です。
何か原因が分かるようでしたらお教えくださるとありがたいです。
sahara on 2017年9月19日 at 12:28 AM said:
たくさん、こんにちは。
記事を書いた時点のHarmonyのバージョンは記事冒頭に書いてあります。
現在は2.04を使用中ですが、記事内とまったく同じ表示になります。
同じバージョンでご確認下さい。
以下は未確認の想像です。
DRV_TMR_CLKSOURCE_INTERNALとDRV_TMR_CLKSOURCE_EXTERNAL_SYNCHRONOUS、
TMR_CLOCK_SOURCE_PERIPHERAL_CLOCKとTMR_CLOCK_SOURCE_EXTERNAL_INPUT_PIN、
の組はそれぞれ同じことではないかと思います。
タイマーのソースは内部クロックか外部のT2CKを使うかのどちらかなので。
たく on 2017年9月20日 at 1:03 AM said:
Saharaさん、お返事下さり有難う御座います。確かめてみました。
Microchip harmonyの日本語ウェブにあったv1_06_02を使用した場合には
Driver Imprementation を Dynamicにしたときのみ、DRV_TMR_CLKSOURCE_INTERNALと表示されました。
Microchip harmonyの英語ウェブにはなんと、v2.04!があり、これを使用した場合には
Driver ImprementationがStaticでもDynamicでもDRV_TMR…と表示されました。
めでたしめでたし。^^
sahara on 2017年9月20日 at 1:54 PM said:
それは何よりです。
私事で申し上げれば、なるべく無駄な努力を避ける意味で、
自分が使っているバージョンと同じものを使っているサイトを参考にする、
参考にするサイトと同じバージョンを自分も使う、
のいずれかが鉄則と思っています。