第19回 コンフィグレーション設定 (1)

今回はPICマイコンコンフィグレーション部分の概要を説明します。

今回の説明

回路を完成させるために以下の順序で説明しています。このエントリの説明は(3)「プログラムを作る」の部分の、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回光らせる回路を作りましたので、ブザーを追加してタイマーとして完成させます。

 

概要

これから3回の記事に分けて、PICマイコンコンフィグレーション設定の部分を説明します。かなり長い説明で、込み入った内容になります。マイコンを使うのはこんなに大変なのか、と思われてしまうかもしれません。ただ、普通に使用する分には、設定パターンは同じで、毎回どのような設定にするか悩む必要はありません。

また、他のPICマイコンでもほとんど同じ項目が出てきますので、基本的なPIC12F1822の設定がわかれば、他のPICマイコンの理解も早く進みます。さらに、今回はPICマイコンを使用していますが、他のマイコンでもだいたい同じような設定がありますので、まずはPIC12F1822の設定をしっかり理解して基礎を作りましょう!

各設定項目の説明で、通常はこの設定にしておけばよいという説明もしますので、設定内容が完全に理解できなくても、そのまま読み進めていただいて大丈夫です。

 

PICマイコンコンフィグレーション設定の概要

今回は、以下の「PICマイコンコンフィグレーション設定」部分の概要を理解します。このコンフィグレーション設定では具体的にどのようなことをするのか、イメージをつかんでみたいと思います。

Configuration part

このコンフィグレーション設定部分では、PICマイコンの基本動作関連の設定を行います。「基本動作」って言われても何のことかわかりませんよね。この設定のすべての項目の説明は後ほど行いますが、ここで具体例を2例あげて、大体どのような設定なのか、軽くイメージをつかんでみたいと思います。

[設定例その1: クロック設定]
例えばmacOSの場合、左上Appleメニューから「このMacについて」というメニューを選択するとこんなダイアログが表示されますよね。

このMacについてダイアログ

Windowsの場合は「スタートメニュー」→「設定」→「システム」→「バージョン情報」を選択すると以下のようなダイアログが表示されます。

Win10 system info

これらのダイアログの「プロセッサ」と書いてあるところに「2.5GHz」とありますが、これはコンピュータのCPUクロック周波数が2.5GHz、ということを意味しています。CPUはこのクロックのタイミングに合わせて処理を進めていきます。もちろんクロック周波数が高いほど処理速度が高くなります。

PICマイコンもクロックをタイミングとして処理を進めていきます。「PICマイコンコンフィグレーション設定」では、このクロックに関する設定があります。どのような設定かというと、このクロックをどのように発生させるか、というものです。

具体的には、PICマイコンの外部にクロック信号を発信する電子部品用意して、PICマイコンのピンにそれをつなげる方法(外部からクロックを供給する方法)と、PICマイコン内部のクロック発振器を使う方法(内部でクロックを供給する方法)です。

このように「PICマイコンコンフィグレーション設定」の中の「クロック設定」では、クロックをどのように供給するかを設定します。例えば内部クロックを使用する、などという設定を行います。

[設定例その2: ブラウンアウト設定]
PICマイコンは3.3Vや5Vで動作しますが、何かの原因で電源電圧が低くなることがあります。それは電源の電池が消耗してきたときや、電源が故障してしまったときなどです。このように電源の電圧が低くなったりすると、PICマイコンの動作が不安定になってきます。

マイコンの動作が不安定になった場合、LEDの点滅制御では点滅がおかしくなる程度で済みますが、モーター制御している場合などは危ない動作になる可能性もあります。

このように電源の供給電圧が低くなることを「ブラウンアウト」と呼び、ブラウンアウトが発生した場合に対策を行いたいケースがあります。

「PICマイコンコンフィグレーション設定」の「ブラウンアウト設定」では、ブラウンアウトが発生したときに、PICマイコンの動作をどうするかの設定を行います。例えば、ブラウンアウトを検知した場合、マイコンを一時停止させる、などです。

以上が具体例で、非常におおざっぱですが、このような設定がマイコンの動作設定になります。このコンフィグレーション設定部分でどんな感じの設定をするかイメージつかめていただけたでしょうか。

