Ejemplo n.º 1
0
int main(void)
{

  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */

  /* MCU Configuration----------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* Configure the system clock */
  SystemClock_Config();

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_USART1_UART_Init();

  /* USER CODE BEGIN 2 */
	LCD_Init(2, 20);
	LCD_PrintString(0, 0, "Damogran Labs");
	
	Encoder_Init(&encoder1, ENC1_A_GPIO_Port, ENC1_A_Pin, ENC1_B_GPIO_Port, ENC1_B_Pin);
	Encoder_Init(&encoder2, ENC2_A_GPIO_Port, ENC2_A_Pin, ENC2_B_GPIO_Port, ENC2_B_Pin);
		
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
	LCD_PrintNumber(1, 0, encoder1.abs_rot);
	LCD_PrintNumber(1, 6, encoder2.abs_rot);
	
  while (1)
  {
		if(Encoder_GetState(&encoder1)){
			LCD_PrintString(1, 0, "     ");
			LCD_PrintNumber(1, 0, encoder1.abs_rot);
		}	
		if(Encoder_GetState(&encoder2)){
			LCD_PrintString(1, 6, "     ");
			LCD_PrintNumber(1, 6, encoder2.abs_rot);
		}	
		
		if(HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0) == GPIO_PIN_SET){
			Encoder_SetAbsToZero(&encoder1);
			Encoder_SetAbsToZero(&encoder2);
		}
		
		HAL_Delay(100);
  /* USER CODE END WHILE */

  /* USER CODE BEGIN 3 */

  }
  /* USER CODE END 3 */

}
Ejemplo n.º 2
0
void HardwareInit()
{
  IntMasterDisable();
  
  // Set the system clock to run at 50MHz from the PLL. // PLL=400MHz
  // sysc2000000lk = 400MHz/2/4 = 50MHz
  //SysCtlClockSet(SYSCTL_SYSDIV_4 | SYSCTL_USE_PLL | SYSCTL_OSC_MAIN | SYSCTL_XTAL_16MHZ);

  ROM_SysCtlClockSet(SYSCTL_SYSDIV_2_5 | SYSCTL_USE_PLL | SYSCTL_OSC_MAIN | SYSCTL_XTAL_16MHZ);

  // Set the system clock to run at 20MHz from the PLL. // PLL=100MHz
  // sysc2000000lk = 100MHz/2/4 = 20MHz
  //SysCtlClockSet(SYSCTL_SYSDIV_10| SYSCTL_USE_PLL | SYSCTL_OSC_MAIN | SYSCTL_XTAL_16MHZ);
  ulSysClock = ROM_SysCtlClockGet();
  
   
  if (InitUART(UART0_BASE,SysCtlClockGet(),19200,
      	(UART_CONFIG_WLEN_8 | UART_CONFIG_STOP_ONE | UART_CONFIG_PAR_NONE)) == -1)
      	  while (1);    // hang

  if (InitUART(UART1_BASE,SysCtlClockGet(),9600,
      	(UART_CONFIG_WLEN_8 | UART_CONFIG_STOP_ONE | UART_CONFIG_PAR_NONE)) == -1)
      	  while (1);    // hang
      
  SysTickInit(1000); // 1msec counter
  TimerInit(1);    	 // 100ms counter
  
  BBLedInit();  
  DEBUG_LED1(1);
  DEBUG_LED1(0);  
  DEBUG_LED2(1);	 
  DEBUG_LED2(0);	 

  MasterI2C0Init(SysCtlClockGet() >= 40000000L);  // Need 40MHz for 400K
  A3906Init(); 
  RMBD01Init();
  Encoder_Init(QEI0_BASE);   // J6 PITCH Encoder 
  Encoder_Init(QEI1_BASE);   // J8 ROLL Encoder
  EncoderLinesSet(QEI0_BASE,64);
  EncoderLinesSet(QEI1_BASE,64);
  //HBridgeInit();

  //GPIOPinInit('E',4,false,false); /*TP5 */
  //GPIOPinInit('E',5,false,false); /*TP6 */

  IntMasterEnable();
}
Ejemplo n.º 3
0
int main(){
	int muxpin[4] = {19,18,17,16};

	Uart_Init(57600);
	Uart_Print("Uart Inited\n\r");

	SPI_InitMaster(16);
	Mux_Init(&MBMux,20,muxpin);
	Encoder_Init(&MBMux);
	Uart_Print("SPI Encoder Inited\n\r");

	Joystick_Init();
	GPIO_Init(31,OUTPUT);

	Timer_Init(0,100,Timer_Rountine);
	return 0;
}
Ejemplo n.º 4
0
int main(void)
{
//	uint32_t loop=0xFFFFFF;
//	while(loop)
//	{
//		loop--;
//	}

	SystemInit();
	Power_Detector_Init();
	Watchdog_Init();
	Encoder_Init();
	Proto_Init(PROTO_FIRST_INIT);
    vTaskStartScheduler();

    while(1);
}
Ejemplo n.º 5
0
/** Configures the board hardware and chip peripherals for the demo's functionality. */
void HidApp_Init(void)
{
	/* LUFA: Disable watchdog if enabled by bootloader fuses */
	MCUSR &= ~(1 << WDRF);
	wdt_disable();

	/* LUFA: Disable clock division */
	clock_prescale_set(clock_div_1);

	/* Hardware Initialization */
	USB_Init();
	BoardConfig_Init();
	Encoder_Init(	EVENT_EncoderButtonDown, 
					EVENT_EncoderButtonUp, 
					EVENT_Encoder_CC, 
					EVENT_Encoder_CCW);
	Leds_Init();
}
Ejemplo n.º 6
0
void ENC_L_INIT_STATE(void)
{
	/*
	s_el 码盘正反转初始化状态时的状态标志
		0--初始化还未开始
		1--校准正传系数
		2--校准反正系数
		3--告知主控陀螺仪标定完成
	*/
	static uint8_t s_el = 0;
	
	switch(s_el)
	{
		case 0:
			s_el = 1;
			Encoder_Clear(0);
			Encoder_Clear(1);
			break;
		case 1:
			s_el = 2;
			Encoder_InitXY(0);
			break;
		case 2:
			s_el = 3;
		  Encoder_Clear(0);
			Encoder_Clear(1);
			break;
		case 3:
			s_el = 0;
			Encoder_InitXY(1);
			Encoder_Init();
			Data_Save();
			SS_H = 0;	//复位状态标志
			break;
		default	:		s_el = 1;
			Encoder_Clear(0);
			Encoder_Clear(1);
			break;
	}
}
Ejemplo n.º 7
0
void ENCODER(void){
   unsigned char Error =0;
   int Encoder_L_Counter =0;
   int Encoder_R_Counter =0; 
   unsigned char Encoder_Watchdog_Flag =0; 
     
    Encoder_Init(); 
    EnableInterrupts;
    // get interrupt point 
     for (;;){
        // PASS ENCODER VARS TO MAIN
        DisableInterrupts;
        Encoder_L_Counter = L_Counter;
        Encoder_R_Counter = R_Counter; 
        Encoder_Watchdog_Flag =  WATCH_DOG_FLAG;
        EnableInterrupts;
        
        if(Encoder_Watchdog_Flag ==1){
            
             printf("R %d", Encoder_R_Counter); 
              printf("L %d", Encoder_L_Counter); 
             // RESET COUNTERS AND FLAGS
             DisableInterrupts;
             WATCH_DOG_FLAG =0; 
             L_Counter =0;
             R_Counter =0; 
             EnableInterrupts;
        }
        
        // PASS VARS TO WATCHDOG
        DisableInterrupts;
        WATCH_L_COUNTER =  Encoder_L_Counter;
        WATCH_R_COUNTER =  Encoder_R_Counter; 
        EnableInterrupts;   
    }            
}
Ejemplo n.º 8
0
int main(void) {
	LockoutProtection();
	InitializeMCU();
	
	//init uart
	SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);				
  GPIOPinTypeUART(GPIO_PORTA_BASE, GPIO_PIN_0 | GPIO_PIN_1);	
	UARTStdioInit(0);
	
	LED_Init();
	Jumper_Init();
	
	ADC_Init();
	Sonar_Init();
	
	usemotors = Jumper_Value & 0x8;
	
	if ((Jumper_Value & 0x7) == 0x1) {
		if (usemotors) {
			Motor_Init(false,true);
			Motor_Set(127,127);
		}
		avoid_sonar(0);
		avoid_ir(filtered_ir);
		for (;;);
	}
	
	if ((Jumper_Value & 0x7) == 0x2) {
		Travel_Init(usemotors);
		Travel_Go(FULL_SPEED);
		for (;;);
	}
	
	if ((Jumper_Value & 0x7) == 0x3) {
		if (usemotors) {
			Motor_Init(false,true);
			Motor_Set(127,127);
		}
		for (;;);
	}
	
	//if no jumpers are set, enter debug mode
	Encoder_Init(true,false);
	
	
	for (;;c++) {
		ADC_Background_Read(0);
		Sonar_Background_Read(0);
		Encoder_Background_Read(0);
		Jumper_Read();
		
		UARTprintf("ADC[%3d %3d %3d %3d %3d %3d %3d %3d]  S[%7d]  E[%3d %3d]  J[%1x] c:%d\n",
			ADC_Values[0],ADC_Values[1],ADC_Values[2],ADC_Values[3],ADC_Values[4],ADC_Values[5],ADC_Values[6],ADC_Values[7],
			Sonar_Value,
			Encoder_Values[0],Encoder_Values[1],
			Jumper_Value,
			c
		);
		
		LED_Set(LED_0,c);
		LED_Set(LED_1,c+64);
		LED_Set(LED_2,c+128);
		LED_Set(LED_3,c+192);

		WaitUS(20000);
	}
}
Ejemplo n.º 9
0
int main()
{
	USART3_Config();
	USART2_Config();
	Encoder_Init();
	//while(1);
	Motor_Init();
	SysTick_Init(72);
	Car_Run_Speed(0);
	while(!Start_Due)
	{
		Car_Turn_Speed(2000);   //Z向输出标定
	}
	Car_Turn_Angle(0);
	while(1)
	{
		
		//USART1_printf(USART2,"angle=%d cnt=%d\r\n", (int)Car_Angle,TIM2->CNT);
		//USART_SendData(USART2,USART_ReceiveData(USART2));
		
		cmd_speed_pre = speed;
		cmd_angle_pre = turn;
		sscanf(Cmd_Ble, "#%d-%d*", &speed, &turn);
		if (turn > 180)
		{
			turn = turn % 180;
		}
		else if (turn <= -180)
		{
			turn = turn % -180;
		}


		#ifdef BOTTOMIMPROVE  
		// //转向优化
		// if (is_close(Car_Angle,turn))
		// 	turn = turn;
		// else
		// 	turn = turn + 180;
		// 	speed = -speed;
		// if (turn > 180)
		// {
		// 	turn = turn % 180;
		// }
		// else if (turn <= -180)
		// {
		// 	turn = -((-turn) % 180);
		// }

		// Car_Turn_Angle(turn);	
		// Car_Run(speed);
		if (abs(speed) > 0)   //速度为零时不要优化,便于调零
		{
			src_1 = Car_Angle;
		    if (Car_Angle > 0)
		    {
		    	src_2 = -180 + Car_Angle;
		    }
		    else
		    {
		    	src_2 = 180 + Car_Angle;
		    }
		    //calc the angle distance 
		    diff_4 = abs(turn - src_1);   //normal
		    diff_5 = abs(turn - src_2);   //reverse
		    if (diff_4 > 180)
		    {
		    	diff_4 = 360 - diff_4;
		    }
		    if (diff_5 > 180)
		    {
		    	diff_5 = 360 - diff_5;
		    }
		    if (diff_5 >= diff_4)
		   	{
		   		//normal turn
		   	}
		   	else
		   	{
		   		if (turn >=0)
		   		{
		   			turn = -180 + turn;
		   		}
		   		else
		   		{
		   			turn = 180 + turn;
		   		}
		   		speed = -speed; //reverse turn 
		   	}
		}
		#endif


		//解决170 -> -170反转的问题,原理:以170->-170为例,未过180前,turn为190,但是对于calcpid而言,仍然能够正常输出。过了180后,
		//turn就变回-170了,从而恢复正常。
		diff_1 = abs(turn - Car_Angle);
		diff_2 = abs(360 + turn - Car_Angle);
		diff_3 = abs(turn - 360 - Car_Angle);

		if (diff_2 < diff_1)   //+360较小,即170 -> -170
		{
			turn = 360 + turn;
		}
		else if (diff_3 < diff_1)   //-360较小,即-170 -> 170
		{
			turn = turn - 360;
		}
		else
		{
			turn = turn;
		}

		//#ifndef BOTTOMIMPROVE  
		if(abs(turn - cmd_angle_pre) != 0)       //cmd_angle_pre 在读取新值之前被赋值,接下来被赋值的turn又会被更改,因此没有问题
		{
			Car_Turn_Angle(turn);	
		}
		if(abs(speed - cmd_speed_pre) != 0)
		{
			Car_Run(speed);
		}
		stop_protect_val  = (130 - abs(speed)) > 60?60:(130-abs(speed));
		//Car_Turn(1);
		//#endif

	}    
}
Ejemplo n.º 10
0
void main(void) {
   unsigned int i =0;
   unsigned char Error =0;
   struct LCD_Geometry *pointCurrent= &Current;
   unsigned int Local_Process =0; 
   unsigned int Local_counter =0;
   unsigned char Local_Error_Flag_Number =0;  
   Error_Flag_Number =0;  
 
   Timer_INIT(); /// ENABLE TIMERS  FIRST  ALL THINGS DEPEND ON THIS THAT USE DELAYS !!! F**K
   ILI9327_INIT();// init lcd
   
    //ENCODER(); 
    DCM_INIT(); 
    RC_SERVO_INIT(); 
    STMOTOR_INIT(); 
    STMOTOR_FIND_HOME();  
    Accelerometer_INIT(); // init accel // read from input  
    Encoder_Init(); 
    /// FOREVER LOOP    
   
    
    RS232_TEST();
   
  
   
     //WORKS GREAT 
  // RC_SERVO_INIT(); 
  

    
   // DO ENCODER SHIT HERE
  
  //   Encoder_menu(); 
  
// STMOTOR_TEST(); 
 // ENCODER(); 
  
  
  // init sd // write hello world // 
 // SD_INIT_FAT();
  
  
  
  // DCMOTOR WORKS// SET SPEED USING SET SPEED PERCENTAGE //
   /// WORKS GREAT 
/*  DCM_INIT(); 
   DC_1_REVERSE_DIRECTION;
   DC_2_FORWARD_DIRECTION ;  
   DC_R_SETSPEED_PERCENTAGE(40); 
   DC_L_SETSPEED_PERCENTAGE(100);       */
 
  
// ENCODER WORKS 
/*
interrupt 10 void TC1handler(void) // INPUT R 
interrupt 9 void TC2handler(void) // INPUT L 
interrupt 12 void TC4handler(void) // WATCHDOG 
*/
  // Encoder_menu();
  //  ENCODER(); 
  // STEPPER MOTOR WORKS    //
   //STMOTOR_TEST();

// GETS ACCEL VALUES // WORKS GREAT
/*
interrupt 14 void TC6handler  // TIMER WATCHDOG
*/
//  Accelerometer_Menu();  //
 //Accelerometer_Test_2(); 

// NEEDS MORE WORK // WORKS FINE BUT NEEDS To BE RUN IN THE BACKGROUND 
// USING TIMERS
 //Touch_Test();   
    
   // RS232_INIT();
 // printf("waitforever");
  
  
    while(1){
     asm("NOP");
     continue; 
  
  }
    
  
   
   // WORKS GREAT WITH INPUT FROM SERIAL // 
   // SHOULD CHANGE 
  // RS232_INIT();
         /*extern unsigned char RS232_Termination_String[4] = {
       //  0xDE, 0xAD, 0xBE, 0xEF
         'a','b', 'c','d'
      };                                                                                             

      extern unsigned char RS232_Transmission_String[4] = {
        //  0xFE, 0xED, 0xDE, 0xAD 
         'q','w','e','r'
      };
        */

  


  
// Analog_Init(ANALOG_10BIT);
 //Touch_Test();

//MAX5513_Test();
 //Accelerometer_Test(); 


}