目次

メニュー†

↑

kondoへのコメント†


↑

過去の日記†

↑

テストベンチ、シミュレーションがうまく動かない・・・†

テストベンチを使えば、実機で確認するよりも、
早く開発ができる。
そこで、今日はテストベンチを書いていた。

しかし、実機上ではうまく動いているのだが、
テストベンチがうまく動かなかったりする。
どういうことなんだろうか。。

↑

シミュレーション波形が1000nsまでしか見られない?†

ISE WebPACKで、
波形を確認するツールを使うと、
1000nsまでの波形しか見ることができない。

This is a Lite version of ISE Simulator(ISim).

と書いてあるし、機能制限なのだろうか。
テストベンチの、50000行までの制限はあるらしいけど。

↑

(チルダ)が見えなくなる問題†

ISE標準のエディタを使っていると、~(チルダ)がまったく
見えなくなることがあるようだ。
コピーして、他のエディタで見れば、分かるみたい。

↑

2008年07月23日(水)†

↑

xilinxのISE WebPACKから印刷することができない問題?†

印刷しようとしても、印刷できない。
原因不明・・・?

その上、その後プリンタの調子がおかしかった。
他の人まで印刷できなかったり?した。

このソフトが原因かどうかまでは定かではない。

↑

verilog,正しい論理合成結果が得られない問題†

ステートマシンを書き、状態遷移させるHDLを書いた。
その後、状態に応じた制御信号を出力させた。

最初は、うまく出力されなかった。
どうやらデコード方式のステートマシンが、
ワンホット方式のステートマシンへ最適化されたらしい。
そのときに、出力されるはずの制御信号が、消されたらしい。

原因は、よく分からないが、HDLを書き換えたりしていると、
デコード方式の論理合成結果になった。
何だったんだろう。

↑

2008年07月22日(火)†

↑

PACEの使い方が分かっていない?†

配置配線のピン配置を決める時に、「PACE」というソフトが使う。
このソフトでピン配置を決めて、後にポートリストを変更後、
再度ピン配置を決めると前のピン配置のデータが残ってしまうようだ。

しかも、ピン配置を変更しても、どこかにデータが残っているらしく、
必ず警告に遭遇してしまう。

top.ucfを直接見ても、何も書いていないはずのピンにエラーが・・・
よく分からない。

↑

2008年07月11日(金)†

↑

表面実装部品のはんだづけ†

秋田先生にコツを教えてもらいチャレンジ
結構時間がかかったけど、コツを掴めば、SDRAMのはんだづけはスムーズに終わった。

が、カメラモジュールの半田付けがうまくいかない。
問題は、ランドの位置と、カメラモジュールにわずかな隙間ができてしまうようだ。

PCBEで設計する時にぴったりにしすぎたせいのようだ。
何か解決方法を考えなければ。。

↑

2008年06月25日(水)†

↑

PCBEメモ†

↑

パッドの大きさメモ†

↑

秋田先生からのコメント†

↑

感想†

できるだけきれいに線を引こうとか考えていたせいか、
ピッチ幅をいろいろ変えすぎて、最終的に苦労する結果になった。

ピッチ幅をいろいろ変えていたせいか、端点を接続しても
等電位にならないことがあった。なぜか「交点・端点」コマンドを使っても、
うまくいかないこともありました。何度かやるとうまくいったり!?

↑

2008年05月27日(火)†

↑

PSoCFirstTouchで、チュートリアルを実行する†

試しに先生に書いてもらったチュートリアルを実行する。
図入りでかなり分かりやすい。
戸惑う所はなかった。

↑

LED例題1の2で赤と青を点灯させるが、赤色が強いみたいだ。†

うまく動かないと思っていたら、
どうやらうまく動いているらしい。
ただ、赤色が青色に比べて明るすぎるみたいだ。
例題1.2の回答例?

void main()
{
   // Insert your main routine code here.
   BYTE d;
   PWM8_1_Start();
   PWM8_2_Start();
   M8C_EnableGInt;
   
   ADC8_1_Start(ADC8_1_FULLRANGE);
   ADC8_1_bCal(0x42,ADC8_1_CAL_VBG);
   ADC8_1_StartADC();
   
   PWM8_1_WritePulseWidth(10);
   PWM8_2_WritePulseWidth(10);
   
   while(1){
   	while(ADC8_1_fIsDataAvailable() == 0);
   	d = ADC8_1_bGetDataClearFlag();
   	PWM8_1_WritePulseWidth(d);
   	PWM8_2_WritePulseWidth(255-d);
   }
}
↑

2008年05月24日(土)†

↑

文字が正しくPutStringで表示されない→\0を忘れない†

どうやら\0、NULL文字を入れ忘れたせいらしい。
NULL文字まで出力してくれるというのが、PutStringらしい。

↑

SDカードの書き込み時の限界は256バイトらしい(CR含めて)†

100バイト同時もOKだったが、
1000バイト書き込むと、どうやらエコーも256バイトまでのようだ。

CRも含めて256バイト
なので、文字列は、最大255バイトまでなら送ってもいいようだ。

↑

RXバッファをクリアしたいが、できない†

UART_SDCARD_CmdReset();を入れただけでは、
解決しないようだ。

↑

2008年05月23日(金)†

↑

エコーオフの信号を送った時に、>が返ってきていたのが原因†

