● 実験テーマ80

「UL024TF_タッチ式MP3プレーヤの実験」
(UL024TFの液晶+タッチパネル+microSDカードスロットをフル活用したタッチ式MP3プレーヤの実験です。PIC32MX使用)

※ 160725: ソフトを更新し、V1としました。
→ これを本番第1段のソフトとしたいと思います。
   これで、256曲MAXの、スクロール表示可能なタッチ式MP3プレーヤになりました。
  
7月22日からの記事を参照してください。

※ 160808: 使える形に、まとめようと思い、Eagleで基板設計し、基板屋さんに発注しました。
→ 7月26日からの記事を参照してください。

※ 160815: 基板屋からP板が到着(8/13)し、無事、TP式MP3プレーヤ_V1が出来ました。
→ 8月13日からの記事を、御覧ください。

※ 160822: UL024TFへの漢字表示実験の後に、ソフトを更新(V1→ V1a)しました。
→ これで、ファイル名リスト表示だけでなく、再生中の、曲名と演奏者名を漢字(キャラクタ混在可)
   で表示出来る様になりました。
   8月18日からの記事を、御覧ください。

※ 160906: 実験テーマ81(カラーBMP表示実験)の結果を踏まえ、ソフトを更新(V1a→ V1b)しました。
→ これで、再生中のアルバムのジャケットイメージを液晶に表示出来る様になりました。
   8月29日からの記事を、御覧ください。



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

■ 2016.7.6
  ・前回のテーマで、UL024TFのタッチパネルが使えることが判った。
   これを何に応用するかだが、今回はオシロでなく、タッチ式のMP3プレーヤにしようと思う。
   UL024TFには、microSDカードスロットも実装されているので、これも活用することにした。

   やらしいのは、このスロットの、CD(カード検知)と、WE(書込み許可・プロテクト)のメカ接点信号ピン
   が、UL024TFモジュールの、ピンコネクタに接続されて無いことである。
   (実装されているスロットには型番が無く調べようがないが、外観を見ると接点らしき物が見えるので、
    CDとWE信号がモジュールのピンコネクタに接続されてないだけと判断した。)
   この辺を無視するような工夫が必要になる。
   Microchip社のMMDファイルシステムを使うが、これの対処法を公開しているプログがあったので
   参考にしてみる。→ 「マイコンな日曜」サイト

   またMP3デコーダは、手持ちにVS1011eがあるので、それを使うことにした。
   ハード構成としては、液晶部+タッチ制御部+SD制御部(SPI)+MP3デコーダ制御部(SPI)
   が必要になるので、前テーマで使用した、
dsPIC33FJ64GP802(28pinDIP)はポート数不足で使えない。
   最初の実験は、トレーニング基板で進めたい。
   ポート数が多く高速動作の、64pinQFPタイプ:PIC32MX340F256Hが実装された自作トレーニング基板を
   久々に使うことにした。

   まずは、PIC32MXトレーニング基板を使って、この実験が出来る環境(治具ケーブル作り等)を作る。   


■ 2016.7.7
  ・PIC32MXでUL024TFの液晶表示をさせたことは無いので、最初はこの実験から入ることにした。
   以前作った、PIC32MX_QVGA_TESTプロジェクトを基にすれば簡単そう。
   この時の液晶はUL024TFではないが、コントローラはどちらも互換がある。
   ハード的に異なるのは、タッチと共用しているWRと、RSのポート割付けだけなのでヘッダファイル
   の変更のみでいけそう。


■ 2016.7.11
  ・ソースは作成済で、コンパイルもOK。既にHEXまで準備できているので動作チェックした。
   表示テストは難なくOK。

 ・タッチテストに移行する。
  前テーマと同じテスト仕様を、PIC32MXに移植してみる。
  移植時の留意点は次の4点位だろう。
   @ 変数の型宣言に注意する。(32bitと、16bitの違い)
   A クロック構成が異なるので、T1周期設定も異なる。
   B ADCポートの構成が異なる。(タッチセンスの2CH)
   C ADC関係のレジスタも32bit幅なので注意。特に、ADC1CHSレジスタは、上位16bitで設定する
      ようになっているので注意が必要。

  これらを注意しソフト作成〜 HEX準備まで済み。


