目次>5章 第2ステップ(色々な実験)>(11)スピーカを使って音を出す(アンプ,ドレミ)

スピーカを使って音を出す(アンプ,ドレミ)

更新日2006.2.28

前の「スピーカを使って音を出す」の追加実験を行います。
追加実験1 アンプで増幅する。
前ページでは、PICに直接スピーカを接続していましたが、今回はLM386というアンプを使って増幅します。
追加実験2 ドレミファソラシド
上の実験回路を使って、「ドレミファソラシド」を演奏します。
これを少し改造してスイッチで制御すれば電子オルガンが作成できます。

追加実験1 アンプで増幅する

PICに直接スピーカを接続しても、音が出る事を確認できますが、ゲームなどで使用するには音量が足りません。
そこで、LM386という汎用アンプを使って、もう少し大きな音を出してみます。

LM386N−1
電源電圧5Vで、約0.3Wの出力

実験回路

今回作成する回路図です。最小限の部品で構成しました。

前ページ(スピーカを使って音を出す)では、RA0に直接スピーカを接続しましたが、LM386と言うアンプで増幅しています。
スピーカは0.5Wタイプにします。0.3W以下のスピーカでも使えますが、その場合はボリュームを絞って下さい。

それ以外は、前ページと同じです。
 ・RA2:LED(パイロットランプ,0.5秒間隔で点滅させます)
 ・レゾネータ(セラロック):20MHz

ブレッドボードに組み込んだ状態です。

動作確認

前ページで作成したプログラムをそのまま使って、まずは動作確認をしてみて下さい。
PICでスピーカを直接駆動する場合と比べて、随分大きな音が出ると思います。

追加実験2 「ドレミファソラシド」を演奏
「ドレミファソラシド」を演奏するプログラムです。
まずは、これをメモ帳などのテキストエディタに取り込んで、DOREMI.ASMという名で保存し、MPLABでアセンブル&PICライタでPICに書き込んで動かしてみて下さい。

どんな音が出ましたか?

音階と周波数

音階と周波数の関係は、下の表のようになっています。
1オクターブ上がる毎に周波数が2倍になります。

音階周波数
(Hz)
波長T(mS)T/2(mS)cnt1
261.63.8231.91175
293.73.4051.70267
329.63.0341.51759
ファ349.22.8641.43256
392.02.5511.27650
440.02.2731.13644
493.92.0251.01240
523.21.9110.95637
波長と周波数の関係は以下の式で表せます。
 波長(mS)=1000(mS)/周波数(Hz)



波長TとT/2のイメージ

表の「cnt1」はT/2(mS)の時間を作るカウンタで、TMR0割込み回数です。次で説明します。

1/2サイクルの時間(T/2)

1/2サイクルの時間は、TMR0割込みを基準に設定します。
TMR0割込みを25.6uS(マイクロ秒)毎に発生させ、上の表のcnt1の回数カウントする事で1/2サイクルの時間を作ります。

<TMR0の設定>
プリスケーラ使用しない
TMR0初期値128(設定値は138)
オシレータは20MHzですので、割込み周期は次のようになります。
1命令サイクル1秒/20MHz×4=0.2uS(マイクロ秒)
TMR0割込み周期0.2uS×(256−128)=25.6uS
従って、TMR0割込みを「75」回カウントすると、
25.6uS×75=1.920mSとなり、低い方の「ド」の音が出ます。

プログラムの概要

プログラムの概略フローです。

「25.6uS」と「500mS」は、それぞれフラグを用意し、TMR0割込みルーチンでセットします。