ポータブルミュージックプレーヤーを作る(その2)
再生中の様子の動画はFC2動画をクリック。(手ぶれがひどいです)
2個目の公開なのに5号機とは?
今回も定番の秋月電子通商で低価格で販売されている「MP3デコーダー VS1053b」を使ったポータブルミュージックプレーヤーを製作します。しかし、なぜこんなに安いのか謎です。
VS1053bは皆さんも御存じの様にMP3形式のデータ以外にも、WMA/AAC/MIDI/Ogg Vorbis等の様々な形式のデータを再生し、リアルタイムでのエンコード機能を備えている高性能なコーデックICです。
ちあきさんのホームページでVS1053bのデータシートを日本語訳したものがありますので非常に開発がスピーディに行えます。
当初は、前作の基板を両面基板にして、表示パネルに4D Systemsのシリアル小型OLEDモジュール1.7インチ(1,1000円)をUSARTで接続してケースに見合った大きさの表示パネルで開発を進めていたのですが、 最終段階で私の不注意からOLEDモジュールを破損してしまいました。
そこで、スイッチサイエンスから、同じOLEDモジュールを購入したのですが、パネルに傷があり、垂直方向に1本の線が常に表示されてしまう不良品が届いてしまったので交換を申し出たのですが、在庫切れの為、メーカーからの入荷待ちとの回答を頂きました。
1カ月程待ったのですが、入荷の見通しが立たないので、キャンセルして他のパネルを探していると、aitendo@shoppingで販売している1個900円のTFT液晶モジュール(128×128,1.44")[ZY-FGD1442701V1]が良さそうなので、これを使うことにしました。
この表示パネルを使用することで、大幅なコストダウンができました。表示もとても綺麗で満足です。
色々と試作をしているうちに、5号機となってしまった訳です。
システムブロック図です・・・
本来ならSPIバス上には複数のデバイスを接続できるのですが、このマイコンは3チャネルのSPIポートを装備していますので、各SPIポートに1個、デバイスを接続します。
こうする事で、各デバイスのバスの奪い合いに関与しないプログラムが作れますので楽だと思います。
液晶パネルのバックライトは、Timer0を使用してPWM制御を行い輝度を変更できる様になっております。
電源は、リチウムイオン電池又は、リチウムポリマー電池を使用して、レギュレータにより3.0Vと1.8Vの電圧を生成します。
充電制御にはMAX1555を使用します。このICは、最近の制御用ICよりも穏やかに充電を行ってくれるので電池には優しい部類だと思われます。
また、液晶用のバックライトはMAX1724を使用して3.3Vの電圧を生成します。
MAX1724は出力電圧が、設定値より高めに出るので、システム用の電源としては不安定で使えませんでした。
日本語フォントやイメージデータの保存には欠かせないフラッシュメモリには、SPI接続型のシリアルフラッシュメモリ(2MBytes)を使用しました。
前作ではOLEDモジュールに搭載されているμSDカードに文字列のテロップ表示用の大容量ファイルを保存しておりましたが、今回のフラッシュメモリには入りません。
AVRでテロップ表示用のデータを計算しながらLCDに転送するようにプログラムを書き換えて、小容量のフラッシュメモリで動作するように改良しています。
この処理が重いために、無圧縮のWAVファイル再生でデータ転送が間に合いません。
面倒なので拡張子が*.wavのファイルは全部非対応とします。音楽プレーヤーとしては改悪ですね・・・
VS1053bにはライン入力機能があります。
FMラジオを聴く習慣は無いのですが、とりあえずFMラジオモジュールをライン入力に接続しました。
このモジュールはSPI接続とTWI接続の2種類をサポートしているのですが、AVR側のSPIポートは全て使用してしまいましたのでTWIへ接続して制御します。
新しいモジュールに実装されているチップはAR1010ですが、AR1000の制御方法で問題なく制御ができる様です。私が使用したモジュールはAR1000が実装されていました。
両面基板を自作してみました・・・
水魚堂オンラインのMinimal Board Editorを使用してパターンを作成しました。
前作では片面基板で製作して、ノイズを抑える対策に苦労しましたので、ノイズ対策を兼ねて両面基板でチャレンジしました。
PKクランプとちびライトという非常に非力な環境での作成ですが根気良く作業を行えば、かなりの精度の基板が作れます。
VIAの形成には、オートポンチと0.6mmすずメッキ線は必需品です。スルピンキットのピンはとても高価(VIA1個12円)なので、すずメッキ線でコストを大幅にカットします。
サンハヤトの感光基板の型番が変わり、感光剤の品質が良くなった為か露光後にフィルムが基板に貼りつく現象が発生しなくなりました。前の型番では、フィルムを外すときに感光剤まで一緒に剥離してしまう事がありました。(フィルムの乾燥不足も原因の一つでしたが・・・)
感光剤のムラも少なくなり、精度が高い基板が作れる様になっています。
メイン基板
|
|
ドリル作業完了直後。ハンダ面
基板サイズ 54mm×43mm
|
ドリル作業完了直後。部品面
細かい部分までシャープに仕上がっています。
|
|
|
ハンダ面
部品実装後
|
部品面
部品実装後
|
電源/SDカード基板
|
|
ハンダ面
部品実装後
電池を固定する金具を取付けてあります
|
部品面
部品実装後
|
ケースに入れてみました・・・
今回はタカチ電気工業のSW-75Bに入れてみましたが、SW-65でも余裕で入りそうです。
前回使用したLM-100Cより小さく見えますが厚みがありますので、容積は殆ど変わりません。
SDカード用/液晶用/ジョグダイヤル用/USBコネクタ用の角穴を開ける作業だけで半日かかりました。
簡単に綺麗な加工ができる工具があれば良いのですが・・・
|
|
メイン基板をケースに入れてみました。
ホットボンドまみれです。
|
完成!!
|
ファームウエアの作成
AVR Studio 4.18 Build692 + WinAVR 20100110で作成しております。
・VS1053bの制御
前作のソースを元に多少の改良をしています。
MIDIファイルの再生時に、DREQの状態を見ながらデータを送信し続けると、SCIの実行に遅延が生じます。
これは音量調整・ポーズ・曲送り等で操作性を悪化させます。
SDIのバッファの残量を予測しながら少量ずつデータを転送することでスムースにSCIコマンドが実行可能となりました。
日本語訳のデータシートのおかげで開発は楽になりました。膨大なドキュメントの和訳を行った「ちあき」さんに感謝いたします。
・ファイルシステム
フリーで公開されているFatFs 0.06を使用して、SDカード内のファイルを読み出します。
0.07にバージョンが上がって、LFNに対応しましたが、私が試した範囲では、f_open()関数にSFNで指定するとオープンできない症状で
悩まされました。
どうやら、0.07でLFNを使用する場合は、システム全体をUNICODEで設計しないとうまく使いこなせない様です。
今回のマイコンでは、容量的に厳しいので、0.06にLFN取得関数を追加して、内部ではSFNを使用して表示時のみLFNを使用する様な
仕様としております。
・液晶パネルの制御
初期化のパラメータを設定できれば、何も難しいことはありません。
ドット毎の描画を全てマイコン側で行う為、殆どの時間がグラフィック制御に取られてしまいます。
初期化のパラメータ次第で、画面を90度単位で回転させて表示する事ができますので、PCB上の部品レイアウトが楽です。
シリアルフラッシュメモリをフレームバッファとして、背景と表示イメージの半透明合成表示を実現しております。
・シリアルフラッシュの制御
日本語訳のデータシートを見つけることができなく、原文のデータシートと格闘すること数時間、何とか動作する様になりました。
シリアルフラッシュ内に簡易的なファイルシステムと、背景画像キャッシュを構築しています。
・FMラジオモジュールの制御
前作のソースをそのまま使用しておりますが、RSSI値の取得部は「ゆき」さんの「FMラジオキット FK1」を参考にさせて頂きました。
「つれづれ日記」は毎日楽しみに拝見させて頂いております。
・日本語フォントの制御
FONTX形式のファイルを何の加工も行わず、フラッシュメモリに転送して液晶パネルに表示しております。
「フォント・サイロ」で公開されておりますフォント「丸ゴシック体『秋葉原16』」「細ゴシック体『小伝馬町12』」の2つを使用させて頂きました。
システム内部はS-JISで構築しており、S-JISで表現できないUNICODEが出現した場合の動作はまだ確認しておりません。
・再生ファイル内の曲情報(TAG)の取得
MP3 形式のファイルは、ID3V1 / ID3V2(~2.4)の両方に対応しております。
ネットを検索すればTAGの構造について沢山の情報が得られ、比較的簡単にTAGを取得する関数を作成可能です。
文字コードはUTF-16(LE/BE)・UTF-8・S-JISを自動判別します。
WMA 形式のファイルは「scienceQ.com」を参考にヘッダの解析を行っております。
一度、構造が分かってしまえば、MP3より簡単にTAGを取得する関数を作成可能です。
文字コードはUTF-16(LE/BE)・UTF-8・S-JISを自動判別します。
MIDI 形式のファイルは「SMF (Standard MIDI Files) の構造」を参考にしました。
ファイルの先頭から「メタイベント」を検索します。
可変長の数値を扱っているのが面倒です。
文字コードはUTF-16(LE/BE)・UTF-8・S-JISを自動判別します。
Ogg Vorbis 形式のファイルは「だるだる団」さんとメールのやり取りさせて頂き、暫定でTAGの取得に対応しております。
2010.05.08 正式対応しました。
Ogg Vorbis形式のTAGはUTF-8が標準なので、UTF-8の対応をこの時点で行いました。
文字コードはUTF-16(LE/BE)・UTF-8・S-JISを自動判別します。
本機の主な仕様
1.再生可能ファイル拡張子
*.mp3 MPEG1,2のオーディオ・レイヤIII(CBR,VBR,ABR)
*.ogg Ogg Vorbis
*.aac MPEG4/2 AAC-LC(PNS)およびHE-AAC v2(Level3)(SBR,PS)
*.m4a *.aacと同様
*.wma WMA 4.0/4.1/7/8/9の全プロファイル(5~384kbps)
*.mid General MIDI 1 スタンダードMIDIファイルフォーマット0
*.smf *.midと同様
2.フリーのファイルシステム「FatFs R0.06」を使用し階層ディレクトリに対応
・8.3形式のフルパス名長で120byte程度まで認識可能
・SDカード/SDHCカードに対応
・FAT16/FAT32に対応
・ディレクトリ辺り、100個までのアイテム(再生ファイル・ディレクトリ)を管理
・アイテムを8.3形式のファイル名でソート
・ファイル名をLFNで表示
3.TFT液晶ディスプレイを搭載
・フリーの漢字フォントを使用し日本語の表示が可能。(S-JIS / UTF-16LE/UTF-16BE/UTF-8に対応)
・周波数分布のグラフィカル表示機能(ピークホールド機能有り)
・再生中のファイルのタグ情報から曲名とアーティスト名を表示(MP3/WMA/MIDI/OggVorbis)
タグの取得がサポートされないファイルは、ファイル名とディレクトリ名のLFNを表示
画面に表示しきれない曲名・アーティスト名はテロップ表示。
・再生ディレクトリ内にある背景用イメージ(128dot×128dotのBMPファイル)を壁紙として表示可能
4.ジョグダイヤルを使用した操作
・音量のアップ・ダウン
・設定画面でアイテムの選択
・一時停止中でファイルの再生位置の変更(シーク)
・FMラジオモードで0.1MHz単位の周波数変更
5.節電機能
・分単位で設定可能な自動電源OFFタイマー機能
・秒単位で設定可能な一定時間ユーザーによる操作が無い場合、画面輝度を下げる機能
6.FMラジオ受信機能
・SDカードに記録された放送局リストを使用しての選局
・手動による100KHzステップの周波数合わせ
・自動選局
7.レジューム機能
・前回、電源OFFした時点で再生されていた曲の途中から再生
本機よりMIDIファイルの一時停止・レジュームにも対応(再生中のシークは不可)
8.DSPの機能を利用したエフェクト機能
・低音(BASS)および高音(TREBLE)のコントロール機能
・音場拡大機能
9.その他
・再生モードに、通常再生の他にファイルリピート再生とディレクトリリピート再生を用意
・リチウムイオン電池(740mAh)による駆動時間の向上(11時間程度)
※リチウムポリマー電池(1000mAh)を使用時は16時間程度の連続再生となります
|