■ 2016.7.12〜 2016.7.13
  ・タッチテストも上手く行く。

  ・さて今回の本題の1つ、UL024TFの、SDカードスロット(モジュール側のピンにCD,WE信号無し)を使ってみる。
   冒頭にも書いたが、この対処法については、「マイコンな日曜日」さんのプログに詳しく書かれて
   いたので大変助かった。
   使っているFAT16(FAT32互換)のバージョンもV1.2.*と、ほぼ同じようである。

   改変するファイルは、以下の2個のファイルとなっている。
    @ HardwareProfile.h
    A SD_SPI.c

   (1) HardwareProfile.hの変更箇所→ 以下の4箇所のコメントアウト
        // #fefine SD_CD PORTFbitsRF0
        // #fefine SD_CD_TRIS TRISFbits.TRISF0
        // #fefine SD_WE PORTFbitsRF1
        // #fefine SD_WE_TRIS TRISFbits.TRISF1

   (2) SD_SPI.cの変更箇所
       @ 以下の通り、MDD_SDSPI_InitIO(void)の中にある2箇所のコメントアウト
          void MDD_SDSPI_InitIO (void)
          {
             // Turn off the card
             // SD_CD_TRIS = INPUT; //Card Detect - input
             SD_CS = 1; //Initialize Chip Select line
             SD_CS_TRIS = OUTPUT; //Card Select - output
             // SD_WE_TRIS = INPUT; //Write Protect - input
          }

       A 以下の通り、return(SD_WE);→ return(0);に修正
         BYTE MDD_SDSPI_WriteProtectState(void)
          {
             // return(SD_WE);
             return(0); // WEの無い、UL024TF使用のため修正(強制的に書込み許可状態にする)
          }

       B 以下の通り、return(!SD_CD);→  return(0);に修正
          BYTE MDD_SDSPI_MediaDetect (void)
          {
             // return(!SD_CD);→ return(1);に修正
             return(1); // CDの無い、UL024TF使用のため修正(強制的にカード検知状態にする)
          }//end MediaDetect

    以上、改変は済んだ。

  ・SDテストプログラムとしては、とりあえず、タッチなしで、SDに収録されているファイルを16個だけ
   読出しリスト風に表示して止めるだけにした。
   最初、SDカード信号用コネクタを逆差し(トレーニング基板側)しているのに気が付かず上手く
   行かなかったが、他はさして問題なく上手く行った。
   → @ カードを入れないで、電源ONすると、ファイルオープンの時に、
        「Find No File?」と表示されるので、ステータスが確認できOK。
      A その状態から、電源ONのままカードを挿入すると、16曲分の音楽ファイルがリスト
        表示されOK。



  ・次に、これにタッチを絡ませた実験をしてみる。
   テスト仕様は以下としてみた。
   <テスト仕様概要>
    @ SDに格納されている、MP3ファイルを、8個まで読出し、そのファイルリスト
      を、液晶に表示する(今回は、スクロール機能は無しとする)
    A SELECTボタン(タッチ)で、選択したいファイルの所へ、●キャラクタを移動
    B ENTERボタン(タッチ)で、選択を確定し、そのファイルNo.を液晶に表示する。

   尚、2つのボタン位置は、前テーマのと同じにした。
   大方は、動いているようだが、タッチセンスのバラツキが大き過ぎるようだ。


■ 2016.7.14
  ・
SW1(Select)をタッチしたつもりが、Enterを実行してしまう時がある。
   タッチされたか否かは、タッチ座標の基準値をテーブルに定義しておいて、実際タッチした時の
   座標値とそれを比較して判断している。
   しかし、タッチの圧力等で、サンプリングの度に座標値(AD変換値)が大きくバラツクので
   まずそのバラツキの範囲を設定してその範囲内の座標値で、しかも3回連続してこのバラツキ
   範囲内に入った場合、確実なタッチとしている。
   たぶんこのバラツキ範囲の設定が広すぎるのが原因していると思われる。

   前回とハードが異なるので、このバラツキ範囲を改めて試行錯誤で決め
