2020年4月14日火曜日

PIC32MX USBMSC USBメモリで音声再生7_レイアウトの手直しからガーバーファイルの出力


"PIC32MX USBMSC USBメモリで音声再生"の基板を、seeedのFusion PCBに発注しました。20200327

オートルータで配線を終えた後、気づいた点をいろいろといぢくり回して、結局かなりの部分に手を入れました。

備忘録としてメモを残します。
・PCBアートワークのグリッドはmm単位とする。
KiCADのPCBのアートワークのグリッドは、インチかメートル単位を選べるのですが、基本はメートル単位系でグリッドを指定して作業します。

・リード部品の取り付け寸法は、0.5mm単位とする。
リード線で取り付けるリード部品(抵抗やコンデンサなど)のフットプリントの寸法について、2.5mm単位で、フットプリントを作成しています。 単位系を出来るだけメートル系にそろえて、できるだけ0.5mm単位とし配線時の線のズレを少なくするようにしています。

・リード部品フットプリントのセンターは1番ピンとする。
フットプリントの配置位置を決める際に回転などを行うのですが、フットプリントの中心点を1番ピンにしておくと後々の部品の配置とルータ配線の収まり具合がよいです。
 例えばリード部品の抵抗など、フットプリントの大きさを2.5mmで作成した場合、センターを部品の中央とすると、両方の足まで 1.25mmとなってしまい、0.5mmとしたグリッドの位置との兼ね合いが上手くありません。

・スイッチ・コネクタ・ボリューム部品のセンターは部品の中心とする。
スイッチやコネクタなど、ケースに穴をあける必要がある部品は、フットプリントのセンターの位置は部品の中央にします。 このように指定することにより、ケースの穴あけ位置をmm単位でちょうど良い位置に指定できます。 

・GNDラインについて、線幅を細目に指定する。
今まで1.2mm幅の0.2mmクリアランスで配線していましたが、最後にベタパターンを入れて、パッドをサーマルスポークで接続すると、接続幅が広がってサーマルパターンが上手く機能しくなります。その為GNDの線幅は細く設定することにしました。 線幅を細くした分クリアランスを大目設定し、0.6mm幅の0.5mmクリアランスで配線するのが自分が行うデザインとして適当なようです。 ちなみにベタのサーマルパターンはサーマルクリアランス0.3mm、サーマルスポイーク幅0.3mmとしています。
  GND配線 ⇒ 0.6mm幅、0.5mmクリアランス
  サーマルパターン ⇒ サーマルクリアランス0.3mm、サーマルスポイーク幅0.3mm



・KiCADからガーバーファイルを出力する方法について、
発注先の Fusion PCB の下記サイトを参考にガーバーファイルを出力します。

 KiCADからガーバーファイルを出力する方法(Seeed)

※上記リンク先の説明とKiCADのバージョンが異なって若干迷ったので、実際に指定した箇所を下記に明記しておきます。

ガーバーファイル出力設定

ドリルファイル出力設定




・KiCADから出力したガーバーファイル名称を変更、
下記リンク先の注意点に従って、ドリルファイルの拡張子を.txt、外形ファイルの拡張子を.gmlに変更し、zip形式に圧縮します。

 ガーバーファイルを生成する方法(Seeed)

ドリルファイル .drl ⇒ .TXT


外形ファイル .gm1 ⇒ .GML


・こちら(FusionPCB)でガーバーファイルをアップロードした後、ガーバービューアーでアップロードしたデータに問題が無いか確認します。








・アップロードデータに問題なければ、基板の大きさなどを確認して、支払い手続きにすすみます。





・支払い方法、住所などを入力して、下記画面が出たら完了です。

2020年3月21日土曜日

PIC32MX USBMSC USBメモリで音声再生6_PCBレイアウト

だいたい動くようになったので、全体の回路図の設計を詰めています。とは言っても今までユニバーサル基板に組み上げた状態を回路図に反映して、その他付随する部分を追加するのみです。 ちょっと悩ましいのがバックアップ用に追加する1Fの電解二重層コンデンサです。 以前おしゃべり時計で組み込んでみましたが、設計がへたくそな為思うほどバックアップの用を足していません。



