もくじ
#contents();

ツッコミ
- Pdっすか。Pucketteが未来大に講演にきてましたね。 -- [[まつむら]] &new{2009-02-18 (水) 05:05:34};
- たしか、マイクはステレオ扱えたと思うのですが、どうでしょうね。 -- [[まつむら]] &new{2009-02-18 (水) 05:11:02};
- まじですか>Puckette -- [[akita]] &new{2009-02-18 (水) 09:25:12};
- どうもステレオで入れられるマイク入力は、あんましないみたいです。ライン入力を狙ってみます。 -- [[akita]] &new{2009-02-18 (水) 09:25:45};
- ていうか私が呼びました。 -- [[kazushi]] &new{2009-03-08 (日) 16:57:20};
- あ、やはりkazushiさんでしたか。 -- [[akita]] &new{2009-03-12 (木) 23:01:21};
- さすがにシールド線のほうが良さそう…<簡易プローブ -- [[まつむら]] &new{2009-06-30 (火) 14:46:12};
- ↑まあ用途次第ですね。GNDを共通にしている時点で、かなりGNDレベルは暴れるわけで。 -- [[akita]] &new{2009-07-08 (水) 09:14:17};
- ↑さすがに外来ノイズが大きすぎて使い物になりませんでいた・・・orz シールド線でつくりなおしてみます -- [[akita]] &new{2009-08-12 (水) 11:47:50};

#comment