てみることにした。
   以下のことが解った。
    @ バラツキ範囲はなるべく狭めないと駄目。(2つのボタン間隔が狭い場合はなおさら。)
       今回は±15とした。
    A タッチの圧力の強さでもかなりバラツクが、これを完全に吸収するのは難しい。

   → 現在はタッチペンでやや強め(長め)にタッチした時の値を設定しているので、弱目にタッチ
         した時は、誤処理される時がある。
      これでも使えない訳ではないので今回はこれで妥協することにした。

  ・次に、16曲リストにして、ボタンの位置を右中央付近に変更して同じことを実験してみた。
   ボタン位置(タッチ位置)の違いで、XY抵抗膜の接触の仕方が異なるのか、画面の端に
   ボタンがあるより、少しタッチの感じがよくなる。

  ・いよいよ、VS1011eを追加して、タッチ式MP3プレーヤの入り口へ。
   最初のテスト仕様は以下の様にした。
   <テスト仕様概要>
    @ SDに格納されている、MP3ファイルを、16個まで読出し、そのファイルリストを、液晶に表示する。
    A SELECTボタンで、選択したいファイルの所へ、●キャラクタを移動する。
    B ENTER ボタンで、選択を確定する。
    C ファイル選択が確定したら、その音楽ファイルの再生を行う。
    D 再生が終了したら、そこで停止する。


■ 2016.7.15
  ・再生中のタッチセンスをする必要のない簡単な仕様にしたので、タッチ割込み(T1割込み)を
   掛けたまま動作させても問題ない。
   このテスト仕様は上手く行く。


■ 2016.7.16
  ・次に、再生中にタッチセンス(SKIPボタン+HOMEボタン)して、検知したら再生を中断して
   それぞれの機能を実行するようなプログラムを検討することにした。
   VS1011eには、SDからデータを読込んではPICから、SPI経由で、音楽データを
   シリアルで転送(256byte単位)し、それをEOFまで繰返し音を出している。
   このループの中に、タッチセンスの処理(レベルセンス)を入れるので、割込み処理でなく
   このループの中でボタンセンスをすることにした。
   テスト仕様は以下の様にした。
   <テスト仕様概要>
    @ SDに格納されている、MP3ファイルを、16個まで読出し、そのファイルリスト
       を、カラーQVGA液晶に表示する。
    A 通常タッチをしなければ、最初の曲から順次16曲目までの再生を繰返す、
       ループ再生を行う。
       再生中の曲の先頭に、マーカー('●')を表示する。
             これを移動しながら再生を繰返す。
    B 再生中に、SKIPボタンをタッチすると、再生を中断し、次の曲の再生に移る。
    C 再生中に、HOMEボタンをタッチすると、再生を中断し、最初の曲の再生に戻る。

   ※ 今回は、SDカードに16曲以上収録されているものとしてソースを作成した。

  ・何とか、再生中のタッチセンスも上手く行った。
   この処理が入っても、再生音に影響ないことを確認した。
   タッチの方は、指先では厳しいが、タッチペンを使えば何とか使える感じにはなった。


■ 2016.7.17
  ・SDに収録されている楽曲が、
16曲を満たない場合でも、その数のファイルリストを表示
   し、その間のループ再生をするようにソフトを修正した。


■ 2016.7.18
  ・せっかくなので音量もタッチボタンで可変できるようにソフトを変更した。
   ▲:音量アップと、▼:音量ダウンを追加した。
   1ステップ(-0.5dB)毎の可変で65段階の、レベル調整とした。
   音量レジスタ設定値としては、0(MAX:0dB)〜 64(MIN:-32dB)となるが、これを
   そのまま音量表示すると、大小が逆になるので、表示の時はMINで、'V00'、MAXで、'V64'表示
   とした。
   このタッチ処理を、再生中(データ転送ループ)に入れたので、音の途切れとかが心配だったが
   イヤーフォンで聞いた感じは、全く問題ないようである。
   この時の実験の模様は、このページトップの写真を参照してください。

   これで妥協点もあるが、一段落ついたので、このテーマを公開することにする。


---<ここから、追試:「ソフト更新_V1の記事>-------------------------------------

■ 2016.7.22
  ・テストプログラムの動作確認は終わったので、これを本番に向けて少し使える形に
   したいと思う。
   256曲MAXのタッチ式MP3プレーヤにする。
   これを実現するためには、スクロール表示(順方向のみ)が必要である。
   スクロール表示のプログラムは何度かやっているが、すっきりした物とは言いがたい。
   特に最初に戻す時、カード検知〜FSオープン(カード初期化)に戻している。

   今回は、カード検知〜FSオープン(カード初期化)は、電源ON後の、1回のみにしたい。
   (前作のテスト版はスクロール無しだが、そうしてある。)
   その後は、SDからファイル名バッファに、ファイル名がアスキーで格納されるので、
   バッファを読み出して処理して行けばよい。


