2009年10月27日(火)

PSoC DAC使用時の注意

Analog Column Clock

Analog Column Clock*1を使用するので、VC1の周波数をDACの動作周波数以下に分周しておく必要があるらしい。今回はVC1を8分周(3MHz)とした。
http://www.pastelmagic.com/psocbbs/index.cgi?m=look&bnum=930

IO設定

アナログ出力時は"High Z Analog"としなければならない。

2009年10月23日(金)

報告

SRAMについて

プリチャージする必要がある。とくにWLの負荷容量が大きいと、その影響で読み出せず、SRAMの電圧が書き換わってしまう。
そのため、本来はVDD/2にプリチャージしておく。

コンパレータについて

ばらつきに弱い原因のひとつとして、面積が小さいことが挙げられる。
構成そのものを見直すか、あるいは面積をかえて詳細なシミュレーションをするか。

IPプロジェクトについて

もし面積が余っているようなら、そこに載せてもらうことはできないか?
あるいはIPとして登録することを条件に設計するか?

2009年10月22日(木)

Comparatorシミュレーション

実はかなりばらつきに弱い。。

どうやらばらつきに対してかなり弱い回路構成だったことが判明。
なんで作っている最中に気がつかなかったのだろうか。。

SRAMシミュレーション

PAD、DUTボードの寄生容量の影響大

出力部分にバッファを入れるべきだったorz

2009年10月21日(水)

Comparator測定

なぜか出力電圧が3.3V。どう考えてもおかしい。。

電位差も0.5Vくらいの差がないと動作しない。オワットルな。
どうやら、DIGITAL用IOバッファは3.3V出力をするらしい。あめちゃんの回路も同様だった。
回路が悪いのかIOが悪いのか分からない。IOを想定して回路シミュレーションをしてみる必要があるかも。

2009年10月20日(火)

6月22日設計のチップ動作検証をPSoCでやる。

Comparator動作確認

正しく動作していることは確認できた。
次は、どれくらいの速度が出るかを知りたい。どうしよう?

PSoCのDAC6が動作せず

正しいと思い込んでいる設定が、実は違うのかもしれない。確認する必要あり。

SRAM動作せず

理由はこれまた不明。検証不足。

検証1:PSoCプルダウンとつながっているため?

ちゃんとジャンパピンを外してあるため、開放状態である。関係なし。

検証2:WL1を正しくONしていないのでは?

できている。

試しに"1"だけ書き込んでみるとどうなるか?

そもそも"1"を書き込めない。BL2とBL2_Nは同じような波形で、10mV程度。

速度が速すぎるのではないか?

1KHzでも動作していない。。

割り込み処理

アナログ入出力のあるピンの割り込み制御がうまくいかない。たとえばP0[1]
理由はよく分からないので、とりあえず別のピンに置き換えて使用することにした。

PSoC タイマー割り込み + switch文

switch(mode){
	case 0:
		PRT0DR = PRT0DR & 0x7F;  // BL1   = 1
		PRT0DR = PRT0DR | 0x02;  // BL1_N = 0
		break;
	case 1:
		PRT0DR = PRT0DR | 0x80;  // BL1   = 0
		PRT0DR = PRT0DR & 0xFE;  // BL1_N = 1
		break;
	case 2:
		PRT0DR = PRT0DR & 0x7F;  // BL1   = 1
		PRT0DR = PRT0DR | 0x02;  // BL1_N = 0
		break;
	case 3:
		PRT0DR = PRT0DR | 0x80;  // BL1   = 0
		PRT0DR = PRT0DR & 0xFE;  // BL1_N = 1
		break;
	case 4:
		PRT0DR = PRT0DR & 0x7F;  // BL1   = 1
		PRT0DR = PRT0DR | 0x02;  // BL1_N = 0
		break;
	default:
		PRT0DR = PRT0DR | 0x80;  // BL1   = 0
		PRT0DR = PRT0DR & 0xFE;  // BL1_N = 1
		break;	
	}
// RW control
mode++;
if(mode>5)mode=0;

このような記述だと、mode=0〜5で6回実行されるらしい。なんでだろう。

2009年5月1日(金)

ADCのタイミング3

タイミング良くADCからの情報を得られない原因が分かりました。
PSoCのADCは、指定されたサンプルレートでデータをPSoCの変数に格納します。
DELSIG11の場合は7.8Kspsなので、およそ0.13msごとにADCが完了します。
したがって、PSoCのプログラム内からは、すでにADCが完了し、変数に格納されている値を呼び出すことしか出来ないです。

2009-05-02-graph.png

▲ リセット信号、フォトダイオード、ADCのタイミング

イメージセンサの行リセット信号がOFFになってから、フォトダイオードからの出力電圧が0Vまで落ちるのは、室内蛍光灯の明るさでおよそ500μsなので、これが落ちきる前にすべての行のデータをADCするのは、さすがに不可能です。

2009年2月12日(木)

ADCのタイミング2

より高速に動作するADCとして、「DELSIG11」を使ってみました。最高で7.8Kspsであり、およそ100μsの間隔でADCを実行できるので、うまいことタイミングを合わせれば、イメージセンサの出力を意図したタイミングで変換できると思います。

そこで、緑色の信号線が立ち上がった瞬間にADCの結果を読み出す、というようにプログラムを書きましたが、どうも正しい結果が出力されません。

