DIV5142の統合コントローラ(PICO)を検討する!の巻き(その2) 2027.11.18
(その1)はこちら
やっぱり忘れていました
以前の検討から2〜3か月経つと、すっかり忘れてしまっているようです。
思い出しながら作るより、すこしドキュメントを残しながら整理しつつ進めていったほうが良さそうです。
ということで、ほとんど備忘録になってしまいそうです。
フィルター構造は2種類用意しましょう!
PCM5142に書き込むフィルタ構造は2種類用意することにします。
biquad_12x2
BIQUADフィルタを12連結したものです。最後にゲイン調整用のスケールを付け足しておきます。
最大の減衰量は12*12=144dB/octになります。BPFとしてつかう場合はその半分の72dB/octです。
減衰量は少ないですが、最大で192kHzまで対応可能です。
2WAYでLPF,HPFで減衰量を288dB/octまで確保する場合はPCM5142を2連結で使います。
biquad_24x2
BIQUADフィルタを24連結したものです。最後にゲイン調整用のスケールを付け足しておきます。
最大の減衰量は12*24=288dB/octになります。BPFとしてつかう場合はその半分の144dB/octです。
減衰量は大きいですが、最大で96kHzまでとなります。アップサンプリングをしない場合などは、この
フィルタ構成を使う方が、基板が節約できます。
1.biquad_12x2の構成
ブロック図です。 <データファイル>
Build結果でcycleは255(<256)なので192kHzまで対応可能です。
<CFGファイル> PCM5142に書き込む命令、データのひな型です。
<C言語テーブル> CFGファイルをC言語テーブルに変換。
係数の格納場所は以下の通り。
L | Biquad_1_1_N0 | 0x0000 |
Biquad_3_1_N0 | 0x000A | |
Biquad_5_1_N0 | 0x0014 | |
Biquad_7_1_N0 | 0x001E | |
Biquad_9_1_N0 | 0x0028 | |
Biquad_11_1_N0 | 0x0032 | |
Biquad_13_1_N0 | 0x003C | |
Biquad_15_1_N0 | 0x0046 | |
Biquad_17_1_N0 | 0x0050 | |
Biquad_19_1_N0 | 0x005A | |
Biquad_21_1_N0 | 0x0064 | |
Biquad_23_1_N0 | 0x006E | |
R | Biquad_2_1_N0 | 0x0005 |
Biquad_4_1_N0 | 0x000F | |
Biquad_6_1_N0 | 0x0019 | |
Biquad_8_1_N0 | 0x0023 | |
Biquad_10_1_N0 | 0x002D | |
Biquad_12_1_N0 | 0x0037 | |
Biquad_14_1_N0 | 0x0041 | |
Biquad_16_1_N0 | 0x004B | |
Biquad_18_1_N0 | 0x0055 | |
Biquad_20_1_N0 | 0x005F | |
Biquad_22_1_N0 | 0x0069 | |
Biquad_24_1_N0 | 0x0073 | |
L | Scale_1_Coefval | 0x0078 |
R | Scale_2_Coefval | 0x0079 |
2.biquad_24x2の構成
biquadフィルタを24連結しています。<データファイル>
命令サイクルは495(<512)なので96kHzまで対応可能です。
<CFGファイル> PCM5142に書き込む命令、データのひな型です。
<C言語テーブル> CFGファイルをC言語テーブルに変換。
係数の格納場所は以下の通り。
L | Biquad_1_1_N0 | 0x0000 |
Biquad_3_1_N0 | 0x000A | |
Biquad_5_1_N0 | 0x0014 | |
Biquad_7_1_N0 | 0x001E | |
Biquad_9_1_N0 | 0x0028 | |
Biquad_11_1_N0 | 0x0032 | |
Biquad_13_1_N0 | 0x003C | |
Biquad_15_1_N0 | 0x0046 | |
Biquad_17_1_N0 | 0x0050 | |
Biquad_19_1_N0 | 0x005A | |
Biquad_21_1_N0 | 0x0064 | |
Biquad_23_1_N0 | 0x006E | |
Biquad_25_1_N0 | 0x007A | |
Biquad_27_1_N0 | 0x0084 | |
Biquad_29_1_N0 | 0x008E | |
Biquad_31_1_N0 | 0x0098 | |
Biquad_33_1_N0 | 0x00A2 | |
Biquad_35_1_N0 | 0x00AC | |
Biquad_37_1_N0 | 0x00B6 | |
Biquad_39_1_N0 | 0x00C0 | |
Biquad_41_1_N0 | 0x00CA | |
Biquad_43_1_N0 | 0x00D4 | |
Biquad_45_1_N0 | 0x00DE | |
Biquad_47_1_N0 | 0x00E8 | |
R | Biquad_2_1_N0 | 0x0005 |
Biquad_4_1_N0 | 0x000F | |
Biquad_6_1_N0 | 0x0019 | |
Biquad_8_1_N0 | 0x0023 | |
Biquad_10_1_N0 | 0x002D | |
Biquad_12_1_N0 | 0x0037 | |
Biquad_14_1_N0 | 0x0041 | |
Biquad_16_1_N0 | 0x004B | |
Biquad_18_1_N0 | 0x0055 | |
Biquad_20_1_N0 | 0x005F | |
Biquad_22_1_N0 | 0x0069 | |
Biquad_24_1_N0 | 0x0073 | |
Biquad_26_1_N0 | 0x007F | |
Biquad_28_1_N0 | 0x0089 | |
Biquad_30_1_N0 | 0x0093 | |
Biquad_32_1_N0 | 0x009D | |
Biquad_34_1_N0 | 0x00A7 | |
Biquad_36_1_N0 | 0x00B1 | |
Biquad_38_1_N0 | 0x00BB | |
Biquad_42_1_N0 | 0x00CF | |
Biquad_44_1_N0 | 0x00D9 | |
Biquad_46_1_N0 | 0x00E3 | |
Biquad_48_1_N0 | 0x00ED | |
Biquad_50_1_N0 | 0x00C5 | |
L | Scale_1_Coefval | 0x0078 |
R | Scale_2_Coefval | 0x0079 |
高次のフィルターの設定は、複数のPCM5142に異なるデータを書き込む必要があります。
フィルターの設定関数をどのようにするかは、すこし悩むところです。
寝ながら考えましょう(笑。
秋の夜長の半田付け 2024.11.19
Renew DIV5142も動くことが確認できたので、今回使用する最大枚数である
4枚のうち、残り3枚を作成です。
PCM5142はすべて新品を使うのは勿体ないので、使わない基板から取り外します。
多分再利用できると思うけど、ダメだったらその時考えましょう。
この基板から2個のPCM5142を再利用しましょう。
ICの周りに半田をたっぷりつけて、左右を交互に温めながらICが動きだしたら、
一気にずらします。半田ゴテ1本でもできます。
取り外したPCM5142の周りの半田をある程度除去です。
このくらい残っていても、基板への半田付けは支障ありません。
合計4枚のRenew DIV5142が出来あがりました。右からNo.1〜4になります。再利用のPCM5142はNO4のCH3,CH4に搭載しました。
およそ1枚作成するのに1時間弱かかりました。3枚作ったので3時間ほどかかりました。
一応、動作確認 2024.11.20
4枚連結しての動作確認です。
4枚のRenew DIV5142とI2Cコントローラを連結しています。
反対から見るとこんな感じ。金属スペーサは10mmのものに1mmのスペーサを入れています。
動作させてみると、なぜか3枚目のRenewDIV5142の出力からプチノイズが観測されます。
残りのRenewDIV5142からノイズはありません。おそらく、接続する基板の枚数が多いため
ダンピング抵抗の不整合が生じているのでしょう。枚数を4枚から3枚に減らすとノイズが解消するようです。
そこで、ソースとなるRenew SRC4137のダンピング抵抗の両端をピンセットで挟むとノイズが消えるので、
そこを短絡させることにしました。このあたりは、ケーブルの長さとか色々と影響がでるところなので、
すこし調整が必要になるところでしょう。まあ、こういった対策も、経験になるので案外面白いところだったりします。
ソースとなるRenew SRC4137の出力のダンピング抵抗の一部(DATAライン)を
短絡させると、プチノイズが消えました。
突如、PICO(もどき)があ〜
PICO(もどき)にプログラムを入れるためには、最初にBOOTボタンを押しながらRESETスイッチを押します。
そうすると、PC画面上に仮想ディスクが現れるので、そこにバイナリーであるUF2ファイルをドラッグしてやります。
しかし、いきなりそれが出来なくなってしまいました。
何度BOOTボタンを押しながらRESETスイッチを押しても、仮想ディスクが現れません。
ひょっとして壊れた?
おもむろに、違うPICO(もどき)に差し替えてみたとろこ、正常に動き出しました。
ひょっとして壊れたのかなあ〜。とりあえず、シールを貼って分別です。
なぜか動かなくなったPICO(もどき)です。
しばらくしてから、もう一度と思って不良シールを貼ったPICO(もどき)を差し込んでみたところ、
なんとプログラムの書き込みができるようになりました。で、問題はプログラムは書き込めて
RenewDIV5142も動いているようなのですが、今度はQVGA画面が真っ白のまま動いていません。
こちらが直ったら、あちらが壊れる?というパターンかな?
ひょっとしてCPU(RP2040)の半田付けが悪いのだろうか?と思ってルーペで見てみますが、
よくわかりません。そこで、ダメ元なのでCPUの周りにフラクスを塗って半田ゴテで撫でまわすことに。
そうすると、なぜかQVGAも動き出しました。これが功を奏したかどうかわかりませんが、
とりあえず復活です。まあ、また動かなくなるまでしばらくこのままで使いましょう。
ダメ元でCPUの周りにフラクス塗って、半田ゴテを当て直してみました。
これが功を奏したかどうか不明ですが、また動き出しました。
他の表示器も試しておきましょう!
QVGAは表示文字数が多いのとグラフィックなどもできるので便利ですが、従来通りのLCDも
捨てがたいものがあります(レトロ感に浸れる)。
LCDも取り付けられるようにしているので、こちらも動作確認です。
ただ、PICの動作速度を見込んだプログラムになっているのですが、PICO(もどき)だと、
かなり高速なのでパルス幅などがギリギリになってしまいそうなので、PICO用にすこし
ライブラリを修正です。
バグ発見!(その1)
簡単なプログラムを組んで動かしてみようとしましたが、全然反応なし。
オシロでピン電圧を観測しますが、動いていません。どうやら74LV164の出力
がまったくでていません。調べてみると、本来VCCに接続されている箇所が
間違ってGNDに接続されていました。
ということで、修正です。
黄色部分を削除して、水色の線をジャンパーで飛ばします。
修正例です。あれ?髪の毛が映っているぞ?
これでOK
あたらためて秋月のSC2004のLCD(5V用)を接続して動くことが確認できました。
秋月のSC2004が動作しました。
中華LCDもテスト
秋月のLCDはすこし高いので、20x4のLCDはもっぱらALIで購入したものをつかっています。
だいたい送料込みで700円程度です。このLCDのいいところは、ピンがインラインなのでブレッドボードに
使い易いです。なおバックライトLEDの電流制限抵抗は100Ωにしています。
中華LCDも動作しました。
中華LCDを使用する場合には基板に修正点がありました。これは、動作させる前に気付いたのですが、
WR端子(5番ピン)がGNDに接続されていなかったので、これを接続です。ベタを削って接続しても
よかったのですが、GND端子(1番ピン)も近いので、そちらとジャンパーしました。
中華LCDを接続する場合は、1番ピンと5番ピンを接続します。
残る表示器はOLED(128x64)だけど、これは日を改めましょう。
もう、寝なくっちゃ!
(つづく)