« 実装版SDカードPCMプレーヤーが動いた | トップページ | PCMプレーヤー続き: どのSDカードにも頭出し位置を記憶させる »

2009年3月31日 (火)

その後のSDカードPCMプレーヤーと機能追加

ケースに入れてみる(3/25/09)
 卒業式に出る袴姿の娘を早稲田まで車で送る。学校近くは大渋滞だ。冷たい雨が降って卒業式には生憎の天気。送ったついでに届け物のため都心へ足を延ばす。5・10(ごっとう)日とあってどこも車で一杯だ。秋葉原を素通りする。珍しいこともあるものだ。

 家に戻って、ケースの工作にいそしむ。このケースはカーボネート樹脂で工作がとても楽だ。アクリルのように割れる心配がないし、結構強い。ミニルーターでLCDの表示面を切り取る。ミニルーターの削り粉は床に落ちてこないくらい微小すぎて少し心配である。まあ、しょっちゅうやるわけではないが、今度はマスクをしてやろう。

 電源スイッチは迷ったが、結局レガシーなスライドスイッチを横につける。タクトスイッチの長押しで電源を入れるのが最近の流行だが、ソフトの構造を大幅に変える必要がある上、待機電流が少しでも流れるというのが生理的に落ち着かない。電池の自己放電くらいの電流だろうが、どうも古い人間でいけない。Sdplay1

 穴あけは順調に終わった。組んでみる。相当計算してあったはずだが、あちこちで干渉が起きている。LCDのピンヘッダーや、スイッチ基板のスペーサーをやすりで削り落とし何とか納める。LCDの表示面をケースと揃えるのが一苦労だった。工作の腕は着実に上がっている。うむ、これなら恥ずかしくない出来だ。

 嬉しくて家族に見せびらかす。次女がお世辞かもしれないが「欲しい」と言ってくれた。可愛いやつだ。しかし、もう一台作れと言われれば二の足を踏む。コストは精々、全部入れても\2400(LCD \900 Mega328 \525 LTC1144 \300 BU9480F \200 4580DD \50 SDスロット \210)するかしないかだが、ケースの加工が大変だ。第一バッテリーがない。

 最初は意地で買ったDACチップがこんな形で実用品のプレーヤーになるとは予想もしていなかった。それにしても良い音だ。出力をPCのスピーカーから再生し、PCのCD再生ソフトとの音と比較してみても遜色がない。このPCの音は、マザー内蔵のサウンドチップでなく、ひところのちゃんとしたサウンドカード(Creative64)からの音である。こちらの方が音は整っているが、音の情報量から言えば今度のプレーヤーの方が多いような気がする。いや立派なものだ。Sdplay_2

リチウム電池の充電(3/26/09)
 プレーヤーの電池の充電はこれまでの携帯電話に入れてやると言っていたが、ウェブを見ていると、リチウム電池充電用の専門ICがあることがわかった。携帯電話の充電器用なのだろう、沢山のメーカーから出ているようだ。しかし、個人向けに手に入るものは殆どない。

 リチウムポリマー電池については前から「単純に充電していくと確実に爆発炎上します」とか、充電可能下限電圧というのがあってそれ以下になると充電されないどころか発熱、発火する危険があるとか、さんざん脅かされている。

 電池の状態に応じて充電のステップがあり手順を守らないとちゃんと充電されない。つまり電池とその充電器は常にペアになっているべきもので、自作するというのは余程仕様を把握していないと難しいようだ。これまでの携帯電話器を使って充電するのが間違いなく正解なのだ。

 しかし、ここへきてまたもへそ曲がりの悪い癖がでる。これで間違いないという状態に何となく反発したい気分になる。すこしちょっかいを出したくなった。さらにウェブで調べ始める。

 充電開始の温度と電池のそのときの状況に応じて最初は低い電圧をかけて様子を見、充電できるようなら、定電流で充電し、一定の電圧まで来たら定電圧で充電して行くステップが必要なのだそうだ。これはICにとっては恰好の活躍の舞台である。

 MAXIMのMAX1555、リニアテクノロジーのLTC4054、日本無線、ルネサス、探せば殆どの半導体メーカーが作っているのではないかと思うほど製品は多い。面白いことに情報は、電子工作ではなくインドアプレーンなどの模型飛行機のサイトから集まる。彼らにとっては、リチウム電池は飛行機の性能を上げる重要な部品だからだろうか。事細かな解説があり、とても参考になる。電池にも充電指定電圧が4.1Vと4.2Vの2つのタイプがあり、4.1Vのものに4.2Vをかけてはいけないそうだ。これは相当気を遣わないといけない。Ltc4054

 沢山ICは出ているのに個人で買えるものは殆どない。辛うじてLTC4054がインドアプレーンのショップに出ているが今は品切れだ。専門のICを使えば充電はほとんど心配なさそうだ。最初の最低電圧のチェックから、最後の定電圧充電のシャットダウンまで全部ICが管理してくれる。自作はこのICに電源をつなぐだけである。いずれは充電器を作ってやろう。

