Пример #1
0
void main()
{	     
    init_clk();
    led_init();
    Delay_ms(2000);          //越过传感器不稳定状态  

    while(1)
    {
      led_out(0x55);
      Delay_ms(1000);
      led_out(0x00);
      work_data();
      led_out(humdh);
      Delay_ms(1000);//等待下次采样
      led_out(humdl);
      Delay_ms(1000);
      led_out(temph);
      Delay_ms(1000);
      led_out(templ);
      Delay_ms(1000);
      
    }
}
Пример #2
0
void main(void)
{
	vInitialize();
	myInit();
	
	while(!pushsw_get())
	{
		if(cnt1<100)
			led_out(0x1);
		else if(cnt1<200)
			led_out(0x2);
		else	cnt1 = 0;
	}
	cnt1 = 0;
	while(startbar_get())
	{
		if(cnt1<50)
			led_out(0x1);
		else if(cnt1<100)
			led_out(0x2);
		else	cnt1 = 0;
	}
	
	led_out(0);
	start();
	pattern = 10;	
	while(1)
	{

		switch(pattern)
		{

			case 10:	//直线
					if(check_crossline()){	pattern = 30;break;	}
					if(check_blackArea()){	pattern = 40;break;	}
					
					straight_run();				//直线前行,弯道检测,盲区检测
					break;
			
			case 20:	//弯道
						switch(turn_direction)
						{
							case LEFT:
									handle(-1*midDegree_st4);
									left_turn();
									break;
							case RIGHT:
									handle(midDegree_st4);
									right_turn();
									break;
							default:break;
						}
						break;


			case 30:	//直角

						rightAngle();						
						break;


			case 40:	//盲区
						switch(blackArea_direction)
						{
							case LEFT:
									left_blackArea();
									break;
							case RIGHT:
									right_blackArea();
									break;
							default:break;									
						}
						break;

			default:break;

		}//end switch

	}//end while
	
}
Пример #3
0
//===============================================
//===============================================
//===============================================
//===============================================
void main(void)
{

t0_init();


ei();
PEIE=1;

di();



ei();

TRISB=0x00;
PORTB=0x00;
PORTC|=(1<<led_ERR);

prog_drv();
led_cnt=prog*8;
//

while (1)
	{
	if(bit_100Hz)
		{
		bit_100Hz=0;
	//	PORTC^=0x0f;
	//	PORTB^=0b01100000;

          in_read();
          step_contr();
          mdvr_drv();
		but_drv();
		but_an();
		}
	if(bit_10Hz)
		{
		bit_10Hz=0;
          //out_out();
         	led_out();
         	err_drv();
          prog_drv();
	   //	TRISC=0;
	   // 	if(bVR)	PORTB^=(1<<NET);
        //  PORTC^=0xff;

		}
	if(bit_1Hz)
		{
		bit_1Hz=0;
		di();
	//	PORTB^=0xff;
/*		if(prog==p1) PORTB^=(1<<PP1);
		else if(prog==p2) PORTB^=(1<<PP2);
		else if(prog==p3) PORTB^=(1<<PP3); */
		ei();



		}


	}
}
Пример #4
0
//===============================================
//===============================================
//===============================================
//===============================================
void main(void)
{

t0_init();


ei();
PEIE=1;

di();



ei();

TRISB=0x00;
PORTB=0x00;
PORTC|=(1<<led_ERR);
sci_init();


while (1)
	{
	if(bRXIN)
		{
		bRXIN=0;
		UART_IN();
		}
	if(bit_100Hz)
		{
		bit_100Hz=0;

          in_read();
          step_contr();
          mdvr_drv();
		but_drv();
		but_an();
		}
	if(bit_10Hz)
		{
		bit_10Hz=0;
         // out_out();
         	led_out();
         	err_drv();
          prog_drv();

        //	if(prog==p1) OUT(3,CMND,eeprom_read(DELAY1),eeprom_read(DELAY2)/*3,3*/,0,0,0);
        //	else if(prog==p2) OUT(3,CMND,eeprom_read(DELAY3),eeprom_read(DELAY4),0,0,0);
        	if(prog==p3)
        		{
        		if(!sub_ind)adress=DELAY1;
        		else adress=DELAY2;
        		}
        	else if(prog==p4)
        		{
        		if(!sub_ind)adress=DELAY3;
        		else adress=DELAY4;
        		}
        	else if(prog==p1)
        		{
        		if(!sub_ind)adress=DELAY5;
        		else adress=DELAY6;
        		}
        	else if(prog==p2)
        		{
        		if(!sub_ind)adress=DELAY7;
        		else adress=DELAY8;
        		}
          OUT(3,CMND,/*prog*/eeprom_read(adress),sub_ind+1,0,0,0);
		}
	if(bit_1Hz)
		{
		bit_1Hz=0;




		}


	}
}
Пример #5
0
void main( void )
{
    int             i, j;
    unsigned int    u;
    char            c;

    /* マイコン機能の初期化 */
    init();                             /* 初期化                       */
    initI2CEeprom( &P6DDR, &P6DR, 0x90, 6, 5);  /* EEP-ROM初期設定      */
    init_sci1( 0x00, 79 );              /* SCI1初期化                   */
    set_ccr( 0x00 );                    /* 全体割り込み許可             */

    /* マイコンカーの状態初期化 */
    speed_r( 0, 0 );
    speed_f( 0, 0 );
    servoPwmOut( 0 );

    while( 1 ) {
        switch( pattern ) {
        case 0:
            /* メニュー */
            printf( "\n\n" );
            printf( "Motor Drive PCB TypeS Test Program Ver1.00\n" );
            printf( "\n" );
            printf( "1 : LEDのテスト\n" );
            printf( "2 : スイッチのテスト\n" );
            printf( "3 : CN8の入力テスト\n" );
            printf( "4 : ブザーのテスト\n" );
            printf( "5 : エンコーダのテスト\n" );
            printf( "6 : EEP-ROMのテスト\n" );
            printf( "7 : ボリュームのテスト\n" );
            printf( "8 : アナログセンサ基板のテスト\n" );
            printf( "9 : モータのテスト\n" );
            printf( "\n" );
            printf( "1-9の数字を入力してください " );
            pattern = 1;
            break;

        case 1:
            if( get_sci(&c) ) {
                if( c >= '1' && c <= '9' ) {
                    printf( "%c\n\n" , c );
                    cnt1 = 0;
                    pattern = (c - 0x30) * 10 + 1;
                }
            }
            break;

        case 11:
            /* LEDのテスト */
            printf( "現在LED2〜5を順番に点灯中です。" );
            printf( "終わったらどれかキーを押してください。\n" );
            pattern = 12;
            break;

        case 12:
            led_out( 1 << (cnt1 / 500) );
            if( cnt1 >= 2000 ) cnt1 = 0;
            if( get_sci(&c) == 1 ) {
                led_out( 0 );
                pattern = 0;
            }
            break;

        case 21:
            /* スイッチのテスト */
            printf( "現在スイッチの値を表示中です。" );
            printf( "終わったらどれかキーを押してください。\n" );
            pattern = 22;
            break;

        case 22:
            if( get_sci(&c) == 1 ) {
                pattern = 0;
                break;
            }
            if( cnt1 >= 200 ) {
                cnt1 = 0;
                printf( "ディップSW(SW3)の値 : %02x ", dipsw_get2() );
                printf( "プッシュSW(SW2)の値 : %1x\r", pushsw_get() );
            }
            break;

        case 31:
            /* CN8の入力テスト */
            printf( "CN8に入力されている値を表示中です。" );
            printf( "終わったらどれかキーを押してください。\n" );
            pattern = 32;
            break;

        case 32:
            if( get_sci(&c) == 1 ) {
                pattern = 0;
                break;
            }
            if( cnt1 >= 200 ) {
                cnt1 = 0;
                printf( "CN8の入力値 : %1x\r", cn8_get() );
            }
            break;

        case 41:
            /* ブザーのテスト */
            printf( "ブザーをテストします。" );
            printf( "終わったらどれかキーを押してください。\n" );
            pattern = 42;
            break;

        case 42:
            if( get_sci(&c) == 1 ) {
                pattern = 0;
                beep_out( 0 );
                break;
            }
            if( cnt1 <= 1000 ) {
                beep_out( 1 );
            } else if( cnt1 <= 2000 ) {
                beep_out( 0 );
            } else {
                cnt1 = 0;
            }
            break;

        case 51:
            /* エンコーダのテスト */
            printf( "エンコーダの入力パルス数を表示します。" );
            printf( "終わったらどれかキーを押してください。\n" );
            lEncoderTotal = 0;
            pattern = 52;
            break;

        case 52:
            if( get_sci(&c) == 1 ) {
                pattern = 0;
                break;
            }
            if( cnt1 >= 200 ) {
                cnt1 = 0;
                printf( "エンコーダのパルス値 : %8ld\r", lEncoderTotal );
            }
            break;

        case 61:
            /* EEP-ROMのテスト */
            printf( "EEP-ROMが正常に書き込めるかチェックします。" );
            printf( "チェック中はキー入力を受け付けません。" );
            printf( "チェックしますか?(Y or N) " );
            pattern = 62;
            break;

        case 62:
            if( get_sci(&c) == 1 ) {
                switch( c ) {
                case 'Y':
                case 'y':
                    printf( "y\n" );
                    pattern = 63;
                    break;
                case 'N':
                case 'n':
                    printf( "n\n" );
                    pattern = 0;
                    break;
                }
            }
            break;

        case 63:
            for( u=0; u<0x8000 ; u++ ) {
                if( u % 0x80 == 0 ) {
                    printf( "%3ld%%チェック完了...\r",
                                        (long)u * 100 / 0x8000 );
                }
                writeI2CEeprom( u, 0xaa );
                while( !checkI2CEeprom() );
                if( (unsigned char)readI2CEeprom( u ) != 0xaa ) {
                    break;
                }

                writeI2CEeprom( u, 0x55 );
                while( !checkI2CEeprom() );
                if( (unsigned char)readI2CEeprom( u ) != 0x55 ) {
                    break;
                }

                writeI2CEeprom( u, 0x00 );
                while( !checkI2CEeprom() );
                if( (unsigned char)readI2CEeprom( u ) != 0x00 ) {
                    break;
                }
            }
            printf( "\n" );
            if( u == 0x8000 ) {
                printf( "EEP-ROMは正常でした。\n" );
           } else {
                printf( "EEP-ROMに異常がありました。" );
                printf( "半田不良など確認してください。\n" );
            }
            pattern = 64;
            break;

        case 64:
            printf( "どれかキーを押してください。" );
            while( get_sci(&c) );
            pattern = 65;
            break;

        case 65:
            if( get_sci(&c) == 1 ) {
                pattern = 0;
                break;
            }
            break;

        case 71:
            /* ボリュームのテスト */
            printf( "ボリューム電圧を表示中です。" );
            printf( "終わったらどれかキーを押してください。\n" );
            pattern = 72;
            break;

        case 72:
            if( get_sci(&c) == 1 ) {
                pattern = 0;
                break;
            }
            if( cnt1 >= 200 ) {
                cnt1 = 0;
                i =  AD_DRB >> 6;
                j = (long)500 * i / 1023;
                printf( "ボリュームの電圧 : %4d (%01d.%02dV)\r",
                                                i, j/100, j%100 );
            }
            break;

        case 81:
            /* アナログセンサ基板のテスト */
            printf( "アナログセンサ基板の値を表示中です。" );
            printf( "終わったらどれかキーを押してください。\n" );
            pattern = 82;
            break;

        case 82:
            if( get_sci(&c) == 1 ) {
                pattern = 0;
                break;
            }
            if( cnt1 >= 200 ) {
                cnt1 = 0;
                printf( "Left=%4d , Right=%4d , "
                        "Digital=%1x , Center=%1d , Bar=%1d\r",
                            AD_DRD>>6, AD_DRC>>6, sensor_inp(),
                            center_inp(), startbar_get() );
            }
            break;

        case 91:
            /* モータのテスト */
            printf( "モータのテストをします。\n" );
            printf( "1 : 左後ろモータ\n" );
            printf( "2 : 右後ろモータ\n" );
            printf( "3 : サーボモータ\n" );
            printf( "4 : 左前モータ\n" );
            printf( "5 : 右前モータ\n" );
            printf( "0 : 終了\n" );
            printf( "\n" );
            printf( "0-5の数字を入力してください " );
            pattern = 92;
            break;

        case 92:
            if( get_sci(&c) ) {
                if( c == '0' ) {
                    pattern = 0;
                    break;
                } else if( c >= '1' && c <= '5' ) {
                    printf( "%c\n\n" , c );
                    cnt1 = 0;
                    pattern = (c - 0x31) * 10 + 101;
                }
            }
            break;

        case 101:
            printf( "左後ろモータをテストします。\n" );
            printf( "スペースキーを押して動作を変えます。" );
            printf( "0キーで終了です。\n" );
            cnt1 = 0;
            i = 0;
            j = 1;
            pattern = 102;
            break;

        case 102:
            if( get_sci(&c) ) {
                if( c == '0' ) {
                    speed2_r( 0, 0 );
                    motor_mode_r( BRAKE , BRAKE );
                    pattern = 91;
                    break;
                } else if( c == ' ' ) {
                    cnt1 = 0;
                    i++;
                    if( i >= 5 ) i = 0;
                }
            }
            switch( i ) {
            case 0:
                if( i != j ) {
                    printf( "停止中                     \r" );
                    j = i;
                }
                speed2_r( 0, 0 );
                motor_mode_r( BRAKE , BRAKE );
                break;
            case 1:
                if( i != j ) {
                    printf( "正転50%% <-> ブレーキ動作中\r" );
                    j = i;
                }
                if( cnt1 <= 1000 ) {
                    speed2_r( 50, 0 );
                    motor_mode_r( BRAKE , BRAKE );
                } else if(  cnt1 <= 2000 ) {
                    speed2_r( 0, 0 );
                    motor_mode_r( BRAKE , BRAKE );
                } else {
                    cnt1 = 0;
                }
                break;
            case 2:
                if( i != j ) {
                    printf( "逆転50%% <-> ブレーキ動作中\r" );
                    j = i;
                }
                if( cnt1 <= 1000 ) {
                    speed2_r( -50, 0 );
                    motor_mode_r( BRAKE , BRAKE );
                } else if(  cnt1 <= 2000 ) {
                    speed2_r( 0, 0 );
                    motor_mode_r( BRAKE , BRAKE );
                } else {
                    cnt1 = 0;
                }
                break;
            case 3:
                if( i != j ) {
                    printf( "正転50%% <-> フリー 動作中\r" );
                    j = i;
                }
                if( cnt1 <= 1000 ) {
                    speed2_r( 50, 0 );
                    motor_mode_r( FREE , BRAKE );
                } else if(  cnt1 <= 2000 ) {
                    speed2_r( 0, 0 );
                    motor_mode_r( FREE , BRAKE );
                } else {
                    cnt1 = 0;
                }
                break;
            case 4:
                if( i != j ) {
                    printf( "逆転50%% <-> フリー 動作中\r" );
                    j = i;
                }
                if( cnt1 <= 1000 ) {
                    speed2_r( -50, 0 );
                    motor_mode_r( FREE , BRAKE );
                } else if(  cnt1 <= 2000 ) {
                    speed2_r( 0, 0 );
                    motor_mode_r( FREE , BRAKE );
                } else {
                    cnt1 = 0;
                }
                break;
            }
            break;

        case 111:
            printf( "右後ろモータをテストします。\n" );
            printf( "スペースキーを押して動作を変えます。" );
            printf( "0キーで終了です。\n" );
            cnt1 = 0;
            i = 0;
            j = 1;
            pattern = 112;
            break;

        case 112:
            if( get_sci(&c) ) {
                if( c == '0' ) {
                    speed2_r( 0, 0 );
                    motor_mode_r( BRAKE , BRAKE );
                    pattern = 91;
                    break;
                } else if( c == ' ' ) {
                    cnt1 = 0;
                    i++;
                    if( i >= 5 ) i = 0;
                }
            }
            switch( i ) {
            case 0:
                if( i != j ) {
                    printf( "停止中                     \r" );
                    j = i;
                }
                speed2_r( 0, 0 );
                motor_mode_r( BRAKE , BRAKE );
                break;
            case 1:
                if( i != j ) {
                    printf( "正転50%% <-> ブレーキ動作中\r" );
                    j = i;
                }
                if( cnt1 <= 1000 ) {
                    speed2_r( 0, 50 );
                    motor_mode_r( BRAKE , BRAKE );
                } else if(  cnt1 <= 2000 ) {
                    speed2_r( 0, 0 );
                    motor_mode_r( BRAKE , BRAKE );
                } else {
                    cnt1 = 0;
                }
                break;
            case 2:
                if( i != j ) {
                    printf( "逆転50%% <-> ブレーキ動作中\r" );
                    j = i;
                }
                if( cnt1 <= 1000 ) {
                    speed2_r( 0, -50 );
                    motor_mode_r( BRAKE , BRAKE );
                } else if(  cnt1 <= 2000 ) {
                    speed2_r( 0, 0 );
                    motor_mode_r( BRAKE , BRAKE );
                } else {
                    cnt1 = 0;
                }
                break;
            case 3:
                if( i != j ) {
                    printf( "正転50%% <-> フリー 動作中\r" );
                    j = i;
                }
                if( cnt1 <= 1000 ) {
                    speed2_r( 0, 50 );
                    motor_mode_r( BRAKE , FREE );
                } else if(  cnt1 <= 2000 ) {
                    speed2_r( 0, 0 );
                    motor_mode_r( BRAKE , FREE );
                } else {
                    cnt1 = 0;
                }
                break;
            case 4:
                if( i != j ) {
                    printf( "逆転50%% <-> フリー 動作中\r" );
                    j = i;
                }
                if( cnt1 <= 1000 ) {
                    speed2_r( 0, -50 );
                    motor_mode_r( BRAKE , FREE );
                } else if(  cnt1 <= 2000 ) {
                    speed2_r( 0, 0 );
                    motor_mode_r( BRAKE , FREE );
                } else {
                    cnt1 = 0;
                }
                break;
            }
            break;

        case 121:
            printf( "サーボモータをテストします。\n" );
            printf( "スペースキーを押して動作を変えます。" );
            printf( "0キーで終了です。\n" );
            cnt1 = 0;
            i = 0;
            j = 1;
            pattern = 122;
            break;

        case 122:
            if( get_sci(&c) ) {
                if( c == '0' ) {
                    servoPwmOut( 0 );
                    motor_mode_s( BRAKE );
                    pattern = 91;
                    break;
                } else if( c == ' ' ) {
                    cnt1 = 0;
                    i++;
                    if( i >= 5 ) i = 0;
                }
            }
            switch( i ) {
            case 0:
                if( i != j ) {
                    printf( "停止中                     \r" );
                    j = i;
                }
                servoPwmOut( 0 );
                motor_mode_s( BRAKE );
                break;
            case 1:
                if( i != j ) {
                    printf( "正転50%% <-> ブレーキ動作中\r" );
                    j = i;
                }
                if( cnt1 <= 1000 ) {
                    servoPwmOut( 50 );
                    motor_mode_s( BRAKE );
                } else if(  cnt1 <= 2000 ) {
                    servoPwmOut( 0 );
                    motor_mode_s( BRAKE );
                } else {
                    cnt1 = 0;
                }
                break;
            case 2:
                if( i != j ) {
                    printf( "逆転50%% <-> ブレーキ動作中\r" );
                    j = i;
                }
                if( cnt1 <= 1000 ) {
                    servoPwmOut( -50 );
                    motor_mode_s( BRAKE );
                } else if(  cnt1 <= 2000 ) {
                    servoPwmOut( 0 );
                    motor_mode_s( BRAKE );
                } else {
                    cnt1 = 0;
                }
                break;
            case 3:
                if( i != j ) {
                    printf( "正転50%% <-> フリー 動作中\r" );
                    j = i;
                }
                if( cnt1 <= 1000 ) {
                    servoPwmOut( 50 );
                    motor_mode_s( FREE );
                } else if(  cnt1 <= 2000 ) {
                    servoPwmOut( 0 );
                    motor_mode_s( FREE );
                } else {
                    cnt1 = 0;
                }
                break;
            case 4:
                if( i != j ) {
                    printf( "逆転50%% <-> フリー 動作中\r" );
                    j = i;
                }
                if( cnt1 <= 1000 ) {
                    servoPwmOut( -50 );
                    motor_mode_s( FREE );
                } else if(  cnt1 <= 2000 ) {
                    servoPwmOut( 0 );
                    motor_mode_s( FREE );
                } else {
                    cnt1 = 0;
                }
                break;
            }
            break;

        case 131:
            printf( "左前モータをテストします。\n" );
            printf( "スペースキーを押して動作を変えます。" );
            printf( "0キーで終了です。\n" );
            cnt1 = 0;
            i = 0;
            j = 1;
            pattern = 132;
            break;

        case 132:
            if( get_sci(&c) ) {
                if( c == '0' ) {
                    speed2_f( 0, 0 );
                    motor_mode_f( BRAKE , BRAKE );
                    pattern = 91;
                    break;
                } else if( c == ' ' ) {
                    cnt1 = 0;
                    i++;
                    if( i >= 5 ) i = 0;
                }
            }
            switch( i ) {
            case 0:
                if( i != j ) {
                    printf( "停止中                     \r" );
                    j = i;
                }
                speed2_f( 0, 0 );
                motor_mode_f( BRAKE , BRAKE );
                break;
            case 1:
                if( i != j ) {
                    printf( "正転50%% <-> ブレーキ動作中\r" );
                    j = i;
                }
                if( cnt1 <= 1000 ) {
                    speed2_f( 50, 0 );
                    motor_mode_f( BRAKE , BRAKE );
                } else if(  cnt1 <= 2000 ) {
                    speed2_f( 0, 0 );
                    motor_mode_f( BRAKE , BRAKE );
                } else {
                    cnt1 = 0;
                }
                break;
            case 2:
                if( i != j ) {
                    printf( "逆転50%% <-> ブレーキ動作中\r" );
                    j = i;
                }
                if( cnt1 <= 1000 ) {
                    speed2_f( -50, 0 );
                    motor_mode_f( BRAKE , BRAKE );
                } else if(  cnt1 <= 2000 ) {
                    speed2_f( 0, 0 );
                    motor_mode_f( BRAKE , BRAKE );
                } else {
                    cnt1 = 0;
                }
                break;
            case 3:
                if( i != j ) {
                    printf( "正転50%% <-> フリー 動作中\r" );
                    j = i;
                }
                if( cnt1 <= 1000 ) {
                    speed2_f( 50, 0 );
                    motor_mode_f( FREE , BRAKE );
                } else if(  cnt1 <= 2000 ) {
                    speed2_f( 0, 0 );
                    motor_mode_f( FREE , BRAKE );
                } else {
                    cnt1 = 0;
                }
                break;
            case 4:
                if( i != j ) {
                    printf( "逆転50%% <-> フリー 動作中\r" );
                    j = i;
                }
                if( cnt1 <= 1000 ) {
                    speed2_f( -50, 0 );
                    motor_mode_f( FREE , BRAKE );
                } else if(  cnt1 <= 2000 ) {
                    speed2_f( 0, 0 );
                    motor_mode_f( FREE , BRAKE );
                } else {
                    cnt1 = 0;
                }
                break;
            }
            break;

        case 141:
            printf( "右後ろモータをテストします。\n" );
            printf( "スペースキーを押して動作を変えます。" );
            printf( "0キーで終了です。\n" );
            cnt1 = 0;
            i = 0;
            j = 1;
            pattern = 142;
            break;

        case 142:
            if( get_sci(&c) ) {
                if( c == '0' ) {
                    speed2_f( 0, 0 );
                    motor_mode_f( BRAKE , BRAKE );
                    pattern = 91;
                    break;
                } else if( c == ' ' ) {
                    cnt1 = 0;
                    i++;
                    if( i >= 5 ) i = 0;
                }
            }
            switch( i ) {
            case 0:
                if( i != j ) {
                    printf( "停止中                     \r" );
                    j = i;
                }
                speed2_f( 0, 0 );
                motor_mode_f( BRAKE , BRAKE );
                break;
            case 1:
                if( i != j ) {
                    printf( "正転50%% <-> ブレーキ動作中\r" );
                    j = i;
                }
                if( cnt1 <= 1000 ) {
                    speed2_f( 0, 50 );
                    motor_mode_f( BRAKE , BRAKE );
                } else if(  cnt1 <= 2000 ) {
                    speed2_f( 0, 0 );
                    motor_mode_f( BRAKE , BRAKE );
                } else {
                    cnt1 = 0;
                }
                break;
            case 2:
                if( i != j ) {
                    printf( "逆転50%% <-> ブレーキ動作中\r" );
                    j = i;
                }
                if( cnt1 <= 1000 ) {
                    speed2_f( 0, -50 );
                    motor_mode_f( BRAKE , BRAKE );
                } else if(  cnt1 <= 2000 ) {
                    speed2_f( 0, 0 );
                    motor_mode_f( BRAKE , BRAKE );
                } else {
                    cnt1 = 0;
                }
                break;
            case 3:
                if( i != j ) {
                    printf( "正転50%% <-> フリー 動作中\r" );
                    j = i;
                }
                if( cnt1 <= 1000 ) {
                    speed2_f( 0, 50 );
                    motor_mode_f( BRAKE , FREE );
                } else if(  cnt1 <= 2000 ) {
                    speed2_f( 0, 0 );
                    motor_mode_f( BRAKE , FREE );
                } else {
                    cnt1 = 0;
                }
                break;
            case 4:
                if( i != j ) {
                    printf( "逆転50%% <-> フリー 動作中\r" );
                    j = i;
                }
                if( cnt1 <= 1000 ) {
                    speed2_f( 0, -50 );
                    motor_mode_f( BRAKE , FREE );
                } else if(  cnt1 <= 2000 ) {
                    speed2_f( 0, 0 );
                    motor_mode_f( BRAKE , FREE );
                } else {
                    cnt1 = 0;
                }
                break;
            }
            break;

        default:
            break;
        }
Пример #6
0
Файл: gavt2.c Проект: pal73/GAVT
//===============================================
//===============================================
//===============================================
//===============================================
void main(void)
{

t0_init();


ei();
PEIE=1;

di();



ei();

TRISB=0x00;
PORTB=0x00;
PORTC|=(1<<led_ERR);
sci_init();


while (1)
	{
	if(bRXIN)
		{
		bRXIN=0;
		UART_IN();
		}
	if(bit_100Hz)
		{
		bit_100Hz=0;

          in_read();
          step_contr();
          mdvr_drv();
		but_drv();
		but_an();
		}
	if(bit_10Hz)
		{
		bit_10Hz=0;
         // out_out();
         	led_out();
         	err_drv();
          prog_drv();

        	if(prog==p1) OUT(3,CMND,eeprom_read(DELAY1),eeprom_read(DELAY2),0,0,0);
        	else if(prog==p1) OUT(3,CMND,eeprom_read(DELAY3),eeprom_read(DELAY4),0,0,0);

		}
	if(bit_1Hz)
		{
		bit_1Hz=0;




		}


	}
}
Пример #7
0
void system_fsm_mode(void)
{
	din = pev_pio_in(PEV_BDN);
	don = 0;

	switch (sysmode_e)
	{
	case SYS_STP:
		if (INI_SW == (din & INI_SW))
		{											// init switch on
			pev_pio_out(PEV_BDN, don);				// reset relays
			pev_inverter_start_pwm(PEV_BDN, XAXIS); // drive inv's on
			pev_inverter_start_pwm(PEV_BDN, YAXIS);
			sysmode_e = SYS_INI;
		}
		if (INI_SW == (din & INI_SW) && RUN_SW == (din & RUN_SW))
		{ // avoid direct init
			err = err | FWE_LED;
			sysmode_e = SYS_ERR; // firmware init err
		}
		break;

	case SYS_INI:
		system_fsm_err();		   // check for errors
		pev_pio_out(PEV_BDN, don); // switch relays
		if (err != 0)
		{										   // error detected
			pev_inverter_stop_pwm(PEV_BDN, XAXIS); // error mode change
			pev_inverter_stop_pwm(PEV_BDN, YAXIS);
			sysmode_e = SYS_ERR;
		}
		if (INI_SW != (din & INI_SW))
		{										   // ini switch off
			system_fsm_reset();					   // reset firmware
			pev_inverter_stop_pwm(PEV_BDN, XAXIS); // revert to stp mode
			pev_inverter_stop_pwm(PEV_BDN, YAXIS);
			sysmode_e = SYS_STP;
		}
		if (RUN_SW == (din & RUN_SW))
		{ // run switch on
			sysmode_e = SYS_RUN;
		}
		break;

	case SYS_RUN:
		system_fsm_err();		   // check for errors
		pev_pio_out(PEV_BDN, don); // switch relays
		if (err != 0)
		{										   // error detected
			pev_inverter_stop_pwm(PEV_BDN, XAXIS); // error mode change
			pev_inverter_stop_pwm(PEV_BDN, YAXIS);
			sysmode_e = SYS_ERR;
		}
		if (OIL_SW == (din & OIL_SW))
		{
			pev_pio_set_bit(PEV_BDN, OIL_DO);
		} // oil pump on
		else
		{
			pev_pio_clr_bit(PEV_BDN, OIL_DO);
		} // oil pump off
		if (RUN_SW != (din & RUN_SW))
		{
			sysmode_e = SYS_INI;
		} // firmware reset
		break;

	case SYS_ERR:
		pev_pio_out(PEV_BDN, err);								  // system error LED
		if (RUN_SW != (din & RUN_SW) && INI_SW != (din & INI_SW)) // hardware reset
		{
			system_fsm_reset();
			err = 0;
			sysmode_e = SYS_STP; // firmware reset
			don = don | RST_DO;
			pev_pio_out(PEV_BDN, don); // reset relay on
		}
		break;
	}
	led_out(sysmode_e); // system mode LED
}