// Echo off.
UART_SDCARD_PutString(SDcmd[SD_E0]);
UART_SDCARD_PutChar(CR);
	while(1){
			//Menu Select
			SW = UART_PC_cGetChar();
			
			switch(SW){
					case 49: //1
						UART_SDCARD_PutString(SDcmd[SD_E0]);
						UART_SDCARD_PutChar(CR);
						Receive_func();
						break;
						

エコーオフの>がRXバッファに残る

��iを送信後、Receive_func();で読み取るが、エコーオフの>を読み取り終了
結局、iで返ってきた情報が読めず。。

��iのコマンドの最後だけ、>だけがまた残る(Rxバッファはおそらく1バイトなので)

�´△侶�り返し
おそらくこんなことが起こっていたのだろう。。(汗

↑

バッファオーバーランエラーのフラグを見ればいいとのこと。†

秋田先生に報告したら、
バッファオーバーランエラーのフラグを見てやればよかったね、とのこと。
たしかにそうだ。RxState()で状況を判断すれば、もう少し早く問題を
解決できたかもしれない。
今後の参考にしよう。

↑

解決策、SDCARDから受信しているところにピンを立て、PCであくのりっちで観察†

結局、今回の場合は、意外なところで>が返ってきていたので、
気づかなかったわけである。
だから、ピンを立てて、直接返ってきている信号を見てやれば、解決しそうだ。

↑

なぜかうまくいかない、あくのりっちが固まる†

あくのりっちが突然固まる。
次に再起動しても、2ポートにCP2102を使えないっぽい。

↑

2008年5月22日(木)†

↑

コメントが間に入ると受信する場所が変わってしまう†

UART_PC_CPutString("test3!!\r\n");
	
	//Receive Prompt
	while ( !( RxState =UART_SDCARD_bReadRxStatus() & UART_SDCARD_RX_COMPLETE )){}
	if( RxState == UART_SDCARD_RX_COMPLETE){
		//Start Receive 	
		Receive_Prompt = UART_SDCARD_cGetChar();
		if(Receive_Prompt == 0x3e){
			UART_PC_CPutString("Prompt >");
			
		

このプログラムの一行目をコメントアウトすると、
”>”が受け取れなくなった。どうやらCPutStringしているところをコメントアウトすると、
エコーをcGetCharで受信してしまうようだ。
エコーはオフにしておいた方がよさそうだ。

↑

CPutStringで100バイト分出力していたけど†

プロンプトまでか、100バイトまでを読み込んだ後にCPutStringで出力していたが、
これだと100バイト分出力されてしまうので、おかしくなる。
CWriteで指定バイト分だけ出力した方がよさそうだ。
char Receive_Data[100];
UART_PC_PutString(Receive_Data);

↑

cGetCharでの取り込み†

while ( !( UART_PC_bReadRxStatus() & UART_PC_RX_COMPLETE )){}
	while(1){
		if( (Receive_Data = UART_PC_cGetChar()) != 0x3e ){ // ">" de nainara
			UART_PC_PutChar(Receive_Data);
		}else{
			break;
		}
	}
	

while ( !( UART_PC_bReadRxStatus() & UART_PC_RX_COMPLETE )){}
は、cGetCharではいらないっぽい。
よく考えてみれば、cGetCharは、受信するまで待ってくれる

↑

割り込みの許可・不許可を関数毎に切替できる†

UART_PC_IntCntl(UART_PC_ENABLE_RX_INT); // Enable RX interrupts
UART_PC_IntCntl(UART_PC_DISABLE_RX_INT);
を明示してやれば、受信割り込みの許可・不許可の切替可能
こうすれば、前の受信割り込みの問題を解決できるかもしれない。

↑

2008年05月21日(水)†

↑

UART通信のサンプルプログラムを少し改良してみる†

↑

PSoCのUART通信を試す†

今更ながら、もう一度PSoCのUART通信について、試してみようと思う。
自分への備忘録。

↑

cGetCharで文字を取り込む†

3eである“>”を受信するまで、繰り返しcGetCharで取り込むというプログラム。

	char Receive_Data;
	while((Receive_Data = UART_PC_cGetChar()) != 0x3e ){ // ">" de nainara
		UART_PC_PutChar(Receive_Data);
	}

しばらく動かなかったが、どうやら原因は、
UART_PC_IntCntl(UART_PC_ENABLE_RX_INT); // Enable RX interrupts
が入っていたためらしい。

前に先生に聞いたことあったのに、忘れていた。。(汗
cGetChar自体はRXの割り込みを使っていないので、コメントアウトしないといけないみたい。
ということは、szGetParamとかと一緒に使う時には、
その都度切替が必要なのかな。

↑

UART通信のサンプルプログラムを少し改良してみる†

UART通信のサンプルプログラムは、
コマンドを入力して、コマンドとパラメータを分離するようなプログラム。

これを普通の文字列を取り込むプログラムにしておきたい。

	char *strPtr;
	UART_PC_CPutString("\r\nWelcome to PSoC UART test program. V1.1 \r\n");
	while(1){
		if(UART_PC_bCmdCheck()){
			while(strPtr = UART_PC_szGetParam()) { // loop on each parameter	
				UART_PC_CPutString("   <");
				UART_PC_PutString(strPtr);			// Print each parameter    
				UART_PC_CPutString(">\r\n");	
			 }
		}
	   UART_PC_CmdReset();							// Reset command buffer 	  
	}

これが何故かうまく動かない。。
ほとんどサンプルと同じなんだけどな、、

↑

大量にエラーが増えた場合→かっこの数を確認しよう。†

ちょっとプログラム変えたら、意味不明なエラーが大量に出てきた。

単純なミスだけど、すごく発見しづらい。。
PSoCのエディタは、見づらいので、他のエディタで作成するというのも
ありかもしれない。

↑

2008年05月15日(木)†

↑

MeRLマイコン部Wikiを作成しました。†

今年の情報共有方法は、Wikiにすることにしました。
MeRLWikiで使い慣れているということもあるし。
どこまで浸透するかな〜〜


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