« 2009年2月8日 - 2009年2月14日 | トップページ | 2009年2月22日 - 2009年2月28日 »

2009年2月15日 - 2009年2月21日の1件の記事

2009年2月16日 (月)

ブレッドボード上のLCD版SDカードPCMプレーヤー完成

LCDを動かすのにまた一苦労(2/13/09)
 実装に必要な部品をすべてブレッドボードに載せたリニアPCMのプレーヤーが遂に完成した。2行づつ表示するロジックは結構難しかったが、それより時間と手間がかかったのはタクトスイッチの制御の方であった。中々安定しない。試行錯誤の末、押したスイッチが完全に離れるまでスイッチルーチンから処理を外に出さないようにすると、これまでのおかしな現象はピタリと止まった。最初からこうすれば良かったのである。人間相手の制御は、下手な小細工をするより無骨にやるほうが良さそうだ。特にピンチェンジ割込みは立ち上がりエッジでも立下りエッジでも割込みが起きる。管理が難しい。

 LCDへの換装にかかる。Mega328のI/Oピンはもう連続したピンが空いていない。ピンが連続していなくても動くLCDライブラリーをこのあいだ開発したばかりだが、ばらばらにアサインするとあとの確認が大変なので、タクトスイッチに割り当てていたところを引越し、データピンくらいは連続するようにする。クロック20Mhz用にWAITループ(初期設定時はビジーフラグが動かないので)を調整し、9本のケーブルを接続する。ここはいつも接続間違いをするところで慎重に何度も確かめながらブレッドボードに結線。よし出来た。

 とりあえずスタート表示だけをLCD出力に換え、電源オン。LCDは何の反応も示さない。あれえ何処がおかしいのだ、と電源を確かめて愕然となる。このあいだ実装に向けレベルシフターをはずして、全部3V駆動にしたのを忘れていた。しまった、負電源はまだ組んでいない。LT1144を組めばすぐ出来るのだけど、必要な10μFがちょうど切れている。50とか100μFはごろごろあるのだが、何故か10μFだけがない。50μFでも問題ないとは思うがスペック外だ。気持ちが悪い。

 こういうときの非常手段、電池に頼る。実験用のLCD基板には幸いコントラスト調整用のVRがついている。ボタン電池のソケットを急遽、基板にハンダ付けしコントラスト端子に接続する。うむ、-2Vに出来る。ブレッドボードにサイド接続する。おーし、LCDに、なにやらゴミキャラクターが出たぞ。しかし、表示のところでハングアップして先に進まない。

 何度も接続を確かめる、間違いない。しかしこの現象はデータラインの接続違いの疑いが強い。この前もそうだった。最初に作った色別のコードのデータライン図と何度も確認するが間違っていない。MCUのピンの順番が逆順になっていることもあるのでこれも確かめる。うーむ、間違っていない。これはどうしたことかと思いあぐねていたとき、ふと基板を裏返して見た。Lcdpcmplayer1

 何と、何と、表の接続コードと色が違うではないか。こちらはハンダ付けされていて換えようがないが、接続コードの先はピンヘッダーなので差し替え可能である。そう言えば思い出した。この前、やっぱり接続間違いがあって、ピンヘッダーの方を移動させたまま、元へ戻していなかったのである。またもお馬鹿な間違いで時間を無駄にしてしまった。

 正しく接続すると事もなくLCDは表示された。胸をなでおろす。これまでUARTに出していたxatoiの関数をすべてLCDに移し、細かい調整を行って、ついにLCD版の実装が完成した。2行でもそこそこ流れがわかるし、逐次演奏にはこれで十分である。リチウム電池をブレッドボードに移し、写真をとる。電池駆動なので持ち運びが出来る。ブレッドボードを居間に持ち込み家族に自慢する。音が良いことだけは感心してくれた。まるで苦心の工作が出来た小学生のはしゃぎようと変わらない。やれやれ。Lcd_pcmplayer

 久しぶりの成功の余韻に浸る。この前、フィルムコンデンサーを買ってきて、LPFにしたら(2000pF カットオフ周波数8khz)、格段に音が良くなっている。これまでの緊張感のある、とげとげした音が、まろやかな穏やかな音に換わった。小さなスピーカーでは殆ど分からないが、ヘッドフォンだとその差が良く分かる。聴いていて気持ちが良い。

部品箱を漁っていたら、この前のイーサネットドライバーの予備の部品袋からタンタル10μFが2つ見つかった。早速、LT1144を組み込む。簡単に負電圧が出た。電流を測る。0.46mA。こいつにとってはゴミみたいな電流だろう。少しもったいないか。音には全く影響がない。オシロで確かめる。立派な直流だ。

 今のところ音で気になるのが電池駆動のとき、ごくわずかだがビート音がするときがある。決まった曲(ファイル)だけ(5Vのときはしない)なので余り気にならないが、いずれは直さないといけない。それと3Vでは明らかに音の大きいところが歪みはじめた。今は出力直前にVRを入れているがオペアンプ前に入れて、もう少し本格的なLPFを入れてやる必要がある。さあ、いよいよケースに組み込む本当の実装が待っている。

