PICマイコン電子工作入門の応用編です。最初に全体像と製作するもの説明します。
応用編の進め方
PICマイコン電子工作入門の基礎編では、PIC12F1822を使用してタイマーを製作しました。
応用編では、製作したブレッドボード回路とプログラムをベースとして、部品を追加、プログラムを変更しながら機能を増やしていきます。また同時に、PICマイコンが持つさまざまな機能を一通り習得することを目的としています。そのため、タイマーにふさわしい機能を追加する、というより、PICマイコンの持つ機能の実装方法を習得するためにタイマーに無理やり機能を追加するという進め方になります。ちょっと無理やり感がありますが、最後までお付き合いください。
本来でしたら、こういうものが欲しい、という最終的な製品仕様があって、それを実現するためにどの機能使って実装していくか、という設計をすべきですよね。応用編の進め方は、本来の設計方法とはちょっと逆なような気もしますが、あくまで機能の一通りの説明、ということでご理解ください。
実装する機能
この応用編では、以下のような機能を実装していきます。
- PWM
基礎編では、LEDの制御は「OFF」と「ON」だけでしたが、応用編では「PWM」という機能を使用してLEDの明るさを調整してみます。
基礎編で製作したタイマーは、時間になったらLEDを点灯させた状態にしました。応用編の実装としては、時間になったらLEDをスムーズに点滅させるようにしてみます。 - ADコンバータ
基礎編で製作したタイマーは、スタートスイッチしかありませんでしたが、設定時間を増減できるスイッチがあると便利ですよね。ただ、PIC12F1822はピン数が少ないため、簡単にスイッチの数を増やすことはできません。
そこで、1つのピンに2個のスイッチを接続して、押されたスイッチに応じて電圧が異なるようにしてみます。PIC12F1822の「ADコンバータ」という機能を使用して、電圧を読み取ることによりどのスイッチが押されたかを判定し、設定時間の増減をしてみます。 - EEPROM
設定時間を変更できるようになると、その時間を保存しておきたいですよね。せっかく設定時間を変更しても電源をOFFにしたらデフォルトの設定時間に戻る、となると、おそらくクレームがくると思います。
そこで「EEPROM」という、電源をOFFにしても消去されないメモリに設定時間を保存する機能を追加します。 - 外部割込み処理
タイマーをスタートさせた後、何かの理由でタイマーを最初からカウントさせたい場合があるかもしれませんよね。
基礎編で製作したタイマープログラムの場合、タイマー時間計測中はLEDを50ms点灯させて、950ms消灯していました。この時間調整は「__delay_ms();」という関数を使用して、例えば950msであれば「__delay_ms(950);」というプログラムで時間待ちをしていました。
ところで、タイマー時間計測中の__dealy_ms(50)や__delay_ms(950)実行中の待ち時間は何もできません。つまりこの間のスイッチ状態は検知できないため、例えば__delay_ms(950)の0.95秒に間にスイッチが押された場合は検知できないことになります。
そこで「外部割り込み処理」という機能を使用して、「スイッチが押された」などの外部状態変化があった時に、今実行しているプログラムによらずに強制的に指定した処理を実行するように変更します。 - タッチセンサー(mTouch)
応用編の仕上げとして、タッチセンサーの実装をしてみます。
最近はスマホでタッチ操作ばかりするようになったためか、スマホに限らずどの製品もとりあえずタッチすれば反応するのではないか、と思うようになってしまいました。本や雑誌を読んでいても、図などか見えづらい場合は思わずピンチアウトして拡大できるのではないかと思うようになりましたので、かなり重症ではないかと思っています。
このように、世の中タッチ操作が当たり前、というような風潮になっているせいか、最近のPICマイコンもタッチセンサー機能を実装するものが増えてきました。PIC12F1822もタッチセンサー機能がありますので、応用編の仕上げとして、タイマーの開始ボタンをタッチセンサーにしてみます。
なお、PICマイコンのタッチセンサー機能は「mTouch」と呼ばれています。
前提となる知識
この応用編は、基礎編で説明した部分の詳しい説明は省略します。そのため、前提知識として「PICマイコン電子工作入門基礎編」の内容は把握しておくようにお願いいたします。
また、C言語については基本的な内容で問題ありません。基礎編では以下の内容を前提としていました。
- コメントの書き方
- #define、#include
- 関数
- 変数型宣言、変数代入、演算子
- 繰り返し構文(while文、for文)
- 条件判断構文(if文)
- 2進数、16進数
応用編では、これらの知識に加えて「関数のプロトタイプ宣言」も前提とします。
これらの知識でわからないところがありましたら、ぜひ思い出してから応用編に進むようにしてください。
また、基礎編に比べてプログラムが複雑になってきますので、プログラミングにもある程度慣れているとより望ましいです。
デモビデオ
応用編で製作するタイマーの試作をしましたので動画にまとめてみました。
それでは次回からいろいろな機能を追加していきましょう!
更新履歴
日付 | 内容 |
---|---|
2016.12.9 | 新規投稿 |
2018.11.25 | 必要なC言語知識修正 |