第16回 プログラムをコピペして一度動作させてみる

今回からPICマイコンのプログラム開発に入ります!

本シリーズ記事の内容を改訂して、基礎編、応用編、実践編として以下のリンクに公開しています。以下のシリーズはさらにいろいろなPICマイコンの機能をご紹介しています!

PICマイコン電子工作入門 〜基礎編〜
PICマイコン電子工作入門 〜応用編〜
PICマイコン電子工作入門 〜実践編〜

今回の説明

発光ダイオード点滅回路を完成させるために以下の順序で説明しています。このエントリの説明は(3)「プログラムを作る」の部分の、プログラム作成の最初ステップになります。

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

 

開発環境概要

これからMac上でPICマイコンのプログラムを作成して、前回までに完成させた回路(PICマイコン)に書き込みます。この記事では以下の項目について説明します。

ということで、まずは開発の最初から最後まで、具体的に手を動かしてどんな感じか体験してみるのがよいと思います。途中ちょっとぐらいわからないことがあっても問題ありません。まずは全体の流れを知ることが大切です。プログラムの中身はこの次の記事から詳細に説明していきます。

 

PICマイコンのプログラム開発環境の概要

PICマイコンのプログラムはMicrochip社から提供されている無償の “MPLABX IDE” というソフトウエアを使用して開発します。

注意点としては、MPLABX IDEのインストーラをダウンロードしてインストールしても、MPLABX IDEの本体と、アセンブラ(プログラミング言語の一種)しかインストールされません。今回は、C言語でプログラムを開発しますので、Cコンパイラが必要と成りますが、MPLABX IDEをインストールしただけではCコンパイラはない状態ですので、別途Cコンパイラをダウンロード、インストールする必要があります。

PICマイコン用のCコンパイラは、XC8、XC16、XC32、という3種類がMicrochip社から無償で提供されています。インストーラは別々ですので、XC8、XC16、XC32をすべてインストールする場合、インストーラを3つ実行する必要があります。

なお、これらのコンパイラはそれぞれ無償版と有償版があります。この違いですが、生成されるバイナリコードがどの程度最適化されているかです。当然、有償版の方が生成されるバイナリコードはサイズが小さく、効率もよくなっていますが、個人ユースでは無償版で十分だと思います。

このようにCコンパイラにはXC8、XC16、XC32というように3種類ありますが、どのコンパイラを使うかはPICマイコンの型番によって決まります。例えば、今回使用しているPIC12F683は8ビットマイコンですので、XC8コンパイラを使用することになります。XC16、XC32は、より高機能なPICマイコン用のコンパイラです。いずれそれらのPICマイコンも使用する可能性がある場合は、XC16、XC32も一緒にインストールしておいてください。

今回のインストールが終わると、以下のようなソフトウエア構成となります。(XC8, 16, 32をインストールした場合)

Mplabx abstract

 

開発環境のインストール

MPLABX IDE、XCコンパイラ(XC8, XC16, XC32)のインストール方法は以下の記事に手順を説明してありますので、この手順でインストールしてください。

MPLABX IDEのインストール

XC8/16/32コンパイラのインストール

 

開発環境のMPLABXの操作概要

MPLAB X for Macintosh、Cコンパイラがインストールできたら、早速MPLAB Xを立ち上げてみます。インストール時にインストール先フォルダをデフォルトのままにした場合、以下のフォルダにMPLAB Xの本体があります。

Mplabx location

早速mplab_ide.appを立ち上げてみてください。以下のようなウインドウが表示されると思います。

Mplabx startup

この後、開発の流れを確認したあと、実際に手を動かしながら開発の流れを確認します。まずはここまで確認できればOKです。

 

開発の流れ

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

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

今回作成する発光ダイオードの点滅制御プログラムは以下のように作ることになります。

まず、「発光ダイオード点滅制御プロジェクト」を作成します。作成できたら、点滅制御プログラムを書くために、main.cファイルを新規ファイルとしてプロジェクトに追加します。あとは、main.cにプログラムを書いて、ビルド、PICマイコンに書き込み、動かしてみる、という手順になります。

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

Dev flow

プロジェクトとかファイルとか、よくわからなくても大丈夫です。これから実際にやってみますので、その過程でどんなものなのか確認してみてください。

 

プロジェクト作成

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

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

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

Mplabx new proj menu

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

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

Mplabx choose project

次の画面で、このプロジェクトで使用するPICマイコンの型番を指定します。プルダウンメニューになっていますので、メニューから選択できますが、数が多いので選択するのは大変です。そこで、以下のようにDevice欄に今回使用するPICマイコンの型番、 “PIC12F683” を入力してしまいましょう。入力できたらNext>ボタンをクリックします。

Mplabx select device

