MP3プレーヤ第6作

VS1033によるMP3プレーヤ。媒体としてUSBメモリを使用。

更新: 2016/04/28


実験1

インターフェース誌2014年12月号の特集第8章の記事に従い、PICからUSBメモリの読み書きができることを確認した。

実験2

上記記事にマイコン用ファイルシステムFatFsを組み合わせてUSBメモリ上のMP3ファイルを再生できるかテストした。
MP3デコーダはSparkfunのVS1033ボード(SFE-BOB-10608。残念ながらこのボードは廃番になっている)。

方針とブロック図

  • 実験2で再生できるのは低ビットレート(32kなど)のMP3だけで、中ビットレート(128kなど)では無理だった
  • しかしMP3ファイルを空読みするだけならば十分な速度で可能である。
  • USBメモリの読み出しとMP3デコーダの制御を1個のPICで実行するのは負荷が大きすぎるようだ。
  • そこでPICを2個使い負荷分散してみることにした。(実験なしで製作するのは賭だった)
結果的に最も苦労したのはPIC間のSPI通信だった。

回路図

  • VS1033ボードに関してはこちら
  • D-GNDとA-GNDとを切り離し、3端子レギュレータの所で1点アースしている。
  • VS1033の出力まわりの回路は、VLSI Solution社のこちらの情報を参考にした。

プログラム

  • PIC18部分のプログラムはCCS社のPIC18用コンパイラ(PCH)で開発した。
  • PIC24部分のプログラムはXC16で開発した。
  • 両者を含んだMPLABX IDEのプロジェクトファイルはこちら。雑誌記事から取ったソースコードを勝手にアレンジして公開しちゃってますが。
  • 左図はPICのピン割り当て。

仕様

  • ランダム再生ではディレクトリをランダムに選択して、その中のMP3ファイルをファイル名の順に再生する。
  • 選択再生ではディレクトリツリーをたどっていき、MP3ファイルの存在するディレクトリを選択するか、 その中のMP3ファイルを選択して再生する。
  • ディレクトリツリーをたどるのにUSBメモリ中のファイルシステムを直にたどるのではなく、ディレクトリ構造を記述したファイルを使う。
  • FatFsは 8.3形式ファイル名で使う。LCDに表示する名前などはアプリケーションで管理する。
  • ディレクトリ名・ファイル名を整形し、ディレクトリ構造ファイルなどのデータファイルを生成するプログラムをWindows上で作成した。 (VC++2010で作成。USBメモリのルートディレクトリでDIRMP304.exeを実行する。実行後のディレクトリ構造のイメージ。データファイルのファイル構造。)
  • USBメモリはTOSHIBAの64GB(TNU-B064GK)の場合だけ動作確認した。EPはIN=1, OUT=2をハードコードしている。

実装

  • ケースはTAKACHIのSY-150A

インプレッション

  • USBに関してほとんど理解しないまま完成してしまいました。インターフェース誌に感謝です。
  • SDカードと比べてUSBメモリはどのPCでも読み書きできるので便利です。
MP3プレーヤのページに戻る トップページに戻る