PCBレイアウトを開始するにあたり、足らないフットプリントを作成しました。

まずは、基盤に取り付けるボリュームです。

ついで、USB-TYPE A のコネクタ。 これはKICADの既存のライブラリに有ったものを、若干手直ししています。

USBへ電源供給する5Vのレギュレータ。これもKICADの既存のライブラリにあったSOT89のフットプリントを手直ししています。


続いてPCBレイアウトの開始。 最初はすべての部品がひと塊となって表示されます。


これを機能ごとにおおよそに振り分けます。


中央にCPUを置いて、電源回りのコンデンサー、セラロックやクリスタルなどのCLOCKの部品をCPUの周りに配置します。


右側にターミナル、上にUSBコネクタ、下にスイッチを配置してます。 配置のバランスを見ながら、少しづつ中央に寄せていきます。 なんとか80mmの枠内に収めたいところ。


おおかたの部品を配置できました、まだいくつかの部品を押し込めなければなりません。 右下の配線を引き出す為のパッド類は詰め込めそうもありません。。


右下にあったパッド類はあきらめて、何とか全ての部品を配置し終えました。


なんとか、横80mm×高56mmの大きさに収まりました。 配線はまたこの次です。20200322(+8.0h)


とりあえず、電源回りを手配線しました。 20200323(+1.5h)


続いて自動配線の結果。 
若干気になるところは明日修正しようと思います。


※自動配線のようす。 あっという間です。
https://youtu.be/jpNFpsdqHcw

2020年3月9日月曜日

PIC32MX USBMSC USBメモリで音声再生5_USB電源の検討

相変わらず、作業の進みが遅い、「USBメモリで音声再生」です。
開発中の基板にスイッチ、CDS、USBメモリの電源切断用のトランジスタを追加しました。


しかしながらUSBメモリの電源切断の回路が上手くうごきません。
最初に作った回路は2SJ681を使用した下記のような回路です。25番ピンのRB14をオープンドレインに設定しているのですが、出力をHIGHにしてもゲート電圧が5Vまで上がりません。



結局諦めて、2SC1815トランジスタを追加して、下記のような回路にしました。 こちらはオープンドレインの設定はやめて、RB14のHIGH出力は普通に3.3Vとなります。


手持ちの部品の関係で上記のような回路を組みましたが、これも後でON/OFF端子付きの5VのレギュレータICに置き換える予定です。 しかしながらON/OFF端子付きのレギューレータICはチップ部品しかなく、はんだ付けのしずらさが頭の痛い所です。 20200309(+5.0h)





秋月に注文していた5VのレギュレータNJM2884U2-05が届きましたので、下記回路図のようにUSBの電源構成を変更しました。20200317(+3.0h)


2020年2月25日火曜日

PIC32MX USBMSC USBメモリで音声再生4_読みだす単位を4096byteへ変更

20200225(+6.0h)

前回のUSBメモリとのデータ転送とNAKの問題を解決しました。 USBメモリからの1回のデータ転送のByte数をセクタに合わせて512Byteに設定していたのが問題でした。 これを8倍の4096Byteにしたところ、NAKの返信回数が減り、16bit-Stereoのデータもそれなりに再生できるようになりました。


USBメモリをフォーマットする時にアロケーションサイズを指定できます。 このアロケーションサイズに合わせて一回のデータ転送Byte数を設定したいところですが、最近のUSBメモリのアロケーションサイズは8Kbyteや16Kbyteと大きめです。 PIC32MXマイコンはRAMの容量が限られていますで、しかたなく4096Byteとしました。 


PIC32MX USB PLAYER 16bit Stereo 20200225
USBからのデータ転送を4096byte単位にして 16bit Stereo dataの再生に間に合うようになりました。


PIC32MX USB PLAYER 8bit Mono 20200225
比較用の 8bit Mono dataの再生。 USBからのNAKが減り、処理自体が安定しました。

PIC32MX USBMSC USBメモリで音声再生3_何とか再生、しかし、、

PIC32MX USB PLAYER  8bit Mono
開発中の USBメモリから音楽データを演奏するPLAYER のテスト1。 
8bit 1Channel(Mono) のデータを再生し、パソコンのマイクで拾って録音した再生音です。