*09/11/25: PSoCのAnalogInput [#s395bded]
ピン数が多いパッケージのPSoCでも、デジタルI/Oはその分増えているが、アナログ入力は、本当にACBの入力に使えるのはP0の8本だけ。もうちょっと多くしてほしいなあ。たとえば24本とか。

*09/11/13: 指キタスカメラ [#c1c2bef6]
[[FPGAを使って仕込みなおし。:http://www.youtube.com/watch?v=8Sv5RAeyog0]]

*09/11/12: AlteraのFPGAのI/Oピン [#z90239ce]
AlteraのFPGAのI/Oピンは、いろいろと融通が利かないようだ。
・1本ごとにプルアップのON/OFFは指定できない(全体でON/OFFの指定だけ)
・しかもクロック入力のようにプルアップ抵抗が備わっていないI/Oピンに対しても↑の指定が効くので、「そのピンにはプルアップはできません」というError (Warningではない)が出てしまう。つまりクロックピンを明示的に指定している場合は、プルアップ抵抗そのものが使えない
・プルダウン抵抗はそもそも指定できない
ちなみにXilinxのやつは、いずれもできる。

*09/11/05: 郵便物からの眺め [#q77b802f]
小型のなんちゃって定点カメラをつくって、やってみた。
http://akita11.jp/diary/archives/2009/11/post_917.html

*09/10/27: VisualDSP++ via RDP [#n863e053]
ちょっと思い立ってDSPを使ってみようと思い、学科所有のAnalogDevicesのSHARCボードとVisualDSP++を使ってみる。が、VisualDSP++が、ライセンスがとれないと、どうも起動できない。へんなエラーだな、と思ったら、RemoteDesktop接続経由ではVisualDSP++を起動できないらしい。まあボードをつないで使うんだから、当たり前といえば当たり前だけど、そういう仕様なのか。

*09/10/15: Pickit2での書き込み [#t99fe4e6]
たまにうまくいかない現象に遭遇。しかも再現性が低い。電源周りを疑ってみたが、結論として、PCからPickit2までのUSBケーブルが長すぎたのか、USBハブを通していたのが原因で、書き込み時のPickit2からの供給電源電圧が下がっていたのが原因の模様。USBケーブルを短く、かつUSBハブをはさまないようにしたら、OKになった。

*09/10/15: 3.3V動作のPICへのICSP [#iafe649c]
PICへICSPでプログラムを書き込むとき、Pickit2などのライタから電源を供給することができるが、電流容量は100mA程度。ボードのほうに電源供給されている場合は、Pickit2では自動的にその電源を利用するが、4.5V以下の電源ではブロックイレースができない。つまり3.3Vで動作するPICに、そのボードの電源を使ってICSPはできない、ということ。100mAなんてすぐに超えてしまうので、書き込み時だけ、PICをボードの電源から切り離せるようにしておくのが無難、ということか。めんどいな。

*09/10/04: 電池の容量 [#bbb5da93]
参考データ。
http://slashdot.jp/~espy/journal/416700

*09/10/02: PSoCの受信エラー [#n1442ef1]
これまでややサボりぎみだったが、通信相手の電源を動的に切ったりすると、受信(RX)ラインが0V=Lに落ちるため、PSoCにとっては、フレーミングエラー(RX=Lなのでスタートビットと判断して受信開始するも、ストップビットがない、ように見える)になるので、ちゃんとエラー解除をしないといけない。エラー解除は、一番簡単なのは、UARTモジュールをStopしてStartすること。
http://projectmcx.cocolog-nifty.com/blog/2007/01/psoc_f00e.html

*09/09/30: PSoCのE2PROM [#v758aa0d]
PSoCのE2PROMの備忘録。
http://dr.matrix.jp/psoc.html#a5
ポイントは、flashsecurity.txtの当該ブロックをなおす(Uにする)ことと、1ブロック=64バイトで、flashsecurity.txtのWやUの1文字は1ブロック(64バイト)、ということ。つまりDeviceEditorのほうで設定する開始block番号の64倍が、flashsecurity.txtでUにするべきアドレス、となる。

*09/09/28: Xilinx ISEで、急に回路がみえなくなる [#we70d0e8]
回路をつくっていて、何かの拍子に、DesignのTreeの中にあったファイル(回路/module)が、?になったりすることがある。
今回の原因は、*.vのmoduleのところに、何かの拍子に1文字入ってtmoduleになっていた。*.vの中にmoduleで定義してある名前がみあたらないので、DesignのTreeの中で?に変わる、というからくり。素直にSyntax Errorといってくれれば気づきやすいのに。

*09/09/06: PSoC SDCardとファイル数(続) [#uc96d70e]
PastelMagicのBBSで質問してみたところ、回答をいただいた。
http://www.pastelmagic.com/psocbbs/index.cgi?m=read&bnum=1731&num=1733
どうも、「仕様」らしい。
FAT16でファイル数を気にして使うか、FAT32を避けるのが現実的か。

*09/09/05: PSoC SDCardとファイル数 [#k742c30f]
FAT16の仕様では、ルートディレクトリにおけるファイル数は512まで。またPSoCのSDCardモジュールは、ルートディレクトリにあるファイルしか扱えない。
つまり、PSoCでFAT16のSDカードに書き込めるファイル数の上限は512ということになる。
しかし512個目を超えても、fopenはできるようだ。しかし書き込もうとすると、FATが壊れるようで、PCからは読めなくなる。SDCardInitの戻り値も、ファイルシステム種類を示す上位4ビットが0になってしまう。
てっきり上限に達したら開けない(fopenでエラーが返る)のかと思っていたら、FATを壊してしまうのか・・・おそろしい。
ちなみになぜかFAT32で(Winで)フォーマットしたSDカードだと、途中128個目ぐらいで、同様にFATが壊れる。なんでだろう?

*09/09/04: Eagle+PCBE [#re43e221]
あまりないかもしれないが、EagleとPCBEで設計したデータとマージする方法について。Eagleはガーバーインができずないので、Eagle上でマージはできない。PCBEはガーバーインができるが、Eagleは正方形・円以外のアパーチャを使うので、そのままでは読み込めない。GCONVを使うテはあるが、いまいちうまくいかない。
そこで、以下の手順を踏んでみる。
+ Eagleでガーバー出力(Offsetを適当につける)
+ ↑ガーバー内のアパーチャ番号(Dコード)を、すべて100増やす(D10→D110など)
+ PCBEで、↑Eagleのデータが置かれる場所はあけて設計する
+ ↑をガーバーアウト。このとき、インチ系・小数点4桁(Eagleのガーバー形式:これから変更できない)にあわせる。
+ 両者のガーバーデータをくっつける。ただしPCBEのガーバーは、最後にM02コードがあるので、これは手動で取り除く。(M02で終わりになってしまうため)
+ PCBEのアパーチャリスト(gout.lst)に、Eagleの*.whlに記載のアパーチャリストを追加。ただし*.whlのDコードは、2.にあわせて100増やす。
+ ドリルデータも同様に、2つをマージする



*09/08/28: Spartan3のDCM [#wcff477b]
Spartan3には、DCMというクロック生成回路が入っている(Virtexや他社のFPGAも、だいたい入っている)。
DLLでクロックの逓倍ができるわけで、その設定Wizardが、欲しいクロック周波数を入れると逓倍比と分周比を求めてくれるんだけど、非整数の値を求めて、あたかもそれで動くように表示される。
もちろんそんなわけはなくて、逓倍比と分周比は整数しかできないわけだけど、まぎわしい。
ところで、欲しい周波数に最も近い周波数を得るための逓倍比と分周比を求めるのは、数学的には、ある実数を、最もよく近似する有理数n/m(ただしn, mはN以下の整数)を求める問題、といいかえられるわけだけど、それはどうやって解くのが一番いいんだろう。とりあえず総当たりで求めてみたが、もっと良い方法がある予感。

*09/08/26: 正弦波の電圧とdBm表示 [#r8dc22d4]
振幅が1V(=2Vp-p)の正弦波をオシロ(50Ω負荷)に与えてFFT解析すると、その周波数の成分の電力が10dBm、とでる。
振幅が1Vの正弦波の実効値は1/√2Vなので、50Ω負荷に対する電力PはP=V^2/R=0.01W=10mW。dBmは、1mWの倍率としての絶対値なので、これをdBm表記すれば10log(10mW/1mW)=10dBm、となる。

*09/08/26: タップ加工 [#c89a679b]
本格的にタップを立てる。太いビスのあたまのところに立てる。
・下穴は、旋盤やボール盤で。旋盤の方が中心を取りやすい。
・下穴をあけたあと、バリ取りをかねて、円錐形の刃で入り口を少し広げる
・タップは旋盤やボール盤で垂直に。
・まずは先(1番)or中(2番)タップで、最後は仕上げ(3番)で。

*09/08/25: ハイサイドSW(訂正) [#mb32af11]
↓↓の、OFFのときの電圧が下がりきらない原因がわかった。モジュールの入力に与えている信号があって、そいつがHighレベルになっていた。そのため、電源がOFFになっても、入力保護ダイオード経由で電流が流れていたわけだ。
電源をOFFにするときには、モジュールに与える信号をすべてLowレベル(0V)にするようにしたら、電源電圧はほぼ0Vまで下がり、消費電流もほぼ0になった。
ハイサイドSWの、いわゆるON抵抗が意外と大きいので、実際にモジュールに供給される電圧に注意。必要に応じて、低抵抗のフォトリレー(SSR)を使うべき。

*09/08:24: PSoCのSleepTimer [#l6311c76]
SleepTimerは、てっきりsleepモードに入って、一定時間たったら戻ってくるのかと思いこんでいたが、単なる思いこみ。
M8C_Sleepでsleepに入り、そこから戻るのに、SleepTimer割り込みを使う、ということ。
しかしSleepTimer_TickWait()とSleepTimer_SyncWait()の違い、特に後者が、いまいちよくわからん。
*09/08/21: PNPトランジスタでハイサイドSW [#h9ac96f1]
カメラなどのモジュールの電源の+側を、PNPトランジスタでON/OFFする回路をつくってみる。
ONは問題ないんだけど、OFFにしても、モジュール側の電源端子(PNPトランジスタのC側)の電圧が下がりきらない(例えば2Vくらい)。
こんな中途半端な電圧だと、リセットもかかるにかからず、困るんじゃないか?と思ったが、消費電流はほぼ0に落ちているようだ。
よく考えたら、PNPトランジスタのC-E間のOFF状態の抵抗R_CE(off)と、モジュールの負荷としての等価抵抗との分圧が、ここの+端子の電圧になるわけだが、R_CE(off)は非常に大きいので、少しでもモジュールに電流が流れると、ここの+端子の電圧はほぼ0Vまで落ちるはずなわけで、そうなっていないということは、モジュールには電源電流は流れていなくて、OFF状態のモジュールの負荷としての等価抵抗が非常に大きい、というわけだ。

*09/08/21: PSoCでSDカードにファイルを作るときの数字からはじまるファイルネーム [#oedfc2a8]
むかしハマったのを忘れていた。
http://akita11.jp/diary/archives/2007/07/post_637.html

*09/08/12: HITECH-C(PSoC)のバグ? [#ke1acc09]
else ifをたくさんつけたり、ifの条件をいろいろORしたりすると、場合によって、リンク時あたりに、よくわからんエラーが出る(再現性あり)。Tempにあるtempなファイルの中にあるエラー、と表示されるだけで、そのtempなファイルがみあたらないので、原因がわからない。
elseやORなどを減らすと、問題なくコンパイルがとおる。
なんじゃこりゃ?

*09/08/12: PSoCの受信割り込み(バイナリ)の割り込みフラグ [#w2a20785]
割り込み処理中に、(念のためDisableIntしたうえで)もう1バイト受信すると、また割り込みフラグがたってしまうようだ。そのため、割り込み処理が終わると、また割り込みがかかってしまう。
レジスタレベルでこのフラグをクリア(DCB??を指定しないといけないので、Place依存なのでまりやりたくない)するか、割り込み処理中には1バイトしか受信しない(本来はこうするべき)ようにプログラムを書く、というところか。

*09/08/11: PSoCの受信割り込み(バイナリ) [#o7fa6eae]
1バイト単位での受信割り込みに、いまいち恐怖心というか避けたい気分があったのだけど、冷静に考えてみれば、あまりややこしい話ではないようだ。
http://web.sfc.keio.ac.jp/~shokai/archives/2008/03/psoc-cy8c2946-uart-recv-int.html
http://projectmcx.cocolog-nifty.com/blog/2007/01/psoc_f00e.html
要は、本来の受信割り込みは1バイト受信した時点で起こるが、標準で生成されるCmdBuffer関係の処理がUART_int.asmに書かれているので、その前に、自分の割り込み処理ルーチンへljmpさせてしまえばOK、ということになる。
なるほど。

*09/07/17: PSoCのpull-upとsleep [#ga860140]
sleepに入ると、pull-upはoffになる(=電圧が0Vになる)ようだ。つまりpull-upの上の電源がoffになる、ということか。

*09/07/14: PSoCの外部IO割り込みのマスク [#tf753390]
PSoCの外部IO割り込みのenableは、PRTxIEの当該ビットを1にして、かつ、PRTxIC1/0の当該ビットで00(disable)/01(立ち下がり)/10(立ち上がり)/11(両エッジ)を設定する。PRTxIEの設定を忘れがちなので注意。

*09/07/08: アクリル板にタップを立てる [#m84f1b3f]
備忘録。アクリル板だと意外と簡単に開く。
http://homepage3.nifty.com/yamaca/jisaku2/tap.htm
下穴は、仕上がり穴径-1mm程度、か。最初にボール盤を使って垂直にタップをあてるのがポイント。

*09/07/03: ヒスノイズ [#l90a7412]
オーディオ用語。シャーという音。高周波成分なので、LPFである程度カットできる。メインアンプ前が効果的。
*09/07/01: ボードレンズのマウント [#d8c224e3]
http://www.computar.jp/modules/computar/index.php?page=cat&id=23
このあたりのボードレンズのマウントを自作してみようと考える。
マウントはM13P1.0、つまりネジ径13mmでネジのピッチが1.0mm。けっこう特殊なサイズのようだ。
汎用品でのナットはなかなかみつからず、
http://store.shopping.yahoo.co.jp/kokua/yamawatnp13100b.html
このあたりのタップを使ってみようと考える。
タップの「先」「中」「上」というのは、用途に応じた先端の形状らしい。
http://www.recoilj.com/recoil-tap.html

*09/06/30: 点字ディスプレイ [#jbaef45b]
いろいろ関連技術がまとまっているので備忘録。いろいろある。
http://www.tsukuba-tech.ac.jp/info/kenkyu/kaken/disp2.html

*09/06/29: 簡易プローブ [#rd72af6d]
#ref(Probe.JPG,,30%)
#ref(ProbeConn.JPG,,30%)
作ってみた。コネクタ部分は、↓と同じ回路。とりあえずテスト的な測定ならば十分そう。

*09/06/26: HDLでSPI [#e5dbedf1]
同期式シリアル通信であるSPI送受信回路を、HDLで書いてみるが、Behaviorシミュレーションでは動くのに、実機だとどうも挙動があやしい。
	always @(negedge CK or posedge RST) begin
	...
			case (rcnt)
				8 : DBi[9] <= MISO;
				9 : DBi[8] <= MISO;
	...
こんな感じで、何ビット目かのカウンタ(rcnt)の値に応じて、結果レジスタの各ビットに受信データを書き込んでいるわけだが、書いているが、SPIの仕様上、送信と受信はCKのエッジが逆なので、送信側と受信側で、posedgeとnegedgeを使い分ける(か、2倍の周波数のクロックを使う)しかないわけだが、どうもこいつがマズいっぽい。論理合成後のRTLレベル回路図を見ると、各ビットのフリップフロップの前の組み合わせ論理回路がえらいことになっている(そりゃそうだ)。
そこで、同じようなものだが、1ビットずつシフトするように書き直してみた。
	always @(negedge CK or posedge RST) begin
	...
		else begin
			DBi[9:0] <= {DBi[8:0], MISO};
		end
クロックの逆エッジを使っているのは同じなので、ダメかなあ、と思ったら、意外とあっさり動くようだ。
しかしこういう両エッジを使わざるを得ない回路の場合は、どうやって書くのがスマートというか流儀なんだろうか。やっぱ2倍クロックで立ち上がりのみ、なのかなあ。

*09/06/26: プローブの等価回路 [#xc4ca4de]
簡易測定用に、先端がつまみやすい形状のプローブっぽいものを作ってみようかと思い立った。プローブ校正用のトリマ付近の等価回路
http://techon.nikkeibp.co.jp/article/NEWS/20070905/138795/


*09/05/22: PCBEで4層基板設計 [#yc11a004]
忘れないうちにまとめてみた。
http://akita11.jp/plan/pcbeguide/

*09/05/21: PCBEで4層基板設計(予告) [#h8bca1ee]
けっこう難しい。近いうちに、いろいろまとめる予定。

*09/05/14: MP3デコーダIC [#c45ba286]
前々から微妙に気になっていた、VLSI Solutions(http://www.vlsi.fi/)のMP3デコーダVS1011eを試してみる。
秋月でも売っている。http://akizukidenshi.com/catalog/g/gI-01484/
本来は、MP3形式(など)のバイナリデータをSCI経由で流し込むと、デコードして再生してくれる、というものなのだが、ファームウエアを持たせることができて、SDカードをつないでそこの中のMP3ファイルを再生する、みたいな機能もできる。
アプリケーションノートにある、Standalone Playerをみてみると、こういうプログラムを起動時にSCI経由で流し込めばOK、というのが載っているので、そのまま使ってみる。ファームウエアといっても5KB程度なので、制御用のマイコンのプログラム自体に入れてしまうこともできる。

で、ちょっと苦労しながら試してみた備忘録。(少し参考:http://www.picfun.com/PIC24F/AP/app24F08.html)
- リセットは、50000クロックの間Lowにしないといけない。12.288MHzの水晶を使う場合だと、4msほど。結構長い。
- クロック周波数の調整は、24.576MHzの水晶をつなぐ場合以外は、最初に設定しないといけない。(勘違いしていて、12.288MHzの水晶を使うなら、設定しなくてもいいのかと思い込んでいた)
- マイコンからSCI経由でファームウエアのDLや制御をするなら、GPIO0は、Pull-downしてしまってOK。GPIO1, GPIO2, GPIO3, DREQはアプリケーションノートの回路図と同じようにSDカードにつなぐ。ただしGPIO2, 3はPull-upが必要なのに注意。
- オーディオ出力は、Cでデカップリングしておけば、AGNDに対しての電圧、ととらえても差し支えなさそうなもよう。

しかし、どうもこいつのデータシートは、性にあわないのか、非常に理解しにくかった。レジスタ名とフラグ名が、似ていてまぎらわしい、のが理由なんだろうか。

*09/05/10: PSoCのコンパレータのVref [#wf06350e]
備忘録。VDDを分圧してVrefとして与えるものしかない。
つまり電源電圧が変動すると、Vrefも、それに比例して変動するということ。
電池駆動しての絶対電圧の比較には向かない。3端子regなどで電源を安定化するか、ADCを使うか。

*09/05/08: PSoC Designer5.0のWorkspaceとProject [#h6901967]
PSoC Designer5.0で、WorkspaceとProjectの関係が、ごちゃごちゃしてきたので、備忘録。
- Workspaceがシステム全体。Projectが、その中にある各PSoC、というイメージ。
- Workspace=W_Aの中に、Project=P_1, P_2を作る場合の手順
++ File→New Projectで、新しいProjectを作る。このとき、Name=P_1, Location=全体Workspaceの1つ上位階層のディレクトリ(「z:\」など), "Create directory for workspace"をチェックし、Workspace nameをW_Aとする。Workspace: Create new workspaceとする。
++ 2つめのProjectを作る。File→New Projectで、Name=P_2, Location=↑のディレクトリ+Workspace名(「z:\W_A」など), Workspace: Add to Workspaceとする。

*09/05/01: Cypress MiniProgの3.3V化 [#ja84fbb4]
http://doggie.blog.so-net.ne.jp/2007-03-17
JP1のジャンパーピンを下側へ移動させるだけ。

*09/04/24: PSoCのPull-downとGPIO割り込み [#vaa280d5]
PSoCのI/Oピンの駆動モードを例えばPull-downにすると、PRTxDRで、そのピンのビットを0にしないと、Pull-downは有効にならない。
で、そのピンでSWなんかをつないでRising-Edge割り込みをかけたいとすると、そのピンが1になったときに割り込みがかかるわけだが、それにあわせてPRTxDRのビットが1になる。これを、再び0にしないとPull-downが有効にならないわけだが、その割り込み処理ルーチン内でPRTxDRのビットを0にしても、SWを押している間は、そのピンが1なので、PRTxDRのビットも、0にできない。つまりSWを離したあと、改めてPRTxDRのビットを0にしないといけない。(ただし当然ながら、そのSWを離したことは、PRTxDRのビットを0にできないので、Falling-edge割り込みでは検出できない)
PRTxDRのビットを適宜0にする方法は、例えばmainルーチン内のwhileループ内で常時やタイマ割り込みで定期的にPRTxDRのビットを0にする、といったところ。

*09/04/24: 秋月のキットの回路図など [#ob0da7f4]
http://www.aki-den.jp/kit_manual/start.html

*09/03/20: VAIO type PのVGAアダプタ自作 [#mb6ed973]
[[./VAIO type PのVGAアダプタ自作]]

*09/03/13: マトリクスLEDとLEDセンサ [#c0775b37]
マトリクスLEDを、センサとして使う、という話。元ネタはいろいろあって、例えばhttp://elm-chan.org/junk/leddet/report.html など。
(以下、行:アノード側、列:カソード側と定義)
以下の手順。
+ 行をすべて"1"、列をすべて"1"にする(リセット)
+ 行をAnalog入力(つまり高インピーダンス)、当該の列のみ"1"、他をAnalog入力にする(蓄積)
+ 光があたっていると、電位がある程度上がってくるので、ころあいをみて、コンパレータなどで0/1を比較。
状況によっては、Analog入力の入力容量と、直列抵抗だけでは不十分なこともあるようだ。以下、備忘録。
- オシロのプローブで行をみていると、それらしい波形が出るが、プローブをはずすと、動かない(放電しきらない)ことがある→並列にプローブ容量と同じくらいのCをつけてみる
- このCが大きすぎると、すぐに電位が下がってしまうようだ(なんでだ?逆じゃないのか?)
- 光電流に対する電位を稼ぐために大きい抵抗Rを並列につないでみる
- このCRが時定数になって、放電時間がきまる→これが1列分の蓄積時間と同程度のオーダーに設定する
- 室内照明の商用交流(60Hz)のゆらぎが、予想以上に波形にのる(蓄積中の放電の落ち方がゆらぐ)

ふと思い立って、リセット動作を、行・列ともに"0"にしてみて、蓄積中の当該列を"0"にしてみる。
蓄積にしたがって電位は上がっていくが、どうもこのほうが動作の安定度がよいようだ。
うまくやると、CもRもつけなくても大丈夫。
レーザーポインタぐらいの明るさだったら問題ないようだ。ペンライトぐらいの明かりで、どれぐらい動作するかは要チェック。

*09/03/12: パスコンとスイッチングノイズ対策 [#x3bce544]
ややノイズにシビアな信号を扱う回路で、アナログと高速で動くディジタル(FPGA)が混載している回路のノイズを退治する。
いろいろトライして、結果として最も効果があったのが、アナログ回路(アンプ)に対するパスコン(0.1uF程度)。最初は、ディジタル回路の方にパスコンをつけて、そこが発する電源系に乗るノイズを退治しようとしていたが、なかなかうまくいかない。そこで、そこから出るのはしょうがない、と割り切ったら、それなりに効果があった。

*09/03/05: コイン電池の容量 [#h4caaeb7]
たとえばFDKのCR2032で、220mAh@2.0V程度らしい。思ったより大きい。
http://www.fdk.co.jp/battery/lithium/cs03.html


*09/02/27: パスコンとダンピング抵抗 [#dfeb3215]
↓の結果。併用すると、かなりよくなった。
最後は、ADCに入ってくる信号にのるクロック由来のノイズ。
こればっかりは、アナログ系のPCB配線をしっかりやるしかない。

*09/02/25: CPLDとクロック線 [#h314a646]
CPLD(XC2C256)で、シリアルのADCをつついてみるが、どうも誤作動する。
具体的には、CPLDから与えているクロックの立下りでADCから出てくるデータが変化するはずなのだが、毎立下り以外でもデータが変化しているっぽい。オーバーシュートか。
ADCの入力ピンの規格だと、Lは0.8V以下、Hは2V以上となっているが、確かに0.8Vに近いオーバーシュートが出ている。
考えられる対策:
- CPD-ADC間のクロック線にダンピング抵抗 http://souyuu.net/article.php/20080801195746284
- 十分な数のパスコン(たしかに今はあまりつけていない)

*09/02/18: オーディオ信号の備忘録 [#o9922299]
- ライン入力:機器側の入力Zは10kΩ程度。
- ライン出力:機器側の出力Zは数10kΩ程度。負荷にも数10kΩ程度をつなぐと、2Vp-pぐらいの振幅。

ついでに、コンデンサマイクで拾った音をライン出力まで持っていく増幅回路の備忘録。
http://cba.sakura.ne.jp/sub04/jisaku19.htm


*09/02/17: Pd [#i9d3ec3e]
PCで、ちょろっと音を取り込んで、ちょろっと加工して出力したくて、調べてみると、Pdというやつがある。
http://d.hatena.ne.jp/octech/searchdiary?word=*[PD]

ただ、マイクは、どうもモノラルしかできないようだ。
http://blog.atamanikita.com/?eid=817204


*09/02/09: DirectSoundプログラミング [#a1e6aa4c]
ちょっと気が向いて、DirectSoundのプログラムを書いてみたいと思ってみる。ちょっと調べた範囲の備忘録。
http://quickprogram.blogspot.com/2008/07/managed-directx.html
http://www.tnksoft.com/reading/classgame/engine/03/030.php
http://hikari-hinomoto.hp.infoseek.co.jp/
http://www.clks.jp/csg/dx001.html (環境構築とか)

*09/01/30: PSoCのSCBLOCKで全波整流 [#cc883ad5]
http://www.geocities.jp/chako_ratta/micon/psoc_rectifier.html

*09/01/27: DCモータの制御 [#j05fcd56]
久しぶりにDCモータの定速回転を半日で仕上げる。エンコーダの出力のカウントがキモなわけだが、けっこう周波数が低いので、パルスがHになる時間をカウントすることにする。PSoCでやる方策をいろいろ考えてみたが、Counterで基準クロックをカウントさせ、そのEnableにエンコーダのパルスをあたえ、そのエンコーダの立下りで割り込みをかけてCounterの値の差分をとる(Counterの値をリセットする、という方法がわからない)、というのが、現実的のような気がする。

*09/01/22: ISEのPost-fit Simulation [#ucdf7d33]
↓と書いたものの、動作が微妙にあやしいので、Post-fit Simulationをやってみると、予想以上にSetup-timeが短い。こりゃ動作が微妙なはずだ。
というわけで、全体を同期のステートマシンになるようにVerilogの記述をなおしてみるが、根本的には解決できず。
冷静に考えたら、クロック周波数が48MHzなのに、tpdが10nsのCPLDを使っているのが、そもそも無茶なようだ。もう少しtpdが短いCPLDを使ってみることにする。

*09/01/15: Xilinx ISEのfitting [#fbd15914]
比較的高速に動く回路をXilinxのCPLDに焼いてみるが、微妙に動かないところがある。
具体的には、ビット列のうち、特定のビットだけ、値が1に張り付く。
どうも遅延っぽいなあ、と思って、fittingのpropertyにあるOptimizatingをSpeed優先にしてみたら(デフォルトはSize優先)、あっさり動いた。

*09/01/14: 2.54mmピッチのコネクタ [#sdf0c8f7]
千石(http://www.sengoku.co.jp)で売っていて、よく使うんだけど、型番不明で、千石以外では入手ができなかったコネクタのメーカと型番を、やっと見つけた。
https://www.linkman.jp/user/shohin.php?p=57596
リンクマンという会社のZL2543シリーズ。

*09/01/07: 基板の裏のビニール線 [#c4eec927]
昔作ったやつを久しぶりに動かそうとしたら、どうもうまく動かない。
原因を探っていったら、基板の裏に通っているビニール線が、挿入実装部品の足のでっぱりに刺さっていて、運悪くショートしてしまっていたようだ。

*09/01/07: EZ-USB FX2 + VisualC# [#a432b67b]
USBでデータをもらいながらグラフを描画していると、どうも時々、エラーになる。
デバッガで原因をさぐってみると、どうもBeginTransferに失敗することがあるようだ。
原因をいろいろ考えてみたが、グラフの描画(とその準備の処理)に時間がかかる(ことがある)のが原因のような気がする。
グラフの描画の頻度を下げるしかなさそうだ。

*08/12/12: PSoC I2CHWのsampleのバグ? [#xb936168]
PSoCのI2CHWのデータシートに載っているsampleに、どうもバグがあるような気がする。
WriteやReadの終了判定を
 while(!I2C_RTC_bReadI2CStatus() & I2CHW_WR_COMPLETE);
とやっているのだが、&より!が優先されるので、
 while(!(I2C_RTC_bReadI2CStatus() & I2CHW_WR_COMPLETE));
じゃないとマズい。

*08/11/25: 半田槽 [#b865beba]
ちょっと多めのビニール線を半田付けしないといけないことがあり、買ったけどつかっていなかった半田槽を使ってみる。
棒はんだ(やになし、Sn60%)を細かく切って槽にいれ、設定温度を400℃ぐらいにして溶かす。その後、ビニール線を突っ込んで、少し待つと、だいたいきれいにできるようだ。
一度冷ますと、半田の表面に酸化膜っぽいのができるが、内側は大丈夫なので、再度溶かせば、また使える。
*08/11/25: UARTの受信エラー(続) [#t9298128]
結局、送信が終わったあと(=受け側がデータを受け終わったあと)、受け側の送信端子(=PSoC側の受信端子)がHighになるようなので、送信が終わるまでUART_bReadTxStatus()をみて送信が終わるまでまち、その後、(必要であれば、その受信端子が1になるのをポーリングで待ってから)受信を開始するようにすると、うまくいくようだ。

*08/11/21: UARTの受信エラー [#e1a0afa4]
どうもPSoCに限らず、UARTの受信エラーと、その対策が、いまいちよくわからない。
例えば受信端子をずーっと0にしてしまうと、フレーミングエラーが出るわけだが、
そのエラーフラグをクリアすれば、次からはまた普通に受信ができそうなものなんだけど、どうもうまくいかない。もっとシビアにタイミングを見てあげないといけないのかなあ。具体的には、受信端子のサンプリングのタイミングと、データ受信完了のタイミング。

*08/11/21: 3.3V用MiniProgで5VPSoC書き込み [#x2c1860a]
5Vで動作するようにconfigしてあるPSoCを一度書き込んでしまうと、3.3V用に改造したMiniProgでは書き込みができないようだ。

*08/11/20: PSoC Designer5.0でI2CHWを使うと、謎のエラー [#hda2429a]
ときどきコンパイル時に謎のエラーがでる。
HITECH-Cのフォーラムで質問してみたら、どうもServicePack2で
修正される問題、らしい。


*08/10/24: Xilinx ISEのRunとRerun all [#c2f531b0]
Xilinx ISEで、Runをすると、その段階だけ実行される(ことがある)。例えばGenerate Programming FileのところをRunすると、SynthesisやImplementationは実行されない(ことがある)。Rerun allだと、最初から全実行。
作ったはずの回路ができず、これで1時間ほどつぶしてしまった。
教訓:コンパイルの過程に注目しよう。

*08/10/23: HITECH-Cライセンス [#q0b732f5]
- 10/2のエラー話。HI-TECH社の掲示板で質問をしてみたら、Projectで使うように指定しているコンパイラがImagecraftだからでは?との回答。たしかにそうなっていた。→これをHITECH-Cに変更したら、問題解決。
- HITECH-CコンパイラのEducational Licenseの問い合わせをしてみたら、650ドル程度。許容範囲なので、購入することにする。しかしLite版だとコンパイルのたびに有償版だとこれだけコードサイズが減るよ、というメッセージが出るのは、ほとんど刷り込み広告みたいなもんだな。

*08/10/22: PSoC厄日?(後日談) [#v83e0f11]
ためしにPWM16をStartしなくしても、パルスが出てくる。
そんなはずはない。
もしかして、と思って、プロジェクト内のmain.cを見たら、ずいぶん前のプログラムだった。ということは、どこかで違うmain.cをひらいて、そいつを編集していたわけだorz

*08/10/21: PSoC厄日? [#k8c1d5c6]
すごく簡単なプログラムを作ってみるが、どうもうまく動かない。
PWM16で、PWM16_WritePeriod()とPWM16_WritePulseWidthを設定してパルスの周波数を変えたいのに、InterconnectViewで設定している値から変更がきかない。なんじゃ?
ちなみにPWM16などのクロック信号は、電源3.3Vでは、グローバルバスに引き出せるのは12MHzまでらしい。見落としていた。

*08/10/03: PSoC HITECH-Cでの割り込み記述 [#ebe1c272]
いろいろ検索して、2chに行き当たる。
結論として、(Tutorialにも書いてある)いままでのImagecraftコンパイラの書き方でも、Warningは出るが、使える、ということらしい。(本当は割り込みベクタのアドレスを記述するのがHITEC-C流らしいが、boot.asmをみないとブロックごとの割り込みベクタがわからないので、面倒といえば面倒)
実際使えたので、Warningは気にせずにこのまいくことにする。

*08/10/02: PSoC Designer5.0のコンパイラのライセンス [#q4f661fa]
新しいマシンに、PSoC Designer5.0をインストールしてみる。HITECH-C Liteを選んでいるんだが、

!E C:(Path名)\tools\InvalidCompilerLicense.txt(0): ...Operation terminated. Compiler License invalid or not accessible

と出てしまい、コンパイルができない。なんでだろう?
Googleで検索した範囲では、古いコンパイラの情報が残っている場合などに出ることがあるようだが、今回は更に入れたマシンなので、そんなことはないはず。
ためしに、45日評価版のライセンスに切り替ええても、やはり同様のエラー。
困った。


*08/09/30: 軽負荷の三端子レギュレータ [#s712ad99]
三端子レギュレータの出力電圧が、予定より0.5Vほど高くなる現象に遭遇。負荷はFPGAのI/O電源。
もしかして、と思ってデータシートを読み直してみると、出力電圧の項が、負荷電流が5mA以上、という条件で書いてある。
というわけで、適当な抵抗を負荷につないでみたら、無事本来の出力電圧になった。
スイッチングレギュレータで負荷の下限があるのは知っていたが、三端子のようなシリーズレギュレータでもあるんだね。

*08/09/22: PIC Webサーバ [#c6366f70]
ふと思うところがあり、ちっこいWebサーバを攻めてみる。
http://www.olimex.com/dev/pic-mini-web.html
ここのTCPスタック(バージョンは最新ではない)を書き込んでみるが、どうもうまくいかない。1回だけうまくいったんだけど、それ以外は反応がない。リバースケーブルでつないでも、HUB経由でもだめ。IPパケットをのぞいてみると、どうもARPに反応していないっぽい。なんでだろう。まさかARPってICMP_SERVERをイネーブルにしないと反応しないんだろうか?そんなわけないよなあ。

*08/09/08: SMAコネクタのとりはずし [#u71a04f1]
BluetoothモジュールについているSMAコネクタを交換するため、コネクタをとりはずす。
思いのほかコネクタの熱容量が大きいのか、熱風ブロアではビクともしない。
そこで、サンハヤトのSMD取り外し半田を使ってみる。
http://www.sunhayato.co.jp/products/details.php?u=797&id=02043
→あっさりとれた。すげー。脱帽。

*08/09/04: VB/VC#でグラフを描画するライブラリ [#p2744147]
北川先生より情報。
http://zedgraph.org/wiki/index.php?title=Main_Page

*08/09/03: PSoC Designer 5.0 [#hfa7fd9b]
PSoC Designer5.0を入れてみる。統合環境としては、なかなか使いやすいような気はする。
- I2CHWのMultiMasterを選んだとき、なぜかI2CHWCommon.hが生成されなかったりSingleMasterを選んだとき、I2CHWCommon.hをincludeすると、なぜか動かないが、これをincludeしないとちゃんと動いたり。よくわからん。ちなみにI2CHWのデータシートのサンプルでは、includeされている。
- リソースエディタのほうでいろいろいじったあと、F7でBuildしても、Generate Applicationが自動でされないようだ。ぜんぶやる(Generate&Build)はF6になっている。これは不便だ。注意しながら使わないとハマる予感。
- SDカードがバージョンアップされているかと、淡い期待をもってみたが、サブディレクトリは相変わらず扱えずorz

*08/08/17: カメレオンUSB FX2 (EZ-USB FX2LP)備忘録 [#qf8531c6]
カメレオンUSB FX2
http://optimize.ath.cx/cusb_fx2/index.html
USB2.0経由で、高速にデータを送り続けるような用途に吉。

いろいろと備忘録。
- CN2(赤ジャンパ):ON=EEPROM有効、OFF=EEPROM無効
EEPROM書き込み時は、OFFにして接続(no EEPROM)→ONにする→CyConsoleのLgEEPROMから*.iicを書き込み
(CyConsoleのOption→EZ USB Interfaceを選択してから)
- EEPROM無効で接続→test_consを実行
(test_cons.cpp内のusb->fwload(0, fw_bulkloop, NULL)で、bulkloop.iicと同等のものをDLしている
- EEPROMにbulklook.iicを書き込み、再接続
→usb->fwload(0, fw_bulkloop, NULL)を消したtest_consを実行、しても、OK
- MAXIIの書き込み
EEPROM無効で接続→cusbwr2 *.svfで書き込み
- *.svfの作り方:
QuartusIIのTools→Programmerでプログラマを起動
File→Create/Update→Create JAM,SVFを起動し、Serial Vector Format[.svf]を選択してOK
- 雛形としてのspd_chk
spd_chkから、fw.incをincludeし、それをFX2LPに転送している
※Q: fw.cをコンパイル後に、fw.incに変換する方法は?
- 標準のfw.incは、MODE設定などの機能があるので、このまま使ってもよい。
→中途半端にいじらないほうがいいか?
- PC側のspd_chk.cppを雛形として使えばよい→Cypress提供のSuiteUSBを使うとGUIプログラムも書きやすい。
- MAXIIの回路
fw.cの入出力にあわせると、FX2LPのfw.cの変更は最小限ですむ
- FX2→PCの転送、メモリ内のコピーは十分間に合うが、ディスクに書き込むのは律速となるようだ(2048バイトあたり以降、FIFOがいっぱいになっている)
→メモリにすべて格納、転送終了後に書き出し、か。
→SuiteUSBを使うと、複数バッファ切り替えのタイミングを自作プログラムでつかみやすいので、ディスク書き込みでも十分間に合うようだ。
- ※Q: FX2→PCの転送のバッファを、転送開始前にクリアする方法はないか?
受信バッファの先頭が、どうも送られてくるデータの「最初」と一致しないようだ→解決策はないか?
→SuiteUSB2.0を使うと、特に問題はないようだ(後述)
→CPLD→FIFOの書き込み開始のタイミングと、PCの受信開始のタイミングの関係=FIFO書き込み開始後に、EP-inの受信を始めると、最初のほうのデータが抜ける
→CPLD側で、ireg[0]をチェックしてFIFO書き込みの開始を、スタートアップタイマを入れて少し遅らせる

*08/08/17: PSoC Designer 5.0 [#scde757d]
PSoC Designer 5.0を入れてみる。Cコンパイラが、HI-TECH Cになっている。
機能制限版は無料、フル版は有償(アカデミックで$650程度のようだ)、とのことで、とりあえず無料版でいってみる。
http://ameblo.jp/2st-rider/entry-10091603285.html
ここによると、いままで使っていたImagecraftのCコンパイラより、この無償版の方がいいこともあるようだ。むーん。
アカデミック版を買うかなあ・・・マルチユーザライセンスだし。


*08/08/06: コネクタの圧着と圧接 [#kcbbd299]
JST(日本圧着端子製造)のコネクタ(ACHシリーズ)のコンタクトピンにケーブルを圧着しようとする。
http://www.jst-mfg.com/product/detail.php?series=9
が、あまりにも小さいので、断念して半田付け。JSTに問い合わせてみると、専用の手動圧着工具がある。10万円ぐらいするが、これは専用工具を使わないと無理だ・・・
ちなみに、昔買っていた、同じくJSTのSSRシリーズのコネクタは、ピンにワイヤを押し込んで固定する圧接、という方法で固定するが、こちらも、同じくJSTの専用工具があるようだ。しかし15万円ぐらいする。まあこちらは、それほどまではよく使うわけじゃないので、精密ドライバで押し込むか・・・

*08/07/18: PSoCのアナログ部の消費電力 [#jb9810d1]
アナログブロックを全く使わないとき、GlobalResourceからAnalog PowerをOffにすると、2mAぐらい消費電流が減るようだ(CY8C29466の場合)

*08/07/25: 環境整備計画 [#rf8f3276]
ちょっと手が空いたときに、実験や測定するときの、ちょっとした環境整備。
#ref(cable1.jpg)
DC電源を何系統か使うとき、どの線がどの電源につながっているかわからなくなっちゃうことがあるので、色をつけてみる。あと、平行コードで線がバラけないように。

#ref(cable2.jpg)
オシロのプローブで基板上のICの信号などを見ているとき、プローブだとつまみにくいところをつまみやすいようにクリップ(Sunhayatoの、本当は0.5mmピッチQFPの足もつまめるシロモノらしい)。やはり同じように色分け。あと反対側は、プローブでつまむように皮をむいただけだけど、もちろん半田メッキ。


*08/07/18: 赤外線リモコン信号メモ [#nf8a1b49]
いろんなリモコンの信号をみてみる。
- PSX
- 古いのSONYのビデオ
- Nationalエアコン
- Sharp液晶テレビ
- MITSUBISHIテレビ
一応、http://www.256byte.com/remocon.htm という規格のようだが、結構いいかげんのようだ。以下、備忘録。
- リーダー部がないものや、あっても規格外の時間(5msとか)のものが多い
- ON/OFFの時間、いずれも規格どおりのものはすくなく、けっこう幅がある
- 長いやつだと1ボタンにつき250ms近く信号が出るものもある
以上をふまえて、こう扱うといいかもしれない方法
- 最初の1回のON/OFFは、ちゃんとリーダー部があるものもあるので最大10ms程度まで時間を測る
- 2回目のON/OFF以降は、長くても2ms程度
- 2回目以降で、OFFが2ms以上続いたら、終わり、とみなす


*08/07/17: 赤外線受信器 [#vd92bd3d]
リモコンの赤外線を受信したくなって、久しぶりにちゃんと使ってみる。
- パスコンをしっかり入れないと、蛍光灯のチラツキあたりをよく拾ってしまうようだ。→データシートどおり、100Ω直列+22uF並列のLPFを電源ラインに入れるのがよさそうだ。
- 秋月で売っている赤外線受信器の出力のパルスの立ち上がりと立ち下がりが、異様に遅い。50usぐらいかかってゆっくり変化する。どうも仕様のようだ。このまま何も考えずにマイコンに入れると、0/1の判定がおかしくなる(0と判定した直後に、やっぱり1に判定してしまうことがある:入力の1/0の閾値からしたらしょうがないけど)
→トランジスタでエミッタ接地増幅器を1段はさんで変化を急峻にしてもいいが、マイコン側に運良くシュミットトリガ入力がある場合は、それに与えれば、だいたい大丈夫。PIC12F629だと、GPIO-2だけ該当。まさに宝物の入力ピン。

*08/07/03: ナットの半田付け [#n974b0aa]
備忘録。ユニクロメッキのナットを基板に半田付けしたい場合(ってかなりレアだな・・・)に、けっこううまくいく方法を発見。
+ 基板側に半田を盛る(電極部分に薄く膜を張る程度)
+ ナットを↑の上に置き、ラジオペンチなどで固定する
+ 大きめ(60W程度)の半田ごてで、ナットの上からあたためる
+ 十分暖まって、ナットの下の半田が溶けたら、半田ごてをはなす
+ 半田が十分冷えて固まるまで、ラジオペンチを動かさない
+ おわり

*08/06/14: PSoC書き込み方法 [#r900c859]
備忘録。PSoC Programmerの2種類の書き込み方法
- PowerCycle: XRES(リセット端子)を使わずに、プログラマ(MiniProg)から電源をON/OFFして書き込みを制御する方法。8ピンなどのXRESがないPSoCは、この方法しか使えない。
- Reset: XRESを使って書き込みを制御する方法。PSoCに、プログラマ以外から電源を供給する場合は、この方法を使う。

*08/05/29: PRoC再チャレンジ [#dfbd5531]
しばらくまえにいじろうと思って、なかなかうまくいかなかったので、しばらく放置プレイぎみだった、Cypressの2.4GHz帯無線機つきPSoCの、PRoC (CYWUSB6953)
http://www.cypress.com/products/?fid=65&rpn=CYWUSB6953&ref=sch

久しぶりにひっぱりだす。いろいろリハビリ。
- 書き込みは、電源3.3Vを与えた状態で、3V用のMiniProgで、書き込みモードを、PowerCycleではなくResetで。5V用のMiniProgだと、PRoCがこわれるので、トラ技06/12の桑野さんの記事などを参考に、電源ラインにダイオードをはさむ。
- 基本的には、WirelessUSBLSのデータシートのサンプルどおり。
- 何バイトかまとめてSendDataしても、受信のbReadDataは、1バイトしか受信されないようだ。(戻り値がいつも1)仕様なんだろうか。
- 受信のbReadDataの引数valid[]は、当該バイトで正しく受信できたビットと同じところが1になる、ということのようだ。つまり例えばvalid[0]=0xffならば、data[0]は正しく受信できている。valid[0]=0xfeならば、data[0]の、最下位ビット(LSB)が正しく受信できていない(だいたい0になるようだ)、ということ。このvalid[]をみて、ビット単位で誤り訂正をしたほうがよさそうだな。
- GetRssi()で、受信強度がわかる。0x00-0x1f。設計した基板のパターンがいいかげんなのか、思いっきり近づけても0x09あたり。ただし、5mぐらい離しても、0x07とか。
- 近くに同じ2.4GHz帯の無線機器があると、SetChannel()で選ぶチャンネル次第で、大きく通信品質が変わるようだ。例えばCh.7だと文字化けばかりでも、Ch.70あたりにすると、見違えるように文字化けしなくなったり。ただし再現性低し。

*08/05/29: 多点CSDのチューニング [#e706864d]

多点CSD(具体的にはとりあえず12点)で、ちょっと電極までの距離が長いやつのタッチ検出。デフォルトのパラメータだと、感度がいまいち(というか誤検出が多い)ので、CSDのDocumentの最後の方に載っているチューニングの方法に従って、チューニングしてみる。
ちなみにCSDモジュールのReferenceは、ASE11がおすすめ、と書いてあった。ScanSpeedはNormal, Resolutionは12bitに設定。

チューニングの手順の要点は以下の通り。
+ カウント値(CSD_waSnsResult[])を出力するプログラムを書く。UARTとかI2CとかでPCへ。
+ カウント値の変化を、タッチの有無で観測する
+ Rb, Cmodを、タッチの有無でカウント値の変化が大きくなるように調整(Rb:0.5k-10k, Cmod:4.7-47nFの範囲)

結果は以下の通り。
(12個のスイッチのうち、SW0, SW5, SW11の3個のみ記録。値はけっこうバタつくので、俺フィルタを通したあとの平均値。タッチの強さによっても値が変わるが、弱めにタッチ(ワーストケースに近い)にしてみる。

|||>|>|OFF|>|>|On|>|>|Diff|
|Rb|Cmod|SW0|SW5|SW11|SW0|SW5|SW11|SW0|SW5|SW11|
|2.2k|10n|650|950|1100|1800|2050|2500|1150|1100|1400|
|2.2k|4.7n|650|970|1100|1800|2000|2600|1150|1030|1500|
|2.2k|39n|660|970|1100|2100|2200|2700|1440|1230|1600|
|2.2k|47n|660|970|1100|2000|2100|2500|1340|1130|1400|
|4.7k|10n|1300|1900|2200|3900|3800|4000|2600|1900|1800|
|10k|10n|2400|3300|3700|4096|4096|4096|1696|796|396|
|4.7k|39n|1300|1900|2200|3500|3800|4000|2200|1900|1800|
|4.7k|4.7n|1300|1900|2200|3800|3900|4000|2500|2000|1800|
|3.3k|10n|930|1360|1600|3000|3500|3600|2070|2140|2000|
|3.3k|39n|960|1390|1620|2700|2800|3500|1740|1410|1880|
|3.3k|4.7n|920|1360|1600|3400|3000|3700|2480|1640|2100|

この結果から、微妙なラインではあるが、Rb=3.3kΩ, Cmd=10nFを採用。

本来は、このカウント値とBaselineとの差がFingerThreshold以上になったら、ON、になるはずなのだが、FingerThresholdの値が5〜255しか設定できない。これはResolutionが8bitのとき用で、12bitのときとかは、換算しないといけないんだろうか。
そのあたりをさぐるのが面倒なので、カウント値-baselineであるCSD_waSnsDiff[]を順番にみて、その値が閾値以上(例えば700)であればON、と判定するようにした。

ちなみにCSDは、勝手にVC1〜VC3のクロック源・分周比を設定してしまうので、TX8などのクロック源を自分で分周したVC3にできないので、SysClk*2で、PC側のUARTのボーレートをそれにあわせるか、CSDでセンスしたあとに、レジスタを直接いじってVC3のクロック源・分周比を設定(OSC_CR3/OSC_CR4)などしてTX8_Start()して、TX8でデータを送る。送り終わったら、TX8_Stop()して、レジスタを戻しておくのを忘れずに。(ただしTX8_PutCharの関数から戻るのは、送信開始時なので、送信が終わるまで待ってからTX8_Stop()しないと、途中で送信が止まってしまう)


*08/05/28: 多点CSD [#y4f47ef3]

電極までちょっと長め(最大で1m弱)の線で引っ張るタッチセンサをCSDでつくってみる。

電極までの線を、電極につながる線とGNDが交互になっているフラットケーブルにしてみて、どれぐらいイケるか挑戦してみた。(未来日記)

場合によっては、ShieldElectrodeを使うようにして、このフラットケーブル内のGNDをShieldElectrode端子につないだほうがいいのかもしれないが、それは結果をみてから、にする。


*08/05/22: 加速度センサとPSoC [#k66a2426]
- macyu氏に分けていただいた加速度センサとPSoCをつないでみる。通信はSPI(同期式シリアル)。

- SPIってよくわからなかったけど、だいいぶわかってきたので、SPIの備忘録
-- 1バイト送るのと1バイト受けるのを同時にクロックに同期して行う、というだけのことだった。なので、受け側が必要としていなくても、データを受信するためには、なんか1バイト送らないといけない。
-- マスタ(マイコン)側がクロックをスレーブ(相手)側に与える
-- マスタからスレーブへ向かうデータは、MOSI (Master Out, Slave In):「もし」
-- スレーブからマスタへ向かうデータは、MISO (Master In, Slave Out):「みそ」
-- 一般的なデータの送受信方法は、SPIのデータシートのとおり。基本的には次の通り。
+++ 送信バッファが空くまで待つ
+++ 送信データを書き込み
+++ 受信バッファが埋まるまで待つ
+++ 受信データを読み出し

*08/05/21: 筋電アンプの電極 [#o4fc3679]
- 銀板がよいようだ。どうもステンレスのネジだと、うまく筋電がとれない。銀板を、穴あけパンチで抜くと直径5mmくらいのきれいな円盤になるので、それを紙のカバーの上からトンカチでたたいて平たくのばす。これを基板に半田付け(明日の予定)。基板の電極以外の部分はプラ板で覆う。

*08/05/15: NTSC信号の取り扱い w/ FPGA [#s5ae4d56]
- NTSC信号をLM1881で同期分離し、VSYNCとCSYNC(CompositeSYNC)にあわせて同期をとり、特定行の部分を高速ADC(秋月で売っているAD9283 http://akizukidenshi.com/catalog/items2.php?q=%22I-01526%22&s=score&p=1&r=1&page=)でA/D変換して、明るさをとってメモリにストア。
- NTSC信号はDCレベルの規定がないが、Y/C分離後に0.1uF程度のコンデンサでカップリングしてAD9283のAinに入れると、DCレベルが差動入力の反対側の/AinのDCレベル(1.0V)に一致する。VSYNC直後のあたりで少しDCレベルが変化するので、気になるといえば気になる。
そこでNTSC信号の規格(?)に従って、HSYNCのときの電圧を基準として、そこからの相対値をとるようにする。つまりHSYNCのときの電圧をA/D変換して保存しておき、そこからの相対値を求めるようにする。
- 本当はHSYNCをPLLで逓倍して、HSYNCに同期したクロックを作ってA/D変換(というかFPGAの動作クロック)するべきだが、面倒だし、そこまでの精度は不要なので、10MHzのクロックを適当に分周して使うことにする。

*成果物 [#ia4069c2]
** 筋電アンプ [#dffd6c14]

** 多点データ取得装置 [#t2ed572f]
#ref(TNacq.jpg,,30%)
- [[カメレオンUSB-FX2:http://optimize.ath.cx/cusb_fx2/index.html]]で、A/D変換したデータをPCへUSBで転送。実測で200Mbps程度でる。
- 載っているCPLDは、20ksps(50us周期)にA/D変換したデータをPCへ送る=EZ-USB FX2のFIFOへ書き込む制御をしているだけ。
#ref(TNacq2.jpg,,30%)
- A/D変換は、1chあたり1個の12ビットADC(シリアル出力)をつなぎ、完全同期データ取得。最大で46ch(CPLDのピン数の制限)
- アンチエイリアシングフィルタは、3次Sallen-Key型のBessel LPF(fs=10kHz)
- この写真は、2ch分しか実装していない

** 筋肉ムキムキ君 [#ydd14815]

** 巨大LEDディスプレイ [#e7934e7b]
#ref(GDc4.jpg,,30%)
#ref(GDu4.jpg,,30%)

** デジカメ定点カメラ化アダプタ [#h94fc0a5]

トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS