« 2009年12月6日 - 2009年12月12日 | トップページ | 2010年1月3日 - 2010年1月9日 »

2009年12月20日 - 2009年12月26日の1件の記事

2009年12月20日 (日)

リニアPCMプレーヤー3号機の開発

 忘年会のシーズンがやってきた。お昼より夜のスケジュール調整が忙しい。しかし電子工作を始めてからは回数を減らすようにしている。酒は嫌いではないが、飲んだ後は何もやる気がなくなって、何か人生を僅かづつでも無駄にしているような気持ちになるからだ。

 それでも、楽器演奏、模型制作、フライトシミュレーター(勿論PCでの)という、どれもマイナーで脈絡のない趣味を共通に持つ友人との、先日の忘年会は実に楽しかった。電子工作に関する話題もほぼ通じる。全く同じでなく少しづつ分野がずれているのだが、その方がお互いの情報交換になって盛り上がるようだ。

 そんなこともあって、リニアPCMプレーヤーの第三版(3号機)の開発は余り進んでいないが、日を空けると忘れそうになるので、この10日間の経過を紹介しておこう。

プレーヤーのソフトに画期的改善が可能か(12/15/09)
 これまでリニアPCMプレーヤーのソフトは、液晶モジュール(LCD)を小さいものに取り替えて動くようにしただけで、本体の構造は全く変わっていない。LCDの2行のわずかなスペースに曲名リストを表示し、演奏ボタンで演奏を始めると、1行目にWAVファイル名、2行目にそのWAVフォーマット(サンプリング周波数など)を表示するだけで演奏が終わるまで何も変わらないというのは同じだ。

 PCや市販のポータブルプレーヤーのように、演奏時間や、プログレスバーのようなものが出ると恰好良いのだが、OSのない8ビットのマイコンでは無理だと諦めていた。しかし、3号機のハードの設計にこれだけ苦労しているのに、ソフトを何も改善しないのは芸がない。何か変えるものはないかと思案しているうち、ふと思いついた。

 そもそも、経過時間表示を諦めた理由は、44.1khzの2倍オーバーサンプリング、11.3μsごとの割込みの度に、ステレオ16 ビットのデータをDACに送り、かたわらSDカードからせっせとデータを読み込んでバッファーに途切れなく書き込む処理のシビアな時間的制約である。Pcm44_ok

 悠長にLCDにデータを表示している間はない。ここはミリセカンドのオーダーである。Mega328にはDMAなどという洒落た機構はついていない。バッファーもこれ以上大きくするわけには行かない。OSが入らなければこんな同時処理は無理である。

 しかし、このあいだのロジアナのデータアクセスのタイミングチャートを見ていて気がついた。SDカードのアクセス単位は1セクターで、512バイト、バッファーはこの大きさで2つあり、DACはこれを連続的に読み出し、SDカードの読み込みルーチンは、DACが次のバッファーを処理し始めるまで待って、空いたところのバッファーに書き出す。

 512バイトのバッファーを読み切る時間は決まっている。サンプリング44.1kHz、16ビットステレオでおよそ2.9msである。一方、クロック20MhzでのFatFSの読み込み時間は、実測で1.3msで、残りの1.6msはバッファーが空くのをひたすらループで待っているだけである。

 ここにSysTickのようなインタバルタイマーで割り込みをかけ、バッファーが空いていない時はすぐバックグラウンド処理に戻り、バッファーが空いていたら、この割込みルーチンでファイル読み込みをすれば、OSを使わなくても、経過時間やプログレスバーのようなものが表示できるのではないか。タスク構造は3段になるけれど、常に3段である必要はない。ディスクアクセスの時だけでよい。うーむ、何かうまく行くような気がする。

 勿論、沢山問題があるのはわかっている。まず一番の問題は、DACのサンプリング割込みが、このインタバルタイマー(というよりこれはSysTickそのものだが)割り込みによって影響を受けないかということである。ただ、割込みの割込み、いわゆる多重割込みは確かAVRでも出来たはずだ。

 早速、Webに助けを求める。あった。あった。WINAVRは多重割込み(Nested Interrupt)をサポートしている。通常は割込みルーチンの中は暴走をさけるため割込み禁止になっているのだが、割込み解除のコードを追加するだけで多重割込みができる。C言語でも大丈夫なようだ。おお、割込みルーチンにオプションがあって、割込みルーチンの先頭で割込み禁止を解く、ISR_NOBLOCKというオプションまである。これはDACのように少しでも割り込み禁止をかけたくない(ジッターが出て音質が損なわれる)ときは都合が良い。

 次の問題は、演奏中断のときのタイマーの取り扱いである。今のプレーヤーには、演奏中にボタンを押せば演奏を中断し、さらに次のボタン押しで再開する機能がある。さらに長押しの時間で連続演奏を止めたり、演奏を中止する機能もタイマーの時間をキーにしている。これがバックグラウンドでも正常に動かないといけない。

 これは、割込み側のSDカードアクセスルーチンにこの処理を持ち込めば問題がないようだ。バックグラウンドの処理時間がそれだけ少なくなるが殆ど影響がない。

 経過時間の表示はどうする。グラフィックLCDでないのでプログレスバーは作れないか。いや、16字あるので10%づつのキャラクター表示で十分さまになるはずだ。演奏時間の計算は、フラッシュがまだまだあるので心配ない。

 ふむふむ、これは楽しみなことになってきた。できそうだぞ。経過時間表示が出来れば、これは大威張りだ。胸を張って3号機と言える。これまでのプレーヤーもソフトを替えるだけで恩恵に与ることができる。俄然やる気が出てきた。

