LA5034というロジックアナライザを買った。ロジックアナライザは既に、以前秋月電子で買ったZEROPLUS 16064を持っていたが、FPGAのデバッグで使うとチャンネル数が16では明らかに不足であった。なので32ch以上のロジックアナライザを探していたが、eBayでなんと34ch、500MHzサンプルのロジックアナライザが180$前後で売ってるではないか。  さっそくeBayに登録して落札してみたのだが、この後ヤフーオークションのような面倒くさい手続きが当然必要なのだと思っていたが、Paypalで金を払ったらそれでお終いで拍子抜けした。このお手軽感にはAmazonで買うのとほとんど変わらない。自分が買ったのは185$で送料が5$、計190$程度で買えた。最終的にカード会社に来た請求額は日本円で15011円であった。このスペックのロジックアナライザがこの値段で買えるとはチャイナパワー恐るべしである。注文から一週間で中国からEMSで商品が届いた。


LA5034_Set.JPG
本体+付属品


LA5034_Prove.JPGプローブ



LA5034_hikaku.JPG
ZEROPLUS16064と大きさの比較

 本体の寸法は約15cm*15cmの正方形である。ZEROPLUS16064と比べると結構大きい。
 
 34chという少しキリの悪いチャンネル数だが、これの理由は2つある外部クロック入力ACLK、BCLKを内部クロックで使う場合には普通の信号入力として使えるからだ。なので外部クロックを使う場合にはチャンネル数が減ることになるので注意が必要だ。

LA5034_Software.png
 自分のPCはWin7 64bitなのだが付属のドライバで問題なく動いた。肝心の波形表示ソフトであるが、微妙なインターフェイスで正直あまり使い勝手はよろしくない。バスの数値表示は2進数、16進数、10進数に対応している。10進数は符号付き整数を扱えないのが痛い。あとアナログ表示にも対応している。これはZEROPLUSのソフトには無かった機能なのでありがたい。シリアルバスはCAN,I2C,SPI,RS232Cに対応している。

ちょっとしたアイデアというかメモ

 FusionPCBでヘッドフォンアンプの基板を作ろうかどうか悩んでいて、基本は前に作ったヘッドフォンアンプの回路を流用する気だけど、なるべくシンプルな構造にしたいので前面のスイッチを無くして、プラグを挿入すると電源が入る仕組みにしたいと思った。

 いろいろ調べてみたのだけど巷で売っている二個スイッチ付きの3.5mmのオーディオジャックの回路ってのはほとんど下記のようになっていた


2sw_with_2ch.png

 これを前記のような使途に使う場合の問題点はスイッチの入力がアンプの入力部分に来てしまうことだ。これだと挿入を検知してリレーを作動させるようなような回路に使うのは、相当の工夫が必要だと思われる。多分これは下記のように接続して出力をスピーカーと切り替えるような使い方が正しいのだろうと思う。

2sw_with_2ch_imagine.png
 市販のスイッチ付きジャックがほとんどこのような用途向けなのでどうしたものかとかなり悩んだ。その結果ボリューム付きヘッドフォンなどで使われるリングがひとつ多い4接点のプラグ用のジャックを使えばうまくいくのではないかと考えた。下記のように結線する。

mult_jack_sw_exsample.png
 上の図で抵抗が接続されている部分が追加の端子で、普通この接点はリモコンやボリュームなどのアプリケーションに使われるが、普通の三接点のヘッドフォンのプラグを挿すとこの部分はGNDに落ちることを利用している。多分これで行けると思うが、まだ実際に回路を組んで検証したわけではないのであしからず。
RIMG0075.JPG

今作ってる物。製作中の物を晒すのもアレかなあとも思うのだけど、とりあえ動くものができたので中間報告。

 発端はfoobar2000のChannel Spectrum Panel (こんなん↓)
 をFPGAと秋月300円液晶を使って再現できないかなって思ったこと。まあ一番は学習目的っなんだけども。秋月液晶知らない人はここでも見てください。数年前にニコニコとかでも動画がうpされたりしたけど、今じゃ正直もう大分旬が過ぎた感は否めない・・・のだけど、当時の僕はこの横長のディスプレイを見てピコーン!となったわけです。

基板表
RIMG0085.JPG
基板裏
RIMG0082.JPG

 こうしてみるとゴミみたいなんだけど、HDLなんか全く知らない状態から始めたので作るのに一年以上かかってるという。LatticeXP2基板にはロジックアナライザに繋ぎやすいように、上下両方にピンヘッダを装着してある。一部ピンヘッダが刺してない所は特に意味があるわけじゃなく手持ちのピンヘッダが無くなっただけという。あと写真に写ってないけどこれの他にDAI(CS8416)基板がある。

