目次
【開発が楽になる!】MPLAB X IDE付属のMCCの使い方
今回は、PICのレジスタの設定などが圧倒的に楽になるとの噂のMCC(MPLAB Code Configurator)の基本的な使い方と、実際にLチカするまでを紹介します。
MPLAB X IDEのDL
- MICROCHIPホームページからMPLAB IDE Xの最新バージョンをDLする
- ファイルを開き、インストールする。インストールはほぼNextを押していればいいので、特に注意することはありません。
XC8 コンパイラのDL
コンパイラはIDEと同じページでダウンロードできます。下の方に行き、自分の使いたいPIC(私の場合8bitなのでXC8)を選び、ダウンロードします。
最新版は下の方にあるので注意しましょう。現時点では最新版がv2.00でした。
ダウンロード後はクリックしてインストールしましょう。
MPLAB Code Configurator(MCC)のインストール
MCCはMPLAB X IDEのプラグインとして提供されています。以下、そのインストール方法を説明します。
- MPLAB X IDEを開く
- Toolsの中のPluginsから、MPLAB Code Configuratorを探す
- チェックを入れてインストール
- I accept the…にチェックを入れてInstallをクリック
- Restart nowでMPLABを再起動
これでMCCがインストールできました!では実際に使っていきましょう。
当ブログでおなじみのPIC16F1938君に出てきてもらい、初心に帰ってLチカをしてもらおうと思います。
MCCでLチカさせる
新規プロジェクトの作成
- 黄色いアイコンをクリックし、New Projectウィンドウを出す
- そのままStand alone projectでNextを押し、Familyを8bit MCUにしてPIC16F1938を探す。探せたらNext。
- 次もNext。
- Select toolはご自分の使用しているツールを選択。私の場合はPICkit3
- CコンパイラはXC8を選択。
- Project Nameを適当に決めて終了!
私はMCCLtikaという安易な名前を付けました。
MCCを開く
- Tools>EmbeddedからMCCを選択して開く
- MCC configurationファイルを保存しろと言われるので、そのまま保存を押す
- MCCの画面が開く
これがMCCの画面です。沢山ありますが、今回使うのは少しだけです。まず便利なウィンドウについて解説します。
MCCの画面説明
-
Pin Manager
PICの各ポートと、その状態を設定できる画面。例えばPortAの0をOUTPUTにしたい場合は、クリックして以下のようにすればよい。
-
Notifications
設定した値がおかしくないかどうかを通知してくれる画面。更新されるので、よく見ておくと便利。 -
Tree View
MCCは各機能をModuleとして提供している。デフォルトではInterrupt, Pin, Systemの3つ。ADC(ADコンバーター)などもModuleとして追加できる。 -
Device Resources
このPICで使える機能・モジュールを表示するウィンドウ。例えば上図のmTouchの+マークをダブルクリックすれば、mTouchの機能がツリービューに追加されて、編集できるようになる。 -
Available Resources
これもmoduleの一覧。+をクリックするとその機能が追加され、編集できる。 -
Pin module
Easy Setupでは、Pin Managerで設定したピンの情報が確認でき、編集できる。
Registersではピンに関連するすべてのレジスタがクリック操作で変更できるようになる。これはかなり便利で、データシートの情報を見ながらそのままその機能をオンにできる。スマホのWi-Fiをつけるような感覚。 -
System module
クロックやウォッチドッグタイマ等のPIC全体にかかわる設定ができる。Internal Clockの値がそのままクリックで選べるのがすごく便利。
同じようにRegisterタブではレジスタをいじれます。
Lチカプログラムを書いてみる
まずMCCで基本的なコードを出力します。
今回のPICの要件は以下の通りにします。
- 8MHz駆動
- ウォッチドッグタイマなし
- Port A の0番目のピン(2番ピン)をアウトプットにしてLEDを駆動
この設定は、もうすでに今までの説明画像の中にあります。System ModuleのInternal Clockから8MHzを選択。下のWDTはWDT disabledに。そしてPin ManagerでPort A 0番ピンをアウトプットにしました。
これで、Generateを押します。
そしてProjectsタブに戻ってみてみると…
main.cと、いくつかのライブラリがMCCで生成されました!
main.cを見てみましょう。
/**
Generated Main Source File
Company:
Microchip Technology Inc.
File Name:
main.c
Summary:
This is the main file generated using PIC10 / PIC12 / PIC16 / PIC18 MCUs
Description:
This header file provides implementations for driver APIs for all modules selected in the GUI.
Generation Information :
Product Revision : PIC10 / PIC12 / PIC16 / PIC18 MCUs - 1.77
Device : PIC16F1938
Driver Version : 2.00
*/
/*
(c) 2018 Microchip Technology Inc. and its subsidiaries.
Subject to your compliance with these terms, you may use Microchip software and any
derivatives exclusively with Microchip products. It is your responsibility to comply with third party
license terms applicable to your use of third party software (including open source software) that
may accompany Microchip software.
THIS SOFTWARE IS SUPPLIED BY MICROCHIP "AS IS". NO WARRANTIES, WHETHER
EXPRESS, IMPLIED OR STATUTORY, APPLY TO THIS SOFTWARE, INCLUDING ANY
IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY, AND FITNESS
FOR A PARTICULAR PURPOSE.
IN NO EVENT WILL MICROCHIP BE LIABLE FOR ANY INDIRECT, SPECIAL, PUNITIVE,
INCIDENTAL OR CONSEQUENTIAL LOSS, DAMAGE, COST OR EXPENSE OF ANY KIND
WHATSOEVER RELATED TO THE SOFTWARE, HOWEVER CAUSED, EVEN IF MICROCHIP
HAS BEEN ADVISED OF THE POSSIBILITY OR THE DAMAGES ARE FORESEEABLE. TO
THE FULLEST EXTENT ALLOWED BY LAW, MICROCHIP'S TOTAL LIABILITY ON ALL
CLAIMS IN ANY WAY RELATED TO THIS SOFTWARE WILL NOT EXCEED THE AMOUNT
OF FEES, IF ANY, THAT YOU HAVE PAID DIRECTLY TO MICROCHIP FOR THIS
SOFTWARE.
*/
#include "mcc_generated_files/mcc.h"
/*
Main application
*/
void main(void)
{
// initialize the device
SYSTEM_Initialize();
// When using interrupts, you need to set the Global and Peripheral Interrupt Enable bits
// Use the following macros to:
// Enable the Global Interrupts
//INTERRUPT_GlobalInterruptEnable();
// Enable the Peripheral Interrupts
//INTERRUPT_PeripheralInterruptEnable();
// Disable the Global Interrupts
//INTERRUPT_GlobalInterruptDisable();
// Disable the Peripheral Interrupts
//INTERRUPT_PeripheralInterruptDisable();
while (1)
{
// Add your application code
}
}
/**
End of File
*/
どうやら、MCC Generated Filesのmcc.hというヘッダファイルにSYSTEM_Initialize()という便利関数が入っているようです。これがすべての設定をしてくれるので、我々はWhile文の中だけ書けばいいようになっています。便利!
Lチカプログラムはこんな感じ。
#include "mcc_generated_files/mcc.h"
void main(void)
{
SYSTEM_Initialize();
while (1)
{
RA0 = 1;
__delay_ms(500);
RA0 = 0;
__delay_ms(500);
}
}
PICのプログラムとは思えない程単純になりました。
いつも通り書き込んだ後の動画。
MCCを使ってコードを生成し、PIC16F1938に書き込み????
【MCCの利点】
・殆どのレジスタ設定をクリックで出来る
・while文の中に処理を書くだけ pic.twitter.com/RJ5JYgHNVo— ????????????-????????????????????電子工作 (@wak_tech) August 17, 2019
mcc.hの中身を見てみる
ヘッダファイルなので、中には関数の宣言があります。
void SYSTEM_Initialize(void);
/**
* @Param
none
* @Returns
none
* @Description
Initializes the oscillator to the default states configured in the
* MCC GUI
* @Example
OSCILLATOR_Initialize(void);
*/
void OSCILLATOR_Initialize(void);
/**
* @Param
none
* @Returns
none
* @Description
Initializes the WDT module to the default states configured in the
* MCC GUI
* @Example
WDT_Initialize(void);
*/
void WDT_Initialize(void);
この3つの関数はdevice_config.cとmcc.cとpin_manager.cから取ってきています。例としてPIN_MANAGER_Initializeを見てみましょう。
#include "pin_manager.h"
void PIN_MANAGER_Initialize(void)
{
/**
LATx registers
*/
LATE = 0x00;
LATA = 0x00;
LATB = 0x00;
LATC = 0x00;
/**
TRISx registers
*/
TRISE = 0x08;
TRISA = 0xFE;
TRISB = 0xFF;
TRISC = 0xFF;
/**
ANSELx registers
*/
ANSELB = 0x3F;
ANSELA = 0x3E;
/**
WPUx registers
*/
WPUE = 0x00;
WPUB = 0x00;
OPTION_REGbits.nWPUEN = 1;
/**
APFCONx registers
*/
APFCON = 0x00;
}
void PIN_MANAGER_IOC(void)
{
}
/**
End of File
*/
TRISA等のピンを設定するレジスタが自動で書かれています。これで私たちは自分の書くコードに集中できますね!
クラウド版MPLAB
今まで知りませんでしたが、クラウド版のMPLABがあるようです。
そこではインストールも何も不要で、ただブラウザを開けばいいようです。
またデフォルトでMCCが利用できるため、爆速で開発できます。
次はこのクラウド版に挑戦して、使い方をレビューしようと思うのでお楽しみに。
お待ちしておりました
ありがとうございます