ELM Home Page

2010. 9. 11
更新: 2013. 12. 15

シンプルな 255音 PCMサウンドジェネレータ


20pin AVR and SD

1個のICとSDCで作るシンプルなサウンドジェネレータです。以前製作した8ピンSDオーディオプレーヤの応用で、コントローラには20ピンAVRのATtiny861を使用しています。このシリーズもtiny85同様に高速PWMを持っているので、同様にクリアな音声出力が可能です。多くのI/O端子が余るのでこれを制御入力とすることにより、外部から多くの制御が可能になりました。リセット端子も未使用なので、書き込みも普通のISP方式でよく、高電圧書き込みの必要はありません。

外部から簡単に制御できるので、サウンドモジュールとして玩具、トーンリンガ、アミューズメントマシンからちょっとしたガジェットまで応用の幅が広がります。

ハードウェア

オーディオ信号はPWMで出力され、スピーカを直接駆動することができます。3V動作なら出力インピーダンスにより、たとえショートしても最大定格を越えることはありません。このため、あまり大きな音は鳴らせませんが、能率の良いスピーカなら机上で聞くのに十分な音量が得られます。オーディオ出力をアンプに接続する場合は、必ずLPFを通してください。PWM信号を直接アンプに入れるとアンプやスピーカにダメージを与える可能性があります。記録メディアにはMicroSDの使用を想定していますが、もちろんMMCやSDCも同様に使用できます。

出力形式の選択

回路図に示すように、オーディオ出力の形式には3通りあり、それぞれ回路的に排他となっています。AVRに書き込むファームウェアは製作した回路にマッチしたものでなければなりません。各出力形式(モノ/ステレオ/モノHR)にはそれぞれのHEXファイル(sdsg_mo.hex/sdsg_st.hex/sdsg_hr.hex)が対応します。添付のHEXファイルにはヒューズデータが含まれますが、一部のAVRライタはこの種のHEXファイルに対応していません。もしもそのような場合は、HEXファイルの最後の3行を削除してから書き込み、ヒューズ値はそれぞれ別に書き込みます。

ソフトウェア

制御入力とトリガモード

このサウンドジェネレータの対応する音声ファイルのフォーマットは、RIFF WAVEフォーマット(LPCM, 8/16bit, mono/stereo, 8~48kHz)です。MP3ファイルなどは、WAVファイルに変換しておかないと再生できません。ファイル名は001.wav~255.wavとし、全てのファイルはルートディレクトリに置いておきます。

制御入力は8個のスイッチで2進数コードとして与えられ、対応する番号のファイルが再生されます。例えば、SW1は001.wav、SW4は008.wav、SW1+SW5なら017.wavといった感じです。制御入力に対する挙動はトリガモードで指定されます。トリガモードは、000.txtに記述しておきます。各モードの動作は次の通りです。

モード0
レベルトリガ。入力されているコードに対応する番号の音声ファイルをループ再生します。途中で他のコードに切り替わると、その音声に切り替わります。入力が無くなる(0に戻る)と即時停止します。
モード1
レベルトリガ(動作維持)。モード0と同じですが、入力が無くなると最後まで再生したあと停止します。
モード2
エッジトリガ。入力されたコードに対応する番号のファイルを1回だけ再生します。再生中の入力の変化は無視されます。
モード3
エッジトリガ(再トリガ可能)。入力された番号のファイルを1回だけ再生します。再生中でも他のコードに変化すると、その音声ファイルの再生を開始(再トリガ機能)します。同じコードでの再トリガは、一旦0に戻ってからです。
モード4
エッジトリガ(入力OFFで停止)。入力された番号のファイルを1回だけ再生します。再生中に0に戻ると再生を中断します。

LEDの意味

LEDは再生中に点灯するほか、エラーが発生したときにフラッシュしてそれを示すこともできます。たとえば、SDCを入れずに電源ONすると、SDCを認識するまでI/Oエラーの表示を繰り返します。SDCがセットされ動作準備が完了するとLEDは消灯します。フラッシュ回数とエラー内容は次の通りです。

資料

Sign