音の大きさを測る(PICマイコンとMEMSデジタルマイクロフォンの利用)_PIC編

デジタル屏風では、センサとアクチュエータをコンピュータでコントロールする製品を開発しています。屋外での騒音を検知して、LEDを光らせる騒音警報看板を開発しています。

センサーとアクチュエータをコントロールするコンピュータはPICマイコンを使います。PICマイコンには多数の種類があり、PIC16F1ファミリについては、「PIC16F1ファミリ活用ガイドブック」(後閑哲也著)にまとめられています。PIC16F1ファミリは8ビットのマイコンで、用途に応じてマイコンの種類を選定します。たとえば、アナログデジタル変換を行うのか、論理演算(AND/OR等)を行うのか、シリアル通信を行うのか、オペアンプを使うのか、液晶パネルを使うのか、といった用途ごとに適切なPIC16Fファミリを使い分けます。

今回は、騒音警報看板の機能性を実装するためにオペアンプとアナログコンパレータの機能を持つPIC16F1778(秋月電子で230円/個で購入)を使用します。「逆引きPIC電子工作やりたいこと事典」(後閑哲也著)の「音の大きさを測りたい」節に書かれている製品構成および回路でまずは実装することにしました。この書籍に書かれている機能や回路をMPLAB X  IDEを使って実際にマイコンに書き込むというのがこの投稿の内容です。

◆オペアンプの機能

PIC16F1778にはオペアンプの機能が内蔵されています。MEMSデジタルマイクロフォンから入力したデジタル信号を約25倍程度の増幅率で調整できる回路が紹介されています。まずはPICKIT4にPIC16F1778を配置し、MPLAB X IDEを起動し、新しいプロジェクトを作成します。MPLAB X IDEではMCC(MPLAB Code Configurator)という画面ベースで設定できる機能を活用します。以前シリアル通信の設定をしたときには、MCCのありがたさを痛感しました。Easy Setupという画面のみパラメータを指定すればとりあえずは動くという経験です。MCCについては「C言PICプログラミング大全」(後閑哲也著)に詳しく説明されています。

最初にMCCをピンの様子を表示すると次のようになっています。画面下および画面右のペPINの役割が表示されていますが、この時点では電源以外の機能は何も割り当てられていない状態です。

そこで画面左のDevice Resourcesペインからオペアンプを示すOPAをクリックします。するとPIC16F1778で利用できる3つのオペアンプが表示されます。

ここでOPA1のプラスのアイコンをクリックして、プロジェクトにOPA1を追加します。するとMPLAB X IDE画面でOPA1のピンが追加されます。

◆アナログコンパレータの機能

「逆引きPIC電子工作やりたいこと事典」の「音の大きさを測りたい」セクションでは、オペアンプに加えてアナログコンパレータを使用し、マイクから入力した音量がある閾値を超えたらLEDを光らせています。ちなみにパルス出力関連モジュールにCCP/ECCPモジュールというものがあります。CCPはCapture/Compare/PWM、ECCPはEnhanced CCPの頭文字をとったものです。このCCPにコンペアモードというものがあり、これとアナログコンパレータを混同してしまいましたが、別機能のものとわかりました。Device ResourcesペインからCMPを選択すると、Project ResourcesペインのperipheralsにCMP1が追加されます。MPLAB X IDE画面でCMP1が使用するピンが自動的に追加されます。

◆メインプログラム

オペアンプおよびアナログコンパレータの設定が終了すると、プログラム中では何も行う必要がありません。マイクが入力した音データの大きさを判断して、適宜LEDを点灯させます。main.cプログラムはひな形としてMCCが生成したプログラムをそのままPIC16F1778に書き込みます。

◆電源の設定

オペアンプとアナログコンパレータを使う場合に限りませんが、MPLAB X IDEで新しいプロジェクトを作ったときはPICマイコンへの電源供給の設定が必要になります。設定しないとメインプログラムコンパイル時に以下のようなエラーメッセージが表示されます。

そこで、CategoriesのPICkit4のOption categoriesでPowerを指定し、Power target circuit from PICkit4のカラムにチェックを入れます。

これでプログラムのPICマイコンへの書き込みができました。次は動作確認の様子を投稿したいと思います。

 

Follow me!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です