新MP3player製作(ニャンプレーヤ) 最終更新05.7.18
このページに対する質問・ご意見等は電子工作他の掲示板にお願いします。
ちあきさんが、ヘッドホーン内蔵型の極小のものを作っているのをみて久しぶりに、MP3playerを作ってみました。
実用機3以前から変更点と特徴
◇デコーダチップ VS1001→VS1011
データ通信にSPIモード(new mode)を使用し、回路と制御を簡素化。
IC自体も安定性がましたようです。
◇ATMEGA8 DIP28→ TQFP32
ちあきさんにはかないませんが、少しでも小型化を目指しました。
変換基板は手ごろなのもをネットで見つけました。アイテムラボ
◇制御
SDカード、VS1011ともSPI制御なのでそれに伴って通信手順変更
VS1001:SPIをSDに固定、1バイトずつ読み込みVS1001に送信(SRAMにFATをキャッシュ)
VS1011:SPIを切替えるため、SDから1セクタ(512バイト)分をSRAMに読込み、SRAMからVS1011へ送信
SPI速度は、VS1011の相性から2MHzに設定。(4MHzだと上手くいかない)
◇ケース
リサイクルショップで見つけた、ネコ型のおもちゃに入れてみました。(52円也)
中に入っていたモータ、基板を抜いてそこに押し込みました。単5が2本入るケースも付いてちょうどいいです。
紐をつけて首にかけようと思ってます。
これは、ネコではなくてポケモンにでてくる カビゴンらしい。 某所でつっこまれ初めて知りました。(汗)
あとは、基本的に実用機3と同じなので、もう少し改良したい。
サブディレクトリ対応、演奏順曲名ソート 05.05.07修正追記
メディアが大容量になって曲数が多くなると選曲が大変なので、以前からサブディレクトリに対応したいと思っていたが、
頭がついていかなかったというか食わず嫌いだったし、解説も少ないので自分なりに勉強しようやく基本をマスターしたので
それをまとめました。 → FATについて2
これを基本に、ルートディレクトリおよびその下のサブディレクトにあるMP3を演奏できるようにしました。
また、ディレクトリ・ファイル名(先頭2バイト)でソートした順に演奏するようしました。今までは書き込み順だったので、ファイル
転送時、ひとつずつ順番にやらないといけなかったので面倒でしたが、これでファイル(ディレクトリ)名に番号等をつければ
複数やフォルダー単位に転送して、書き込み順がくるっても、名前順に演奏されます。
◇演奏手順
@ルートディレクトリ上のサブディレクトリおよびMP3ファイルを検索する
・サブディレクトリが見つかった場合は、そのディレクトリの(先頭)クラスタNoおよび、ディレクトリ名先頭2文字を保存
・MP3は曲数のみカウント保存
Aサブディレクトリをディレクトリ名でソートした順に、クラスタNoを並び替え保存
Bディレクトリ上のMP3ファイルを見つけエントリNoおよびファイル名先頭2文字を順じワーク配列保存
(ディレクトリの順番はルートに続き、Aでソートした順)
CMP3ファイルをファイル名でソートした順に、エントリNoを並び替え保存
ソートは、ファイル名を他と比較し順番を求め、その順番に対応した配列の場所(既にデータがある場合(同順位)は老番側にシフト)に
エントリを保存する単純な方法です。(下の図参照)
DエントリNoを保存した配列を順じ読み出し、エントリNoに対応したファイルエントリを読込み、それにより該当ファイルを演奏
(下の20ディレクトリをソートするイメージ)
上の例で通常の演奏順 ルート → 10 → 20 → 30 で、そのディレクトリにある曲をファイル名順に演奏
1曲先送り(FF) ディレクトリ最終曲の場合は次ディレクトリの1曲目 例 20−10 → 30−03
1曲戻し(REW) ディレクトリ1曲目の場合は前ディレクトリの最終曲 例 10−01 → ルート−02
ディレクトリアップ(FF長押) 次のディレクトリの1曲目にジャンプ (最終の場合はルートへ) 例 30−03 → ルート−00
ディレクトリダウン(REW長押) 前のディレクトリの1曲目にジャンプ (ルートの場合は最終へ) 例 ルート-01 → 30−03
ソート用のメモリに制限をつける関係で、ディレクトリ数はルート+最大14サブディレクトリ、ディレクトリのファイル数は最大20
(15×20=300曲)としました。また、ディレクトのディレクトリエントリの検索数上限を処理簡素のため先頭から256(=8192バイト)
としたので、追加削除したファイルが多くごみのエントリが増えた場合、演奏できないファイルができるかもしれません。
(ロングファイルネーム等でで平均1ファイル4エントリ使っても(256/4=)64ファイル分あるので、通常使用では問題ないでしょう。)
演奏モード モード0:ディスク全体1回 モード1:ディレクトリリピート モード2:1曲リピート
モード変更はポーズ中に「ボリュームアップ」キー
首にかけるように紐をつけた。
・細かいバグ修正。
・電池容量低下による停止は、DC/DCの電源側の電解コンデンサ容量アップとパスコン追加で解消。
・SDカードは容量とともに消費電力増えるようで、512MB使用時のプレーヤ全体の消費電力約220mWであり、実用機3以前
より大きい。
・ガビゴンに付属の電源SWを操作SWのコモン側に入れ、操作ロック用に活用。これで、電源off中の誤電源入り、再生中の誤操
作防止になる。LEDのコモンもここに入れ再生中の省エネ。
・バグ修正。7/18
仕様
項 目 |
仕 様 概 要 |
CPU |
Atmel ATMEGA8 TQFP32 8MHz(内部発信回路) |
デコーダ(DAC・DSP) |
VS1011 |
対応フォーマット |
MPEG 1& 2 Layer-3, Layer-3の2.5拡張、VBR対応全てのサンプルレート、ビットレートに対応 |
記録媒体 |
SD(MMC)カード、MMC SPIモード使用、(64、128、256、512MB)にて動作確認 FAT16のみ対応・ロングネーム(VFAT)対応・ルートデレクトリおよび一つ下のサブディレクトリMP3ファイルを演奏、データはパソコン等でメディアに転送しそれを使用 |
状態表示(LED) |
電池電圧を曲間に点滅3Vup5回,~2.8V:4回,~2.6V:3回,~2.4V:2回,~2.2V:1回,2.2V~ 無 演奏モードを点滅で表示(設定時) エラー(起動時点滅後停止) 1回:カード異常、2回:FAT異常、3回:MP3無、4回:MP3異常 |
操作SW |
電源入再生&停止電源切&ポーズ、1曲先送(FF)、1曲戻し(REW)、ボリューム上げ、下げ の5ボタン ディレクトリアップ:FF長押、ディレクトリダウン:REW長押、強制リセット:'ボリューム上げ'を押しながら電源入 |
演奏モード |
全曲1回演奏(速い)、ディレクト繰返し演奏(普通)、1曲繰返し演奏(遅い) モード変更はポーズ中にボリューム上げボタンで設定 ()ないLED点滅速度 曲数制限 ディレクトリ ルート+14、ディレクトリの曲数20曲 |
電 源 |
単5x2本、DC/DC(MAX778L)にて約3.3V、消費電力220mW(at SD512MB)、バッテリ電圧約2.0Vで演奏停止 |
ケース |
ガビゴンのケース |
回路図・ソース |
回路図 ソース hexfile |