導入からLEDの点灯、点滅まで
本記事は、Maicrochip社のMPLAB® X Integrated Development Environment (IDE)、MPLAB® XC Compilersの導入、プラグインであるMPLAB® Code Configuratorの導入と使用方法についてまとめ、LEDの点滅までを目標とし、記事にした。
PIC開発環境を整える
開発に必要なもの
- 今回のPIC開発に必要なもの
- PC
- PICマイコン(今回、pic16f18857を使用)
- pickit3またはpickit4
- 5V電源
- LED
- 抵抗器
- ブレッドボード
- ブレッドボード用配線
MPLAB Xのインストール
下記のwebサイトより、microchip社開発環境であるMPLAB X IDEをダウンロードできる。
サイトの下のほうに以下の「Downloads」から実行ファイルをダウンロードする。
全て終了したら、開発環境の導入が完了する。ただし、コンパイラは別途導入する必要があるため、次章で導入する。
コンパイラのインストール
下記のwebサイトより、microchip社開発環境で実行できるコンパイラXC8をダウンロードできる
MCC(MPLAB Code Configurator)の導入
MCC(MPLAB Code Configurator)とは、PICを起動した際の初期化をGUIを使ってMPLAB内で簡単に定義、ファイルの生成を行ってくれるツールである。 PICを動作するための最低限の設定やファイル生成を行い、PICの種類によってどのような機能が搭載されているかをグラフィカルにわかるため、簡単にPICの開発に取り組める。
MPLAB X IDE を実行する。
Tools -> Pluginsを開く。
「Available Plugins」のタブを選択し、MPLAB Code ConfiguratorのチェックボックスをONにする。
そして、株の「instal」を実行する。
インストールが完了し、MPLAB X IDE再起動を行うと導入が完了する。
ハードウェアの作成
下図のように配線する.
プログラム作成
プロジェクトの作成から、メインプログラム作成までを行う。
プロジェクトの作成
File -> New Projectを選択し、「New Project」ウィンドウを立ち上げる。
「standalone Project」を選択し、「Next」を押す。
プロジェクトネームと場所を決め、「Finish」を選択し完了。
MCCによるファイルの生成
MCCのプラグインがインストールしてあると、ツールバーに「MCC」と書かれたボタンが現れる。
MCCボタンをクリックする。(プロジェクトで初めてMCCを起動すると、mccファイルの保存を訊かれるため、保存をする。)
下のような画面となる。
クロック速度とオシレータの選択を行う。
今回のマイコン(16F18857)は、内蔵オシレータを搭載しており、32MHzで動作させることができる。
画面下部の「Pin Module」の「GPIO」をoutputと設定する。
次に、画面中央の「Pin Module」というタブを開き、「Custom Name」を変更し名前を付ける。
そして、「Available Resource」を選択し、「TMR1」を追加する。(+ボタンを選択する。)
画面左部の「tree view」に、TMR1が追加され、クリックすると画面中央部の設定画面が表示される。
「clock source」と「timer period」、「Enable Timer Interrupt」を画面のように設定する。
最後に、画面左部の「Generate」を押すと、ファイルが生成される。
mainプログラムの変更
/**
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.81.6
Device : PIC16LF18857
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"
void TMR1_interrupt(void); //変更箇所
/*
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();
TMR1_SetInterruptHandler(TMR1_interrupt); //変更箇所
while (1)
{
// Add your application code
}
}
void TMR1_interrupt(void){ //変更箇所
//変更箇所
LED_01_Toggle(); //変更箇所
//変更箇所
} //変更箇所
/**
End of File
*/
プロパティ変更
プロジェクトを右クリックしてプロパティを開く.
Powerをクリックする.
PowerをPicKitから胸腔するため,チェックボックスをオンにする.
書き込み
写真のように配線し,書き込みを行う.
動作
プログラムについて
プログラムについてザックリとした解説を行います。
main文
main文内では、MCCにより自動生成された関数SYSTEM_Initialize()
による初期化、ハンドラーの設定、割り込み処理の許可を行っています。
INTERRUPT_GlobalInterruptEnable()
、INTERRUPT_PeripheralInterruptEnable()
は、自動生成時にコメントアウトされているので注意。
つぎに、Timer1のカウントスタートTMR1_StartTimer()
を行っています。
そして、メインループです。
メインループでは何もしません。
/*
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:
TMR1_SetInterruptHandler(timer1_Interrupt);
TMR3_SetInterruptHandler(timer3_Interrupt);
// Enable the Global Interrupts
INTERRUPT_GlobalInterruptEnable();
// Enable the Peripheral Interrupts
INTERRUPT_PeripheralInterruptEnable();
// Disable the Global Interrupts
// INTERRUPT_GlobalInterruptDisable();
// Disable the Peripheral Interrupts
//INTERRUPT_PeripheralInterruptDisable();
TMR1_SetInterruptHandler(TMR1_interrupt);
while (1)
{
// Add your application code
}
}
割り込み処理について
TMR1によって、一秒おきにLED_01_Toggle()
が呼び出されます。
設定したピンのHigh,Lowが反転し、LEDが点滅します。
void TMR1_interrupt(void){
LED_01_Toggle();
}