今回からPICマイコンコンフィグレーション部分の概要を説明します。内容が長くなるため記事を分けています。
今回の説明
PICマイコン電子工作入門の基礎編は、次のステップで説明しています。
この記事の説明は「❸ プログラムを作る」のうち、「PICマイコンプログラムのコンフィグレーション設定内容」を説明します。
- LEDを電池と抵抗のみで光らせる回路を組み立てる
PICマイコンの回路を組み立てる前に、ブレッドボードの取り扱いに慣れておくことにします。電池、抵抗、LEDのみを使って、ブレッドボード上に回路を組み立ててLEDを光らせてみます。ここでは電池、抵抗、発光ダイオードの回路記号と回路図の説明をして、回路図からブレッドボードに組む方法を説明します。まずはブレッドボードに慣れましょう! - PICマイコンのベース回路を組む
PICマイコンのはじめの一歩の回路は、LEDを1秒に1回光らせるだけの回路です。
この回路をブレッドボードに組み立てます。 - プログラムを作る ⬅︎ 今回
LEDを1秒に1回光らせるプログラムを作成します。 - PICマイコンに書き込んで動作させる
作成したプログラムをPICマイコンに書き込んで動作させてみます。 - ベース回路にスイッチを追加
LEDの点滅をスイッチで開始させるために、ベース回路にスイッチを追加します。
これまではLEDを光らせる、という出力制御をしましたが、今度はPICマイコンで外部からスイッチの信号を入力する方法を習得します。 - ベース回路にブザーを追加
スタートスイッチ付きの、1秒に1回光らせる回路を作りましたので、ブザーを追加してタイマーとして完成させます。
概要
これから3回の記事に分けて、PICマイコンプログラムのコンフィグレーション設定の部分を説明します。
「コンフィグレーション設定」と聞くと難しく感じてしまいますが、「マイコンの動作設定」という意味で捉えていただければと思います。
次回以降の記事で、それぞれの設定項目を理解していきますが、PICマイコンを使うのはこんなに大変なのか…と思われてしまうかもしれません。
でも一度覚えてしまえば、設定パターンは他のPICマイコンも同じ設定がありますので、他のPICマイコンの理解も早く進みます。さらに、他社製のマイコンでもだいたい同じような設定があります。
まずはPIC12F1822の設定をしっかり理解して、一緒にマイコンの設定方法の基礎を理解していきましょう!
ところで、設定項目によってはなかなか理解することが難しいこともあります。
そのような項目については、通常はこの設定にしておけばまず問題ない、という説明もしますので、設定内容が完全に理解できなくても、そのまま読み進めていただいて大丈夫です。
PICマイコンコンフィグレーション設定の概要
今回の記事では、PICマイコンプログラムの中の「PICマイコンコンフィグレーション設定」部分の概要を理解します。

このコンフィグレーション設定部分では具体的にどのような設定をするのか、イメージをつかんでみたいと思います。
「コンフィグレーション設定(動作設定)」と言われてもイメージが湧きませんよね。
それぞれの設定項目については次回以降の記事で詳しく説明しますが、今回はいくつかの具体例から、どのような設定なのかイメージをつかんでみたいと思います。
設定例1:クロック信号
突然ですが、Windowsで「スタートメニュー」→「設定」→「システム」→「バージョン情報」を選択すると次のようなダイアログが表示されます。