delsig.JPG

▲図の青色の信号線が0のときにリセットがかかっています。なぜかリセット時の電圧(1.2〜1.3V)をA/D変換した結果が出力されてしまいます。
そして、変換された結果がかなりばらついています。なんでだろう?

こんな感じのプログラムです。P1[1]が、図の緑色の信号線です。これが"1"になったらADCの結果を取り出すようにしています。

	while(1){
		if((PRT1DR & 0x02) && n==0){ //PRT4DR & 0x10
			//ADC
			while(!DELSIG11_1_fIsDataAvailable());
			isensor = DELSIG11_1_iGetData();
			if(isensor<0) isensor = -(isensor ^ 0xFFFF | 0x0001);
			
			//convert to voltage
			tmp=isensor;
			vol=( (tmp-1024)/1024 * 1.28 + 1.28*2 ) * 1000;			
			
			//UART number to strings
			str = num2str(vol);
			uart_1_putchars(str);
			UART_1_CPutString("\r\n");
			n=1;
		}
		else if((PRT1DR & 0x02)==0){
			n=0;
		}
	}

直流電圧源を使用して変換したときは、正しい結果が安定して出力されていたので、ADCは正しく動作していると思われます。あとは、意図したタイミングでADCの結果を出力することさえ出来ればよいのですが。。

2009年2月9日(月)

ADCのタイミング

ちゃんとデータシートを確認してみると、ADCに与えるべきクロック周波数が間違っていることに気がつきました。そこだけ修正したらちゃんと動作してくれました。

使用していたADCモジュールは「ADCINC14」という、高精度だけど動作が最速でも120spsというものだったのですが、これだと意図したタイミングでデータをとることができませんでした。イメージセンサのフレームレートが10fps程度だったので、これくらいで充分かな?と、深く考えずに使用していましたが、そもそも数msで電圧降下してしまうため、120spsだと(1/120=8.3ms)で動作が間に合わないみたいです。

というわけで、もう少し速いモジュールを使ってみたいと思います。

2009年2月6日(金)

UART通信成功

2/4のときにはダメでしたが、改めて配線やプロパティ値を確認して見たところ、与えるべきクロックが間違っていました。やはり凡ミスでした。。そこを修正したらうまく動きました。
UARTのAPIに、数字を文字列として返す関数が無いので、自分で1桁ずつ文字に変換して、UART_1_PutCharを用いて出力することにしました。

ADC

今度はADCがうまく動いてくれません。もう少し詳しくデータシートを読むべきみたいです。。

2009年2月4日(水)

128×128イメージセンサの測定

まずは(x,y)=(0,0)のイメージセンサを選択して、信号を出力できるかどうか試してみました。単体測定のときと同様の結果が得られました。

URAT通信

イメージセンサからのアナログ信号をA/D変換し、その値をUARTでPCに送信し、画像として表示できるようにしたいと考えています。
まずは(x,y)=(0,0)におけるイメージセンサの信号を変換して、正しくUARTでPCに出力できるかどうか試しています。

imagesensor00.JPG

▲(x,y)=(0,0)におけるイメージセンサの信号

imagesensor00r.JPG

▲(x,y)=(0,0)におけるイメージセンサの信号(拡大図)
図の緑色の信号は、リセット信号(青)と同じ周波数で、デューティ比の異なる信号で、この緑色の信号が立ち上がるタイミングにおいてアナログ信号をA/D変換するつもりです。

ですが、どういう訳かUARTがうまくいきません。。どこかに凡ミスがあると思うのですが、、、

ack001.png

▲常に"0x00"が表示され続ける状態

2009年2月2日(月)

イメージセンサ単体の測定2

確かに、たとえ明るいときであるとはいえ、非常に電圧降下が速いです。なのでもう少し拡大して見てみました。

bright_z.JPG

▲明るいとき(拡大図)
電圧は、わずか100μsで0Vに落ちてしまいます。ちなみにこれははんだ部屋の室内蛍光灯を点灯している際に測定したもので、卓上の蛍光灯スタンドを使うと、さらに速く電圧降下します

2009年1月31日(土)

イメージセンサ単体の測定

イメージセンサ単体の測定を行ってみました。回路構成はこんな感じになっています。

imagesensor.png

結果はこのような感じです。バイアス電圧は1.35Vくらいです。

dark.JPG

▲暗いとき

bright.JPG

▲明るいとき

明るいときの方が、イメージセンサに流れる電流が多く、したがって出力電圧が下がるのが速いことが確認できました。

2009年1月19日(月)

スパム対策

質問箱にあるフィルタを適用してみましたが、ランダムな文字列のスパム書き込みが未だに消えません。というわけで、今度はUSER_AGENTで監視してみるしかないかも。。

PukiWiki Plus!用のスパムフィルタ spam_filter.php - モーグルとカバとパウダーの日記
http://d.hatena.ne.jp/stealthinu/20070516/p2

2009年1月16日(金)

Chip測定準備終わる

ようやく終わりました。。はんだ付けに慣れていなかったため、えらく時間がかかってしまいました。これから、9月試作のChip測定に移りたいと思います。まずは、すでに動作確認がされている、富山商船高専の新田君が作ったNAND回路から行きます。


*1 アナログブロックの左側にあるClockセレクタ、デフォルトはVC1

トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2022-10-02 (日) 11:12:58