今回はPICマイコンコンフィグレーション部分の概要を説明します。
今回の説明
回路を完成させるために以下の順序で説明しています。このエントリの説明は(3)「プログラムを作る」の部分の、PICマイコンコンフィグレーション設定部分を作成するステップになります。
- LEDを電池と抵抗のみで光らせる回路を組み立てる
PICマイコンの回路を組み立てる前に、まずはブレッドボードに慣れておくことにします。電池、抵抗、LEDのみを使って、ブレッドポード上に回路を組んでLEDを光らせてみます。ここでは電池、抵抗、LEDの回路記号と回路図の説明をして、回路図からブレッドボードに組む方法を説明します。まずはブレッドボードに慣れましょう! - PICマイコンのベース回路を組む
はじめの一歩の回路は、LEDを1秒に1回光らせるだけの回路です。この回路をブレッドボードに組み立てます。 - プログラムを作る
LEDを1秒に1回光らせるプログラムを作成します。 - PICマイコンに書き込んで動作させる
作成したプログラムをPICマイコンに書き込んで動作させてみます。 - ベース回路にスイッチを追加
LEDの点滅をスイッチで開始させるために、ベース回路にスイッチを追加します。これまではLEDを光らせる、という出力制御をしましたが、今度はPICマイコンで外部から信号を入力する方法を確認します。 - ベース回路にブザーを追加
スタートスイッチ付きの、1秒に1回光らせる回路を作りましたので、ブザーを追加してタイマーとして完成させます。
概要
これから3回の記事に分けて、PICマイコンコンフィグレーション設定の部分を説明します。かなり長い説明で、込み入った内容になります。マイコンを使うのはこんなに大変なのか、と思われてしまうかもしれません。ただ、普通に使用する分には、設定パターンは同じで、毎回どのような設定にするか悩む必要はありません。
また、他のPICマイコンでもほとんど同じ項目が出てきますので、基本的なPIC12F1822の設定がわかれば、他のPICマイコンの理解も早く進みます。さらに、今回はPICマイコンを使用していますが、他のマイコンでもだいたい同じような設定がありますので、まずはPIC12F1822の設定をしっかり理解して基礎を作りましょう!
各設定項目の説明で、通常はこの設定にしておけばよいという説明もしますので、設定内容が完全に理解できなくても、そのまま読み進めていただいて大丈夫です。
PICマイコンコンフィグレーション設定の概要
今回は、以下の「PICマイコンコンフィグレーション設定」部分の概要を理解します。このコンフィグレーション設定では具体的にどのようなことをするのか、イメージをつかんでみたいと思います。
このコンフィグレーション設定部分では、PICマイコンの基本動作関連の設定を行います。「基本動作」って言われても何のことかわかりませんよね。この設定のすべての項目の説明は後ほど行いますが、ここで具体例を2例あげて、大体どのような設定なのか、軽くイメージをつかんでみたいと思います。
[設定例その1: クロック設定]
例えばmacOSの場合、左上Appleメニューから「このMacについて」というメニューを選択するとこんなダイアログが表示されますよね。
Windowsの場合は「スタートメニュー」→「設定」→「システム」→「バージョン情報」を選択すると以下のようなダイアログが表示されます。
これらのダイアログの「プロセッサ」と書いてあるところに「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言語の知識を前提としています。基礎的な知識として、記事の最初に以下の項目を前提知識とする旨、説明しました。
- コメントの書き方
- #define、#include
- main関数
- 変数型宣言、変数代入、演算子
- 構造体
- 繰り返し構文(while文、for文)
- 条件判断構文(if文、switch文)
- 2進数、16進数
そのためプログラムの説明では、これらの項目は知っているものとして説明をします。
ただ、この #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スクリーンショット差し替え |
コンフィグレーション設定 (1)から(3)、
非常に役に立ちました。
私はPICマイコン初心者ですが、
関連する高価な本を初心者向きだと序言に書いてあったので何冊か買いましたが、
全く初心者向きでなく、
まるで猫に小判でした。
当サイトを紙に印刷してじっくり読ませていただきましたが、
初心者にもわかりやすく懇切丁寧に書かれているので、
しっかりした基盤の上で理解することができました。
著者の読者に対する優しい人格にも触れることができたように思います。
ありがとうございました。
暖かいコメントどうもありがとうございました。
お役に立ててよかったです。ただ、PICマイコンはなかなかわかりづらいところがありますので、説明が難しいところもあります。説明が至らないところもあると思いますので、わからないところがありましたら遠慮なくご質問いただければと思います。
実は自分もPICマイコンを始めた時は習得に苦労しました。PICマイコンの入門書を読んでもなかなか理解できませんでした。そのような経緯もあり、このサイトは過去の自分に教えるつもりで書いています。
それでは今後もこのサイトをよろしくお願いいたします。
まったく同感です。私も何冊もPIC本を購入しました。ぐぅーんと理解が深まったのはこの講座のほとんどを印刷してじっくり勉強してからです。初心者に本当に理解してもらいたいという優しい気持ちに触れて感謝の意をお伝えしたく投稿しました。有難うございます。
暖かいコメントいただきましてどうもありがとうございました!
やはりPICマイコンはArduinoなどと違って、初心者がすぐに使えるという感じではありませんし、市販の入門書はある程度知識がある人向けに書かれているようなところもあるので、独学するのはなかなか大変ですよね。このサイトが少しでもお役に立てたようでよかったです!