● 実験テーマ68

「PIC24F_Bluetooth_MP3プレーヤ EAGLEによる基板化」
(後閑哲也 著「PICで楽しむ Bluetooth・Wi-Fi機器の自作」の記事を参考にP板を設計し、基板屋に外注しました。)

・以下、この実験の顛末記です。

■ 2015.7.23
  ・久々(約1年半ぶり)に、EAGLEを、いじりたくなった。
   たまにやらないと、操作を忘れてしまうので・・・
   題材として、ちょと実用的なテーマが、例の後閑さんの著書(前回購入した、Bluetooth+WI-Fi関係の本)
   に載っていたので、それを参考に、EAGLEでの基板化をしようと思った。
   そのテーマとは、「無線(Bluetooth)によるリモコン式 MP3プレーヤ」である。

   後閑氏は、この記事の中で、MP3デコーダ基板をサブ基板として、PIC24Fメイン基板との、2枚構成
   で作られているが、これを、100mm x 80mm(無償で可能な最大サイズ)内に収めることが出来れば
   1枚構成で済む。
   (まあ、サブ基板にすれば、他に流用出来るという利点はあるが。)
   ざっくりと机上でラフに確認してみたところ、何とか収まりそうな感触である。

   MP3プレーヤは、今迄、何種類が作ってきた。
   その中には、EAGLEで基板化したものもあるので、パーツライブラリは殆ど揃っている。
   ちょっと調べたら、新規作成は、BTモジュール(RN42XVP)用の、10pinソケットコネクタ(ちょっと特殊で、2.0mmピッチ)
   だけなので、割と直ぐに、回路図入力に入れる。


■ 2015.7.25
  ・パーツ配置をラフ画きで確認検討した。
  ・新規登録パーツ:1列10pinソケットコネクタ(2.0mmピッチ)を、デバイス名:FH2-1X10SGBとして作成し
   Myライブラリに登録した。


■ 2015.7.27
  ・回路図入力を済ませた。
   (回路は、基本後閑さんのと一緒だが、VS1011E-TESTピンのプルアップは、DVDDから取った。
   まあ、+3.3V直でも問題ないと思うが、私の実績のある回路図通りにしておいた。
   また、SCLKピンには、以前SPIタイミング(再生音異常)対策で47pを追加したので、念のため
   入れておいた。)
   ネットリストを出力して、ネットチェックを行う。
   繋がってないネットが数点あったが、いずれもボンミスで、パーツのピンに、ネットワイヤがオーバーライト
   していたのが原因だった。
   これは、拡大して見ないと、一見繋がっているように見えるので注意が必要である。
   一応、ERCもしてみた。
   2点ほどエラー(SUPPLY pin VSS overwritten with more then one signal(+3.3V,DVDD))
   があったが、これは、+3.3Vシンボルを流用して、DVDDシンボルとしてネット生成した為に出たエラー
   で、承認できるので承認し無視した。(ネットは問題ない)


■ 2015.7.28
  ・レイアウト・エディタによる、パターン設計に入る。
   パーツ配置は、基本、PIC32MX_MP3プレーヤの時と同様にする。
   新たに設定しないといけない、FIX配置だが、次の2点になるか。
    @ BTモジュール用の、2つの、ソケットコネクタ
    A PICkit2用の、ICPSライトアングル・コネクタ

  ・取付け穴+禁止帯+FIX位置部品の配置まで済んだ。
   (この時点では、R11=10k以外の抵抗が、スモールサイズでなく、標準サイズのものになっていたが
    気が付きませんでした。翌日修正しました。)


■ 2015.7.29
  ・R11以外のRが標準サイズになっていたのでスモールサイズに変更、各パーツ暫定配置後、
   型番シルク表示しているパーツについてスマシュしシルク削除した。


■ 2015.7.30
  ・電源部分の配線終了


■ 2015.7.31
  ・VS1011E周辺配線済

  ・残りのデジタルネットに、オートルータを掛ける。→ 100%_FIN

  ・オートルータ実行後、パターン手直し、DRC_NO_ERRORを確認。
   その後、ポリゴンにてベタグランド設定
・生成後、ピア打ちまで行う。


■ 2015.8.1
  ・シルク整理後、DRC_NO_ERRORを確認


■ 2015.8.2
  ・CAM_Jobs- gerb274x.camにより、ガーバー出力、
   excellon.camにより、ドリルデータ出力を済ませる。
   その後、 ビューワでの確認を行った。
   いつもの、マルツエレックの基板製作サービスへ、P板製作の見積もり依頼出す。
   (ここは、納期1Wで、2万円台の見積もりになることが多いが、アフターサポート+品質は優良)
   手配用の、ガーバー等ZIPファイルも用意した。


■ 2015.8.3
  ・パーツ手配を済ませる。
  ・基板が到着するまで、ファームと、アプリの準備をしておく。
   今回使うPICは、SPIを、2ブロック搭載している、PIC24FJ64GA002 で今迄も何度か使っている。
   MPLAB IDE V8.xx用の、C30コンパイラを使っていたが、今回の、IDEは、MPLAB X なので
   XC16コンパイラを、インストールした。

  ・ここで、MPLAB X IDEの、エディタで、ソースファイルを開いてみた。
   何故か、漢字コメントのところが、文字化けを起こしている。
   X IDEを使うのは、これで2度目だが、前回の、「BT_I/O」プロジェクトの時は、そんなこと
   なかったように記憶しているが・・・(TeraPadで見ただけかもしれない。こちらでは文字化けしない。)

   ソースは、後閑さんオリジナルのままで、技術評論社のHPから、ダウンロードしたものを
   そのまま使っている。
   いろいろ調べた結果、ダウンロードしたソースは、「Shift_JIS」 で保存されておらず、単なる
   「JIS」で保存されていることが判明した。
   IDEの方には、エンコードの設定の中に、「Shift_JIS」はあるが、単なる「JIS」は無い。
   日本語を扱う時は、「Shift_JIS」にしないと駄目なので、ここは動かせない。

   ※ TeraPadには、「文字/改行コード指定保存」メニューの中に、「JIS」もあるし、
      「Shift_JIS」 もある。
      なので、一度ソースを開いた後、「Shift_JIS」に変更して保存すればOKである。
      これを、X IDEのエディタで開いたら、文字化けは見事解決した。

  ・プロジェクトへのファイルの登録を行い、ビルドOKになる。
  ・準備しておいた、ガーバー等ZIPファイルをマルツに送付し、P板発注した。


■ 2015.8.4
  ・タブレット側の、Androidアプリ・プロジェクトを、Eclipseに登録・ビルドし、アプリを、タブレットに
   インストールした。
   以下に、プロジェクトが、Eclipseの、パッケージビューに追加登録生成された様子を示す。
   後閑さんの説明ページのキャプチャも一緒にしてみました。

  ・ボードは準備出来てないが、インストールされた、アプリを実行すると、次のような、
   BT_MP3の、リモコン画面が表示される。

  ・パーツが届いたが、ボードは未だなので当分は実装できない。


■ 2015.8.5
  ・
アクリル前後パネルの加工を行った。

  ・マルツから、送ったガーバーデータの、チェック結果がメールであった。
   1点、ご指摘があった。
   何故か、ハンダ面のパターンが、1箇所途中で途切れてる。
   IC1(VS1011E)-20pinと、C5の+ピンを繋ぐラインが、途中で途切れていて、IC1-20pin
   からのピアに接続されてない。

   調べたら、オートルータを掛けた時点では途切れてないことを、その時のキャプチャ画面(7/30付)にて確認。
   どうも、ポリゴンにて、ベタグランド設定した時点で何かしらの理由で切れたようだが、はっきりした原因は不明。
   早速、ボード上で修正し、ガーバー出力もやり直し、再送付した。
   今度は問題無しの返事。
   やれやれ。
   以下に、修正後の、ガーバービューワの画面を示す。


■ 2015.8.14
  ・ようやく、マルツから、P板が届く。(ほぼ予定通り、1W)
   生基板を目視確認した。
   特に問題なく、綺麗に仕上がっているが、一か所、シルクの一部が、部品のランドに
   重なっていて見にくいところがあった。
   (C2のシルクが、SW2のランドに、かかっていた。これは、自分のミスである。気が付かなかった。)
   電源関係のショートもなし。

  ・部品実装を済ませる。

  ・BTモジュールと、MPUを実装し、HEX書込み前に、電源電圧を確認した。
   +5V→ 5.22V, +3.3V→ 3.29V, DVDD→ 3.29V, AVDD→ 3.29V
   この状態で、PICkit2にて、HEX書込みOK

  ・ボード単体での、動作チェックを行う。
   やはり、再生テンポがおかしく(遅く)な
る時がある。
   また、音量が小さく始まる時と、大きく始まる時がある。
   RESETで、良くなる時もあるが・・・
   他の機能(音量のアップ・ダウン、曲送り)は、OKである。

   いままでの私が経験した症状とは似ているが、ちょっと違う。
   今迄は、逆で再生音が、早送りのような音になっていた。これは常にそうなる。音量の変化はない。
   もしかしたら、SPIの設定が今迄と異なるかもしれないと思い、後閑さんのソースを確認してみた。
   予想通り異なっていた。
   以前までの設定では、MP3_SPICON1= 0x003E; // 8bitモード、4M, 中央でサンプル、立上りエッジで送信
   なのに対し、今回は、 MP3_SPICON1= 0x033E; // 8bitモード、4M, 後縁でサンプル、立下りエッジで送信
   と、全く逆の設定になっている。
   そのせいで、再生スピードも真逆ななっているものと思われる。

   ところで、今迄の経験から、SDOに対する、SCKのセットアップ時間のマージン不足で、
   再生音が、早送りのような音になることは解っていたので、その対策として、今回も初めから、回路図には
   SCKラインに、47pのコンデンサを入れておいた。基板の方も実装用のランドは用意されているが、
   様子を見てからにしようと思い未だ実装してない。

   まず、設定を、今迄の設定(MP3_SPICON1= 0x003E;)に戻し、47pを実装してみた。
   これで、正常な再生スピードで再生できた。
   ステレオ・イヤ・フォンで聞いても、ノイズは殆ど気にならないほど極めて少ない。


