第17回 ブレッドボードの回路を動作させてみる

今回はMPLABXの使い方を一通り確認します。

今回の説明

回路を完成させるために以下の順序で説明しています。このエントリの説明は(3)「プログラムを作る」の部分のMPLABXの概要説明になります。

前回までの説明で、ブレッドボードで回路を組み立てて開発環境もインストールしましたので、今回は回路が問題なく動作するか確認してみます。今回の説明では、実際にプログラムをビルドします。プログラムの中身については次回以降詳細に説明しますので、今回はMPLABXでのPICプログラム開発の流れを把握してみてください。

  1. LEDを電池と抵抗のみで光らせる回路を組み立てる
    PICマイコンの回路を組み立てる前に、まずはブレッドボードに慣れておくことにします。電池、抵抗、LEDのみを使って、ブレッドポード上に回路を組んでLEDを光らせてみます。ここでは電池、抵抗、LEDの回路記号と回路図の説明をして、回路図からブレッドボードに組む方法を説明します。まずはブレッドボードに慣れましょう!
  2. PICマイコンのベース回路を組む
    はじめの一歩の回路は、LEDを1秒に1回光らせるだけの回路です。この回路をブレッドボードに組み立てます。
  3. プログラムを作る
    LEDを1秒に1回光らせるプログラムを作成します。
  4. PICマイコンに書き込んで動作させる
    作成したプログラムをPICマイコンに書き込んで動作させてみます。
  5. ベース回路にスイッチを追加
    LEDの点滅をスイッチで開始させるために、ベース回路にスイッチを追加します。これまではLEDを光らせる、という出力制御をしましたが、今度はPICマイコンで外部から信号を入力する方法を確認します。
  6. ベース回路にブザーを追加
    スタートスイッチ付きの、1秒に1回光らせる回路を作りましたので、ブザーを追加してタイマーとして完成させます。

 

開発環境のMPLABXの操作概要

MPLABX IDEとXCコンパイラのインストールできたら、早速MPLAB Xを立ち上げてみましょう。

デフォルト設定でインストールした場合、macOSは、「アプリケーション」→「microchip」→「mplabx」→「(バージョン番号フォルダ)」→「mplab_ide.app」です。

MPLABX IDEのフォルダ位置(macOS)

Windowsは、デフォルト設定でインストールした場合、デスクトップに「MPLAB X IDE vx.xx」があります(vx.xxはバージョン番号)。デスクトップにない場合は、「Windowsメニュー」→「すべてのアプリ」→「Microchip」→「MPLAB X IDE vx.xx」です。

MPLABX IDEのフォルダ位置(Windows)

MPLABXを立ち上げると、以下のようなウインドウが表示されます。以下はmacOS版のウインドウですが、Windows版もほぼ同様のスクショになります。

MPLABX IDEスタート画面

それでは開発の流れを確認したあと、実際にMPLABXを操作しながら開発の流れを確認しましょう。準備するものは、MPLABXをインストールしたMac/PC以外に、作成したブレッドボード、電池ボックス、PICKit3、PICKit3付属のUSBケーブルです。

 

開発の流れ

開発規模の大小にかかわらず、開発の流れは以下のようになります。

まず、新規に「プロジェクト」を作成します。プロジェクトを作成したら、そのプロジェクトに対して新規ファイルを追加、そのファイルにプログラムを書きます。プログラムができたらビルドしてPICマイコンに書き込み、実際に回路を動作させます。

一度にすべての機能を実装したり、一発で動作することはあまりないので、実際には以下のような手順になります。

Mplabx development flow

「プロジェクト」とか「ファイル」とか、今は具体的にわからなくても大丈夫です。これから実際にやってみますので、その過程でどんなものなのか感覚をつかんでみてください。

 

プロジェクト作成

それでは、これからプロジェクトを作成し、プログラムファイルを追加、プログラム作成(今回はコピペ)、ビルド、書き込み、動作させてみます。実際に自分でやってみながら手順を追ってみて下さい。また、スクショはmacOSのものですが、Windows版も同様の操作になります。

まず、MPLAB Xを立ち上げます。ていうか、立ち上げてますよね。

はじめに新規プロジェクトを作成します。MPLAB Xの”File”メニューから”New Project”を選択します。

Mplabx trial 1

メニューを選択すると、プロジェクト作成のための情報を入力するウィザードが始まります。

まず、以下の画面で、「Categories」として「Microchip Embedded」、「Projects」として「Standalone Project」を選択してください。通常のPICマイコンのプログラムを作る場合、この選択をすることになります。選択したらNext>ボタンをクリックします。

プロジェクトウイザード

次の画面で、このプロジェクトで使用するPICマイコンの型番を指定します。プルダウンメニューになっていますので、メニューから選択できますが、数が多いので選択するのは大変です。そこで、以下のようにDevice欄に今回使用するPICマイコンの型番、 “pic12f1822” を直接入力します。入力は小文字でもOKです。合致するものが見つかると自動的に大文字に変換してくれます。入力できたらNext>ボタンをクリックします。

Mplabx trial 3

次に、、、ちょっと難しい内容ですので、そっとNext>ボタンをクリックしてください。(プログラムをデバッグする際の設定になります。基礎編ではデバッグは行いませんので、ここではNoneを選択したまま次の設定に進みます)

Mplabx trial 4

次の画面で、プログラムの書き込みツールを指定します。お持ちのPICkitに合わせて「PICkit3」または「PICkit4」を選択します。以下は「PICkit4」を選択した状態です。線足したらNext>ボタンをクリックします。

プロジェクトウイザード

次の画面で、使用するコンパイラを指定します。以下のように先ほどインストールしたXCコンパイラを選択します。

プロジェクトウイザード

なお、XCコンパイラは何ヶ月かごとにバージョンアップされます。新しいバージョンをインストールすると、古いバージョンを上書きするのではなく、追加でインストールされます。XCコンパイラを複数バージョンインストールすると、上のコンパイラ選択画面で複数のバージョンがリストされます。

最後にプロジェクト名称などを設定します。以下の説明図も合わせて見ながら設定してみて下さい。まず、Project Name欄に、”LED_Flash”と入力してください。もしご自分で付けたいプロジェクト名があればそれを指定いただいても構いません。次にProject Location欄のプロジェクトフォルダの場所を確認してください。自分で作成したフォルダになっていない場合は、「Browse…」ボタンをクリックして、自分で作成したプロジェクトフォルダ位置を指定します。「Set as main project」はチェックをつけて、「Use project location as the project folder」のチェックは外します。最後に、Encoding欄はUTF-8を選択してください。UTF-8を選択すると、プログラム中のコメントに日本語が入力可能になります。選択できたらFinishボタンをクリックします。

プロジェクトウイザード

さて、これでLED点滅制御プログラムを作成するためのプロジェクトができました。ただ、この状態ではプログラムを書くためのファイルなどはまだ用意されていません。このあと、このプロジェクトに、main.cファイルを新規追加して、main.cにプログラムを書いていくことになります。

プロジェクト作成のウィザードが終わると、プロジェクトが作成され、ウインドウ左上の方に作成したプロジェクトが以下のように表示されていると思います。

プロジェクトタブ

 

プログラム作成

ここまでの操作でLED点滅制御のプログラムを作成するための「プロジェクト」を作成しました。次にこのプロジェクトにプログラムを書くためのファイルを追加します。

このファイルですが、自分の好きな名前がつけられますが、ここではC言語の一般的なファイル名である “main.c” にします。このセクションでは、このmain.cを新規にプロジェクトに追加して、main.cにプログラムをコピペすることにします。今回はMPLABXでの開発〜動作確認までの流れを確認するためなので、main.cの中身には触れないことにします。

補足ですが、プログラム規模が大きくなってくると、main.cだけで開発するとわかりづらくなりますので、いくつかのファイルに分けたりします。その場合は、ひとつのプロジェクトにいくつものプログラムファイルが追加されることになります。

それでは、main.cという名称のファイルをこのプロジェクトに追加しましょう。ソースコードは、プロジェクトの”Source Files”というディレクトリに追加します。

ここで補足ですが、この”Source Files”というディレクトリは、実際にはFinder(macOS)やExplorer(Windows)で探してもどこにもありません。あくまで、MPLABXがそれぞれのプロジェクトに対して仮想的に管理してくれているだけです。(ちょっと込み入った話ですので、この話はよくわからなくても今後の理解に影響はありません)

main.cを追加するには、まずプロジェクトにある”Source Files”というフォルダを右クリックします。右クリックするとコンテキストメニューが表示されますので、New → main.c… を選択してください。

main.cファイル作成

続いて、作成するファイルの名称などを聞かれますので、以下のダイアログのように “File Name” 欄に “main”と入力します。拡張子(.c)は “Extension”欄で指定しますが、すでに “c” が選択されていると思いますのでこのままでOKです。設定したら “Finish” ボタンをクリックします。

Main c file creation mac

この手順で、Source Filesの下にmain.cが作成されたと思います。それと同時に、右の広い領域に以下のようにmain.cの内容が表示されたと思います。このエディタでmain.cにプログラムを書いていくことになります。このファイルはCのメインファイルとして作成したため、メイン関数で使われる典型的な内容がすでに書かれています。

main.cファイル

さて、プログラムの中身は次回以降の記事で詳細に説明しますので、まずは現在main.cに書かれている内容をすべて消去して、以下のプログラムをコピペしてください。(macOS/Windows共通です)

/*
 * File:   main.c
 */
