コード例 #1
0
ファイル: main.c プロジェクト: rasmusto/falcon
int main (void) {
	
	passedCenterFlag = 0;
	
	configClock ();
	
	PORTE.DIR = 0b11000000;
	PORTF.DIR = 0b00001111;
	
	PMIC.CTRL |= PMIC_HILVLEN_bm;
	PMIC.CTRL |= PMIC_LOLVLEN_bm;
	
	TCF0.CCABUF = STARTUP_PWM;
	TCF0.CCBBUF = STARTUP_PWM;
	TCF0.CCCBUF = STARTUP_PWM;
	TCF0.CCDBUF = STARTUP_PWM;
	
	TCE0.CCABUF = STARTUP_PWM/2;
	TCE0.CCBBUF = STARTUP_PWM/2;
	TCE0.CCCBUF = STARTUP_PWM/2;
	TCE0.CCDBUF = STARTUP_PWM/2;
	
	configPWM (&TCF0, &HIRESF, 5000);
	configHalfPWMTimer (&TCE0, &HIRESE, 5000);
	
	TCF0.CNT = 0;
	TCE0.CNT = 0;
	
	configDelayTimer (&TCC0);
	
	initAdc (&ADCA);
	initAdc (&ADCB);
	
	sei();
	
	startup();
	//~ autoCommutationFlag = 1;
	// float everything
	
	//~ SET_phaseOutputsEHigh(0);
	//~ SET_phaseOutputsEHigh(0);
//~ 
	//~ SET_phaseOutputsELow(0);
	//~ SET_phaseOutputsELow(0);
//~ 
	//~ SET_phaseOutputsFHigh(0);
	//~ SET_phaseOutputsFHigh(0);
//~ 
	//~ SET_phaseOutputsFLow(0);
	//~ SET_phaseOutputsFLow(0);
	//~ 
	//~ PORTE.OUT = 0;
	//~ PORTF.OUT = 0;
	
    _delay_ms(1000);
    _delay_ms(1000);
	TCF0.CCBBUF = 1600;
	TCE0.CCBBUF = 1600/2;

	spiInit ();

	while (1) {}
}
コード例 #2
0
int main(void)
{
	//Calibração do sensor
	/*configPWM();
	setServoAngle(0);
	while(1){
	}*/
	double dt = 0.0;
	double curr_err = 0;
	float PID_Input = 0;
	float PID_Output = 0;
	int i_PID_Input = 0;
	int i_Output = 0;
	char c_PID_Input[4];
	char c_Output[4];
	char c_adc_value[4];
	float gain = -20.0;
	
	
	ADC_config();
	ADC_Start();
	USART_config();
	
	configPWM();
	setServoAngle(0);
	ConfigSerie_BT();
	pid_start();
	pid_timer_config();
	configMotorPWM(500);
	setMotorDirection(1);
	duty_cycle = 10;
	while(1)
	{
		
		if(mode == 1)
		{
			
			if(all_read == 1)
			{
				
				PID_Input = Centroid_Algorithm();
				curr_err = (3.5 - PID_Input);
				dt = TCNT5;
				dt = (dt*16)/1000000;
				
				pid_update(ptr, curr_err,dt);
				PID_Output = PID.control;
				itoa(i_Output, c_Output, 10);
				SendString((char*)"\n-------------------\n");
				SendString((char*)"\nSaída_PID 1: ");
				SendString(c_Output);
				
			
				PID_Output = PID_Output*gain;
				if(PID_Output > 75)
					PID_Output = 75;
				if(PID_Output < -75)
					PID_Output = -75;
			
				setServoAngle(PID_Output);
			
				i_PID_Input = (int) PID_Input;
				i_Output = (int) PID_Output;
				itoa(i_PID_Input, c_PID_Input ,10);
				itoa(i_Output, c_Output, 10);
				SendString((char*)"\nLeituras: "); 
				for(int i = 0; i < 8; i++)
					{
						itoa(adc_value[i], c_adc_value, 10); 
						SendString(c_adc_value);
						UsartSendByte(' ');
					}
				SendString((char*)"\nEntrada PID: "); 
				SendString(c_PID_Input); 
				SendString((char*)"\nSaída_PID 2: "); 
				SendString(c_Output); 
				all_read = 0; 
				ADMUX &= 0XE0; //Limpa ADMUX 
				ADMUX |= channel; //Selecciona o canal 0 
				ADCSRA |= (1<<ADSC); //Inicia conversão
			}
		}
		if(mode == 0)
		{
			//
		}

	}
}