あの楽器(カラー版) その6
サウンド生成用PICファームのソースを少し整理しましたのでご参考に公開いたします。
回路図は先日もアップしましたが、アンプを変えてサウンド部だけにしましたので再度アップいたします。
今回はターゲット回路内に9V電源があるのでLM386を使いましたが、他の用途で使う場合はオーディオアンプは変えたほうがよいかもしれません。
アセンブラソースはこちらです。あまり綺麗でなくてすみません。最初に1パートで機能を作って、動作確認してからコピーで残り2パートを追加しています。そのためちょっと冗長かもしれません。
(※あくまでも個人利用のためのご参考用としてください。ご利用によって何らかの問題が生じても対応はいたしかねます。)
以下、簡単に機能と方式を説明いたします。
■機能
@シリアルI/Fからのデータ入力に応じて3パート(和音)までの音を生成します。データ形式は下表の通りです。
Aエンベロープパターン生成機能があります。(パターンはソース一番最後のテーブルで変更できます。)
■方式
@PICマイコンのPWM機能を利用しています。
APWM周期を25usで動作させ、そのDutyを変化させることで音を生成します。
BシリアルI/Fで与えられる音程番号に対応した発声周期の半周期を25usで割った数値をテーブル化しておき、25us*その数値の時間ごとにPWMのDuty値をON/OFFすることで音程に対応した周波数を作り出します。
C各パートごとに求められるBのDuty値を加算してPWMにセットすることで和音を合成します。
D25us*200=5msごとにBのDuty値をテーブルデータに従って変化させることでエンベロープパターンを生成します。
Eメインループは1回25usで回っており、その中でA〜Dの処理とシリアルI/Fの受信処理を行っています。
Fメインループの25us時間はTimer0を用いて調整しています。
処理の初めにTimer0を25usのワンショットで仕掛けておき、処理が終わったら、Timer0が設定時間に達するまで待つことでループ時間を25usに保ちます。
このため、メインループ内の処理は必ず25us以下で実行完了する必要があります。(PICマイコンを40MHzで動かしていますので、今は十分間に合っています。)
本当に簡単で済みませんが、本日は以上です。
明日からしばらくでかけますので、また数日更新とコメントレスが遅れますがご容赦お願いいたします。
にほんブログ村 ←記事が面白かったらクリックしてやってください。
コメント