■ 2016.7.23
  ・一応、ソース書き上げるが、動作NG。
   116曲収録のSDカードを読み込んでいるのに、トータル曲数表示が、064になってしまう。
   細かく症状を見ると、64曲以下の収録カードなら問題ないことを確認した。 
   ファイルを読み込んだ時、ファイル名が無い(NULL)と、エラーで抜けるようにしているので
   そこらが手掛かりになると思ったのだが、予想以上に原因をつかむまで悩んだ。


■ 2016.7.24
  ・昨日の疑問、今朝、判明する。
   何ということなかった。
   一箇所、修正忘れがあった。
   ファイル名バッファのサイズの修正をしてなかった。
   FileName[20][13]→ 
FileName[256][13]に修正、これでOKになる。

  ・ところで話は変わるが、巷で話題の、Windows10の無償アップグレードの件であるが、
   期限が今月29日までなので、あとわずかである。
   私はさんざん、やるべきか否か悩んだが、現行の、Windows7 SP1の延長サポート終了期限が、
   2020年1月14日と、長いとは言えない期限に近ずいているので、(互換性レポートでも問題無いと言うし・・)
   本日、フルートレッスンからの帰宅後、13:00頃から思い切ってやることにした。
   ダウンロードは既に済んでいて、アップデート・インストール作業のみであったが、ファイル数が多いのか
   2時間近くかかった。
    しかし何の問題もなく、インストールは終了し、今のところは問題は起きていない。やれやれである。
   WEBページの作成に、古いソフト:FrontPage2000を使っているのだが、WIN10でも問題なく動いている。

  ・WIN10が使えるようになったので、早速、MPLAB IDE V8.60+PICkit2を、WIN10で使って
   デバッグを続行した。
   このソフトも問題なくWIN10で使えてます。

   SKIPボタン機能・通常のループ再生機能に共通した問題あり。(HOMEボタンは問題なし)
   最終曲を再生し終わった時、もしくは、最終曲を再生中に、SKIPボタンをタッチした時の、初期画面
   に戻る処理に問題があるようだ。
   オープンエラー処理を、HOMEボタンと同じにすれば良いだけの話であった。
   ここら辺は、このページ末尾にアップしたソースを見ていただきたい。
   これで、V1プレーヤも一通り動くようになった。


---<ここから、Eagleでの基板設計の記事>-------------------------------------

■ 2016.7.26
  ・
久々にEagleをいじる。
   1枚構成で、サイズは、89 x 57mm となりました。
   今回の、プロジェクト名:「TP_MP3_PLAYER」

  ・以下の作業を済ませた。
    @ UL024TFの外形寸法(コネクタ位置)を実測確認
    A ラフ書きで、部品配置図作成
    B Eagleプロジェクトを作成


■ 2016.7.27〜 2016.7.29
  ・UL024TF用の、ソケットコネクタの、6pinと、8pinのシンボルは新規作成になる。
   作成する。

  ・回路図入力と目視チェックOK
   NET及びBOMリストチェックOK
   ERCチェックもOK (Errorが5つ出たが、承認できるエラーなので承認する。)

  ・部品配置まで済ます。


■ 2016.7.31
  ・ベタグラ生成〜シルク整理まで完了


■ 2016.8.2
  ・
DRCチェックを行う。
   Dimensionエラー 3ヶ所発生
   → DCジャック周辺のパターンと、基板エッッジまでの間隔を若干広く修正しOK
   Clearanceエラー 1ヶ所発生
   → picのパッドとパターン間隔を修正しOK

   残りの64ヶ所のエラーは承認できる、withエラーなので承認した。
   → 64TQFPのパッド幅に対し、僅かに広いパターンを引いている為に出たエラーだが、
      外形的にも電気的にも問題ないので承認した。(何時ものことです。)

  ・ガーバー出力まで済ます。
   ガーバービューワでの確認
   良さそうなので、いつものマルツに、見積依頼出す。


■ 2016.8.3
  ・
マルツから回答があったが、何時もより高い。
    問合せしてみたら、年々材料費など値上がりしてるとのこと。

   どうしようか迷ったが、他の所で、見積をと、P板.COMのHPで見積をしてみた。
   約7000円ほど安くなった。
   (出来れば、格安の中国メーカー(FUSION PCB等)を一度、試してみようかと思っていたが、
    ノウハウを調べないといけないし、面倒なので今回は見送った。)


