目次
コメントはありません。 Comments/tsujino
パターン設計を終えた後にDRCでエラーがないか確認すると多数のエラーが発生した。
先生にいくつかのエラーに関して教わったのでメモ。
銅を露出したい部分にTopとtStopを使えばよい。
検索キーワードの前後に*をつけるとそれを含む結果を表示できる。
重ねてはんだづけすればよい。
電源とGNDにそれぞれつないだViaをリードスイッチの長さに合わせて設置してそこにはんだづけ。
昨日フリスクケースに収めるためにに基板をカットしていたが、プラゴミに基板が捨てられているのを見て思考停止で自分も捨ててしまい、基板は埋め立てゴミだと先生に指摘をいただきました。
以後注意します。
山村君も作業日誌で触れていますが、基板設計時にはマイコンの書き込みに必要なピンをあらかじめヘッダピンにつないでおくべきです。
今回使うマイコンはPSoCのCY8C27443、SSOPパッケージですがPSoCの書き込みに必要なピンはVDD、GND、XRES、SCLK(P1[1])、SDATA(P1[0])の5つです(XRES無しの4ピンでもなんとかなるようです)。これに関してはマイコンブの共有情報のページにもまとめられています。
自分はそれをしていなかったことが反省点です。この状況でどのように書き込みをするかという話を先生からいただきました。XRESが何もつながれていないので4ピンですが、VDDとGNDに関しては2ピンヘッダに繋いであったのでそれを使えばよい。P1[0]、P1[1]に関しては7セグに繋いであったのでそこを書き込み段階だけ繋がずチップ抵抗部分から線を繋いで書き込みを行う。
設計した基板に実装してみたが、LEDがたまにしか点灯しない現象が。コイン電池の内部抵抗で必要な電力が得られていないのではないかとの指摘で電源装置を使って3Vで動作確認したところしっかり点灯しました。2.8Vくらいに下げると点灯しなくなったので、コイン電池がそれを下回っていたようです。
電源装置での動作確認は事前にしましょう。
電源装置のリミッタボタンを押しながら電流を調整するとそれがリミッタとなってそれ以上電流が流れることを阻止してくれます。もしそれ以上に電流が流れる場合は自動で電圧を下げるようです。
1フレーム辺り16進数で8byte分のデータが115200bpsのシリアル通信で送られてくる。
0x80, X1, X2, X3, 0xC0, Y1, Y2, Y3
といった感じで、X = X1*128 + X2 + X3/128
Y座標も同様であり、数値部分は最上位bitが0となるので0x80、0xC0をとり得ることはない。ストレージの川上さんのフォルダにこのデータあり。
原因はTerminalでBinaryにチェックが入っていなかっただけで、正しいデータを受信していることが確認できた。
VDD ≧ 4.75V → 24MHz VDD ≧ 3.0V → 12MHz VDD ≧ 2.4V → 3MHz
その後、PSoCから送られてくるデータを16byte(2フレーム分)だけにしてみるとTerminalが動作を停止することはなかった。Terminalで動作確認する時は送るデータを程々にする。
ASCⅡは、数字・アルファベット・制御符号を7ビットで表している、データ通信用の符号体系。
参考になりそうなページ↓
https://developer.mbed.org/users/okini3939/notebook/mbed256/
640*480[pixel] → 210fps 640*175[pixel] → 500fps 640*64[pixel] → 1000fps
PSoCでサッケード中のみLEDを点灯させるのがどうにもうまくいっていない。
LEDは点滅し、カメラ全体を白か黒で1値にしてやると消灯する。サッケード測定中でも点滅が見えてしまうため閾値を再調整したがやはりおかしい。
PSoCシリアルデータを送って確認してみたところ1フレームに8byte分のデータが送られていない。一応カメラシステムから直接シリアルデータをもらって確認したが正常。
その後main.cの記述を大幅にコメントアウトしたところPSoCからのシリアルデータも正常になり、コメントアウトを減らしていったところ徐々に1フレームに送られるシリアルデータが減っていく状態を確認できた。
→PSoCの処理が追いついていないためGetが遅れシリアルデータの取り逃しが発生しているのか。
しばらく前に駆動電圧によるCPUCLK制限についてメモしたが、駆動電圧を5Vに変更してCPUCLKを12から24MHzに変更した。
だがそれでもシリアルデータの取りもらしが発生した。しかし、12MHzの時と比べるとほとんどコメントアウトしなくても発生しなかったので改善になったとみえる。
ちなみにmbed NXP LPC1768は96MHzで動作するようだ。
シリアルデータが受信できない事案が発生。PSoCを介さずに接続しても同様。カメラの電源は入っていたので配線を確認したが解決せず。原因はFPGAの2枚の基盤の接続が緩んでいたため。
main.cの、今までは0x80を受信した時に処理していた座標計算などを0xC0を受信した時に処理するようにし、y座標の計算をオミットした。
y座標のデータをとっている間はGetが追いつかず、y座標は1byteしかとれなくなったがx座標は3byte分とることができたのでx座標に関してはこれで処理は追いついているはず。
y座標も計算したい場合など記述が増えれば動作が危うくなるので、CY8C27443ではかなり厳しいか。
16日17日に練習、22日に本発表があった。
発表時間は7分だが練習では8分20秒、本番では5分24秒と大幅な発表時間差が出てしまった。練習では説明を丁寧にしすぎ、本番では説明を簡略化し焦りすぎた差が出た。
はじめにサッケードとサッケード抑制、サッケードディスプレイについて簡潔に説明するのがうまくいかなかった。特にディスプレイに関してはディスプレイの定義、環境による抑制の働き、環境の定義、利点などを程よくまとめなければ。
12/15にx座標はとることができたとしたが、x座標でサッケード中のみ点灯させるよう実際にディスプレイの動作を試してみた。LEDが点灯している状態を知覚できなかったが撮影した動画では点灯していたので意図通りに動作した。
mbed NXP LPC1768を使ってLチカとか簡単なプログラムで遊んでみた。使い勝手がいいのかどうかはまだよくわからない。
例:Serial PC(USBTX, USBRX);
name.baud(baudrate);とできるが、これを省略するとbaudrate = 9600になってしまう。
BusOut myleds(LED1, LED2, LED3, LED4); for(int i=0; i<4; i++) { myleds = 1 << i;とあり、"<<i" はバスのビット(0~3)を指定しているのだろう。"<<i - 1" としてやればLED1~3が点灯し、"<<i + 1" としてやればLED2~4が点灯した。
LED1 = P1.18 LED2 = P1.20 LED3 = P1.21 LED4 = P1.23であり、これらを指定するには
#define LED_MASK 0x00B40000 PortOut ledport(Port1, LED_MASK);といったように使用するピンと同じポートを指定し、同じビット目を1にすればよい。 p21~p26を指定したい場合は
PortOut ledport(Port2, 0x0000003F);
Windows環境でmbedとシリアルデータのやり取りをするにはドライバをダウンロードする必要がある。
「眼球運動の実験心理学」の引用文献p119から論文を検索していた。
プログラムは問題なく動作したが気になった点が。
まずサッケードと判断する速度を測定し、点灯期間を設定した。
前述の内容で、点灯と消灯を逆にした測定を行った。
LEDを眼球方向に向けずに(眼球に向けると光が強すぎるのか閾値を上げても知覚されてしまう)、消灯の時と同じ条件で測定を行った。