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乾電池も使えるので、
   これが便利かと思います。

ブレッドボード電源供給モジュール 1
ブレッドボード電源供給モジュール2
ブレッドボード電源供給モジュール2

・Arduino などをお持ちなら、
 Arduino 等の電源ピンから、ブレッドボードへ
 電源を拝借するというのもありですね。
 ・・・Arduino を電源回路として使うのは勿体ないですし、
    容量にも注意が必要です。

Arduino Uno からの電源供給
Arduino Uno からの電源供給

・PICkit を使うのであれば、
 PICkit から電源を調達することもできます。
 ・・・こちらも容量に注意が必要です。

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 のアイコンをダブルクリックして起動します。

MPLAB X IDE の起動2
MPLAB X IDE の起動1
MPLAB X IDE の起動2
MPLAB X IDE の起動2

2.プロジェクトを作成します。

  メニュー「File」 → 「New Project…」
  開いた、New Project 画面、
  1.Choose Project
   Categories : Microchip Embedded
   Projects : Standalone Project
   を選択し、〔Next>〕 をクリック

プロジェクトの作成1
プロジェクトの作成1
プロジェクトの作成2
プロジェクトの作成2

  2.Selext Device
   Family : Mid-Range 8-bit MCUs (PIC10/12/16/MCP)
   Device : PIC12F683
   を選択し、〔Next>〕 をクリック
   ※Family、Device はターゲットのPICマイコンに合わせます。
    私の場合、PIC12F683 なのでこの設定を選択しています。
   ※Tool : 書き込みのツール(PICkit3等)を接続している場合は、
    選択出来ますので選択します。(書き込み時に設定できます) 

PICマイコンの選択
PICマイコンの選択

  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…」 を選択します。

ソースファイル(main)の作成
ソースファイル(main)の作成

 Name and Location 画面が開き、
 File Name : main
 他の項目の確認をして、〔Finish〕 をクリック

ソースファイル名(main)の設定
ソースファイル名(main)の設定
mainファイルの生成完了
mainファイルの生成完了

これで、プログラミングの準備は完了です。

では、
 「f683_led_101」 → 「Source Files」 内に作成された、
 ”main.c” を選択し、コーディングします。

「Projects」タブ → 〔Source Files〕 → ”main.c”
をダブルクリックします。

ソースファイル(main)の選択
ソースファイル(main)の選択

・コンフィギュレーション設定を記述します。
 このコンフィギュレーションは、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;

 今回は、このような設定となります。

PICマイコンのピン設定
PICマイコンのピン設定

・無限ループを作成し、
 その中に、処理内容のプログラムを記述します。

    // 永久ループを構成
    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"の機械語ファイルが生成されます。

拡張子 "hex" の機械語ファイルの生成確認
拡張子 "hex" の機械語ファイルの生成確認

これで、プログラムの作成は完了です。

その3では、この機械語ファイルをPICマイコンに書き込んで、
実行確認してみます。