■ 2016.8.4
  ・
P板.COMより正式に注文請書がメールで届く。 
   データに問題はなく、ステータスは製造中になった。
   基板到着予定は、8月13日(土)

   只今、基板到着待ち


---<ここから、P板到着後の記事>-------------------------------------

■ 2016.8.13〜 2016.8.14
  ・予定通り、P板.COMより、P板が到着した。
   今回は、1枚のみのオーダーで、到着したのも、ベア基板無しの、1枚であった。

  ・まず最初に、難関の、約1年ぶりとなる、QFP64パッケージの半田付けを行った。
   この作業だけは、老眼鏡+ルーペが必須だが、何とか無事済んだ。

  ・この後、グランドと電源ライン間の、ショートチェックを、テスターで行っていた時、
   UL024TFの、電源供給コネクタ:CN4-4pinが、DGNDに繋がってないことを発見。
   CN4-5pinは、DGNDと繋がっているので、修正しなくても動くが、隣同志のピン
   なのでブリッジ修正することにした。
   これの原因だが、Eagle回路図をちょっと見た限りは、その部分は繋がっているように
   見える。
   しかし、ネットリストを見ると、その部分のネットは見当たらなかった。
   ネットリストはチェックしているが、どうも見逃してしまったようだ。
   回路図をよく見ると、CN4シンボルのピン(赤線)に、オーバーラップしてる形で、
   ネットのラインが引かれている。
   前もこのようなことがあったような気がする。
   今後のために、チェックポイントとして追加しておく。

   これ以外のパターン上での問題はなく、全ての部品の実装が完了した。

  ・PICkit2による、HEX書き込みも上手く行く。

  ・UL024TFを装着して動作を確認してみた。
   動いてはいるようだが、タッチ動作が何故か鈍い。
   ハードが変わっているので、電源電圧を確認してみた。
   トレーニング基板の時(3.31V)よりも、若干低目で、3.28Vであった。
   ADCの基準電圧も、AVCCとしているため、ここに差があると、AD変換値も変わってくる。
   今回は、タッチボタンの座標データを変更することにより対処することにした。
   予め用意してあったV1ソースを変更することになるが、この辺の変更点はコメントで明記
   しておくことにし、ソース名は変更しないことにした。

   タッチボタンの座標データの変更で、タッチ動作も良くなった。
   また写真では、小型スピーカユニットで再生していますが、ステレオ・
   イヤー・フォンで聞いても、ノイズは気にならず割と良い音質で再生出来ています。


---<ここから、漢字表示実験〜 ソフト更新(V1→ V1a)の記事>-------------------------------------

■ 2016.8.18
  ・UL024TFに、漢字を表示したくなった。
   今まで、QVGA液晶に漢字を表示したことは無い。
   しかしRTOSによる、MP3プレーヤの時に、ノキアの携帯用液晶(132dot x 132dot)に
   漢字で、曲名と演奏者名を表示している。(実験テーマ25を参照してください。)
   この時の、12 x 12の漢字フォントを使ってまずは、UL024TFに漢字を表示する実験をしてみた。

   まず、基があるので、余り深く考えないで、適当にソースを書いて、実験しながら詰めて行く方法
   を取った。
   ただライブラリの名前は、カラー版で漢字対応にするので、ここらで変えようと思う。
   PIC32MXのQVGAライブラリは、後閑さん作成の、dsPIC33Fのライブラリを、斉藤さん(YS電子工作)
   が、PIC32MX用に修正したものをそのまま使っている。
   ただ名前の中に、dsPICが入っている(colorlcd_libdsPICVH)のは不自然なので、
   colorlcd_lib32kに変更することにした。

  ・基のテストプログラムが、SWによるCASE分岐で処理しているのに対し、今回は、SW割り込みは
   使わず、メインループで順次テスト項目を実行するだけの簡単なものにした。
   結果的には、基本、元のソフトを、QVGAの解像度に合わせ込むだけの修正だけで、漢字表示テスト
   はOKになる。

  ※ ここに、テストプログラムのソース+ QVGAライブラリ(漢字フォント含む)をアップします。
  → PIC32MX_UL024TF_KANJI_TEST.c

    colorlcd_lib32k.c
    colorlcd_lib32k.h
    KanjiFont12b。h