連続演奏機能は簡単だった(2/14/09)
 こういうプレーヤーでは定番の連続演奏や、ランダム演奏などの付加機能である。最初は、全く別のコードを書いて、この機能を作るつもりだったが、閃いた。折角オブジェクト指向とか言って、凝ったプログラムにしたのだ。今のままで、次々に曲のファイル番号をそこへ与えていけば連続演奏になるのではないか。調べてみたら簡単に出来そうだ。スイッチの押されるのを待つところで、番号を増やし、スイッチ待ちをバイパスしてやれば良い。

 うまく行った。再生中に連続演奏である表示まで含めて、10ステップ要しないで出来た。この機能の実現でプレーヤーは急に実用的なレベルに近づいた感じがする。オブジェクト指向のとき分けたブロックBとブロックCはメインルーチンに吸収したが、これも分けて関数などにしたほうがもっと合理的で、今度の追加機能開発もさらに楽になることがわかった。

 ケースへの実装に入る前に、現在の仕様をまとめてみた。

SDカード非圧縮PCMプレーヤーLCD版

  • 入力:         SDカードに入ったWAVファイル(SDHC可能)
  • 再生可能WAVファイル: 16/22.05/44.1khz モノーラル/ステレオ 8/16ビット
  • 最大フアイル数:    255(カウンターを2バイトにすれば65535)
  • 出力:         ヘッドフォンステレオミニジャック
  • 操作:         電源スイッチ、タクトスイッチ3ヶ
  • 表示:        16字×2行 LCD
  • 電源:        3.7Vリチウムイオンバッテリー
  • 機能:

・通常演奏_ディレクトリの最初から、タクトスイッチでファイル名を上下スクロールさせて表示し、決定ボタンにより演奏開始。

・連続演奏_タクトスイッチの上下ボタンの同時押しにより、選択時のWAVファイルから連続再生し、ディレクトリの最後まで行くと最初に戻って演奏を続ける。中止は、再生中の決定ボタン長押し(1秒以上)。

・演奏中断_  再生中に決定ボタン押下。再開は同じボタン押下。

・演奏中止_  再生中に決定ボタン長押し(0.5秒以上)

・ランダム演奏_ (計画中)

 SDカードのI/Oエラーは発生すると、エラー表示して一旦止まり、スイッチを押すとディスクのマウントから再開することにして電源監視は入れないことにする。入れるとDAC再生中にも10msの割込みをかけておかねばならず再生に影響が出そうなためである。

アナログの方はボルテージフォロワーの入力に2000pFのフィルムコンデンサーを入れ、LPFもどきになっているだけで、もう少しまともなLPFにすることが必要だ。音が割れるのは、オペアンプ前にVRをつければ解決するはずだ。現在のVRは千石で売っていた¥80の安物の平型2連のもので、左右のバランスが悪く、動かすたびに左右が振れる。これも換えてやる必要がある。Vr10k

 オペアンプの出力のところだけは、このあいだ音響用の無極電解コンデンサー(MUSE)をカプリングコンデンサーにした。気のせいか、これで音が良くなったような気がする。電圧が低下したときのビート音も解消してやる必要がある。アナログはまだまだ改善するところが沢山ありそうだ。

 ケースは秋月の一番小さいケースが良いように思うが、これに全部入るかが課題である。電池の充電は外でやるので、簡単に電池が取り外せるようにしないといけない。今度は工作の腕が問われる。

 ランダム演奏機能は実装するか迷っている。自分が余り使ったことがないのと、まともにやろうとすると最大曲数を255とした場合、メモリが足らなくなる。と、ここまで書いてまた閃いた。EEPROMを活用すれば、何か出来るのではないか。Mega328なのでフラッシュならまだ有り余るほどあるし、1KBもあるEEPROMは全く使っていない。これは面白くなってきた。

 それはともかく、ケースへの実装は時間がかかりそうなので、ここでとりあえずLCD版のソースコードと回路図を公開することにする。回路図のアナログの部分はこの前公開したものと殆ど変っておらず全く自信がないが、ソースコードの方は参考になるかもしれない。Sd_pcm_player_lcd

オブジェクト指向などと言っていた割には、単にファイルリストを作る部分だけが独立しているだけじゃないかとお叱りを受けるかもしれないが、開発はコンセプトが大事なので、要はデバッグしやすい構造になっていれば良いのだ。と、まあこんな書き方をするのは年寄りの負け惜しみで、素直に白状すれば最初の意気込みどおり書けなかっただけのことである。

公開した回路図で動くソースコードをAVRstudioのプロジェクトファイルとして以下に置きます。解凍したフォルダーをこのままAVRstudioで起動させればコンパイル可能です。

「SDPLAY328.zip」をダウンロード



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

« 2009年2月8日 - 2009年2月14日 | トップページ | 2009年2月22日 - 2009年2月28日 »