#include <xc.h>

// PIC12F1822 Configuration Bit Settings
// CONFIG1
#pragma config FOSC = INTOSC    // Oscillator Selection (INTOSC oscillator: I/O function on CLKIN pin)
#pragma config WDTE = OFF       // Watchdog Timer Enable (WDT disabled)
#pragma config PWRTE = OFF      // Power-up Timer Enable (PWRT disabled)
#pragma config MCLRE = OFF      // MCLR Pin Function Select (MCLR/VPP pin function is digital input)
#pragma config CP = OFF         // Flash Program Memory Code Protection (Program memory code protection is disabled)
#pragma config CPD = OFF        // Data Memory Code Protection (Data memory code protection is disabled)
#pragma config BOREN = ON       // Brown-out Reset Enable (Brown-out Reset enabled)
#pragma config CLKOUTEN = OFF   // Clock Out Enable (CLKOUT function is disabled. I/O or oscillator function on the CLKOUT pin)
#pragma config IESO = OFF       // Internal/External Switchover (Internal/External Switchover mode is disabled)
#pragma config FCMEN = OFF      // Fail-Safe Clock Monitor Enable (Fail-Safe Clock Monitor is disabled)
// CONFIG2
#pragma config WRT = OFF        // Flash Memory Self-Write Protection (Write protection off)
#pragma config PLLEN = OFF      // PLL Enable (4x PLL disabled)
#pragma config STVREN = OFF     // Stack Overflow/Underflow Reset Enable (Stack Overflow or Underflow will not cause a Reset)
#pragma config BORV = LO        // Brown-out Reset Voltage Selection (Brown-out Reset Voltage (Vbor), low trip point selected.)
#pragma config LVP = OFF        // Low-Voltage Programming Enable (High-voltage on MCLR/VPP must be used for programming)


// クロック周波数指定
// __delay_ms()関数が使用する
#define _XTAL_FREQ 1000000

void main(void) {

    // PICマイコン設定
    OSCCON = 0b01011010;  // 内部クロック周波数を1MHzに設定
    ANSELA = 0b00000000;  // すべてのピンをデジタルモードに設定
    TRISA  = 0b00001000;  // すべてのピンを出力モードに設定(ただしRA3ピンは常に入力モード)

    // LEDを消灯する
    LATA5 = 0;
    
    // LED点滅処理(永久に繰り返す)
    while(1){
        // LEDを950ms消灯する
        LATA5 = 0;
        __delay_ms(950);            
        // LEDを50ms点灯する
        LATA5 = 1;
        __delay_ms(50);
    }

    // 以下の命令は実行されない
    return;

}

これでプログラムが完成しました。ここでファイルを保存します。アプリケーションメニューの「File」→「Save…」を選択します。ここまでの作業で以下のようになります。

Main c pasted

 

ビルド

次にビルドをします。ビルドとは、先ほど保存したC言語のプログラムをPICマイコンが処理できるコードに変換する作業です。ビルドはエラーがなければすぐに終わります。今回はプログラムをコピペいただいたのでエラーは出ないと思います。ツールアイコンにビルドボタンがありますので、そのボタンをクリックしてください。

Build button

クリックすると、右下の領域に以下のように何か文字が表示されると思います。これは、ビルド過程でコンパイラから出力される文字(ログ)の表示領域です。エラーがあれば、該当箇所が青文字で、エラーの内容が赤文字で表示されます。

Build results

この領域の最後の行に、”Loading completed”と出力されればビルド成功です。あとは、ビルドされたプログラムをPICマイコンに書き込む作業です。

 

書き込み

書き込みはブレッドボードのコネクタにPICKitを接続して書き込めばOKですが、実はこの状態で書き込みを行うと、PICマイコンが見つからない、というエラーになってしまいます。これについて原因と対応方法を説明します。

PICマイコンにプログラムを書き込むには、PICマイコン内部のプログラムを記憶しておくメモリに電圧をかけてプログラムを書き込みむ必要があるため、電源を供給する必要があります。この電源をどのように供給するかが問題になります。

この電源供給方法には2通りあります。ひとつは、電池ボックスをブレッドボードにつないで回路側の電源から供給する方法です。もうひとつはPICKit本体から供給する方法です。(なお、MPLAB SNAPは電源供給の機能がありませんので、プログラム書き込みの際には必ず電池ボックスをブレッドボードにつないで電源を供給しておく必要があります)

PICKitから供給できるのであれば、書き込むときにわざわざ電池ボックスをブレッドボードに接続する必要はないので、常にPICkitから書き込んだ方がいいですよね。でも、PICKitから電源を供給する方法ではうまくいかない場合があるんです。ただし、今回の回路ではPICKitから電源供給しても問題ありません。

細かい内容になりますが、この背景を簡単に説明しておきます。