■ 2016.8.19
  ・これを今回のプレーヤの曲名表示等に応用してみる。
   最初は、ファイル名リスト表示数を、1画面16ファイルから、13ファイルに減らし、
   その分空いた、液晶下段の、2行に、曲名と演奏者名を、漢字(キャラクタ文字混合可)で
   表示するように考えた。

   ちょっと面倒なのは、SDから読み取ったIDタグ情報から、曲名と演奏者名を検索し
   それが、漢字(全角)であるのか、キャラクタ(半角)なのかを判断して、適当なポジションに
   漢字とキャラクタが混在している場合でも表示出来る様にすることだ。
   しかし、この辺の関数も、液晶は異なるが(QVGAに対し、132 x 132) 後閑さん作成のもの
   があるので、それを修正する形でまとめて行くことが出来た。

   以下に、その表示結果を示した。
   全てが、漢字の場合は、行が詰まっていても、お互いの干渉がなく問題がないが、
   キャラクタと混在の場合、特に、上の行(曲名)が、キャラクタで、下の行(演奏者名)が漢字の
   場合は、それぞれのフォント構成の違いから、キャラクタの下の方のドットが、漢字の上の方の
   ドットに重なってしまって、ちょっと見にくくなる。


■ 2016.8.20
  ・という訳なので、さらに、ファイル名リスト表示数を、1画面13ファイルから、12ファイルに減らし、
   曲名表示位置を、上へ1行移動することにした。
   その結果の表示例を以下に示した。このページ冒頭の写真も参照してください。
   これで、全角と半角が混在しても、見易くなった。
   ソフト更新(V1→ V1a)無事完了!!     


---<ここから、ソフト更新(V1a→ V1b)の記事>-------------------------------------

■ 2016.8.29
  ・実験テーマ81のカラーBMP表示実験で、UL024TFに、16bitカラーBMPイメージを
   表示出来る様になった。
   そこで、この実験結果を踏まえ、再生中のアルバムのジャケットイメージを液晶に表示する
   ようにソフトを更新することにした。

   最初は、ID3v2タグの、アートワーク情報を検索して、その画像ファイルを読み込んで表示
   出来たらと思ったが、どうもそのファイル形式が、圧縮形式の、JPEGか、PNGで格納されて
   いるようなので、デコード(解凍)ソフトが必要である。
   WEB上でよく知られているのに、ChaNさんの、TJpgDec Tiny JPEG Decompressor」
   があるが、何やら、英文で難しそうなので、簡易的に、SDに
、MP3ファイルの他に、
   それに対応する曲番をファイル名に入れたBMPイメージファイルを用意して、それを再生前に読み出し
   表示することにした。


■ 2016.9.3
  ・イメージを表示する場所だが、画面右側の、2つのタッチボタンの上の空きスペースにした。
   ただ、現在のボタン位置のままだと、小さいサイズのイメージしか表示出来ないので、
   下の方にボタンを移動して、スペースを稼ぐことにした。
   (これに伴い、ボタンの座標テーブルの値も変更しました。)

   イメージサイズは、100x100dotと決め、適当な位置(最初は、右上(319,25)原点にした。)
   に表示してバランスを見ることにした。
   最初は、Glcd_Image4()という関数を用意し、引数無しの固定値で希望位置にイメージを
   描画するようにした。
   下記のような関数を用意した。

/********************************************************
* 16bitBMPカラーイメージ表示関数
* 100x100dot対応
*********************************************************/
void Glcd_Image4(void)
{
    short Xpos, Ypos, ptr;

    /// BMPフォーマットのデータは、左下から右上に向かって配列されているので
    /// この順で描画すると、上下逆様の画像表示になってしまう。
    /// 右上の画素(ptr=9999, Xpos= 319, Ypos= 25)から下に向かって描画する必要がある。
    ptr= 9999;
    for(Ypos=25; Ypos < 124; Ypos++){
        for(Xpos=319; Xpos > 219; Xpos--){
            Glcd_Pixel(Xpos, Ypos, ImageBuffer[ptr--]);
        }
    }
}

   BMPファイル名は、「IMAGExxx.BMP」とし、xxxの部分に曲番(001〜)を文字列で入れ込む
   ようにし、曲目(アルバム)とのヒモ付けを行った。
   また、イメージファイルが無い場合は、イメージを表示させないように、前表示していたイメージを
   消去する必要がある。
   そこで、表示前に以下を実行し、イメージエリアをクリアするようにした。