「プロセッサ」のところに動作周波数(クロック周波数とも呼ばれますね)が書かれています。この数値が大きいほど処理速度が上がります。
macOSの場合、Appleシリコン搭載のMacintoshでは動作周波数の確認ができなくなりました。
これは、プロセッサの処理の負荷や温度などのよって動作速度を可変にしていることや、複数種類のコアが動作をしているので、単一の周波数を表示するのが難しくなったためのようです。
PCは、この周波数の信号をタイミングとして動作しています。「動作周波数」の数値が大きくなると、処理速度が上がります。
この信号は「クロック信号」と呼ばれています。
PICマイコンも同じようにクロック信号をタイミングとして動作しているのですが、コンフィグレーション設定の部分で、「どのクロック信号を使うか」という設定ができるようになっています。
具体的には、「マイコン内部で発生したクロック信号を使う」と「マイコン外部の回路で発生させた信号を使う」のどちらかを設定できるようになっています。
でも、なぜ選べるのかちょっと不思議ですよね。PICマイコン内部でクロック信号が発生できるのであれば、それを使ったほうが手っ取り早いですよね。
実は、PICマイコン内部で発生するクロック信号は簡易的な回路で発生させているため、少し不正確なところがあります。温度が変化すると周波数の数値が少し変化することがある、など状況によっては不正確になります。
例えば、PICマイコンで時計を製作する場合、時間の計測はこのクロック信号を使うことになります。
このとき、少し不正確な内部クロック信号を使うと、時計を製作するのはちょっと心配ですよね。
そのような場合は、時計に利用できる正確なクロック信号を外部で発生させて、その信号をPICマイコンに接続して利用する必要があります。この正確なクロック信号は「水晶発振子」という電子部品を使って発生させることが多いです。
よく腕時計などで「クオーツ時計」という言葉を聞いたことがありませんか?この「クオーツ」は「水晶」の意味で、「クオーツ時計」は水晶発振子を使った時計、という意味になっています。
ところで、PICマイコンの内部クロック信号は少し不正確といっても、キッチンタイマーなどの10分程度の時間計測ではそれほど問題になりません。そこで、この入門シリーズでは内部クロック信号を使って製作することにしています。
設定例2:電圧低下時の動作設定
PICマイコンは電池で動作させることが多いですが、電池が消耗してくると電圧が低下します。
この電圧低下は徐々に進んでいきますので、PICマイコンの動作電圧にギリギリ足りるぐらいの状態では、PICマイコンのプログラム動作が不安定になります。
マイコンの動作が不安定になった場合、LEDの点滅制御では点滅がおかしくなる程度で済みますが、モーター制御している場合などでは、モーターが不規則に動いて危ない動作になる可能性もあります。
そこで、コンフィグレーション設定の部分で「電源の電圧が低下したとき、PICマイコンの動作をどうするか」という設定ができるようになっています。
具体的には「電圧が低下しても放っておく」か「電圧が低下したら動作を停止する」かという設定です。
電池の電圧が低下したとき、モーター制御など動作を止めて欲しい場合は「電圧が低下したら動作を停止する」という設定の方が安心ですよね。
プログラムのコンフィグレーション部分では、このようなマイコンの動作を設定します。
他にもいろいろ設定がありますので、次回以降の記事ですべての設定を詳しく説明していきます。
説明する設定項目は「PIC12F1822」のものですが、他のPICマイコンでも同様の設定があります。
ただし、高機能のPICマイコンになると、他にも多くの設定項目が追加されています。
PIC12F1822の設定項目はどのPICマイコンにも見られる基本的なものですので、まずは基本的な設定項目を理解すれば、他のPICマイコンの設定も理解がしやすくなります。
ぜひ一緒に一通りの設定を理解していきましょう!
#pragma
いよいよ設定項目の解説、といきたいところですが、コンフィグレーション設定部分の#pragma
というキーワードについて補足しておきます。
コンフィグレーション設定部分は、例えば次のようなフォーマットになっています。
#pragma config FOSC = INTOSCIO
これは、PICマイコンコンフィグレーション設定のうち「FOSC」(クロック信号設定)という設定項目を、「INTOSCIO」(内部クロック信号を使用する)に設定する、という意味になっています。
このように考えると、FOSC
をINTOSCIO
設定する場合はFOSC = INTOSCIO
という書き方で良さそうな気がしますよね。
でもその前には#pragma
とconfig
と書かれています。
特に、この#pragma
というキーワードは、一般的なC言語入門ではあまり説明されていないことが多いので、最後にこの意味を補足しておこうと思います。(ご存知の方は次回以降の記事に進んでいただければと思います)
この#pragma
は、一般的には「特定のコンパイラに特化した命令を記述するための指示子」と説明されることが多いのですが、よくわかりませんよね。
そこで、具体例から#pragma
のイメージをつかんでいただければと思います。
XC8コンパイラ(特定のコンパイラ)が、次のコードをどのように解釈するか、XC8の立場から処理の様子を追っていきます。
#pragma config FOSC = INTOSCIO
XC8コンパイラは#pragma
という文字列を見つけると「この行には、自分(XC8)専用に何かが書かれているかもしれない」と判断します。
そこで、XC8は注意して#pragma
の後に書かれているconfig
というキーワードを見つけると、「あ〜、config
ね。知ってる、知ってる。config
ってことは、PICマイコンのコンフィグレーション設定をしたいんだね。ということは、にconfigの後に[設定項目] = [設定値]
とかかれているはずだから、その後もみてみよう」と判断します。
実際その後に FOSC = INTOSCIO
と書かれているので、XC8は「FOSC」(クロック信号設定)を、「INTOSCIO」(内部クロック信号を使用する)に設定します。
このように、#pragma config FOSC = INTOSCIO
という文をXC8コンパイラが解釈するとクロック設定を行う処理になります。
ところで、#pragma config FOSC = INTOSCIO
というXCコンパイラ向けの記述があるソースコードを、他のコンパイラでコンパイルしたらどうなるのでしょうか?
例えば、WindowsやmacOSなどのアプリ開発環境で、ソースコードに#pragma config FOSC = INTOSCIO
と書いた場合、どのように処理されるのでしょうか?
PICマイコン以外の開発環境で#pragma config FOSC = INTOSCIO
と書いた場合、次のように処理されます。
WindowsやmacOSのコンパイラが #pragma
を見つけると、自分専用に何かが書かれているかもしれない、と判断します。
そこで、#pragma
の次を見ると、config
と書かれていますが、WindowsやmacOSのコンパイラはこのconfig
は何のことか知りません。
そこで、この行自分用に書かれたものなんだな、と判断してこの記述は無視する、という動作をします。(エラーになる場合もありますが…)
次回以降の記事では、コンフィグレーションのそれぞれの設定項目の詳しい説明をしていきます。
どの設定項目も、次のようなフォーマットになる点を覚えておいていただければと思います。
#pragma config [設定項目名] = [設定値]
更新履歴
日付 | 内容 |
---|---|
2016.9.5 | 新規投稿 |
2016.11.24 | macOSスクリーンショット差し替え |
2025.4.6 | Windowsのスクリーンショット差し替え macOSの記述をAppleシリコンに変更 |
コンフィグレーション設定 (1)から(3)、
非常に役に立ちました。
私はPICマイコン初心者ですが、
関連する高価な本を初心者向きだと序言に書いてあったので何冊か買いましたが、
全く初心者向きでなく、
まるで猫に小判でした。
当サイトを紙に印刷してじっくり読ませていただきましたが、
初心者にもわかりやすく懇切丁寧に書かれているので、
しっかりした基盤の上で理解することができました。
著者の読者に対する優しい人格にも触れることができたように思います。
ありがとうございました。
暖かいコメントどうもありがとうございました。
お役に立ててよかったです。ただ、PICマイコンはなかなかわかりづらいところがありますので、説明が難しいところもあります。説明が至らないところもあると思いますので、わからないところがありましたら遠慮なくご質問いただければと思います。
実は自分もPICマイコンを始めた時は習得に苦労しました。PICマイコンの入門書を読んでもなかなか理解できませんでした。そのような経緯もあり、このサイトは過去の自分に教えるつもりで書いています。
それでは今後もこのサイトをよろしくお願いいたします。
まったく同感です。私も何冊もPIC本を購入しました。ぐぅーんと理解が深まったのはこの講座のほとんどを印刷してじっくり勉強してからです。初心者に本当に理解してもらいたいという優しい気持ちに触れて感謝の意をお伝えしたく投稿しました。有難うございます。
暖かいコメントいただきましてどうもありがとうございました!
やはりPICマイコンはArduinoなどと違って、初心者がすぐに使えるという感じではありませんし、市販の入門書はある程度知識がある人向けに書かれているようなところもあるので、独学するのはなかなか大変ですよね。このサイトが少しでもお役に立てたようでよかったです!