今後は、少しずつ学習しているPICマイコン開発
について備忘録を残していく。
まずは基本的なMPLAB X IDEの使い方やコードの自動生成が行えるCode Configuratorプラグインを使って、生成されるコードの内容確認と動作検証を記録していくことになる。
開発環境
開発環境に関しては、以下のとおり。
使用するPICは、とりあえず基本的な学習になるので、8pinのPIC12F1822を使う。
- MPLAB X IDE v3.35
Code Configurator v3.26.2 - XC8 v1.38
- Pickit3
- Windows10 (またはMac OSX10.11(El Capitan))
プロジェクトの作成手順
- MPLAB X IDEを起動したら、
File
-New Project
コマンドで、Standalone Projectを選択して、新規プロジェクトを作成する。
- 使用するPICを選択する。別のPICを選択してしまうと、うまく動作しなくなるので注意する。ここではPIC12F1822を選択する。
- ヘッダのオプションはNoneを選択して次へ進む。
- ツールの選択では、PICkit3を選択する。PICに書き込まないで、エミュレーションするだけなら、Simulatorを選択する。PICやPickit3がなくてもエミュレーターで学習できる。
- コンパイラの選択を行う。選択したPICに合った選択肢が表示される。ここでは標準のXC8を選択する。
- エクスプローラ上ではほとんど空の状態のプロジェクトが作成される。
- プラグインを使用しない場合、main.cなどのソースファイルを追加、編集していくわけだが、Code Configuratiorプラグインを追加インストールして、コードを自動生成してみる。おそらくこの手順が一般的になるはず。
Tool
- Pugins
を起動して、Available PluginsタブからCode Configuratorを選択インストールする。
- インストールが完了すると、ツールバーにプラグインのアイコンが追加される。プラグインを起動すると、プロジェクトにリソースファイルが生成されて以下の画面が表示される。
ここで設定した内容がリソースに保持されて、中央部にあるGenerateボタンを押下すると、設定した内容をもとにソースファイルが生成される仕組みになっている。
Project Resourcesには、現在導入されているリソースが列挙される。
Interrupt Module, Pin Module, System Moduleは最初から導入されている。
Device Resourcesには、指定したPICで導入可能なModuleが列挙されている。後述するTimerやPWM、AD変換などを行いたい場合は、ここから選択して、各種パラメータを指定していく流れになる。
オシレーターの設定 ( System Module )
必ず最初にオシレータの設定を行う。内部オシレータを使うのか、外部オシレータに水晶振動子を追加するのかを決定したり、動作クロックを指定する。特に外部オシレータを使う場合は、2つのピンを占有することになるので先に設定する。
System Moduleを選択すると、中央タブにオシレーターやクロックの設定、その他の基本レジスタに関する設定パネルが表示される。基本的にどのモジュール設定でも、Easy SetupとResistersの2つのタブがある。Easy Setupタブでは、大まかな重要項目の基本設定のみで、Resistersタブでは関連するレジスタの設定項目がすべて選択可能になっている。
関連する設定項目を変更すると、両タブのパラメータが連動して値が設定される。流れとしては、まずEasy Setupで代表的なパラメータを設定し、必要であればResistersタブでその他のパラメータ設定を行う。
まず、クロック源を指定する。Easy SetupタブのOscillator Selectで、内外オシレータを選択する。この項目は、Resistersタブ内のCONFIG1レジスタのFOSC(オシレータ選択ビット)に該当する。
内部クロックを使う場合は、INTOSCを選択し、2、3ピンは汎用I/Oとして利用できる。水晶/セラミック振動子などの外部オシレータを使う場合は、LP、XT、HSを周波数に合わせて選択する。この場合だと2、3ピンがオシレータと接続するために予約されるので、汎用ピンとしては利用できなくなる。
以下にPIC12F1822のドキュメントの抜粋を示す。
つぎにクロック源の内外フラグを、Easy SetupのSystem Clock Selectで指定する。このパラメータは、ResistersタブのSCSビットに該当する。プログラム実行中に、SCSビットフラグをON/OFFして、内外オシレータの切り替えを動的に行うことができる。
内部オシレータを使用する場合は、INTOSCを選択して、Internal Clockでクロック周波数を選択する。これは、OSCCONレジスタのSCSとIRCFビットフラグに相当する。
外部オシレータを使用する場合はFOSCを指定し、接続するオシレータに合わせて、Oscillater SelectでHS、XT、LPを選択し、External Clockで接続する振動子の周波数を入力しておく、この入力値が内部カウンタに使われるので、正確に入力しておく。
例外的に内部クロックで32MHzを指定する場合は、IRCFで8MHz、FOSCを指定してCONFIG2レジスタのPLLENをEnableにする。
オシレータ設定のまとめ
下表に目的のクロック周波数とその各レジスタの設定をまとめた。
時計のような正確な時間を刻む必要がある場合は、SCSでTimer1を指定して、外部オシレータで32.768kHzの水晶振動子を使用する。