F401同士でSPI通信してみる。F401RE(mbed)にしてSPI通信してみた。F446REが欲しかったのだが秋月で売り切れていたのでF401REをもうひとつ仕入れた。DAC他周辺機能も大幅に強化されていて1600円。mbedで使ってもメリットはいろいろありそう。配線図Slave側のファームウェアは前回のまま。}}メモ:この回路では関係ないが、タクトスイッチでInterruptInのテストをすると、以前やった時と同じようにmbedのInterruptIn::mode()でPullUpを指定しても内部PullUpされなかった。F401REでmbedのInterruptInが動作しない。割り込み信号を立ち上がりで補足するInterruptIn::rise()でISRを指定すると割り込みがかからない。立ち下がりで捕捉するInterrupt::fall()だと割り込みがかかった。割り込み信号Vonが120nsぐらい。電源の逆接続にダイオード1本でなんとか対策できないか調べてみた。電源は過電流でシャットダウンする対策が取られている3端子レギュレータを想定。LDOのTA48M033Fで実験してみた。電源ラインからGNDにダイオードを逆接続これは逆電圧がかかった場合ダイオードに電流を流してRLに流れる電流をなくすという回路1)の電源ラインにダイオードを入れるとダイオードの順電圧Vf分(0.6V程度)電圧降下してしまうので「電源ラインにダイオードを入れる」作戦は不採用。できるなら3端子レギュレータの前に入れるべきだと思う。電源ラインからGNDにダイオードを逆方向で入れて実験してみた。使って5Vを出力し、TA48M033Fで3.3Vに降圧&安定化。RLは220Ωの酸金にした。-4.2ダイオードがショットキーダイオードの場合も整流用の場合も逆電圧をかけると、5V電源の赤色LEDが点滅。Ver.2は出力電圧が5V以下になると赤色LEDが点灯するようにしているのでLDOのTA48M033Fの出力過多を抑止する機能が働いているんだと思う。メモ:実験の結果、15mAを負荷に流すと2)の回路でも3.3Vの電源が2.7V~2.8V程度にまで電圧が落ちてしまうようだ。ダイオードの逆方向電圧だと0.6Vの電圧降下は大きすぎると思うけどよくわからない。逆電圧をかけた場合も、ショットキーダイオードの方が保護に役立っていそう。<追記:2016.09.29>正電圧の場合の0.6V程度の電圧降下は電流計(テスタ)による電圧降下だった。電流計を外して(ショートして)測り直した。-1どちらの場合も逆電圧にした場合、ブレッドボード上の三端子レギュレータがかなり発熱したので計測中止。徐々に電圧が下がって落ち着くが整流用ダイオードの場合は発熱のため落ち着くまで計測しなかった。ダイオード1本の逆電圧対策にはショットキーダイオードの方がよさそうで、正常時には電圧降下はほとんどない。Slaveにして通信してみる。配線図Nucleo(Slave)のCSピンはArduinoのようにD10にすると実行時にSerial経由でエラーが表示される。F401REのピンアウトを見ると、A2がSPI1_NSSとなっているので、こちらに設定したら動作した。Select)に前置しているんだと思う。<追記:2016.10.01>シリアル経由のエラーメッセージ</追記>SPIの信号線だけではSlaveからアクションを起こせないので、SPIとは別に外部割込みを配線(Nucleo:PC_7→Arduino:D2)し、Nucleo(Slave)からArduino(Master)に割込みをかけてMasterからSPI通信を開始するようにした。F401REの商品説明によると「GPIO数:50(5Vトレラント、一部を除く)」となっているので5V→3.3Vのレベルシフトはしないで直結した。definitions」にどのピンが5Vトレラントなのか載っていた。type」がFTとなっているピンが5Vトレラントで、LQFP64パッケージのI/Oピンはすべて5Vトレラントのようです。VREFとBOOT0(何をするピンかはよく調べてない)は5Vトレラントではないので要注意です。Master)でタクトスイッチ×6の押し下げ状態を取得。Nucleoからの返値は無視。NucleoはmbedのRtosTimerで一定間隔でカウンタをインクリメントし、SPI通信の返値にセット。カウンタをインクリメントした時に一度だけArduinoに外部割込みをかける。Arduinoは外部割込みがかかったときNucleoにSPI送信(Master→Slave)し、返値にセットされているカウンタ値をLEDx4に表示。true;}Nucleo(Slave)のプログラム(mbed)https://developer.mbed.org/users/ryood/code/Nucleo_rtos_SPISlave_Test/mbedのLibraryは個人的に動作実績のあるRevisionを使うことにした。Masterにinterruptをかける。}}SPI通信のようす。ch2:SCKArduinoへの外部割込み信号とSPIのSCK信号の間隔は最大5マス程度で変動する。ch2:MISOSPIのMOSIとMISOは同時にデータを送り合っている。SPI2016年9月25日日曜日ベースマシンの音出し動画プログラムや配線を大幅にいじる予定なので動かなくなったりしたら悲しいので、現状で音出しした動画を作ってみた。Webカムとライン撮りの方法がよくわからないので、スピーカーから音を出してWebカムのマイクで録音した。ベースマシンLME49600のヘッドホンアンプを仮のケースに収めてみた。140」に入れてみた。コネクタがフタと干渉するのでやすりで削ってみたが、巨大な電解コンデンサが邪魔をしてちゃんとフタが閉まらない。ケースへの組み込みは仮組なのでフタは適当にセロテープとかで固定しておくことにする。I/Fがボロいせいなのか環境ノイズのせいなのかよくわからないので突き詰めた計測はできなさそうだ。ステップ応答は自作の矩形波だけのファンクションジェネレータとOWONのオシロを使って測定できるかもしれない。US-144MKIIのヘッドフォン出力よりかなり低音がタイトな感じがする(音量をあげても低音が気持ちいい)。A/IFのヘッドホン端子から出してるのだが。そもそももう10年近く使っているヘッドホンがヘタっててあやしい気がするが、それもまた相性。Kitでサーミスタを使ってみる。Kitに移植してみた。UART通信に加えて、キャラクタLCDに値を表示するようにしてみた。KitをUSB接続しないとシリアル通信がうまくいかない。BridgeをResetしないとダメなのかも?Teratermは接続しなおさなくてもシリアル出力を読み取れるようだ。103AT)を使ってみる。素子の温度を測りたいのでサーミスタを使ってみた。以前、I2C出力のHDC1000を使って温度湿度を測定する実験をしてみたが、形状が素子の温度測定には使いにくそうなので(貼りつけられなさそう)、部品箱で眠っていたサーミスタの103ATが使えるかどうか実験してみた。Kit高機能テスタだと熱電対というセンサーを使って、PCにもロギングできるようだ。いずれは買うかもしれないとして、なるべくお金をかけないように手持ちの部品で考えてみた。ロギングで一番楽なのはPCとUART通信すること。UARTでCSV形式のデータを出力できれば、CPLT(http://www.datatecno.co.jp/cplt/cplt-download.htm)を使ってロギングやグラフ化が簡単にできる。Arduinoがいちばん使い慣れてるが、UART通信しようと思うとArduinoをまるまる使わないといけない。aitendoのあちゃんでいいのは安いけどUART通信には別途それ用の回路が必要。4を使ってみることにした。Kitでテストしてみた。TopDesignPSoCにはThermistorCalcというコンポーネントがあってサーミスタの抵抗値->温度を変換してくれるので使ってみた。ソースをチラ見するとSteinhart-Hart式の定数を生成して計算してくれるマクロのようだ。CalculatorのDATASHEETを見ると、抵抗値によってインスタンスを分割したほうがいいようなことが書いてあるのでlow、mid、highの3つに分けてみた。D_1のZennerで2.5Vの定電圧源とし(ツェナーは正確な電圧を出力できないので、実際は基準電圧を作るのにTL431を使った)、Opamp_1のボルテージフォロワーで基準電圧の出力を増強。R_2のサーミスタとR_refで分圧してそれぞれの電位差を差動モードのADCに読み込ませた。ThermistorCalcのGetResitance()はこういう分圧と測定の仕方で電圧値を与えてサーミスタの抵抗値を算出しているようだ。Kitを持っているので両方試してみた。PSoCは割と自由にPin配置が決められるが、完全に自由と言うわけではなく機能によって使えるPinが決まっている。Kit(600円@秋月)は同じCY8C4245AXI-483を使っている。CreatorのExampleの「CharLCD_CustomFont」プロジェクトをベースに、DWRエディターで割り当てるPinを変更しながら実験した。P1は使えないようだ。Kitの方はP1[6]もヘッダに引き出されているが、CharLCD用にP1[7:1]を割り当てるとちゃんと表示されなかった。信号線にLEDがつながっているので何か影響があるのかもしれない。Kitはまたまた認識されにくくて困った。コントローラー」にあやしいデバイスが表示される場合(プロパティを見ると、製造元がCypressになっている)、Windowsを再起動すると認識されるようだ。コントローラーの項の囲みのような項目が表示される。Hostで書き込む場合Baudが115200になっていないと書き込みに失敗する。4ではPort[P1]を避ければCharLCDを使えそうだ。5LPでCharLCDがポートによってちゃんと使えなったのは実験ミスかもしれないしPSoCのバグかもしれない。5LPをまた使う機会があれば調べてみたい。音出しチェックiPad3で音出しチェックをしてみた。音出しチェックをする前にもう一度入出力チェックをしてみたが、片チャンネルが出力されなかったりして不安定。絶縁されているべきところがテスタで測定すると数100kΩになったりする。ICを挿さなくても回路にコンデンサが入っているので特定がなかなか難しい(@@;ポリウレタン線を使って2層目を配線しているが、これが原因だと思う。熱を加えたり、ひっかけたりするとポリウレタンの被覆が簡単に破損するので、下に配線しているすずメッキ線と導通したりしなかったりな状態になるのかもしれない。ジャンパ線をはずしてポリイミドテープで絶縁して配線しなおした。ポリイミドテープで絶縁しても、真面目に考えるなら導線と導線の間がポリウレタンとポリイミドで絶縁されているので容量成分(キャパシタ)として働いていそうだ。オーディオ回路だとpFレベルは無視しても良さそうだがよくわからない。はんだ面でのジャンパー配線は、はんだ付けのテクニックが必要なのでユニバーサル基板でも配線しやすくするためにジャンパーの距離をできるだけ短くするように工夫して、部品面側でジャンパー配線した方がいいかもしれない。eagleでそういう配線を作図する方法がわからないので今までしていなかったが、次回は考えてみる。ヘッドホンで聴くと今まで作ったヘッドホンアンプの中では一番いい感じだと思います。気分の問題かもしれないですが(^q^;特性の測定はまたいずれ。LME49600のデカップリングコンデンサLME49600のデカップリングコンデンサを基板に付けた。できるだけICに近いところがいいので変換基板に付けるべきだと思うが、LME49600はGND線がないのでピッチ変換基板にはGND線は引き出せなくて基板設計の時はあきらめていた。変換基板の使っていない側の6~10PinにGND線を引き出せば変換基板上でデカップリングコンデンサをつけられるかもしれない。メモ:KESTERのはんだはコネクタのはんだ付けに向いていると思う。DCサーボでDC成分はキャンセルされるので、入力のACカップリングは外した。PCM2704の出力を直結するとちょっと怪しいこともあったが(参考「LME49600とPCM2704基板をつないでみる実験」)これはPCM2704の出力でACカップリングしてなんとか対策する。PCM2704の直出し以外のDCバイアスのかかっていない音源だとACカップリングするのはもったいない。電源ケーブルのコネクタをターミナル・ブロックをやめて方向が固定されるコネクタにした(共立で売っているAMP製EI)。電源の逆刺しは回避できるのでポリスイッチも除去。導通テストした後、入出力の状態をかんたんに見てみたが正常動作しているようだ。導通テストは手持ちのテスタだと0.1Ωまでしか計れないので0.0Ω以上になっていないかチェックした。ハンダ面0.6mmφのスズメッキ線と0.6mmφのポリウレタン線で配線。はんだは正月に共立で買った福袋に入っていたKESTER44を使ってみた。いつも使っているGOOTのハンダと比べると濡れがすごい。フラックス除去剤で掃除しておいた方がいいかも?接続ケーブルを作って音出し&測定する予定。パターン切替スイッチをつける構想。SDカードにパラメータを保存しようと思ってArduinoでSDカードの実験をしてみたが、そもそもシーケンスのパターンが切り替えられない。いくつかスイッチを並べてパターンの保存、呼び出しをできればいいのだが、4x4のキーパッドを使ったことがあるのでこれを使ってみることを考えた。32bit/384kHzのDACのPCM5102を使ったファンクションジェネレータを作った時にこのキーパッドは使ったことがあるので(「参考:オーディオ用DACを使ったファンクションジェネレータ」)とりあえずこの方向で考えてみる。メンブレンで押し心地はあまりよくないが、タクトスイッチをマトリクスで配線すれば同等の機能は実装できる。メモ:Nucleoのピンが足りないので、UI制御系と音源のシーケンサーでMPUを分けることを考える。Bufferで強化できるかどうか実験してみた。Bufferの74HC125は4回路なので4本だけでテスト。導通を制御する必要はないので、OEは全部直接GNDに落として常時バッファが動作するようにした。ブレッドボード上で測定した。ch2:SCKバッファあり74HC125を入れると波形のリンギングは整形される。立ち上がり、立下りはまあまあゆるい感じだ。使っているSPIのモード(MODE0)はクロック(ch2:SCK)の立ち上がりで評価するのでリンギングを低減させられれば精度を上げる効果はあると思う。波形のリンギングを低減するのにダンピング抵抗を入れてみた。読んでないが、ダンピング抵抗は出力側近くに入れた方がいいらしいので74HC125から出力する直後に入れてみた。(参考:http://www.elsena.co.jp/elspear/specialist_column/technology_column7.html)信号波形ダンピング抵抗の値を10Ω、47Ω、100Ω、470Ωに差し替えてSPI信号の波形を測定してみた。DCOにSPI信号を入力する付近で測定。ダンピング抵抗なしダンピング抵抗:10Ωダンピング抵抗:47Ωダンピング抵抗:100Ωダンピング抵抗:470Ω470Ωでは正常に読み取れないようで音が出なかった。F401同士でSPI通信してみる。Slaveにして通...ベースマシンの音出し動画LME49600のヘッドホンアンプを仮のケースに収めてみた。Kitでサーミスタを使ってみる。103AT)を使ってみる。パターン切替スイッチをつける構想。音源系をパネルに固定&配線材の加工。ArduinoでSDカードを使ってみる。音源系をパネルに固定する構想。再生中にLCD表示できた。NucleoF401REを外部電源で動作させる。その2ベースマシンのシーケンサ基板を作ってみた。