他にもいろいろ設定がありますので、この後すべてを詳しく説明していきます。なお、説明するコンフィグレーション設定は、PIC12F1822のものですが、もちろん他のPICマイコンでも同様の設定があります。ただしすべてのPICマイコンでこれらの設定項目が同じ、というわけではありません。高機能のPICマイコンになると、これ以外にも設定項目が追加されていたりします。ただ、PIC12F1822の設定項目はどのPICマイコンにも見られる基本的なものですので、是非一通り確認いただければと思います。

それでは早速、それぞれのコンフィグレーション設定項目を説明します、といきたいところですが、その説明する前に

#pragma

について説明します。

 

#pragmaとは

コンフィグレーション設定部分を見ると、例えば、

#pragma config FOSC = INTOSCIO

という記述がありますよね。これは、PICマイコンコンフィグレーション設定のうち「FOSC」(クロック設定)という設定項目を「INTOSCIO」(内部クロック)に設定する、という意味になるのですが、そもそもその前の #pragma とか config って何なんでしょうか。(FOSCやINTOSCIOは後ほど詳細に説明します)

この基礎編の記事では、基本的なC言語の知識を前提としています。基礎的な知識として、記事の最初に以下の項目を前提知識とする旨、説明しました。

そのためプログラムの説明では、これらの項目は知っているものとして説明をします。

ただ、この #pragma についてはC言語入門の部分ではあまりでてこないのですが、PICマイコンのプログラムではコンフィグレーション設定に使用されています。つまりMPLABX + XCコンパイラを使う限り、どんな簡単なプログラムでも避けて通れない構文となっています。そこでC言語入門部分ではあまり説明されない、#pragma についてここで詳しく説明しておきます。

この#pragmaは、難しく言うと「特定のコンパイラに特化した命令を記述するための指示子」ということになります。と言ってもすんなりわかった、という感じではないと思いますので、具体例を説明しますので、それらを元に #pragma の働きのイメージをつかんでいただければと思います。

XC8コンパイラ(特定のコンパイラ)がコンパイル時に、

#pragma config FOSC = INTOSCIO

という文をどのように解釈するか説明します。

まず、XC8コンパイラはコンパイル時に、”#pragma”という文字列を見つけると「自分向けに特化して書かれた何かが、このあとに書かれているかもしれない」と判断します。次に #pragma の後に、config という文字列を見つけると、「あ〜、configね。configってことは、PICマイコンのコンフィグレーション設定をしたいんだね。さらにconfigの後には[設定項目] = [設定値]とかかれているはずだから、その後もみてみよう」と判断していきます。それで実際その後に FOSC = INTOSCIOと書かれているので、FOSC(クロック設定)はINTOSCIO(内部クロック)に設定する、という処理を行います。

このように、#pragma config FOSC = INTOSCIO という文をXC8コンパイラが解釈するとクロック設定を行う処理になります。

ところで、”#pragma config FOSC = INTOSCIO”というXCコンパイラ向けの記述があるソースコードを、他のコンパイラでコンパイルしたらどうなるのでしょうか。

例えば、macOSやiOSのアプリを開発するXcodeという開発環境上で、ソースコードにこの記述をしてビルドしてみると、、、何も起こりません。これはXcoceはどのように処理しているのでしょうか。

Xcodeでビルドを実行すると、裏ではLLVMというコンパイラがプログラムをコンパイルします。コンパイル時にこのLLVMコンパイラが “#pragma” を見つけると、自分宛に特別な何かが書かれているかもしれない、と判断します。#pragmaの次を見ると、config、とありますが、LLVMコンパイラはこのconfigは何のことか知りません。そこで、この記述は他のコンパイラ向けに書かれたものなんだな、と判断してこの記述は無視する、という動作をします。なお、#pragma の後に書かれている文字列が、自分が理解できない場合、エラーにするコンパイラもあります。

この#pragma構文ですが、XC8コンパイラに限らず、他の開発環境でも出てくることがありますので、覚えておくとよいと思います。

次回から、各コンフィグレーション設定の詳しい説明を行います。

 

更新履歴

日付 内容
2016.9.5 新規投稿
2016.11.24 macOSスクリーンショット差し替え