PICマイコン 開発環境設定(その2)
その2では、簡単なプログラムを書いて、コンパイルしてみます。
PICマイコンの開発環境を設定は、
・その1:プログラミング環境の設定
・その2:簡単なプログラムを書いてみる
・その3:PICマイコンへの書き込み1
・その4:PICマイコンへの書き込み2
の4部に分けて記載しています。
PCなどの開発言語の単なプログラムと言えば、
”Hello world”ですが、
マイコンでは、”Lチカ”となどとよばれている、
LEDの点滅が定番ですね。
回路は図の通りです。
この回路をブレッドボードで制作します。
この回路図の作図には fritzing を利用させて頂いております。
https://fritzing.org/home/
※この回路の、PICマイコン VDD端子に設置している、バイパスコンデンサは、
電源の安定供給(電圧変動、ノイズ等への対応)のためのものです。
回路によりますが、0.1μF~10μF程度のセラミックコンデンサが使用されます。
供給電源によりますが、この回路では設置しなくても問題ないと思います。
※VPP端子とVDD端子間の10KΩの抵抗は、VPP端子のプルアップのためのものです。
こちらも、この回路では設置しなくても問題ないと思います。
ブレットボードへの電源供給ですが、
Arduino では、Arduinoの電源ピンより供給可能ですが、
PICマイコンの場合、供給をするための端子は用意されて
いませんので別途供給が必要です。
・ブレッドボードへ電源供給用の
ブレッドボード電源供給モジュールもあります。
これは、USB端子やDC端子が付いていますので、
USB端子や、7V~12VDC電源をDC端子接続で、
ブレッドボードに、5Vまたは3.3Vを供給することができます。
画像のものは、大陸調達品で¥80-程度だったと思います。
国内でも販売されています。
・・・7V以上のACアダプターや9V乾電池も使えるので、
これが便利かと思います。
・Arduino などをお持ちなら、
Arduino 等の電源ピンから、ブレッドボードへ
電源を拝借するというのもありですね。
・・・Arduino を電源回路として使うのは勿体ないですし、
容量にも注意が必要です。
・PICkit を使うのであれば、
PICkit から電源を調達することもできます。
・・・こちらも容量に注意が必要です。
さて、
PICマイコン 12F683-I/P の
GP2(5番端子)にLEDを接続して、
このLEDを点滅するプログラムを書いてみます。
C言語なので、
Arduino IDE での開発と大差はありませんが、
マイコンや IDE の違いにより、
記述内容や操作は異なります。
では、作成してみます。
※私のIDE環境は、MPLAB X IDE v5.50 です。
1.MPLAB X IDE v5.50x のアイコンをダブルクリックして起動します。
2.プロジェクトを作成します。
メニュー「File」 → 「New Project…」
開いた、New Project 画面、
1.Choose Project
Categories : Microchip Embedded
Projects : Standalone Project
を選択し、〔Next>〕 をクリック
2.Selext Device
Family : Mid-Range 8-bit MCUs (PIC10/12/16/MCP)
Device : PIC12F683
を選択し、〔Next>〕 をクリック
※Family、Device はターゲットのPICマイコンに合わせます。
私の場合、PIC12F683 なのでこの設定を選択しています。
※Tool : 書き込みのツール(PICkit3等)を接続している場合は、
選択出来ますので選択します。(書き込み時に設定できます)
3.Select Haadar
そのまま、〔Next>〕 をクリック
4.Select Plugin Board
この設定項目は、スキップされます。
5.Select Compilar
使用するマイコンが PIC12F683 で、C言語を使用しますので、
Compiler Toolchainsの、
・XC8 - XC8 (v2.32) [C:\Program Files\Microchip\xc8\v2.32\bin]
・XC8 - XC8 (v2.31) [C:\Program Files\Microchip\xc8\v2.31\bin]
などインストールバージョンを選択し、〔Next>〕 をクリック
6.Select Project Name and Foldar
Project Name : f683_led_101
Encoding : UTF-8 (Shift_JIS)
他の項目の確認して、〔Finish〕 をクリック
※私の Project Name ”f683_led_101” は、適当です。
先頭数字や記号、全角は使わないのが良いですね。
※Encoding 項目は、ソース内に日本語コメントを記載する場合は、
UTF-8 (Shift_JIS)を選択します。
Shift_JIS を選択されている方が多いようですが、私はUTF-8 を選択します。
3.プログラムを記述するためのソースファイルを
プロジェクト内に作成します。
左上窓の、Prjectダブより、
「f683_led_101」 → 「Source Files」 を右クリック
→ 「New」 → 「main.c…」 を選択します。
Name and Location 画面が開き、
File Name : main
他の項目の確認をして、〔Finish〕 をクリック
これで、プログラミングの準備は完了です。
では、
「f683_led_101」 → 「Source Files」 内に作成された、
”main.c” を選択し、コーディングします。
「Projects」タブ → 〔Source Files〕 → ”main.c”
をダブルクリックします。
・コンフィギュレーション設定を記述します。
このコンフィギュレーションは、PCマイコンの
基本動作を設定するもので、作成するプログラムの
動作仕様に合わせて設定します。
設定内容は以下のものになります。
コンフィグレーションビットの設定内容
項目 | 設定 ( )内は、今回の設定 | 説明 |
・FOSC | (INTOSCIO) EXTRCCLK EXTRCIO INTOSCCLK | システムクロック発生に使用する回路 |
・WDTE | (OFF) ON | タイムアウト時にマイコンをリセットさせるタイマ |
・PWRTE | (ON) OFF | 電源供給後、64ms間、マイコンをリセット |
・MCLRE | (OFF) ON | 外部リセットの利用 |
・CP | (OFF) ON | プログラムメモリのプロテクト |
・CPD | (OFF) ON | データメモリのプロテクト |
・BOREN | (ON) NSLEEP SBODEN OFF | ブラウンアウト・リセット(低電圧時に、リセット) |
・IESO | (OFF) ON | 2スピード・モードの使用 |
・FCMEN | (OFF) ON | フェイル・セーフ・クロック・モニターの使用 |
記述は、
メニュー「Production」 → 「Set Configuration Bits」 を選択します。
右下窓に、〔Configuration Bits〕 タブが表示されます。
この画面を使って設定します。
設定が完了したら、
〔Generate Source Code to Output〕 ボタンをクリックします。
〔Output - Config Bits Source〕 タブが表示され、
この画面の中に、コードが生成されています。
これをコピーして、main.c ソースファイルに貼り付けます。
貼り付け位置は、main.c ソースファイルの、
#include <xc.h> の位置と、
Output - Config Bits Source の
#include <xc.h> の位置を目安に貼り付けます。
※main(void)関数より上に貼り付ければ良いですね。
この時、#include <xc.h>が2文(重複書)にならないように注意です。
この#pragma(プラグマ)記述は、コンパイラ指令で、
コンパイラに受け渡され、コンパイル時の制御情報として使われます。
・ __delay_ms( ) のマクロ命令を利用する場合、
クロック周波数の定義を行う必要があります。
今回、周波数は、1MHzとしますので、
#define _XTAL_FREQ 1000000
の記述を行います。
ここからは、maic( )内に記述します。
・使用するPICマイコンのピン設定を記述します。
内部クロック設定(1MHz)
OSCCON = 0x40;
ピン(デジタル/アナログ)設定(全てデジタル)
ANSEL = 0x00;
コンパレータ無効設定
CMCON0 = 0x07;
ピン(入出力)設定(GP3のみ入力、他GPは出力)
TRISIO = 0x08;
今回は、このような設定となります。
・無限ループを作成し、
その中に、処理内容のプログラムを記述します。
// 永久ループを構成
while(1) {
GP2 = 1; // GPIO2の出力を1に設定(LED点灯)
__delay_ms(500); // 500ms待機
GP2 = 0; // GPIO2の出力を0に設定(LED消灯)
__delay_ms(500); // 500ms待機
}
これでプログラムは完成です。
プログラムの全体を記載しておきます。
/*
* File: main.c
* Author: g_shino.G
*
* Created on 2021/08/00, 00:00
*/
// コンフィギュレーション設定
// PIC12F683 Configuration Bit Settings
// 'C' source line config statements
// CONFIG
#pragma config FOSC = INTOSCIO // Oscillator Selection bits (INTOSCIO oscillator: I/O function on RA4/OSC2/CLKOUT pin, I/O function on RA5/OSC1/CLKIN)
#pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT disabled)
#pragma config PWRTE = ON // Power-up Timer Enable bit (PWRT enabled)
#pragma config MCLRE = OFF // MCLR Pin Function Select bit (MCLR pin function is digital input, MCLR internally tied to VDD)
#pragma config CP = OFF // Code Protection bit (Program memory code protection is disabled)
#pragma config CPD = OFF // Data Code Protection bit (Data memory code protection is disabled)
#pragma config BOREN = ON // Brown Out Detect (BOR enabled)
#pragma config IESO = OFF // Internal External Switchover bit (Internal External Switchover mode is disabled)
#pragma config FCMEN = OFF // Fail-Safe Clock Monitor Enabled bit (Fail-Safe Clock Monitor is disabled)
// #pragma config statements should precede project file includes.
// Use project enums instead of #define for ON and OFF.
// define定義
#define _XTAL_FREQ 1000000 // __delay_ms( ) 等のクロック周波数の定義(1MHz)
#include <xc.h>
void main(void) {
// ピン設定
OSCCON = 0x40; // 内部クロック設定(1MHz)
ANSEL = 0x00; // ピン(デジタル/アナログ)設定(全てデジタル)
CMCON0 = 0x07; // コンパレータ無効設定
TRISIO = 0x08; // ピン(入出力)設定(GP3のみ入力、他GPは出力)
// 永久ループを構成
while(1) {
GP2 = 1; // GPIO2の出力を1に設定(LED点灯)
__delay_ms(500); // 500ms待機
GP2 = 0; // GPIO2の出力を0に設定(LED消灯)
__delay_ms(500); // 500ms待機
}
return;
}
では、コンパイルしてみます。
メニュー「Production」 → 「Build Project F11」 を選択します。
または、
アイコンメニューの”金槌のようなアイコン” をクリックします。
カーソルを当てると、”Build Project (F11)” と表示されます。
コンパイルが行われると、右下窓に〔Output〕タブ表示され、
Output 画面に、詳細が表示されます。
正常にコンパイルが行われた場合、
構文にエラー等がある、コンパイルが中断した場合、
また、左下画面に、〔f683_led_101 - Dashboard〕タブが表示され、
f683_led_101 - Dashboard 画面に、メモリの使用量などの
詳細が確認出来ます。
コンパイルに成功すると、
C:\Users\k_shino\MPLABXProjects\f683_led_101.X\dist\default\production
※"C:\Users\k_shino"の部分は、ご自分のユーザ名となります。
フォルダ内に、
”f683_led_101.X.production.hex”
という、拡張子、"hex"の機械語ファイルが生成されます。
これで、プログラムの作成は完了です。
その3では、この機械語ファイルをPICマイコンに書き込んで、
実行確認してみます。