/// 表示前に、イメージ表示エリアを全クリア
for(i= 0; i < 10000; i++) ImageBuffer[i]= BLACK;
Glcd_Image4();

      この後、以下を実行し、イメージファイルを開き、成功だったら、イメージバッファに転送し
   ジャケットイメージを描画することにした。


/// イメージファイルを開く
itostring(3, FileNo+1, str_IMAGE+5); // ファイル名の曲番部分を文字に変換して、全体の文字列と結合
fptr = FSfopen(str_IMAGE, "r"); // File Open (Read Mode)

if(fptr != 0){ // ファイルオープンに成功の場合、以下を実行
    FSfread(ImageBuffer,1,138,fptr); // ヘッダ情報部の、規定バイト数:138バイト分は、読み飛ばす
    FSfread(ImageBuffer,2,10000,fptr); // BMPデータを、バッファへ全て(3600ワード)転送

    Glcd_Image4(); // 最上段からジャケットイメージを描画する

    FSfclose(fptr); // イメージ描画が終了したら、ファイルをクローズ
}

  ・最初の表示例を以下に示します。

  ・参考までにメモリー使用状況を以下に示しました。RAMも、ROMも残り少なくなっています。


■ 2016.9.4
  ・一応表示出来たが、配置バランスが、あまり良くない。タッチボタンに対して、ほぼ中央位置
   になるようにソフトを若干修正した。
   今度は、イメージ描画関数に引数を用意し、右上原点位置:Str_X, Str_Yと、表示ドット数:Ndotを指定して
   コールすれば、希望の位置に描画出来る様にした。
   そして関数名も、解り易いように、DispJacketImage()に変更した。
   詳細は、このページ末尾のソースを参照してください。

   コンパイル時に気が付いたことがあったので、ここに覚え書きしておく。
   右上の画素のデータは、その配列の要素数を、ptrとすると、ptr= (Ndot~2)-1に格納されているが
   2の階乗を、Ndot~2とは、C言語では表現できないようで、コンパイルは通ってしまうが、リンクエラーになる。
   数学関数(math.h)の中の、powというのがそれに当たるが、今回は単純に、Ndot * Ndotと書いた。

   以下にセンタリング後の表示例を示しました。

  これでずいぶんと、スッキリした感じになりました。
  曲がりなりにも、ジャケットイメージが表示出来て、やれやれといったところです。


<最終回路図>
 ・こちらから、どうぞ→ PIC32MX_UL024TF_TP実験回路」 (タッチ式MP3プレーヤの実験回路です。)
                ※ 尚、VS1011e実験基板の回路は、「実験テーマ1」の記事の最後の方に有りますので、参照してください。

                    「TP_MP3_PLAYER回路図」: 160815追加(Eagleで、P板化した回路図です。)


<プロジェクト一式>
 ※ 今回は、ファイル数が多いので、プロジェクト一式を、ZIP圧縮して公開します。
    この中のOUTPUTフォルダに、HEXファイルが有りますので、ご利用ください。

 ・こちらから、どうぞ→ 「UL024TF_Touch_MP3_Player_TEST」

<ソフト更新:最終ソースと、HEXファイル> : 160725 1回目の更新(他のファイルはテスト版と同じです。)
                                     160815 2回目の更新(1回目のメインソースのタッチボタン座標データのみ変更しましたがソース名はそのままで

                                                   HEXファイルと共に置き直しました。)
 ・こちらから、どうぞ→ UL024TF_Touch_MP3_Player_V1.c
                    UL024TF_Touch_MP3_Player_V1.hex

------------------------------------------------------------------------------------------------------------------------------------

                  ※ 160822 3回目の更新(漢字(キャラクタ文字混合可)による、曲名と演奏者名の表示が出来る様になりました。)
                     以下に、ソースと、HEXファイルをアップしました。

                  → UL024TF_Touch_MP3_Player_V1a.c
                     UL024TF_Touch_MP3_Player_V1a.hex

------------------------------------------------------------------------------------------------------------------------------------

                  ※ 160906 4回目の更新(アルバムジャケット・イメージの表示が出来る様になりました。)
                     以下に、ソースと、HEXファイルをアップしました。

                  → UL024TF_Touch_MP3_Player_V1b.c
                     UL024TF_Touch_MP3_Player_V1b.hex


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