PIC32MZ PROJECT(6)
更新日:2022年9月13日

PIC32MZ PROJECT 効果音用PIC24F解説
今回は効果音用PIC24Fについて詳しく説明します。既出の内容ですが、備忘録としてまとめておきます。
(PIC32MZ PROJECTマイコンカードの最新回路図)
効果音用PIC24FはメインマイコンであるPIC32MZから制御されます。効果音はPIC24F側に全て入っていてポート制御されます。プログラム容量128kBのものを使っていますので、かなりの種類の効果音が入ります。
(PIC24Fのポート割り付け)
効果音の制御ポートは合計6本です。内1本が割り込み用です。残り5本が効果音選択用です。5bitなので32通りの切り換えが出来ますが、今回はまだ4bit(16通り)で制御しています。PIC24FのPWM出力は4本設定していますが今回はまだ2本しか使用しておりません。将来の拡張用ってことで。
さてここからは具体的なPIC24Fの内部設定に入ります。PIC24Fの設定にはMCCを使用しますので、その理解があるもとして説明いたします。
(MCCによるペリフェラルの組み込み)
ペリフェラルの組み込みは上図のように4つのOCモジュールと4つのタイマーモジュールを組み込みます。
(OC1モジュールのセットアップ内容)
OC1モジュールはタイマー2を使ってPWM出力するように設定しています。コンペアのカウント値を0xFFにしています。これで8bitデータをPWM値に設定出来るようになります。同様にOC2はタイマー3を、OC3はタイマー4を、OC4はタイマー5を使用するように設定します。
(タイマー2のセットアップ内容)
タイマーは上図のように設定します。ビットモードが選択出来るタイマーは16bitを選択して下さい。全てのタイマーを同様に設定します。
(システムモジュールのセットアップ内容)
内容8MHz発振をPLLで4倍にして32MHzのシステムクロックにします。
(割り込みマネージャーのセットアップ内容)
ポートの変化で割り込みが掛かるように設定しておきます。
(FCYの定義とヘッダーファイルのインクルード)
プログラム中にdelay関数を使うために、FCYの設定とlibpic30.hをインクルードしておきます。当然ですが、PWMを使用するためにOC関連のヘッダーファイルもインクルードしておきます。
(効果音用データの定義)
前回説明しましたようにconstに代わる定義を使用して効果音用のデータを定義します。効果音用のデータは8bit,8kbps,1chのwaveファイルから取り出したものです。WEB上で公開されている効果音のmp3データを使用させて頂いております。データを公開されている方々に感謝です。mp3データは16bit,44.1kbps,2chですので、フリーソフトを駆使してデータ変換して最終的には自作のVBアプリでwaveデータからデータをテキストで取り出しています。
(PWMの開始とデータ設定)
作成した効果音データは8bitですので、無音の時は0x80を設定しておきます。全ての効果音は0x80に始まり0x80に終わるようにします。元々効果音のデータは符号ありのデータとして作成されています(GNDを原点に上下に振れるという意味)。そのデータを8bit化した時、符号ありのデータになりますので、-0x80〜0x7Fのデータとなります。この時-0x80がマイナス側の最大、0x7Fがプラス側の最大になります。
(割り込みの飛び先を設定)
割り込みはポート変化によるものだけですので、その飛び先を key_int に設定します。
(key_int の処理)
割り込みの飛び先の処理です。今回SW5ポートを割り込み用に使用していますので、処理の中でSW5がLになっている時だけ、key_flgを1にします。
(key_flgが1であるかの判定と処理)
メインのループ中でkey_flgが1の時(SW5による割り込みがあった時)のみ、他のポートの状態を読み込んでどの効果音を鳴らすか決定します。
すみません、書くの忘れてました。SW1〜SW5はそれぞれSOUND1〜SOUND5のポートとして定義しています。
(効果音を鳴らす処理)
どの効果音が鳴らすかに従って、効果音の配列のデータを順次読みだしてPWMにセットします。効果音毎に配列の長さが異なりますので、効果音毎の処理が必要です。ここでのポイントはPWMに設定するデータに0x80を加算している部分です。効果音データは符号化されているのでそのまま再生しても正しい音にはなりません。PWMは符号なしの数値しか設定出来ません。そこで0x80分だけ底上げしているのです。符号化の-0x80が0x00に0x7Fが0xFFになります。これで正しい効果音が再生出来ます。元データのよっては稀に符号化されていない場合もありますので、再生音で確認して下さい。
(120usecのdelay)
PWMのデータ書き換えは120usecのウエイトをおいて行うと丁度実時間と同じになるようです。このdelayを使うのに先に説明しましたFCYの設定とヘッダーファイルのインクルードが必要なのです。さて如何でしょうか。ちゃんと効果音は出ましたでしょうか。
今回のPLANET PILOT 2022で使用した効果音をまとめておきます。PWMは2系統(OC1とOC2)使用しており、異なる系統は同時発声が可能です。同じ系統では後から指定した音が再生されます。
(PLANET PILOT 2022の効果音)
効果音用PIC24Fの面実装化によりマイコンカードの基板を新作しています。ちょっと将来に向けた回路も組み込んでいますが、半導体不足によりこの部分の公開はかなり先になりそうです。
(新作マイコカード基板着弾)
今回もガーバーデータアップから約7日で到着しました。PCBWayさんに感謝です。でも最近円安でコスト高はいただけませんね。まあ仕方がないですけど。
(マイコンの実装に一苦労です)
0.4mmピッチのマイコン実装には毎回苦労します。地道にはんだ付けしましょう。
(PIC32MZ PROJECTの最新の状態)
自作ゲーム機のプロジェクトもここまで来ました。しかしながら進み具合はゆっくりです。まだまだPIC32MZ PROJECTは続きます。

「PIC32MZ PROJECTの表紙」へ戻る