して以下のリンクに公開しています。発光ダイオード点滅回路を完成させるために以下の順序で説明しています。このエントリの説明は(3)「プログラムを作る」の部分の、プログラム作成のステップになります。発光ダイオード(LED)を電池と抵抗のみで光らせる回路を組むPICマイコンの回路を組む前に、まずは電池、抵抗、発光ダイオードのみを使って、ブレッドポード上に回路を組んで発光ダイオードを光らせてみます。ここでは電池、抵抗、発光ダイオードの回路記号、回路図と、回路図からブレッドボードに組む方法を説明します。PICマイコンのベース回路を組むはじめの一歩の回路は、発光ダイオードを1秒に1回光らせるだけの回路です。プログラムを作る発光ダイオードを1秒に1回光らせるプログラムを作成します。PICマイコンに書き込んで動作させる作成したプログラムをPICマイコンに書き込んで動作させてみます。発光ダイオードの点滅をスイッチで開始させるために、ベース回路にスイッチを追加します。これまでは発光ダイオードを光らせる、という出力制御をしましたが、PICマイコンで外部から信号を入力する方法を確認します。ベース回路にブザーを追加スイッチ付きの1秒に1回光らせる回路を作りましたので、ブザーを追加してタイマーを作ってみます。前回までに、「コメント」「ヘッダファイルインクルード」「PICマイコンコンフィグレーション設定」の各部分について説明しました。残りは以下の「その他設定」と「メイン関数」です。「その他設定」でひとつ#defineしていますが、これはメイン関数の__delay_ms()という関数を使うときに必要なものとなっています。そのため、「メイン関数」から説明を始めて、必要になったときに「その他設定」を説明します。File”を作成すると、新規ファイルが作成されて自動的に以下のコードが記述されている状態になります。(EXIT_SUCCESS);}このメイン関数内にプログラムを記述していくわけですが、内部クロックを使用して、PICマイコンのピンに何かをつなげて入出力制御する場合、ほぼ以下のような構成となります。内部クロック設定です。PICマイコンコンフィグレーション設定で内部クロックを使用する設定をしましたが、あくまで「内部クロックを使用する」という設定だけでした。このメイン関数の中では、内部クロックの周波数を設定します。次に、PICマイコンの各ピンの機能を設定します。具体的には、デジタルにするかアナログにするかの設定と、入力ピンにするか出力ピンにするかの設定です。この入門では、発光ダイオードのON/OFF制御、つまりデジタル制御をしますので、発光ダイオードを接続しているピンを「デジタル」の「出力ピン」という設定を行います。ところで、「デジタル」と「アナログ」についてもう少し詳しく説明しておきます。この説明では電源電圧を5Vとし、ピンの入出力設定は「出力ピン」とします。このようなときに、ピンの機能を「デジタル」にした場合、出力は、0Vか5Vのどちらか、つまりデジタルになります。ピンの機能を「アナログ」にした場合は、出力は0V〜5Vで、例えばこの間にある1.25V、などと途中の電圧を指定して出力することができます。これは入力の場合でも同様です。「アナログ」のときは0V〜5Vまで設定できるのだから、0Vと5Vの2つを使用したいのであれば、「アナログ」で0Vと5Vのみを使えばいいのではないか、という疑問です。いちいち「デジタル」か「アナログ」かという設定はやめて、すべて「アナログ」設定にしてしまい、デジタルで使いたい人は、0Vか5Vのみを使用、アナログで使いたい人は0V〜5Vの可変電圧を使用、ということにしてしまえばよさそうですよね。すれば、いちいち「デジタル」か「アナログ」かなんて面倒な設定をひとつ減らすことができますよね。「デジタル」と「アナログ」をわざわざ設定するかというと、この設定に応じてPICマイコン内部の回路をデジタル用、アナログ用に切り替えていて、この内部回路が異なることにより、ピンを制御する動作速度が「デジタル」と「アナログ」で異なっているためです。具体的には「デジタル」の方が「アナログ」よりも早く処理できます。「アナログ」設定のみにして、デジタルで使いたい人は0Vと5Vのみを使用する、という場合、逆に0Vと5Vしか使わないのに「アナログ」の遅い速度(といっても早いことは早いですが)に付き合わなくてはならない、というデメリットがでてきてしまいます。そのため「デジタル」か「アナログ」か設定するようになっています。PICマイコンでアナログ出力に対応しているタイプもありますが、PIC12F683は対応していません。アナログ出力に似た制御ができるPWM制御というものができるようになっています。ここまでの設定で、PICマイコンはクロック設定に従って動作を行い、また各ピンの機能も決まりますので、いよいよプログラムで制御することが可能となります。実際の動作処理に入る前に、使用するピンを初期状態に設定します。今回は発光ダイオードの点滅制御をしますが、その制御は1秒に1回光らせる、というものになります。そのため、電源投入直後は発光ダイオードは消しておく設定をします。他の例では、何か処理をしているときは赤の発光ダイオードを点灯させ、アイドル状態のときは緑の発光ダイオードを点灯させる場合、ピンの初期設定部分では、赤の発光ダイオードは消しておき、緑の発光ダイオードは点灯させておく、という設定を行います。プログラム内で使用する変数なども何か初期設定が必要でしたらここで設定します。初期設定ができたら、いよいよ動作処理となります。一点補足しておきます。内部クロック設定やピンの機能の設定は、メイン関数の始めに設定しましたが、その後、動作処理をしている間でも設定した内容を変更することができます。メイン関数の始めに内部クロック周波数を1MHzに設定したあと、例えば動作処理中にあまり処理することがないときに、内部クロック周波数を125kHzに設定する、ということもできます。クロック周波数が低いと、PICマイコンの消費電力が少なくて済むので、このような工夫ができます。動作処理の部分はどのような制御をするかでかなり異なってきます。発光ダイオードの点滅制御ができたら、その後は点滅開始させるスイッチを付けて、さらにブザーをつけて鳴らしてみます。この動作処理の部分がどのように変わっていくか確認してみてください。それではメイン関数の詳細を説明します。いう変数(レジスタと呼びます)に値を代入することにより設定します。“xc.h”ファイル(からインクルードされるヘッダファイル)に定義されています。この入門では内部クロックの周波数を1MHzに設定します。0x40;と設定すればよいのですが、なぜこのような値を設定するのか、他の周波数に設定するときはどうすればよいか説明します。ここから2進数と16進数がでてきますので、もし忘れてしまっていたら復習しておきましょう。OSCCONは1バイト、つまり8ビットのレジスタで、以下のように構成されています。表の見方ですが、1行目は第何ビット目か、2行目はそのビットが読み取りか書き込みかの区別です。R/Wの場合、そのビットは読み取りと書き込みができます。Rの場合、そのビットは読み取り専用です。3行目は設定項目、4行目はその設定項目の意味です。それでは、一番上のビットから設定方法を説明します。第7ビットですが、これは使用しません。第6ビットから第4ビットは、この3ビットでひとつの意味を表していて、内部クロックの周波数を表します。この3ビットにどのような設定をするとどの周波数に設定できるか以下にまとめておきます。0、という設定になります。第3ビットは、読み取り専用で、ここの値を読み取ることによって今使用しているクロックが内部か外部かがわかります。このビットが1のときは外部クロックで動作していることを示し、0のときは内部クロックとなります。これは先のエントリで説明しましたが、例えば2段階クロックスタートアップで、電源投入時は内部クロックで動作させて、その後外部クロックに切り替える場合、この値を読み取ることにより、今どちらのクロックで動作しているかわかります。外部クロックに切り替わったら本格的な動作を開始する、という制御ができます。第2ビットと第1ビットは、読み取り専用で、ここの値を読み取ることによってPICマイコンの内部クロックの状態を知ることができます。PICマイコン内部には実は2種類のクロック発振部があり、第2ビットは高周波クロックの状態で、第1ビットは低周波クロックの状態です。1のときは安定状態、0のときは不安定であることを表します。この値の使い方はよくわからないのですが、例えば、内部クロックの状態が悪かったら、外部クロックに切り替える、とかなんですかね。いー加減ですみません。第0ビットは、どのクロックを使用するかの設定です。1のときは内部クロック、0のときはPICマイコンコンフィグレーション設定で設定したFOSCで指定したクロックになります。プログラム中でクロックを切り替えたりしないようであれば、この値は通常0で問題ありません。いうことで、内部クロックの周波数を1MHzに設定する場合、各ビットは以下のように設定することになります。使われていないビットや読み取り専用のビットにも0か1を入れておく必要がありますので、あまり深い意味はありませんが0を入れておきます。使われていないビット(第7ビット)はとりあえず0にしておいてもいいとして、読み取り専用のビット(第3ビット〜第1ビット)を0で書き込んでしまっていいのか、という疑問があるかもしれません。読み取り専用のビットに書き込むプログラムを書いても、回路的にそのビットには書き込みできないので、無視されるだけですのでご安心ください。してOSCCONに代入すればOKです。0x70;となります。お時間があるようでしたら他の例もいろいろと考えてみて下さい。次に、PICマイコンの各入出力ピンの設定を行います。設定の説明をする前に、もう一度PIC12F683のピン名とその機能を説明します。何度も出てきてすみませんが、PIC12F682のピン名を確認します。(Microchip社の12F683データシートより引用)ここから入出力ピンに関するピンとそのピンの機能名を抜き出すと以下のようになります。機能名が長いため右側と左側のピンが区別つくように位置をずらし、色を付けてあります。ややこしいのでじっくりいきましょうね。入出力制御ができるピンは、2番ピンから7番ピンです。これらのピンはすべて同じ性質ではなく、ちょっとずつ異なります。いう名前のついたピンは、デジタル制御ができることを示しています。“ANx”という名称のついたピンは、アナログ制御ができることを示しています。各ピンとも入力か出力かを設定する必要がありますが、どのピンも入力にも出力にも設定できるわけではあまりせん。具体的には、リセット用のピンは入力のみで出力には設定できません。これは上のピン機能名では表現されていないので注意が必要になります。この情報からまとめると、各ピンは以下の機能設定が可能、ということになります。