規格外のクロックに気づく(3/28/09)
 プレーヤーを外に持ち出してテストしている。最近は¥400しない2GのSDカード1枚でCD4枚分の曲が入る。通勤の往復2時間でも聞ききれない。MP3などの圧縮系との音の差は少し良いヘッドフォンで聞けば歴然としている。音の透明感が違う。これは思わぬ拾い物をした。こんなに実用性が高いとは正直作るまで考えてもいなかった。

 ランダム再生機能を次の開発の計画にしていたが、考えてみたらクラシックしか聴かない自分にとっては特に必要性を感じない。協奏曲や交響曲の楽章をランダムに聴くということはまずないからだ。それより、聴きたい曲がファイルリストの中間にあって、聴いている途中で電源を切ったとき、次に電源を入れると頭に戻ってしまうのは不便だ。EEPROMで記録しておき、次の開始で頭出ししたい。いわゆるレジューム機能である。

 それと、リチウム電池は過放電するとあとが大変だ。その監視もしておきたい。途中経過も表示したいところだが、これはプログラムの構造を変えない限り今のままでは無理だ。ファイルをアクセスした空き時間にLCDにデータを送り込み、割り込みなどで表示終了を管理するマルチタスク構造にしないと経過時間などは表示できない。まあこれは将来の課題とすることにしよう。

 あれこれ考えながら、プレーヤーを持って近くの桜の名所の開花の状況を調べに行く途中、音が止まった。あれ、もう電池がなくなったのか。もしかしたら過放電? あわてて家に帰りこれまでの携帯電話を取り出し充電したみた。問題なく充電が始まった。胸をなでおろす。しかし、電池電圧はまだ3.5V近くある。おかしいなと思ったとき、はたと気がついた。いけない。20MhzのMega328を3.3V電源で動かしている。確か、クロックによって電源電圧に下限があるはずだ。データシートを見てみた。あれあれ、20Mhzのクロックで動作を保証しているのはVccが4.5V以上じゃないか。3.3Vでは、上限が13.3 Mhzである。良くこれまで動いていたものだと逆に感心する。

 まあ商用製品でないのだからそう目くじらを立てる必要もない。何しろ動いているのだ。早めにMCUが止まって電池の過放電の監視をする必要がなくなったと強がりを言ってみたが、さすがにちょっと気分が悪い。ロジアナで前に見たときは、バッファーの切り替えとファイルアクセスの余裕は半分近くあった。上限の13.3Mhzの石がなかったので16Mhzの石で様子をみてみた。これでも規格外だが20%程度のオーバーなら許容範囲だろう。おお、問題なく動くようだ。ロジアナで確かめてみる。アクセス時間と読み出し間隔との比率は80%まで高まったが、まだ少し空きがある。しかし、定格の13.3Mhzはちょっと難しいか。16msdplay

レジューム機能の追加(3/30/09)
 あれこれ迷ったが、とりあえずレジューム機能を入れてSDカードプレーヤーのプロジェクトは終わりにすることにした。ところが、これが結構難しい。このあいだのオブジェクト指向的設計で分割した3つのブロックのうち、ひとつだけを関数に切り出し、他をメインルーチンに吸収してしまったことが災いしている。

 ファイル番号をまわして選択するルーチンにスイッチ管理が入っているので切り分けることが出来ない。やれやれ、やっぱり機能を切り分けて開発しておけばよかった。後悔しても遅い。作り直すのも面倒だ。レジューム機能はファイル番号を進めるだけなので、この部分だけ関数として切り出す。こうしてソフトウエアは汚くなっていくのだが、この際仕方がない。

 メディアの識別は、chaN氏のFatFSの内部関数にscan_files()というのがあったのでこれを利用させてもらった。ファイルサイズとファイル数をEEPROMに記録しておき、同じのときのみ同一メディアとみなして記録してあった再開番号を読み出しファイルを進める。このscan_filesという関数はなかなか良く出来ている。ルートディレクトリ上のファイルだけでなく、全てのサブディレクトリ下のファイルまで、再帰的に自分を呼び出してファイルを数え上げているのだ。見事なものである。

 最初、これに気がつかなくてディレクトリのあるディスクで暴走し、頭を捻ったが引数をリテラルにしてスキャンしているためとわかり、ファイルパスを収容するアドレスをバッファーに移してトラブルは解消した。マイコン用のファイルシステムなのでサブディレクトリ下のファイルは見えないものだとばかり思っていたがそうではなかった。いやいや恐れ入りました。脱帽である。

 午後から始めてその日の夜遅くには何とか動き始めた。EEPROMの関数も慣れてきたのかもうトラブルもない。ファイルのスキャンによる遅れも殆ど気にならない。一瞬のうちに頭出しが出来る。うーむ、これは便利だ。いつでも途中で止められる。Sdplay

 去年の暮から始めた、DACチップによるCD音質のSDカードプレーヤープロジェクトはこれでほぼ所期の目的を果たしたようである。ブレッドボードにはちょうど同じ部品がワンセット残っているので2台目を作る選択肢もあるが、当研究所としてはそろそろ次の企画を考えたい。このあいだ付録基板のついた雑誌(インターフェース2009年5月号)をまた買ってしまってARMの32ビットプロセッサーが2つも揃ってしまった。いよいよFPGAのCRTCか。そうなるとAVR研究所というのも名前を換えないといけない。

 上記のレジューム機能を入れたプレーヤーのソフトウエア(V2)を、AVRstudioのプロジェクトファイルの形で下に置きます。クロックは16Mhzになっています。クロックの変更は、メインファイル(SDPLAY328.c)の定数定義の部分で、SYSCLKを変えるだけですべての時間依存のステートメントが調整されるようになっています。プロジェクト名が前のバージョンと同じなので気をつけてください。

「SDPLAY328V2.lzh」をダウンロード

|

« 実装版SDカードPCMプレーヤーが動いた | トップページ | PCMプレーヤー続き: どのSDカードにも頭出し位置を記憶させる »

電子工作」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



トラックバック


この記事へのトラックバック一覧です: その後のSDカードPCMプレーヤーと機能追加:

« 実装版SDカードPCMプレーヤーが動いた | トップページ | PCMプレーヤー続き: どのSDカードにも頭出し位置を記憶させる »