■ 2015.8.15
  ・タブレットとBT接続しての、リモコン動作を確認した。
   まず、ボード上の、BTモジュールを初期化して、「BT_MP3」という名称の取得を行う必要がある。
   手順は以下の通りである。→ この手順で上手く行く。これでボード側の準備は終了。
    @ SW5(曲送り)を押しながら、電源SWを、ONする。
    A 最初、BTモジュール上の、赤LEDが低速点滅しているが、約2秒後に、高速点滅になる。
       この時に、SW5を離す。
    B 暫くすると、低速点滅に戻る。

   ※ 次回からは、この操作は不要である。

   次に、タブレットにインストールした、アプリを起動する。
   ボード側を再生状態にしておいて、[端末接続]ボタンを、タップすると、【曲名】の下に、
   ペアリング済の、デバイスリストが表示されるので、「BT_MP3」をタップする。
   そうすると、接続中メッセージが表示され、接続が上手く行くと、「接続完了」とメッセージが
   変わる。これで接続はOKである。→ ここまでOK

   しかし、[次の曲選択]ボタンを、タップすると、次の曲の再生は始まるが、タブレット側で、
   「問題が発生したため、【MP3プレーヤリモコン】アプリを終了します。」という
   強制終了する旨の、エラーダイアログが発生しまい、[OK]タップでアプリの強制終了となってしまう。

   どうも、曲情報を、ボードからタブレットに送信する時に、おかしくなっている
   ことが分かった。
   ボードのファームでは、ファイル・オープン時に、Transfer関数を実行して、曲情報を送信して
   いるが、このTransfer関数のところを、コメントアウトすると、曲情報は表示されないが、強制
   終了は起こらない。
   さらに細かく追うと、当該関数最終行の、曲情報一括送信の関数をコメントアウトすると
   この症状は起こらないことが分かった。


■ 2015.8.16
  ・昨日の強制終了の件、ファームを見ても、おかしいところはなさそうである。
   このタブレット側でアプリを強制終了する原因を、webで調べてみると、
   Android OSを利用していると、時々遭遇するらしく、考えられる原因としては、
    @ 許可されてないメモリ領域へのアクセス(セグメンテーション違反)等で、強制終了
      されられるケースが多い。
    A アプリが蓄えたキャッシュが悪影響を及ぼしている可能性がある。
   らしい。
   Aの対処としては、キャッシュの削除であるが、簡単にできそうなのでやってみたが駄目だった。

  ・よく解らないが、自分で組んだ、eclipseプロジェクトでビルドした結果の、アプリ(*.apk)そのものが
   悪いのかと思い、インポート元の、後閑さんオリジナルの、プロジェクトの、アプリを、そのまま
   タブレットにインストールして試してみた。
   eclipseからも、転送できるが、今回は、さくっと出来る、コマンドプロンプトによる方法で
   インストールしてみた。

   次の手順でやればよい。(私の環境での話)
    @ C:\>adb devices // PCにUSB接続されている、タブレットが認識されているか確認
                  // 成功すると、最終行に、0a4e56f7 device と表示される
    A C:\> cd C:\Android\project\BT_MP3Cont\bin // *.apkファイルのあるディレクトリに移動
    B C:\Android\project\BT_MP3Cont\bin>adb install BT_MP3Cont.apk
      // これで、タブレットにアプリが転送される
      // 最終行に、Success と表示されればOK

   ※ 何とこれで、曲送りの時、アプリが強制終了しないで、曲情報が正常に表示されるようになった。
     
自分で組んだ、eclipseプロジェクトでビルドした結果の、アプリ(*.apk)そのものが、悪いようである。

  ・とりえずこのまま、総合動作を確認してみることにした。
   もう2点おかしいところがある。
    @ MP3曲情報表示だが、何故か、バンド名が表示されない。
    A SDカードによって、文字化けを起こす。


