● 実験テーマ103
「カラーOLED_MP3_PLAYERの実験」
(102の続編。MP3デコーダ:VS1011E部を組込み、OLED MP3 PLAYERとする実験です。)
※ 2018.3.23
→ 1回目の更新です。
使える形に、まとめようと思い、Eagleで基板設計し、基板屋さん(FusionPCB)に発注しました。
2月24日からの記事を参照してください。
以下、この実験の顛末記です。
■ 2018.2.16
・何時もの、MP3プレーヤと異なる点
※ バック・スキップ(BACK)SWの追加
今回は、スクロールリスト表示及び、マーカーの動きが無いので、前後のスキップ再生は可能であると思うので
チャレンジしてみる。
・操作スイッチは、全4個にする。
NEXT:RB1/CN3, BACK:RB2/CN4, VOL +:RF4/CN17, VOL -:RF5/CN18
・BACK SKIPの機能は以下のようにすれば良いはず。
FileNo=0(最初の曲)の時、BACK SWが押されたら、FileNo--;
の結果は、-1になるので、その時は、
FileNo=Total-1;にして最後の曲へスキップさせる。
その他の条件の時は、FileNo--; にする。
・ソース書き上げた。HEXまで準備出来る。
まずは駄目。
@ 初期メッセージに例のゴミ。
但しこれは、SD未挿入時には出ない。
これは無しでもよいが・・・(前回も無しで妥協してる。)
A VS1011Eの初期化+VOL等の初期設定+テストサイン波:5kHz発生で止めてみたが、サイン音鳴らず。
・Aから追求
久々に使った、VS1011E冶具基板が動いているか単体チェックを実施。
PIC24Fでだが、実験テーマ1で作った「vs1011e_test_24f」を久々に動かしてみた。
テスト仕様は以下
SW1 ON待ち→ ON→ 約1秒間5kHzテストトーン鳴らす・・ これの繰返し。
問題無く動いた。なので、VS1011Eは動いている。
■ 2018.2.18
・追チェック
@ PIC32MX VS1011Eポート(RF, RB)入出力設定→ OK
A PIC32MX VS1011Eポートピンと、VS1011Eコネクタ間の導通→ OK
B VS1011E制御ポート+SPI_1ポートの単純動作(パタパタ)チェック→ 以下OK
・XRESET出力(RB12)
・XDCS出力(RB13)
・XCS出力(RB15)
・DREQ入力(RB14)
・SCK1出力(RF6)
・SDO1出力(RF3)
・SDI1入力(RF2)
・ここまでOKなので、ハード的には問題なさそう。ソフト記述を追うことに。
※ サインテスト・コマンドを送る前に、1秒のウエイトが必要だったようで、入れたら、PIC32MXで初めて、
VS1011E テストSINトーン 5kHzが鳴った。
・ところが未だ問題が。
CN割込みが上手く行かないようで、SW ONしてないのに、割込みルーチンにジャンプしてくる。(先に進まない)
■ 2018.2.19
・SWラインのプルアップ状況を確認→ OKだった。
※ これも結局は、ソフトの問題だった。
RTOSで書いたMP3プレーヤの時、使っていた、MAIN
RTN SW:CN11ピン。
このSWは今回未使用なのに、CN11も、CN割込み有効に設定されていた。単なる削除忘れだった。
このピンはオープンだった為、ノイズで割込みが入っていたようだ。
これを直して、やっと最初の曲が再生された。
・ところが、音量コントロールはOKだが、NEXT,
BACK SWが効かない。
これも単純な記述ミスが原因だった。
256バイト単位で、MP3ファイルをリードし、その結果:resultを判断して、OK(EOFでない場合)ならば、
読み出したバイト分だけ、VS1011Eに音楽データを転送し、EOFまで繰り返すが、
途中で、NEXT, BACK SWが押された場合は、このループを強制脱出する為、resultを強制的に、0に
していた。
ここの記述を、おばかなことに、判断条件で使う '=='にしてしまっていた。
result == 0;(これでもコンパイルエラーは出ない)→ result
= 0; に修正で、前後のスキップ機能が快適に
動き出した。
バック送りもOK。
最初の曲再生中に、BACK SWを押すと、最後の曲再生になるのも、OK。
そしてここから何も押さない(通常ループ再生に戻る)と、順送りになるのもOK。
・残る問題は、初期メッセージのゴミ(前テーマでは妥協して、この表示はさせないことで妥協しているが・・)
調べたが、やはりはっきりした原因がつかめない。
何故か、SDを挿入したまま、P_ONした時にこの現象が起こり、SD未実装で、P_ONの場合は、起こらない。
SDの、SPI_2モジュールとの干渉が懸念されるが、この時点では、SPI_2モジュールは未だ動いてないはず。
試しに、最初の、ポート設定の後で、さらに、SPI_2モジュールを無効にして、単純ポート設定に戻してから、
初期メッセージを表示させても同じであった。
まあゴミを気にしなけれ良いだけで実害はないが、気持ち悪いので、今回も表示させないことにした。
今後、何か進展があったらまた記事にしたいと思います。
---<ここから、「EAGLE CADで、P板化」の記事>-------------------------------------------
■ 2018.2.24〜 2018.2.26
・約半年ぶりに、EAGLEをいじることに。
なるべく小型サイズに、P板化して使える形にまとめようと思います。
発注先は、去年から利用している、「FusionPCB」さんです。
・今回の設計方針をまとめてみた。
@ 最初から入力することはしない。
A QVGA使用の、TP_MP3_PLAYER(2016/7作成)とほぼ同じ回路と、PCBサイズなので、この時の、
*.schと、*.boardを基にして、加工・編集しながら進めることにした。
※ 主な相違点
・QVGA LCD→ 128x128 OLED
・PCBサイズは少し小型に出来る→ X= 89mm→
85mm, Y= 57mm(変更なし)
・OLED固定用の、バカ穴が追加される。
・プロジェクト名:「OLED_MP3_PLAYER」として作業開始。
今回の新規登録部品は、OLEDソケットコネクタ: 1列11pinの、2160X11GSEのみで作成済。
また回路図入力まで終了した。
■ 2018.2.27
・ここまでの、ボード状態は以下。
この時点では、J1には、標準サイスの、MJ-179Pを使用する予定でした。
・ERCの結果も、全て承認出来るワーニング類だったので、OKです。
また、ネットリスト上のチェックもOKです。
■ 2018.2.28
・今日から本格的にパターン引き。
ここで問題が・・・
去年の7月に、さんざん苦労して作った長穴スルーホール対応の、J1パッケージ:SPC4077_FUSION.pacだが、
どうした訳か、DGNDネット(1pinのみ)が、ベタグランドに接続出来ない?
横方向はかろうじてベタグランドに届いて見えるが、縦方向が浮いている。
前回と異なるのは、コネクタの配置と周辺パターンとの位置関係だが、ベタグランド生成に影響するのだろうか?
■ 2018.2.29
・J1のFUSION向けパッケージを回路図上で、リプレースしたのだが、これを一度削除してから、新たに置いて引き直しても
同じだった。
私なりに試行錯誤した結果の、この方法は完全ではないようだ。
スイッチサイエンスのページで紹介されている、長穴パッドを一つの部品(デバイス=シンボル+パッケージ)として登録する
方法が確実なのかもしれないが、作業が面倒そうなのと、ジャックシンボルとして直観的に解りずらいのが気になっている。
これは今後の課題にしようと思う。
今回は、内径1.7φ・外径4φの、EIJA RC5320A TYPE2 に適合した丸ピンの、DCジャック:M04-730A0
を使うことにした。
このサイズのジャックに適合したサイズのプラグが付いている、AC-DC5Vアダプター(ケンウッドのMDプレーヤ付属)が
手元にあるので好都合である。
■ 2018.3.1
・DCジャック:M04-730A0 に置換え、電源部(3.3V+5V+ベタGND)まで終了
■ 2018.3.2
・今基にしている、ボードデータの、DRCは、P板.COMのものでチェックを行っている。
FusionPCB向けの、DRCと若干差異があったことに気が付く。
以下2点を修正する必要がある。
@ AGNDと、DGNDベタの境界線間隔を、1.1mm以上にしないとクリアランス・エラーになる。
なので、0.8mm→ 1.1mmに変更
A Fusion PCBの、ガーバーCAMの場合、何も指定しないと、ビアがレジストされてしまう。
これを回避するためには、Eagleで、ビアを置く時に、infoで、stop→
onに設定(これでビアがレジストマスクされる)すればよい。
Chang→ stop→ onで、当該ビアをクリックしていけば効率的に変更できる。
・最初のオートルータまで終了。
しかし、5本ほどエアーワイヤが残った。
■ 2018.3.3
・5本ほどのエアーワイヤも引き回し等修正し、「Ratsnet
Nothing to do!」になった。
・ここで最初の、DRCチェックを掛ける。
TQFP64パッケージのパッド間の、パターン間隔が狭いようで、そこを中心に、28個のクリアランスエラーが発生。
・微調整を行い、「DRC NO errors」になる。
■ 2018.3.4
・最後に、シルク位置等の微調整を行い、Eagle作業の最終版とした。
■ 2018.3.5
・ガーバー出力作業に移行した。
ビューワで確認したところ、AUTOルータで引いたビアにレジストが掛かっている。(STOP OFF)
STOP ONに修正し、ガーバー出力〜 gerbvと、FUSION PCBのビューワで再確認。
・これでよさそうなので、正式発注を済ませる。
■ 2018.3.7
・前後アクリル板の加工を行った。
■ 2018.3.14
・FUSION PCBからの、P板待ち状態。
本日の19:00頃、ステータスが、出荷済になり、運送業者の、FedEXにその情報が送信されたとの
ステータス更新があった。
データに問題は無く、無事製造してくれたようだ。
■ 2018.3.19
・FUSION PCBから、P板届く。
運送業者は、FedExだが、委託ということで、郵便局員による配達だった。
■ 2018.3.20
・部品実装開始。
まずは毎回難関の、TQFP64(0.5mmピッチ)パッケージの、PIC32MXのハンダ付けから行った。
マルツへ1個だけ注文したが、業務提携している「Digi-Key社」からの取り寄せとなった。
届いた物が下の写真のように、シリカゲルとシート状の湿度計が同封された静電防止袋に入っていて
さらにそれが、アルミの防湿シールド・バッグに入った厳重な梱包だった。
PIC32MX340F256Hは、秋月で販売してなく(この上位シリーズの370Fシリーズは620円で手に入るが・・)
850円とやや値が張ったが、高い分、梱包は厳重で品質は確かなようだ。
さてこの梱包をといて、PIC32MXいざハンダ付け。
この手のハンダ付けは、最初の、パッドとピンとの位置決めが非常に重要だが、結果的には、1ピン〜16ピン側が
若干だが、右へ気持ちズレてしまったが、ショートはしていないようなので、このまま通電で確認してみることに。
・今回の部品の中で、ちょっと特殊なのは、前面アクリル板との位置合わせの為に、シャフトの長いタクトSW
を使ったことである。
aitendoには、最近、タクトSWと、それ用のボタンの在庫が多く、その中から以下を選んだ。
タクトSW→ ATD-TS6X6-D(H=18mm)
上用ボタン→ PLSA56CP(白)
・全ての部品実装が済んだ。
・動作チェック開始。
@ ショートチェック
3.3V ⇔ GND, 5V ⇔ GND → OK
A 電源チェック
KENWOOD MDプレーヤ付属のACアダプター:DC5V 800mA出力を使った。
・OLED未実装・HEX未書込みの状態で
3.3V→ 3.29V, 5V→ 5.52V→ OK
B HEX書込み→ OK
C 動作問題無し。
・イヤーフォンで聞いてもノイズ殆ど気にならず。
・タクトSW機能(BACK・NEXT・音量DOWN・UP)
・LED機能(SD未挿入時ブリンク)
・OLED表示OK
※ 再生動作時の電圧は以下
3.28V, 5.35V 約200mA
・組込みを行う。
タクトSWに、ボタンを付けてみたが、軸にテーパが掛かっている為、シャフトの先端の径は、ボタンの内径より
細くなっており、ハメ込み感覚で固定出来ない。
そこで、両面テープを細く切ったものを、ボタンの穴に詰め固定することにした。これでGOOD!!
またOLEDの固定は、取り付け穴の1つを使って、M2 L=11mmの樹脂製スタッドに固定した。
最後に、前後アクリル板を、M2.6スタッドで基板と共にサンドイッチして組立終了。
マイクロSDスロットが、OLEDのキャリーボード裏面の左サイドに付いているが、挿入状態で基板ツラより引っ込んで
いる為、取り出しのための切り欠きを入れたが、指だけでは取り外しは出来ても、取替えがやや、やりずらいのが難点。
まあ、取替え頻度は少ないので良しとした。ピンセットなどで摘まんで入れれば問題無い。
これで暫くは聞き込んでみようと思う。
<回路図>
・Eagle回路図→ 「OLED_MP3_PLAYER」
<最終ソース>
・実験テーマ102の実験版でそのまま動きます。→ OLED_MP3_PLAYER_TEST.c
※ 上メインソース以外のファイルは、実験テーマ101と同じです。