次に、、、ちょっと難しい内容ですので、そっとNext>ボタンをクリックしてください。(ここではデバッグするときのデバッグヘッダを選択します)

Mplabx select header

次の画面で、プログラムの書き込みツールを指定します。今回の入門ではPICKit3を使いますので、以下のようにPICkit3を選択してください。選択できたらNext>ボタンをクリックします。

Mplabx select tool

次の画面で、使用するコンパイラを指定します。以下の画面は私の環境なので、皆さんの画面とは違うと思います。おそらく、XC8コンパイラがひとつだけ表示されていると思います。今回はXC8コンパイラを使用しますので、XC8を選択します。(複数のXC8がでてきた場合は、XC8の最新のバージョンを選択してください)

Mplabx select compiler

最後にプロジェクト名を指定します。Project Name欄に、”LED_Flash”と入力してください。もしご自分で付けたいプロジェクト名があればそれを指定いただいても構いません。また、プログラムのコメントに日本語を入力したいため、Encoding欄はUTF-8を選択してください。選択できたらFinishボタンをクリックします。

Mplabx project name

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

ウィザードが終わると、プロジェクトが作成され、最初のMPLAB Xの画面が以下のように変わっていると思います。以下の画面の内容について説明します。なお、名称はMPLAB XのUser’s Guideを元にしています。

Mplabx project pane

この画面の一番上に、ツールアイコンがあります。アプリケーションメニューにあるいくつかのメニュー、例えば、ビルドやプログラム書き込みなどがここにアイコンとしておかれています。ツールアイコンの下には大きくわけて4つの領域があります。それぞれ説明します。ただ、いろいろ言葉がでてきてちょっとげんなりしますが、よくわからなくても大丈夫です。というより、この領域の名前は覚えなくて大丈夫です。使っていくうちにわかってくると思います。

左上の赤枠が作成したプロジェクトやファイルなどが表示されるファイル領域(User’s Guideでは”File Pane”)です。プロジェクトを複数作成した場合、ここに複数のプロジェクトが表示されます。今回は “LED_Flash” というプロジェクトを作成したばかりですので、上のスクリーンショットのようにひとつしか表示されていません。

左下の赤枠はナビゲーション領域(User’s Guideでは”Navigation Pane”)です。この領域ではビルドしたバイナリの情報など、いろいろな情報が表示されます。

プロジェクト表示領域の右上の赤枠、一番大きい領域がファイルを表示・編集するエディタ領域(User’s Guideでは”Editor Pane”)です。アプリ立ち上げ直後はスタートページが表示されます。ファイル領域のファイルをダブルクリックするとこのエディタ領域にファイルが表示され、ここで編集可能となります。

最後に、右下の赤枠がログなどの情報が表示されるタスク領域(User’s Gudieでは”Task Pane”)です。MPLABXからのメッセージや、ビルド時のログメッセージなどが確認できます。また、PICマイコンに書き込む際のステータスなどもここに表示されます。

これまでの手順で、発光ダイオードの点滅制御プログラムをつくるためのプロジェクトができました。このあと、新規にmain.cファイルをプロジェクトに追加して、プログラムを書いていきます。(今回はコピペしていただきます)

 

プログラム作成

ここまでの操作で発光ダイオードの点滅制御をプログラミングするための「プロジェクト」を作成しました。次にこのプロジェクトにプログラムを書くためのファイルを追加します。このファイルですが、自分の好きな名前がつけられますが、ここではC言語の一般的なファイル名である “main.c” にします。このセクションでは、このmain.cを新規にプロジェクトに追加して、main.cにプログラムをコピペすることにします。実際の開発はこのmain.cなどに、試行錯誤しながらプログラムを書いていくことになります。今回はMPLAB Xでの開発〜動作確認までの流れを確認するためなので、main.cの中身には触れないことにします。また、プログラム規模が大きくなってくると、main.cだけで開発すると、わかりづらくなりますので、いくつかのファイルに分けたりします。その場合は、ひとつのプロジェクトにいくつものプログラムファイルが追加されることになります。

それでは、main.cという名称のファイルをこのプロジェクトに追加しましょう。ソースコードは、プロジェクトの”Source Files”というディレクトリに追加します。(ここで注意ですが、この”Source Files”というディレクトリは、実際にはFinder上のどこにもありません。MacのFinderで実際にプロジェクトが格納されているフォルダをみて確認してみてください。あくまで、MPLAB Xがそれぞれのプロジェクトに対して仮想的に管理してくれているだけです。ちょっと込み入った話ですので、この話は飛ばしていただいても今後の理解に影響はありません)

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

Create main file  mini

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

Name main file  mini

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

Default main file  mini