構成:
 液晶:秋月液晶LTA042B010F
 FPGA:デジタルデザイン誌付録 LatticeXP2 CQ-FRK-LXP2
 SRAM:CY7C1041DV33
 DAI:CS8416


 処理の流れとしてはSPDIFから送られてきたデータをまずDAIで受けて右詰フォーマットにしてFPGAに送る。それから2048点でFFTしてからスペクトル化、バッファに書き込み。その後SRAMのデータを読み込んでドットクロック4MHzで秋月液晶に出力してる。VRAMには秋月で売られてる高速SRAM CY7C1041DV33を使用。これでダブルバッファ(左右合わせて四画面分)を作って出力している。FPGAの動作クロックは64MHzと超余裕なんだけどそんなんでも60FPSが簡単に達成できている。
 これからの予定は今のところ横軸(周波数方向)がギターの指板のように純粋に対数的になってるのでこれを人間の聴覚に合わせて低域と高域の領域を狭めて、3000Hzあたりの人間の聴覚が過敏なあたりの周波数の領域を広げたい。(ラウドネス補正)
 今2048点でやってるFFTのポイント数を二倍にしたい。秋月液晶の解像度は400x96と大した事無いんだけど2048点でもまだまだ低域の解像度が不足する感じ。2048点でFFTしても出力結果の半分はナ イキスト周波数以上のノイズであるから捨てなきゃいけない。実際に有効な結果はその半分の1024個で、出力結果の周波数は20Hz、40Hz、 60Hz、80Hz・・・と等差数列なので、対数的な人間の聴覚に合わせて横軸を割り振っていくと、低域の解像度が全然足りない。だけど高域は逆に余りま くってくるので表示されないスペクトルは間引きする。
 FFTポイント数を二倍に上げると基底周波数1/2になると、出力周波数の差も半分になって10Hz、20Hz、30Hz、40Hz・・・となる。なのでポイント数を上げると低域の解像度が少しはマシになるという原理。
 ポイント数を上げるのは速度的には問題無いのだけどリソース的に厳しい。今現在9個あるLatticeXP2の組み込みRAMのEBRRAM(18bit*1024)はFFTのIPコアだけで5/9食っている。あとDAIから送られてきたデータを保存するのに2048*16*2(LRch)で4/9食って空きが無い。その状態でさらにポイント数を倍にするとFFTのIPコアに使うメモリは9/9で、全部それだけでEBRRAMを食ってしまう。なのでDAIから送られてきたデータを組み込みRAMでなくSRAMのブランク領域に書き込まなければならないのだけど、SRAMにアクセスするmoduleが増えると制御が凄くめんどくさいことになりそうだ・・・

後やりたい事箇条書き。

・高さに応じたスペクトルの色付け→大きいスペクトルほど明るい色にしたり
・ピーク表示
・なるべくかっこいいケースにに組み込む
・ADCをつけてマイク入力、Line入力に対応 

動作中の様子
音が出るので注意




***


蛇足だけど、最近はATX電源を再利用して実験用電源として使っている
Wikiを作った

Wikiを作った

メモ帳代わりにwikiを作った。基本的にFPGA関連のネタ。

リセット回路考察

 先日作ったDACなのだが、AK4112Bを使ったDACを作った時のようにまた電源ON時にリセットが失敗して信号が出力されないことがあった。今回もリセット端子にRーCディレイで一応100msほど遅延をかけて対策を取ったつもりだったのだが、どうもCS8416のリセットはもっとナイーブな様子。
 Webで公開されているほかの人のCS8416を使った回路を見ると、リセットICを使ってリセットをかけているものがあったが、たかがリセットかけるのにIC使うのもどうかと思うし、ディスクリートで簡単に組める気がしたので、以下のようなリセット回路をDACに追加してみた。
 
 
schematic.png

R-Cで作ったディレイ回路ではなく電源のしきい値電圧でリセットをする。

 
Voltage.png
LTSpiceでの解析結果
 
 
 電源電圧が徐々に上昇していき4.5V付近でトランジスタがONしてリセットがかかっているのがわかると思う。この回路を追加してからは電源ONリセットで起動が失敗することは無くなった。

AK4395 + CS8416 DAC

 前回に引き続きまたDACを作った。資格の試験が終わって時間ができたので、買ってから長い間放置していたCS8416を使ってデジタルフィルタ内蔵のものを作った。 
 

DAC3rev3.png
適当な回路図

dac3front.JPG
  dac3back.JPG
裏 
5VのLDOレギュレータ29M05は家の近くのジャンク屋で超破格の100個入り100円で売っていた。使い切れないな、確実に・・・

   DACの製作も3個目となると大分慣れてきて基板の設計やらなんやらは一日ほどで終わり。組んでからも一発で動いた。DAIに使ったCS8416は自作DACでよく使われるSPDIFレシーバで24bit 192KHzまでに対応している。共立電子で購入、結構高くて一個1200円ぐらいした。DACに使ったAK4395は旭化成の24bitデジタルフィルタ内蔵DACだ、これは手元にあった。

前作ったuPD6376はフィルタレスなのでどのぐらい違いが出るかオシロで確認してみた。
 

hikaku.jpg
サンプルレート44.1KHz 量子化ビット16bit 周波数1KHzの正弦波 上がPD6376 下がAK4395 の出力波形
 
 
 見た目で大分違う。PD6376の方はサンプルの継ぎ目で階段状の高調波が出ているが、AK4395の方はなめらかになっている。まあスピーカーを通して聴いた感じだとほとんど違いはわからないけれど・・・。
 
 
***
 
 
 もうDAC作るのはいいな。満足した。今度は雑誌付録のFPGA(Lattice XP2)が買ってからちょっといじって放置プレイなのでこれでなにかしようか考え中。
uPD6376 + AK4112B DAC

ak4112Bdac1.jpg
 手持ちのICが余ってるのでまたDACを作った。チップ間の配線はポリウレタン線を使用。電源レギュレータは面実装の物を使った。TO-220の物と比べて高さがかなり減るので良い。
 
 最近は回路を組んでもわりと作ってから一発で動くことが多かったのだがAK4112Bには少し苦戦した。電源を投入してもBCKピンからクロックが出力されなかった。原因は起動直後の電源が不安定な時期に立ち上がってしまい、電源が安定してからもERRORフラグが立った状態だとPLLがONしないのでクロックが出ない。
Reset.png
 
 要するに電源が安定するまでRESETピンをLOWに固定しておけば電源が不安定な時期に起動してエラーになるようなこともないのでこのようにして起動から数m秒後立ち上がるようにしたら無事BCKからクロックが出るようになった。
 
 
ak4112bdac_case.jpg
 
LEDはERRORフラグが出ていないときに光るようにした。