EAGLEにはだいぶ慣れた(12/18/09)
 プリント基板制作の作業状況である。久しぶりにEAGLEを開く。まず、秋月の小さなフォンジャックのライブラリを制作する。EAGLEは本体の回路図エディターや、基板エディターより、このライブラリエディターの方が癖があって難しい。

 シンボルファイルから作り始め、パッケージとすすんで最後にディバイスファイルを完成させる。この順番を間違えて既存のデータから部品を作ろうとするととんでもない目に会うのは経験済みだ。今度は、何度か失敗はしたものの、何とかディバイスファイルまで出来た(慎重を期すため、公開は実際に部品が載ってからにする)。Akijack

 次は、このジャックを入れた全体のレイアウトである。スケッチではうまく載りそうだったがやってみるまではわからない。少しづつ部品をつめて2連VRの場所を探す。使い勝手の問題もある。余り変なところに置くと使いにくくなる。出来上がっているボードファイルからripupで配線を、はずし、はずし試していく。うーむ、なかなか入らない。VRをハンダ面に持って行ったり工夫するが、パスコンが思ったより大きくスペースをとって入りきらない。

 結局、これもコロンブスの卵のようなもので、入力側のDACの裏側に、最終段のVRを乗せるとピッタリ納まることがわかった。昔は少しオーディオに凝っていたので、発振を恐れて入力(DAC)と出力(VR)を近づけるのに抵抗があって、これに思いつかなかった。考えてみれば、2号機もDACの横にフォンジャックが隣接していても何の問題もない。高周波ではないので問題ないだろう。Lpcmplayer_eagle

 2日ほど熱中してEAGLEのレイアウトは当面完成した。DRCをかけてもNO ERRORとなる。コツがつかめてきた。変更する時はこまめにDRCをかけてエラーをなくしておくと進み方が早いようだ。ビアの数は14、前は9だった。これからがまた時間を忘れて夢中になる。色々工夫した結果、5つ減らすことができ、前と同じビアに留めた。鼻が高い。だいぶEAGLEに慣れたようだ。

 しかし、Olimexに発注する段になって、また足元をすくわれる。Olimexのクリスマス休暇だ。やれやれ。17日までが1月中の制作で、1月4 日以降の受注の仕上がりは2月以降になるようだ。

 今度はどういう面付けにしようか。ドリル数は一面あたり147で、4枚とると標準価格のドリル数500を越えて、1割り増しの料金をとられる。5枚以上注文すると2割引になる。
このあいだは、Xbeeの変換基板を入れようとして結局、割り増しになった。このへんで悩むのも、くだらないけれど面白い。

プロクソンのミニサーキュラーソーを買ってしまった(12/19/09)
 懸案の電池フォルダーの方は、このあいだCDのケースを利用して作ることになり、前回のスケッチにもあるように、これを前提にレイアウトが確定している。この電池接点を半田付けする両面基板の切り出しをしているときに感じたことがある。

 たいした作業量ではないが、これをあと10個近く作ると思うと気が重い。ハンズで買った鋸は切れ味が鈍ってきて、真っ直ぐ切るのに苦労する。このあいだMCP73831のミニ基板を切り出したときは、うっかりルーターの丸鋸でガラエポ基板を切って1回で刃先を駄目にしてしまった。そろそろこのあたりも生産性を上げておきたい。

 アクリルの切り出しは、本当はカッターが一番きれいに切れるのだが、しっかりした台と定規がいる。それに結構力がいるし、真っ直ぐ刃先を通すのは熟練が必要だ。基板や、アクリル板を簡単に正確に切り取る道具が前々から欲しかった。

 候補はいくつか考えている。一番安いプロクソンのミニサーキュラーソー(卓上丸鋸盤)が今のニーズには一番合っているが、電子工作だけでなく木工(指物師があこがれ)まで視野に入れると、もう少し大きいスーパーサーキュラーソーのほうが汎用性が高い。指物には欠かせない斜め切りも出来る。しかし、こいつはミニに較べると3倍以上の価格だ。

 このあたりになると、他のメーカーからも、沢山売り出されている。しかし情報が少なく入手性も低いので候補から外した。コッピングソー(糸鋸)はちょっと魅力的だったが、直線切りは殆ど出来ないというので早々にあきらめた。Ac202554

 ミニか、スーパーか最後まで迷ったが、結局ミニにして、ここ(\10,800)の通販に決める。それにしても工具の価格体系というのは一体どうなっているのだろう。全く同じ商品(でしょうね)が、正規サイトでは、\18,000、DIY店の店頭では\13,000、通常のウェブで\12,000近辺で、ここだけが飛び離れて安い。プリント基板用のダイヤモンド刃をつけて\14,400のお買い物である。工具としてはルーター、ドリルスタンド以来の大物だ。

 店のメールでは、お取り寄せとか言っていたが、予想より早く3日で届いた。いや、便利な世の中になった。早速、梱包を解いて、試運転する。うわあ、これは楽だ。万力のあて木用のかまぼこ板が面白いように細く切れる。プラスチックなど切れすぎて怖いくらいだ。ダイヤモンド刃に替えて、両面基板を切ってみた。万力で基板を固定し、手鋸でギシギシやって、あとはやすりで整形していた切りだしだったが、正確な4枚分があっという間に出来てしまった。今までの苦労は一体なんだったのか。

 やっぱり工具には金をかけるものだ。世界が変わる。ここで生まれた余裕が次の創造性に生きてくる。かけた投資の元がとれるというものだ。

| | コメント (0) | トラックバック (0)

« 2009年12月6日 - 2009年12月12日 | トップページ | 2010年1月3日 - 2010年1月9日 »