実は、PICKitから電源を供給する、というのは、そのターゲットの回路に電力を供給することになります。PICKitから電力を供給すると、そのターゲットの回路が必要とする電流が流れます。回路が大規模の場合、PICKitからの電力供給は追いつかなくなり、結果的にプログラムを書き込めなくなってしまいます。

PICKitから電源を供給するといちいち回路側の電源を接続しなくてよいので手軽ですが、この場合の回路はあまり電力を使わない、というケースに限ります。電力をたくさん使う回路の場合は、回路側で用意している本来の電源をつなげて電源を供給し、PICKitからは電源を供給しない設定で書き込みます。

プロジェクトのデフォルトは、PICKit3から電源を供給しない設定になっています。今回の回路はLEDをひとつのみ点灯する回路ですので、電力をあまり使いません。そのため今回はPICKitから電源を供給することにします。なお、MPLAB SNAPを使用する場合はこの設定はできませんのでスキップしてください。

それでは、以下の手順でPICkitから電源を供給する設定に変更して、PICマイコンにプログラムを書き込みましょう。

  1. プロジェクト設定ダイアログを開く
  2. プロジェクト設定の中のPICKit3のプログラム書き込み時の電源供給設定をONにして、電圧を5Vに設定する
  3. プログラムを書き込む

それでは始めます。

まずプロジェクトの設定ダイアログを表示するため、”LED_Flash”というプロジェクト名を右クリックして、メニューの一番下の”Properties”を選択します。

Project properties menu

以下のようなプロパティダイアログが表示されますので、次の設定をします。

  1. 左の項目から「PICkit3」または「PICkit4」を選択します
  2. 右上のポップアップメニューから「Power」を選択します
  3. 「Power target circuit from PICkit」のチェックボックスをオンに、Voltage Levelを5.0に設定します

プロジェクト設定

この設定ができたら、OKボタンをクリックします。このダイアログで、プログラム書き込み時、電源をPICkit3から5.0Vで供給する、という設定をしたことになります。

なおMPLAB SNAPの場合は、電池ボックスから供給する必要がありますので、以下のように電池ボックスをブレッドボードに接続して電池ボックスのスイッチをONにしておきます。

Pic basic 23 outsource power

これで書き込みの準備ができました。

ではこれから実際に書き込みます。まず、Mac/PCとPICkitをUSBケーブルで接続します。PICkitは以下のように、前回までに製作したブレッドボードのピンヘッダに差し込みます。向きに注意しましょう。PICKitの三角マークがある側が1番ピンです。

PICkitのピンヘッダ接続

ちょっと不安定なので、左手で押さえたままにします。次に、プログラムを書き込みます。書き込みはツールアイコンに書き込みボタンがありますので、それをクリックします。

Write button

クリックすると、書き込み処理が始まりますが、以下のダイアログが表示された場合は「PICkit3」または「PICkit4」の「SN: xxxxxx」というところを選択してOKボタンをクリックします。これは、MPLABX IDEがPICkitを見つけられなかった場合に表示されます。表示された場合、PICkitがどれか教えてあげます。

PICkit not found

次に、以下のようなダイアログが表示されると思います。

Voltage confirmation

これは何を言っているかというと、「あなた、知ってると思うけど、このPICマイコンには3.3Vモデルと5Vモデルがありますよね。あなた、書き込みの電圧を5Vの設定にしてるみたいだけど、もし書き込むPICマイコンが3.3Vモデルの場合、このまま書き込んだらぶっ壊れるけどいいよね」(意訳)というような内容です。5Vで問題ないのでOKボタンをクリックしてこのまま進めます。

書き込みが終わっても特にダイアログが出るわけでもないので、右下のタスク領域にログが表示されますので、そこを確認してみます。

Programmed  mini

このように最後の行に “Programming/Verify complete”と表示されれば、無事書き込み完了です。

ところで、PICKitを差しっぱなしにしていると、LEDが点滅を始めたと思います。これはプログラム書き込み後、PICマイコンが動作を始めたためです。ただ、電池をつないで動作確認しますので、ここでいったんPICKitを外します。

 

動作確認

では、電池をつないで動作させてみます。以下のように電池ボックスから出ている電線をブレッドボードに接続して、スイッチを入れます。

Base circuit confirmation

うまく1秒に1回ピカッ、ピカッ、と光りましたか?

もし光らなかったら、回路とプログラムをもう一度確認してみてください。動かない原因がどうしてもわからなかったら、ご質問を受け付けますので、このサイトの「Contact」ページからお問い合わせいただければと思います。

それでは次回からプログラムを詳しく説明していきます。

 

更新履歴

日付 内容
2016.8.24 新規投稿
2018.11.23 PICkit4情報追加
2018.11.24 インクルードファイルをxc.hのみに変更
main関数型をvoid main(void)に変更