kondo

2008年06月25日(水)

PCBEメモ

  • 角ラインでは塗りつぶしできない。
  • Undoができない
    • subversionなどを利用して、バージョン管理するのがよいかも。
  • 接続したいところは、変形で端点を作成する
    • こうしておくことで、同電位(p)で確認できる
      	
  • よくやる方法として、表面→VDD、裏面→GNDにする方法
    • 違う基板なら!?、3層基板?なら、表全てVdd,裏全てGNDというのもあるみたい。
    • 今回は、電源の電圧値がいろいろなので、あえて分けない。
  • レギュレータのLM317は1.1mmぐらいでいい
    • レギュレータは、元電源になるので、線が太いのかな。
  • GNDと電源は、太めにする

パッドの大きさメモ

  • No.0・・・via用、ライン1.1、レジスト0.8、孔0.7
    • 表と裏を貫通させるためのもの
  • No.1・・・通常、ライン1.6、レジスト1.7、孔0.9
  • No.2・・・大きめ、ライン1.6、レジスト1.7、孔1.1

秋田先生からのコメント

  • 縦線と横線は、基本的に斜めにしない
    • グリッドが細かすぎるのが原因
      	基本的には、グリッドは1.27mmあたりに固定し、
      	長めの配線を引くようにするとよいと思います。
      	グリッドのことなる部品の足のまわりは、
      	端点接続(T)を活用して、最小限だけ斜め線をひっぱって、
      	あとは1.27mmのグリッドに載せるのが、よいように思います。

感想

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

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

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 	  
	}

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

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

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

  • ただ単に{}のかっこを付け忘れていたorz
  • 関数のかっこを付け忘れfunction()の()が抜けていた。

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

2008年05月15日(木)

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

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


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