さて、プログラムは次の記事から詳細に説明しますので、まず、現在main.cに書かれている内容をすべて消去して、以下のプログラムをコピペしてください。右に隠れている部分もあるのでコピー時、注意してください。

/*
 * File:   main.c
 * Author: Tool Labs
 */


// インクルードファイル
#include <stdio.h>
#include <stdlib.h>
#include <xc.h>

// PIC12F683コンフィグレーションビット設定
#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)

// クロック周波数指定
// (__delay_ms()関数が必要としているため)
#define _XTAL_FREQ  1000000

/*
 * main()関数
 */
int main(int argc, char** argv) {

    // PICマイコン初期化
    OSCCON = 0x40;  //クロック周波数を1MHzに設定
    ANSEL  = 0x00;  //すべてのピンをデジタルモードに設定
    TRISIO = 0x00;  //すべてのピンを出力に設定

    // LEDのピンを0にして、LEDを消灯する
    GP5 = 0;

    // 点滅を永遠繰り返す
    while(1){
        // まず、消灯状態のまま950ミリ秒待つ
        __delay_ms(950);
        // 950ミリ秒経過したら、LEDのピンを1にして、LEDを点灯する
        GP5 = 1;
        // LED点灯状態で50ミリ秒待つ
        __delay_ms(50);
        // 50ミリ秒経ったら、LEDのピンを0にして、LEDを消灯する
        GP5 = 0;
    }

    // ここには到達しない
    return (EXIT_SUCCESS);
}

これでプログラムが完成しました。ここまでの作業で以下のようになります。

Program pasted  mini

 

ビルド

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

Tool button build  mini

クリックすると、右下の領域(タスク領域)に以下のように何か文字が表示されると思います。これは、ビルド過程でコンパイラやリンカから出力される文字(ログ)の表示領域です。エラーがあれば、該当箇所が青文字で、エラーの内容が赤文字で表示されます。今後の記事でエラーが発生する状況になりましたら詳しく説明したいと思います。

Project built  mini

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

 

書き込み

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

PICマイコンにプログラムを書き込む時、電圧をかけて電気的にプログラムを書き込みます。この電圧をどうするかが問題になります。以前のエントリで説明しましたが、電圧(電源)供給方法には2通りあります。ひとつは、回路側で持っている電源を使用する方法、もうひとつはPICKit3から供給する方法です。なお、プログラム書き込み時は、どちらかの電源のみで行う必要があります。(両方の電源を使うと、、、簡単に説明できませんが、電源同士が衝突してしまうためです)

ところで、PICKit3から供給できるのであれば、常にそうした方がいいですよね。ところが、PICKit3から供給できる電源は限界があります。実際には供給できる電流の上限容量が決まっています。でも、PICマイコンにプログラムを書き込むだけだったら、PICKit3から供給される電源でなんとかなるのでは、という気もしますよね。

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

ということで、PICKit3から電源を供給するといちいち回路側の電源をつけなくてよいので手軽ですが、この場合、あまり電流を使わない回路である必要があります。電流をたくさん使う回路の場合は、回路側で用意している本来の電源をつなげて電源を供給し、PICKit3からは電源を供給しない設定で書き込みます。

プロジェクトのデフォルトは、PICKit3から電源を供給しない設定になっています。今回の回路は発光ダイオードをひとつしかつけていない電流をあまり使わない回路ですので、PICKit3から電源を供給してみます。以下、その手順です。

まず、”LED_Flash”というプロジェクト名を右クリックして、メニューの一番下の”Properties”を選択します。

Open properties menu  mini

以下のようなプロパティダイアログが表示されます。

Project properties  mini

右側のCategories欄で、PICKit3を選択します。

Pickit3 prpperties  mini

PICKit3のプロパティ設定画面になりますので、以下のOption categoriesを開いて、そこからPowerを選択します。

Pikcit3 properties menu  mini

電源(Power)の設定画面になりすまので、Power target circuit from PICkit3のチェックボックスをオンに、Voltage Levelを5.0(5V)に設定します。”Power target circuit from PICkit3″というのは「PICkit3からターゲット回路に電源を供給する」という意味です。

この設定ができたら、OKボタンをクリックします。

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

Connect pickit3

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

Tool button program  mini

クリックすると、書き込み処理が始まりますが、途中で以下のようなダイアログが表示されると思います。

Check voltage  mini

これは何を言っているかというと、「選択したPICマイコンは、3.3Vモデルと5Vモデルがあるよ。今5Vの設定にしてるけど、3.3VモデルのPICマイコンに書き込んだらぶっ壊れるよ」というような内容です。5V用なのでこのまま進めます。

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

Programmed  mini

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

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

 

動作確認

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

Connect battery

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

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

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

 

更新履歴

日付 内容
2015.9.21 新規投稿
2018.12.3 新シリーズ記事紹介追加