MP3プレーヤー...page.1/12
はじめに...
MP3 とは、MPEG 1 Layer-3 Audio 規格のことであることは既にご存知のことでしょう。通常1曲あたり約50MBもあるWAVEファイルをMP3に圧縮することで3〜5MBのサイズとなり、ファイル管理や持ち運び、インターネットを通じての交換が容易になります。音質も転送速度によりますがCD並みのクオリティーと言われています。
ここではメディアにSDカードを使って、MP3ファイルを再生する装置を作ります。
誰でも簡単に完全自作のMP3プレーヤーを作れるように詳しく紹介したいと思います。
紹介ページは全12ページありますが決して難しくないです。
スピーカーアンプを内蔵した据え置きタイプなので部屋や小さな店舗のBGM装置として使えるでしょう。
ポータブルなMP3プレーヤーを作りたい要望もあるかと思いますが、紹介しても成功率はぐっと下がることが懸念されますので、一度当回路を製作し、MP3を再生できる感動を得てからこれをリファレンス機として次に小型へ挑戦してほしいと思います。
当然、腕に自信のある方は小型に作っても結構です。
小型化のヒントはpage.11/12に記述します。
概要
SDカードに入れたMP3ファイルを再生します。MPEGオーディオデコーダーにVLSIソリューション社のVS1001Kを用います。全てのコントロールはマイクロチップテクノロジー社のPIC18F252により行ないます。
VS1001Kの音声出力はヘッドホンを充分駆動できるLSIですが、今回はナショナルセミコンダクター社のオーディオアンプLM380Nによりスピーカーを駆動します。
LM380Nは電源電圧によりますが1Wの出力が得られます。1WもあればBGMとして不足はないでしょう。
電源には12VのACアダプターを使います。
SDカードのフォーマットはパソコンで扱えるFAT16です。尚、音楽CDからのリッパーやMP3エンコーダーについてはここでは説明はしません。
また、ファームウェアについての説明も長文となるので省かせていただきます。
ファームウェア
ファームウェアは2006.05.20にサブディレクトリに対応するよう更新しました。 回路図・作り方に変更はございません。 既に作られた方も是非ご利用下さい。 ファームウェアHEXファイルは最終項(page.12/12)にございます。 |
MP3プレーヤーを製作する際はコントローラーの選択に迷いました。インターネットで多くはAVRを使った例が殆どでした。確かにAVRは命令実行速度は遥かにPICより上ではあります。しかしながら電子工作をされる多くはPICに使い慣れているのではないだろうかと思いました。
PIC18Fシリーズではクロックを最大40MHzにできますからAVRに例えると10MHzのクロックに相当し、またSRAM容量も多く、何とか動くのではと思い、PIC18F252を前提に進めました。
PICで駄目だったことも考えてAVRライタも既に作っていましたが...
プログラムはCCS社のPIC18シリーズで使えるCコンパイラ(PCH)を使いました。
CCS社のCコンパイラは独自の組込み関数が多く、PICの持つ機能を簡単な記述で使えて便利です。もうアセンブラには戻れないといった感じです。
ところで、MP3のプログラム完成までに、かなり時間がかかりました。
仕事から帰ってきてビール呑んで野球を観ながら1日約2〜3時間考えて約3ヶ月です。仕事の時でも何処まで進んだか、次は何の関数を作るかなど時々DRAMみたくリフレッシュ(忘れないように)していました。
SDカードからの読み込みで時々エラーとなった時は悩んで2週間のブランクがありました。PICの持つSPI通信機能については何度も試みても失敗したので結局はビット操作してマニュアルでSPI通信としました。
途中でSDカードやVS1001Kが逝かれることにも数日悩みました。結局は3端子レギュレーターの発振によるもので、入力の電圧がそのまま素子に加わっていた為でした。
プログラムが何処まで正常に進んだかのデバッグについては、途中でEEPROMに自己流の暗号を書き込むようにして、後でPIC書き込み機でリードして確認するといった方法や、プログラムの途中に「ピッ」と音を発するサブルーチンを入れて音の有無や何回鳴ったかで確認しました。
実験ボードに取り付けた丸ピンICソケットからPICを取る際は指で軽く抜ける程度まで何度も抜き差ししています。
より多くの方に完全自作のMP3プレーヤーを作ってほしいと思います。
そこで、FATシステムやVS1001K、SDカードの使用例など大変に勉強・参考となったサイトを紹介致します。
紹介するサイトが存在しなければ、完成に至らなかったでしょう。
FAT領域関数は、ゆきさんのソースをPICで(CCS-Cコンパイラで)使えるようにデータ形を換えた程度のものです。
ゆきさんの書かれたソースはスマートで理解しやすいです。自分なりに考えても結局は合理的なゆきさんのソースになってしまいます。
BSDライセンスとして許可して下さったゆきさんには大変に感謝致します。
ゆきの研究室 | 電子工作の項でAVR(ATMEGA8)を使ったMP3プレーヤーを紹介しています。 個人でプログラム開発等の仕事をしているようです。 |
Kunioのホームページ | AVR(ATMEGA8)を使った特徴あるMP3プレーヤーを多く紹介しています。 FATについて大変勉強させて頂きました。 |
Noe(NaveYakan)'s Page | PIC16Fを使用し、SDカードの読み書きについて実験されています。 SDカードの制御について大変参考となりました。 |
回路図
全てはPIC18F252に書き込むプログラムで動作しますので回路図は絵解き図と照らし合わせて配線のチェックにも利用して下さい。
回路の説明
PチャネルMOS-FET:2SJ377は電源スイッチの役割をします。上記回路図においてはゲートがGNDレベルになると回路に通電されます。
SW1を押下するとMOS-FETのゲートはダイオード:Diと抵抗:100Ωを通してGNDに接続されるので回路に通電されると同時に、SW1を押下したことでフォトカプラもONされ、PICに対してSW1が押下されていることを認識させます。
MOS-FETがONし、回路に通電されるとPICのプログラムが開始され、16ピンにHレベルを出力し、トランジスタ:2SC1815を介してMOS-FETのゲートをGNDレベルにして通電を保持します。
SDカードの有無の確認、FAT16フォーマットの確認、MP3ファイルの有無の確認をした後にMP3ファイルを再生します。
PICが電源OFFする事の確認をすると、16ピンをLOWレベルとし、トランジスタ:2SC1815を介してMOS-FETがOFFとなり回路への通電が遮断されます。
スピーカーアンプ:LM380Nではノイズ防止のため、電源ラインに抵抗:4.7Ωを接続しています。この抵抗がありませんとパルス性ノイズがスピーカーに混入します。電源に抵抗:4.7Ωが入ることにより音に影響がないか思われるかも知れませんがLM380N直近に接続した470μFで充分補ってくれます。