RXマイコンによるMP3プレーヤ

RXマイコン(インターフェース誌2011年5月号付録)によるMP3プレーヤ。試作の音質が満足できるものだったので製作としてまとめることにした。

更新:2011/07/31, 2011/08/02


仕様

  • 元プログラム(6月号)のようなシャッフル再生ではなく、ファイル名の順に再生する
  • SDカード内のサブディレクトリは1階層に限定する(1ディレクトリ=1アルバム のイメージ)
  • 曲目の前方スキップに加えて、後方(前の曲への)スキップ機能も付ける
  • ディレクトリの前方/後方スキップが出来るようにする
  • 7セグメントLED2桁でディレクトリ番号、曲目番号を表示する
  • 最後に再生した曲のディレクトリ番号と曲目番号をSDカードに保存し、次回起動時そこから再開できるようにする。
ざっと、こんな感じです。

左の写真:ブレッドボードでLEDの駆動テスト

製作-1

基板は改めて製作しました。

製作-2

  • ケースはタカチのYM-150
  • 電源は+5Vを外部から供給
  • SDカードソケットはサンハヤトのCK-35
  • ケース前面のプッシュボタンは、PLAY/PAUSE用1個、曲目スキップ用2個、ディレクトリスキップ用2個、の計5個
  • 7セグメントLEDはTLR322。1個で2桁表示できる。ダイナミック駆動のためのトランジスタは2SC1815Y
左の写真は製作途中ということで、リセットスイッチをぶら下げています。

プログラム

元プログラムを改造して作ったので全体を公開するのはどうだろうか、ということで要点だけ記します。
  • 元プログラムのshuffle_play.cに代えてnew_play.cおよび対応するヘッダファイルnew_play.hを作った。新しく作ったソースファイルはこれらだけです。関数main(player.c)でshuffle_play()に代えてnew_play()を実行する。
  • 関数key_event(key_ctrl.c)のプッシュボタンの処理を変更
  • プッシュボタンの押下検出は1msのタイマイベントで行っているので、そこにLEDのダイナミック駆動の処理も加えた。関数excep_cmtu0_cmt0(cmt_ctrl.c)
  • SDカードへの書き込み機能を付けたので ffconf.hの定数_FS_READONLYを 0 にしなければならない。
  • またファイルのタイムスタンプ更新のための関数get_fattime()を用意しなければならないが、時計を持たないのでmp3ファイルのタイムスタンプをそのまま返しています。
  • ユーザスタックについて雑誌記事にしたがって見積って0x2200に変更。割り込みスタックは0x100のまま。

完成&感想

  • 4GBのSDカードを使ったところディレクトリ数が80にもなってしまった。さらに大容量のカードを使おうとするとLED2桁では当然足りません。TLR322を2個使って4桁表示できるようにしたかったところです。
  • 上記と関連して、ディレクトリの選択方式として当初は前方/後方スキップ方式で実装しましたが、それだと目的のディレクトリにたどり着くのに何十回もプッシュボタンを押さなければなりません。
    結局、2つのプッシュボタンの1つでディレクトリ番号の1桁目を、もう一つで2桁目を設定するようにプログラムを変更した。
    曲目の選択についてはCDの途中から聴くことはあまりないので前後のスキップのままです
  • 音質は(個人的には)充分満足できるものです。(次の製作ネタとしてVS1011を入手済みなのですが)

左の写真の様な一覧表を作っておくことになります。


トップページに戻る