[H8-ML(2832)] すいません。またまた質問です・・・。2回連続ごめんなさい。かなりやばいので・・Cソースを載せます。ごめんなさい。
From: "one two" <km40vey6f@xxxxxxxxxxx>
Date: 2003年02月22日(土)09時58分34秒
すいません。あっちゃんです。
どうしてもライントレースがしたくCソースファイルを載せます。
何回もやってもだめなのです。

センサをA/D変換させます。それをマイコンを通してモータに指令をおくります。AN0
が20より小さかったら右モータを早く回転させ、A2が20より小さかったら左モータ
を早く回転させ、AN1が20より小さかったら二つのモータを同じ回転数で回すという
プログラムです。
GRBの値を変えることにより値が小さいほどはやいことを意味しております。



/* ヘッダーファイル */
#include <3067f.h>

/* mainスタート */

void main(void)
{    
	 unsigned int i,AN0,AN1,AN2;

	 PADDR = 0xff;              /* ポートAを出力に設定   */
     
         PBDDR = 0x6;               /* ポートBのPB1,PB2を出力に設定 */

     /* P4を入力に設定する必要なし。初期値が0で入力だから */
	 P4PCR.BYTE = 0x10;        /* P44をプルアップON  */

    while(P4DR.BIT.B4 != 0)   /* スイッチ(P44)が押されていなかったら(片方が
GNDに設置されているのでスイッチが押されていると0押されていないと1になる)下記
を実行 */
	{
	}

/* 0ch左モータ 1chが右モータ */

	for(i=0;i<1000;i++){
          AD.CSR.BYTE = 0x32;        /* AN0〜AN2(ライン用センサ)までをスキャ
ンモードに設定 */

          while(AD.CSR.BIT.ADF == 0){} /* AN0〜AN2まですべてのデータがA/D変
換されて揃うまで待つ */

          AN0 = AD.DRA >> 6;          /* 6ビット下位に下げて0〜1023(10ビット
)まで表示される */
          AN1 = AD.DRB >> 6;          /* 6ビット下位に下げて0〜1023(10ビット
)まで表示される */
          AN2 = AD.DRC >> 6;          /* 6ビット下位に下げて0〜1023(10ビット
)まで表示される */
 	  
         
          ITU.TSTR.BIT.STR0 = 0;   /* カウント停止状態                */
          ITU.TSTR.BIT.STR1 = 0;   /* カウント停止状態                */


          ITU.TMDR.BIT.PWM0 = 1; /* ITU0 PWMモード */
          ITU.TMDR.BIT.PWM1 = 1; /* ITU1 PWMモード */


          ITU0.TCR.BYTE = 0xC3;   /* GRBでコンペアマッチ クロックφ/8を選択 
*/
	  ITU1.TCR.BYTE = 0xC3;   /* GRBでコンペアマッチ クロックφ/8を選択 */


          ITU0.TIOR.BYTE = 0x9A ;  /* TIORでGRA0をH,GRB0をLに設定 */
          ITU1.TIOR.BYTE = 0x9A ;  /* TIORでGRA1をH,GRB1をLに設定 */
     
	 
          PBDR.BYTE = 0x2;            /* PB1をHに設定 (左モータCCW)*/
	 
          ITU.TSTR.BIT.STR0 = 1;  /* カウント開始          */
	  ITU.TSTR.BIT.STR1 = 1;  /* カウント開始          */  

	    
	     
			  if(AN0 < 20){
                            ITU0.GRB = 0x1388;       /* GRB0を5000に設定    
          */
                            ITU1.GRB = 0x9C4;       /* GRB1を2500に設定     
         */

                            ITU0.GRA = ITU0.GRB/2 ;  /* GRA0を2500に設定 */
                            ITU1.GRA = ITU1.GRB/2 ;  /* GRA1を1250に設定 */
			    }
			    else if(AN1 < 20){
                               ITU0.GRB = 0x1388;       /* GRB0を5000に設定 
             */
                               ITU1.GRB = 0x1388;       /* GRB1を5000に設定 
             */

                               ITU0.GRA = ITU0.GRB/2 ;  /* GRA0を2500に設定 
*/
                               ITU1.GRA = ITU1.GRB/2 ;  /* GRA1を2500に設定 
*/
			       }
				else if(AN2 < 20){
                                   ITU0.GRB = 0x9C4;       /* GRB0を2500に設
定              */
                                   ITU1.GRB = 0x1388;       /* GRB1を5000に
設定              */

                                   ITU0.GRA = ITU0.GRB/2 ;  /* GRA0を1250に
設定 */
                                   ITU1.GRA = ITU1.GRB/2 ;  /* GRA1を2500に
設定 */
				   }
                                   else{
                                      ITU0.GRB = 0x30D4;       /* GRB012500
をに設定              */
                                      ITU1.GRB = 0x30D4;       /* GRB12500を
に設定              */

                                      ITU0.GRA = ITU0.GRB/2 ;  /* GRA0を6250
に設定 */
                                      ITU1.GRA = ITU1.GRB/2 ;  /* GRA1を6250
に設定 */
                                    }
	}
	 while(1){
	 }
     

}


以上です。
これを行うとずっと両方のモータが同じ速度で回るのです。
センサの値もちゃんとCPUまでいっております。
SCIのプログラムで確認してセンサが反応しているときは10以下に値が必ずなりま
す。
ためしに10以下でやっても結果は同じです。

すいませんが、お願いいたします。



_________________________________________________________________
HP やメールアドレスを自分だけのオリジナルに MSN ドメイン   
http://onamae.msn.co.jp/  

スレッド概略
[表示中](起点)
 ├[2834(1)]
 ├[2835(2)]
 ├[2840(3)]
 └[2843(4)]


投稿順に移動
[←前の記事へ(P)]
[→次の記事へ(N)]


リスト表示へ
[このスレッド(T)]
[本記事の前後(L)]