https://youtu.be/B0l3OPqjvjg



PIC32MX USB PLAYER  16bit Stereo
開発中の USBメモリから音楽データを演奏するPLAYER のテスト2。
16bit 2Channel(Stereoo) のデータを再生し、パソコンのマイクで拾って録音した音声です。
USBの転送レート12Mbps(Full Spead)では、データの転送が音楽の再生に間に合わず、音がわれてしまっています。 手持ちの中でも応答の速いbuffaloのUSBメモリをつかっていますので何とか聞き取れます。 
https://youtu.be/Yj5Gu7LXn14


しかし応答の遅い格安USBメモリになると、NAKの返信が多くなり、まともに音声を再生できません。


2020年2月16日日曜日

PIC32MX USBMSC USBメモリで音声再生2

20200216
wave file の再生プログラムのコーディングで、またまたトラブル発生。
短いテキストファイルを、ダーッと表示するだけならば問題なく表示されるのですが、ちょっと長いwave file を読みだそうとすると途中で無応答となりエラー(オレンジ色)となる現象が発生。

※黄色の'N'の連続は、メモリがNAKを返している部分です。


これは、トークン処理の終了を通知するU1IRbits.TRNIFのONを上手くとらえる事が出来ていない現象でした。

割り込み処理で同じU1IRレジスタのU1IRbits.SOFIFフラグをチェックしているのですが、このビットクリアをすると、ほかのU1IRのビットもクリアされてしまっていました。
これについては、一旦U1IRbits.TRNIFを別変数で保存してそれを参照・チェックする暫定処理を入れて逃げています。 


ここが何とか通ったと思ったら、次は U1EIR.EOFEF(END OF FRAMEを検出)エラーが出るようになりました。これについては、U1SOF(SOF Threshold)の幅を0x4A→0x80に増やしてしのぎました。 20200216(+4h)


先に対応した、トークン処理の終了を通知するU1IRbits.TRNIFのONが上手くとらえる事が出来ない現象ですが、どうやってもまれに取りこぼしが発生します。 
いろいろと検討して、U1CONのトークン処理BUSYフラグの状態とBDTのUOWNフラグの状態を組み合わせてチェックする事で何とか解決出来ました。20200217(+4.0)



2020年2月12日水曜日

PIC32MX USBMSC USBメモリで音声再生1

20200210
USBメモリのアクセスがそこそこ出来るようになったので(アクセス出来ないUSBメモリには目をつむって)、次はUSBメモリを使って音声再生するガジェットを作ります。 WAVE PLAYER/PCM PLAYERというやつですね。

以前作った、おしゃべり時計のプログラムを移植すれば行けそうです。 しかしながら、昔コーディングしたプログラムでは、いろいろ拙いところが目に付くので、手を入れたいところ。。。

まずはFIFOの処理あたりから見直そうと修正したのですが、しかしながら見直したロジックではちっとも動かず。一体なにが悪いのか? 一度作戦を練り直さねば。20200210(+4.0h)




FIFO処理の見直しは一旦横において置いて、以前作ったSpeakingClockからメインとなる処理をCopyしてテストしています。 一日ほどの作業でファイル操作関連の処理がそれなりに動くようになりました。 短いファイルならば問題なくファイルの中のデータを取得表示できるのですが、音楽ファイルはどうやっても途中でUSBメモリの読み出しが途切れてしまいます。20200212(+8.0h)


以前アクセスできなかった アマゾンの格安メモリですが、最初につないだ直後なら、それなりにUSBメモリのファイルにアクセス出来ることに気が付きました。 しかしながら、エラーになるとドライバの初期化手順を実施しただけでは復帰しません。 USBメモリデバイス自体をリセットするような方策が必要なようです。20200214

※左側の青いUSBメモリだけアクセスできない。




UTC7642_AMラジオ Ver.2.0 (2Tr+1IC) スーパーヘテロダイン(1)

 UTC7642を使用したヘテロダイン方式のAMラジオをブレッドボードで試しています。 アンテナとバリコンは、 電子ウサギさんの記事 を参考にスーパー用にしています。 Q2(2SC1815)は他励式の局部発信(OSC)で放送周波数+455kHzの信号を作成し、Q1(2SC1815...