AVR Audio SG

おじさん工房 TOP へ


2007/03/14 とりあえず、基板の形に組みました。
2007/03/25 ケースにいれました。
2007/04/12 基板とLCDはコネクターで接続します。
2007/07/14 AVR のプログラムを公開します。


2007/03/14 とりあえず、基板の形に組みました。

SPIでDAコンバーターの信号を作っています。 CPUのクロック(20MHz)を2分周したものをSCKとし、データはLRそれぞれ32ビットなので20÷128=156.25KHzがサンプリング周波数になります。
各命令の実行時間が正確に128サイクルで波形データを作成しSPIに送らなければいけません。 C言語で書いていますがコンパイルするたびに微妙に命令が変わりそのたびにNOPをいれて調整しました。

サイン波、矩形波、のこぎり波、三角波、トーンバースト、まではできていますが、ホワイトノイズ、ピンクノイズでてこずっています。 ホワイトノイズをホワイトガウスノイズにしようとすると乱数を12個加算しなくてはならず10サイクル以下で1つの乱数を作る必要がでてきます。 ピンクノイズはホワイトノイズを−3dB/octのフィルターをとおして作りますがこれも時間のかかる処理です。 最悪これらについてはサンプリング周波数を下げてしまおうかと考えています。

またLCD表示とかいろいろいれたらMEGA48では入らなくなりつつありますのでMEGA168に変更しようかと思います。


■試作した基板

audiosg

秋月で買ったプラスチックケースに入るように高さを抑えるためLCDの下にATMEGA48とTIのDAコンバーターPCM1754があります。 LCDは最近秋月で売っているバックライト付の小型のものです。



2007/03/25 ケースにいれました。

ボタンはアクリル棒6Φをけずったものです。 下からLEDで光らせています。 左から、戻る、↓、↑、決定、です。
後ろは黄色がトリガー出力、白と赤がオーディオ出力です。 オーディオ出力は2出力時以外は同じものを出力しています。

MEGA168に変更、ついでに水晶も24.576MHzにしました。 ちょっとオーバークロックですがこれくらいは大丈夫でしょう。 サンプリング周波数は24.576MHz÷128で192KHzになります。

波形テーブルを変更し、高精度サイン波形用にはサイン位相上位8ビット、下位8ビット、コサイン位相上位8ビット、下位8ビットの計2KB、低精度サイン波形用(TWOTONEや2出力など)にはサイン12ビットの8KBとしました。 プログラムは残り6KB以内におさめます。
   高精度サインでは位相16ビットの上位8ビットと下位8ビットをサインの加算公式(咲いたコスモスコスモス咲いた)を使って求めます。 低精度サインは高速化のため位相12ビットでそのままテーブル引きします。 それぞれの波形は16ビット精度で求め、そのあとレベル調整(0dB〜−96dB)処理をして24ビットデータになりDAコンバーターに送られます。 レベル調整はシミュレーションでは誤差最大0.03dBです。


■ケースにいれたところ

audiosg1

ボタンを丸く削っているのでレンズのようになり正面から見ないとボタンの光っているのがわかりません。

■色々な出力波形
sine  toneburst

square  sawtooth

DAコンバーターのあと多重帰還型LPFをいれているため波形が反転しています。 サイン波では問題ないのですが、のこぎり波では通常と反対になり気になります。 あと矩形波やのこぎり波では波形の変化するところにリンギングが見られますが、これはDAコンバーターに内蔵されているフィルターの特性です。 




2007/04/12

いままで書き込みにはponyprogを使ってきました。 MEGAを使うようになってからponyprogの書き込みソフトでは対応していなく、AVRDUDEを書き込みソフトとして使うようにしていたのですが、最近ときどき書き込みに失敗するようになりました。 デバイスIDを読み間違えるとかはまだ良いのですが、ひどいときにはヒューズビットを書き換えてしまうこともありました。 たいていは外部に水晶発振器をつないでやれば書き込み可能になるのでヒューズビットを元に戻すことができましたが、ついに完全にMEGA168を壊してしまいました(発振しない、外部に発振器をつないでも応答しない、リセット端子がHにならない)。

そこで書き込み器を変更することにしました。 Zilinx用のJTAG書き込み器があるのでAVR書き込み用に新たにJTAGからAVRISPの変換ケーブルをつくりました。 また書き込みソフトをAVRDUDEからELMさん作のAVRSPに変更しました。 いまのところエラーもなく書き込み速度も速くなり満足です。

MEGA168を交換する際にLCDをはずした写真をとりました。

■基板とLCD

基板とLCD

基板とLCDはコネクターで接続します。 LCDにつけているのは Aitem-Labで購入したピッチ変換基板用連結ピンです。 LCDを挿したときの高さがケースにぴったりでした。



2007/07/14

AVR のプログラムを公開します。
ピンクノイズがまだ正常動作していないのですが、ほかのことに時間をとられてずーっと触っていないので備忘録も兼ねての公開です。
サイン波形の出力は、以前に書いた「三角関数の加法定理」を使ったものではなく1次関数での補間にしました。 加法定理を使ったものはどうも精度が2ビット程度落ちるためです。



inserted by FC2 system