上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
--.--.-- -- l スポンサー広告 l top

 サウンド生成用PICファームのソースを少し整理しましたのでご参考に公開いたします。
 



 回路図は先日もアップしましたが、アンプを変えてサウンド部だけにしましたので再度アップいたします。



Sound_gen_cir_2 



 今回はターゲット回路内に9V電源があるのでLM386を使いましたが、他の用途で使う場合はオーディオアンプは変えたほうがよいかもしれません。



 


 



アセンブラソースはこちらです。あまり綺麗でなくてすみません 。最初に1パートで機能を作って、動作確認してからコピーで残り2パートを追加しています。そのためちょっと冗長かもしれません。



「SOUND_GEN.ASM」をダウンロード



 (※あくまでも個人利用のためのご参考用としてください。ご利用によって何らかの問題が生じても対応はいたしかねます。)



以下、簡単に機能と方式を説明いたします。



 



■機能



 
 ①シリアルI/Fからのデータ入力に応じて3パート(和音)までの音を生成します。データ形式は下表の通りです。
Sound_gen



 ②エンベロープパターン生成機能があります。(パターンはソース一番最後のテーブルで変更できます。)



  
■方式



 



 ①PICマイコンのPWM機能を利用しています。



 ②PWM周期を25usで動作させ、そのDutyを変化させることで音を生成します。



 ③シリアルI/Fで与えられる音程番号に対応した発声周期の半周期を25usで割った数値をテーブル化しておき、25us*その数値の時間ごとにPWMのDuty値をON/OFFすることで音程に対応した周波数を作り出します。



 ④各パートごとに求められる③のDuty値を加算してPWMにセットすることで和音を合成します。



 ⑤25us*200=5msごとに③のDuty値をテーブルデータに従って変化させることでエンベロープパターンを生成します。



 ⑥メインループは1回25usで回っており、その中で②~⑤の処理とシリアルI/Fの受信処理を行っています。



 ⑦メインループの25us時間はTimer0を用いて調整しています。



処理の初めにTimer0を25usのワンショットで仕掛けておき、処理が終わったら、Timer0が設定時間に達するまで待つことでループ時間を25usに保ちます。



このため、メインループ内の処理は必ず25us以下で実行完了する必要があります。(PICマイコンを40MHzで動かしていますので、今は十分間に合っています。)



  



本当に簡単で済みませんが 、本日は以上です。



 



明日からしばらくでかけますので、また数日更新とコメントレスが遅れますがご容赦お願いいたします。





 





にほんブログ村 その他趣味ブログ 電子<br /><br />工<br /><br />作へ
にほんブログ村 ←記事が面白かったらクリックしてやってください。





2010.08.26 Thu l あの楽器 l コメント (0) トラックバック (0) l top

コメント

コメントの投稿












トラックバック

トラックバック URL
http://diyelec.blog.fc2.com/tb.php/9-1ccf2e3d
この記事にトラックバックする(FC2ブログユーザー)
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。