PotのAD8403の処理速度を調べてみた。DevicesのSPI接続のデジタル・ポテンショメータのAD8403の処理速度をArduinoとNucleoで調べてみた。Uno配線は「Arduinoでデジタル・ポテンショメータメーター(AD8403)を使ってみた」のものと同じ。HIGH);}AD8403への出力はノーウェイトで0と255を切り替えている。slaveSelectPin(CS)がアクティブ(L)の時間を見ればAD8403に値を送るのにかかった時間がわかる。ch2:SCKCSがアクティブな時間は9.680us。SPIクロック(SCK)は3.538MHzとなっているが、拡大してオシロのカーソルで測ると約4MHzだった。2回目のSPI.transfer()の後、CSをHiにするまでに結構時間がかかっているようだ。1のWiperの出力電圧で、プログラムでここの電圧値を制御している。CSがL->H、つまりSPI通信が終了したタイミングでほぼ遅延なく送った設定値が反映されている。F446RE配線はArduinoと同じ。}}メインループ内でwait_us(1)を入れているが、これは処理が速すぎてオシロで信号が見辛かったため。AD8403の最大クロックは10MHzなので、SPI_CLOCKを1MHz、6MHz、12MHzにして測定してみた。ch2:SCKCSがアクティブな時間は26.240us。ch2:W1Arduinoと同じくCSがインアクティブになってからほぼ遅延なく設定した値が出力されている。CSCS:7.820us。SCKは拡大して測ると5.627MHz。CSCS:6.220us。SCKは拡大して測ると11.25MHz。F303K8F303K8はSPIクロックを1MHz、8MHz、16MHzにして測定。CSCS:34.6us。SCKは拡大して測ると約1MHz。CSCS:20.8us。SCKは拡大して測ると約8MHz。CSCS:20.84us。SCKは拡大して測ると約16MHz。Unoがかなり健闘している。SPIクロックが同程度ならNucleoF446REと同じぐらいかもしれない。Unoよりも悪い結果となってしまった。F446もF303もコアは同じCortex-M4だが処理能力はかなり差がある。いう付録がついているので見てみると、F3はADC、DACなどのアナログ機能やPWMなどのタイマ機能が充実しているそうだ。使いこなすにはもう少し慣れる必要がありそう。細いテスタ棒(プローブ)を作ってみたブレッドボードやピンソケットに挿すのに共立で売られているQIピンを使ってブレッドボードやピンソケットにさして端子としてつかっている。最近は同じタイプの圧着ピンがaitendoや秋月でも販売されています。秋月でテストピンジャックというのが売られていて、普通のテスタ棒に直接挿すことができる。これを組み合わせれば、何かとべんりなテスタ棒(プローブ?)になるんじゃないかと思って試してみた。テストピンジャックの穴と、QIピンのひらいてるところの幅が同じぐらいなので、ラジオペンチで合わさるように圧着した。圧着して固めたあとにハンダ付け。熱収縮チューブでいらないところを絶縁。テスタ棒にぶっ刺します。これでブレッドボードにテスタ棒を直接刺すことができるようになります。ピンソケットにもさせます。MDFで木枠を作った。ダイソーで売っている6mm厚のMDFで木枠を作ってみた。切り出しで失敗MDFはやわらかいのでカッターで軽く溝を掘ってノコギリで切断したが、ずれてしまって切断面がガッタガタ。使ったノコギリは細工用というやつで、薄刃で細かい作業に便利だが、刃渡りが12cmしかなくて切り出しはかなり疲れた。翌日あちこちが筋肉痛になってしまった(@@;板材があまっているので新たに切り出そうかと思ったが、ミスったところは組み上げたときに外からあまりわからない感じで使うことにした。木工用ボンドで接着して、木ねじで固定。ついでにパンツのゴム(ダイソー)で(かなり弱いが)圧をかけた。放置して補強用に隅に三角材(これもダイソーで売ってた)を接着してさらに丸一日放置。組み立て底板はクリップボードを切り出したプラ板。新しいのがもう売ってなかったので使いまわしです。見栄えを良くするために別に側板を作って、木ネジで固定。6mm厚のMDFに2.1mmの木ネジを使ってみたが木端(?)だと板がわれてしまいました。厚ければ大丈夫なんだろうか。この辺は経験を積むしかなさそう。見栄えを良くするために、前面に天板と同じプラ板を切り出して両面テープで貼り付けてみた。最初は考えていなかったので、側板とずれていてイマイチ。いえ、ダンボール枠より外観、強度は良くなったと思う。Revision3メモ:ベースマシンの筐体用の木枠も作ってみたい。加工しやすいMDFでも手作業でノコギリで精度良く切断するのは難しい&かなりの重労働。切り出しやすいサイズのノコギリを買ってみる?いっそのこと電動ノコとか。ホムセンの切断サービスを利用する?平ネジ用のザグリの入れ方ももう少し考える。太めのドリルでザグってるが、収まりが悪い。F303K8でも内蔵DACとMCP4922の処理時間を比較してみた。ブレッドボード配線図プログラムはNucleoF446REの場合と同じです。ch2:SPI_SCKMCP4922に出力完了するまで、21.04usかかっている。ch2:SPI_SCKSPIクロックに16MHz指定した場合、SCKの周波数は表示では15.98MHzとなっているが測定誤差で16MHzだと思う。2.8us32MHzまでは設定値通りのSPIクロックが出力される。F303は64MHz駆動で、SPIクロックはマスタークロックの1/2まで設定できるんだと思う。MCP4922の仕様ではSPIクロックは20MHzまでだが、32MHzでも動作した。NucleoF446REと比べると、SPIクロックを上げてもSPI通信の処理時間はあまり短縮されない。DACのMCP4922の速度を比較する結論から言うと、内蔵DACの方が圧倒的に速かった。F446RE内蔵DACの処理時間を比較してみた。}}Nucleoをmbedで使って、SPIの周波数設定をするとちょうどの周波数にはならない。マスタークロックの分周比なのだと思う。いうハードウェア寄りの使い勝手はmbedの弱点ではあります。SPI::frequency()でSPIクロックの周波数を変えて測定してみた。Channelが同期して同時に電圧が出力されるが、LDACをL(GND)に落としておくと、CSのアクティブ/インアクティブで制御できるようだ。配線や処理時間のコストがシビアな場合は役に立つと思う。ch2:内蔵DACMCP4922から出力すると、27.3usかかる。内蔵DACは700ns(0.7us)で済む。ch2:内蔵DACSPIのクロック周波数を上げるとMCP4922でも6.8us(≒147kHz)で済む。ch2:SPI_SCKSPIのクロック周波数は22.44MHz。クロックが高周波数になるとダンピング抵抗を入れていても波形が怪しくなる。MCP4922の最大周波数は20MHzなので仕様外だが、VOUTAから波形は出力される。ch2:SPI_SCK高クロックになると、8bitずつのSPI通信の間隔が開くようだ。F446RE(mbed)でA/DコンバーターのMCP3008を使ってPOTの値を読み取るようにしてみた。出力は内蔵12bitDACから、A/DコンバーターとのSPI通信はSCK、MOSI、CSに33Ωのダンピング抵抗を入れた。MISOは1kΩのRでプルダウンした。オーディオ出力波形は前回と変わらない。ch2:SCKSPIクロック(SCK)が419.7kHzとなっているが、MCP3008クラスがSPIオブジェクトをコピーして持つ仕様になっているようで、MCP3008クラスのコンストラクタを呼び出す前にSPI.frequecy()を呼び出さないとクロックの設定が反映されないようだ。デフォルトの周波数になっている。SPIオブジェクトの周波数をローカルで設定をしないとダメなので、しばし保留。参照かポインタでSPIオブジェクトを持つように変更する予定です。MCP3008/16chの読み取り時間がわかるようにしてみた。ch2:SPI_SCK50kHzの割り込み中の処理時間は5us。プログラムで48kHzに設定しているのでちょっと速い。SCK(クロック)が出力されているのでSPI通信は非同期で行われているようだ。普通、SPI用ハードウェアはレジスタに値を設定してやれば、CPUと独立して勝手に通信を行ってくれる。mbedでもこの仕組が効いているんだと思う。ch2:SPI_SCKエンベロープ生成には3usかかっている。ch2:D3わかりやすいようにD2とD3を同時に測定。48kHzのサンプリングレートだと周期の1/4を処理に使っているので、まだ余裕がありそう。ch2:SPI_SCKMCP3008の16ch分の読み取りに0.732msかかっていて、その間SCKが出力されている。A/Dコンバーターの読み取りはメイン・ループ内で行っているのでエンベロープ生成、波形出力の割り込みが優先される。ダンボールver.でけた枠は、ダンボールの作ったもの。崩壊寸前で見た目も残念な感じなので近いうちに木材で枠を作り直すつもりです。Moogや、MPCっぽくしてみたいところですが、枠の塗装はのちのち。ハンダ面MCP3008が2個の16チャンネルのADC基板。A/DコンバーターのMCP3208もピンコンパチなので差し替えられる。ADCにつなぐマスター側のプログラムの変更で対応できると思う。PINOUT_0、PINOUT_1のピンヘッダで、可変抵抗で分圧した電圧を直接取れる。裏面パネルはダイソーで売っていたクリップボードを切り出して使った。最近プラ製ではなく紙製のクリップボードしか売ってなくて困っている。ホムセンのアクリ板は結構お高いので気軽に試しにくいです(^q^;配線は去年の正月買った共立の福袋に入っていたBELDENの8503というケーブルを使ってみた。このケーブルは線材が固めでパネル取付型のPOTなど空中配線するときには使いやすいと思う。線材にクセをつけられるので手で押さえていなくてもはんだ付けしやすい。どっちにしろ、はんだ付け箇所が多いのでめんどくさいです。量産する場合はプリント基板に基板取り付け型の可変抵抗でしょうか。POTは40円、つまみは30円のものを秋月で仕入れたので、パネルだけだと材料費は1200円ぐらいです。PotのAD8403の処理速度を調べてみた。MDFで木枠を作った。PizzaBoxの構想NucleoF303K8を買ってみた。ADCのMCP3008をNucleo(mbed)で使ってみる。ADCのMCP3208をArduinoとNucleo(mbed)で使ってみる。