■ 2015.8.17
  ・Aの文字化けに関しては、以前もこれと似た現象を、PI32MX_MP3プレーヤの時経験していたので
   MP3タグの問題だろうと直ぐわかった。
   SDカードに収録されている、MP3タグ情報の、文字コードが、UTF-16に設定されていると文字化け
   を起こす。
   ここを、フリーのMP3タグ編集ソフト(私は、「freeDBTagger」を使っている。)で、「Shift JIS」
   に変更する必要がある。
   「freeDBTagger」ソフトの、[文字コード編集モード変更]- [Shilt JISに変換]で変換できる。
   また、ID3v2フォーマットであることが必要で、そうでない場合は変換が必要である。
   この両者の設定を一括変換し保存してくれるソフトが、「freeDBTagger」である。
   以下に私が模索した手順を示した。

  ・【バンド名】 が表示されない不具合を追及してみる。
   下図にその現象の詳細を示した。
   【曲名】と、【アルバム名】は表示されるが、【バンド名】 が表示されない。
   Aに、この曲が収録されているSDカードのヘッダ情報を、バイナリ・エディタで見たところ(HEXダンプ)を
   示す。
   "TIT2"以後数バイト後(頭の"T"を含め11byte後)の文字列が、曲名
   "TPE1"以後数バイト後(頭の"T"を含め11byte後)の文字列が、バンド名
   "TALB"以後数バイト後(頭の"T"を含め11byte後)の文字列が、アルバム名
   になっている。

   ここで、検索ソフトの動きを追ってみることにした。
   ます、ファームが悪いのか、アプリが悪いのかの切り分けをする為、Tera Termと、S2 Terminal for Bluetooth
   にて、曲情報表示及び、実際に、ボード上の、BTモジュールから送信されている、曲情報のデータを確認してみた。
   下図にその結果を示した。
   この通り、ターミナル上でも、バンド名が表示されないことが確認できた。
   また、送信データの方を見ると、バンド名のところは、終端コード(CR LF)しか送ってこないことが確認できた。
   これで、アプリは悪くなく、ファームの方に何かしらの問題があることがはっきりした。

   ※ 検索は、Transfer関数で実行している。
      下表は、この関数の検索動作を追った時のメモを示す。
      この表を見ていて、何とか原因を解明することができた。
      要は、各タグの内容の後に、終端コード(CR LF)を強制的に、ヘッダBufに書込んで、送信Bufにコピー後
      そのヘッダBufの元データ(これが重要なキー文字になっている、'T''P'等)に戻してないのが、その原因
      だった。これではタグが検索されず、CR LFしか送ってこないことになる。
      下表で、薄緑色にマークした部分が、それに相当する。


■ 2015.8.18
  ・昨日の、
Transfer関数の、検索部の記述を修正したら、バンド名が表示されるようになった。


■ 2015.8.19
  ・これで残る問題は、自分の作ったeclipseプロジェクトで、ビルドした結果の、アプリ(*.apk)
   では正常に動かないという点である。(曲送り時、アプリが強制終了してしまう。)
   この現象は、後閑さんが作られたプロジェクト下の、binフォルダ下にある、アプリだと起こらない。

  ※ 問題一応解決
     まず、eclipseのビルド方法の設定が、デフォルトで、「自動ビルド」になっているが、
     これでは、毎回、eclipseを起動する度に、プロジェクトのビルドが始まってしまうので、自分的
     には、起動に時間が掛ってしまうし、何も直してないのに、勝手にビルドされたくないので
     「手動ビルド」に設定を変更した。
     これによって、ソースを修正して、「保存」し、自分で、「ビルド」操作しない限り、ビルドを開始
     しないようになる。
     (今迄もこのような操作が当たり前だと思っていたので設定を変更した。)

     設定変更し、現プロジェクト(自分の作ったeclipseプロジェクト)を削除後、再度プロジェクトを作成して
     一度、eclipseを閉じて再起動し、今度は、起動時ビルドしないことを確認した。
     アプリの方は、今のところ自分でカスタマイズする予定はない(というか、javaの勉強不足で、今のところ
     容易にいじれないが・・)ので、アプリは修正せずこのまま使うことにする。
     この状態で、自分のプロジェクト下のアプリを、タブレットにインストールしたら、そのアプリで
     強制終了することなく、正常に動くことを確認した。

     原因はよく解らないが、起動の度に、自動ビルドしていたので、何かの拍子に、
     一部のファイルが壊れたのかもしれない???
     一応、動いたので、これで深追いはしないことにした。


<最終回路図>
 ・こちらから、どうぞ→ 「BT_MP3_PLAYER」

<最終ソース>
 ・こちらから、どうぞ→ 「BT_MP3V21.c」
                       「VS1011.c」

  ※ 後閑さんオリジナルの、ボード側のファーム・ソースを、一部追加修正しました。
     尚、アプリ側の、javaソースは、そのまま使わさせて頂きました。


← 実験テーマ1に戻る   TOP PAGEに戻る   実験テーマ69へ →