Esempio n. 1
0
bool check_touch_key_pressed(void)
{
	uint16_t status_flag;
	uint16_t burst_flag;

#ifdef _DEBUG_INTERFACE_
	/* Process commands from PC */
	QDebug_ProcessCommands();
#endif

	if (time_to_measure_touch) {
		time_to_measure_touch = false;

		do {
			status_flag = qt_measure_sensors(current_time_ms_touch);
			burst_flag = status_flag & QTLIB_BURST_AGAIN;

#ifdef _DEBUG_INTERFACE_
			QDebug_SendData(status_flag);
#endif

			/* Time-critical host application code should be placed
			 * here since
			 * a full burst cycle may delay critical task in the
			 *main application
			 */
		} while (burst_flag);

#ifdef _DEBUG_INTERFACE_
		/* Process commands from PC */
		QDebug_ProcessCommands();
#endif
	}

	if (GET_SENSOR_STATE(0)) {
		return 0;
	} else {
		return 1;
	}
}
Esempio n. 2
0
int main(void)
{
		/*Status flags to indicate the re-burst for library */
	uint16_t status_flag = 0u;
	uint16_t burst_flag = 0u;

	uint8_t lft_pressed = 0;
	uint8_t rgt_pressed = 0;

	static uint8_t old_position = 0;

	uint8_t uc_char;
	uint8_t uc_flag;
	sysclk_init();
	board_init();
	configure_buttons();
	configure_hall();

	wdt_disable(WDT);
	pmc_enable_periph_clk(ID_PIOC);
	qt_reset_sensing();
	config_sensors();
	qt_init_sensing();
	/* Set the parameters like recalibration threshold, Max_On_Duration etc in this function by the user */
	qt_set_parameters();
	init_timer_isr();
	qt_filter_callback = 0;

	configure_console();
	printf(STRING_HEADER);
	
	configure_lcd();
	g_pwm_channel = configure_pwm();

	/* Cabeçalho do lcd */
	pos_lcd_x = 20;
	pos_lcd_y = 40;
	start_lcd(pos_lcd_x, pos_lcd_y, ul_duty, hall_1, hall_2, hall_3, phase);

	/* Infinite loop */
	while (1) {
		static uint8_t phase_aux;
		static uint32_t hall_1_aux, hall_2_aux, hall_3_aux, ul_duty_aux;

		/* Atualiza o display somente quando houver alteração nas variáveis que serão apresentadas */
		
		if(ul_duty_aux != ul_duty)
		{
			escreve_int_lcd("dc = ", ul_duty*100/PERIOD_VALUE, pos_lcd_x, 40);
			ul_duty_aux = ul_duty;
		}
		
		if(phase_aux != phase || hall_1_aux != hall_1 || hall_2_aux != hall_2 || hall_3_aux != hall_3)
		{
			escreve_int_lcd("hall1 = ", hall_1, pos_lcd_x, 60);
			escreve_int_lcd("hall2 = ", hall_2, pos_lcd_x, 80);
			escreve_int_lcd("hall3 = ", hall_3, pos_lcd_x, 100);
			escreve_int_lcd("phase = ", phase, pos_lcd_x, 120);

			phase_aux = phase;
			hall_1_aux = hall_1;
			hall_2_aux = hall_2;
			hall_3_aux = hall_3;
		}
		
		if(motor_run == 0 && ul_duty != 0)
			Hall_Phase();
		
		uc_char = 0;
		uc_flag = uart_read(CONSOLE_UART, &uc_char);
		if (!uc_flag) {
			if (uc_char == 't') {
				printf("   duty cicle = %lu \r\n",ul_duty*100/PERIOD_VALUE);
				printf("   hall1 = %lu \r\n", hall_1);
				printf("   hall2 = %lu \r\n", hall_2);
				printf("   hall3 = %lu \r\n", hall_3);
				printf("   phase = %u \r\n\n", phase);
			}
			if (uc_char == 'a'){				
				if(ul_duty < PERIOD_VALUE) ul_duty++;
				printf("   duty cicle = %lu \r\n",ul_duty*100/PERIOD_VALUE);
			}
			if (uc_char == 's'){
				if(ul_duty > INIT_DUTY_VALUE) ul_duty--;
				printf("   duty cicle = %lu \r\n",ul_duty*100/PERIOD_VALUE);
			}
			if (uc_char == 'd')
			{
				ensaio = 1;
				printf("   Ensaio de rampa\r\n");
				printf("   para parar pressione a letra 'P'\r\n");	
			}
			if (uc_char == 'f')
			{
				ensaio = 2;
				printf("   Ensaio de degrau\r\n");
				printf("   para parar pressione a letra 'P'\r\n");
			}
			if (uc_char == 'p')
			{
				ensaio = 0;
				ul_duty = 0;
			}
			if (uc_char == 'i')
			{
				sel_rot = !sel_rot;
				printf("   Rotacao invertida\r\n");
				printf("   para parar pressione a letra 'P'\r\n");
			}
		}
		
		if (time_to_measure_touch) {

			/* Clear flag: it's time to measure touch */
			time_to_measure_touch = 0u;

			do {
				/*  One time measure touch sensors    */
				status_flag = qt_measure_sensors(current_time_ms_touch);

				burst_flag = status_flag & QTLIB_BURST_AGAIN;

				/*Time critical host application code goes here */

			} while (burst_flag);
		}

		/*  Time Non-critical host application code goes here */


		if ((GET_SENSOR_STATE(BOARD_LEFT_KEY_ID) != 0)
		&& (lft_pressed == 0)) {
			lft_pressed = 1;
			if(ul_duty > INIT_DUTY_VALUE) ul_duty--;
			printf("  duty cicle = %lu \r\n",ul_duty*100/PERIOD_VALUE);
			} else {
			if ((GET_SENSOR_STATE(BOARD_LEFT_KEY_ID) == 0)
			&& (lft_pressed == 1)) {
				lft_pressed = 0;
			}
		}
		if ((GET_SENSOR_STATE(BOARD_RIGHT_KEY_ID) != 0)
		&& (rgt_pressed == 0)) {
			rgt_pressed = 1;
			if(ul_duty < PERIOD_VALUE) ul_duty++;
			printf("  duty cicle = %lu \r\n",ul_duty*100/PERIOD_VALUE);
			} else {
			if ((GET_SENSOR_STATE(BOARD_RIGHT_KEY_ID) == 0)
			&& (rgt_pressed == 1)) {
				rgt_pressed = 0;
			}
		}


		if (GET_ROTOR_SLIDER_POSITION(0) != old_position) {
			old_position = GET_ROTOR_SLIDER_POSITION(0);
			if (motor_run==0) flag_hab_m = 1;
			ul_duty = old_position*PERIOD_VALUE/255;
		}
	}
}
Esempio n. 3
0
int main( void )
{

   /* initialize host app, pins, watchdog, etc */
    // init_system();

    /* configure timer ISR to fire regularly */
    // init_timer_isr();
	
	// Configure CPU and peripherals clock
	xmega_set_cpu_clock_to_32MHz();
	
	// Enable interrupts
	PMIC.CTRL = PMIC_LOLVLEN_bm | PMIC_MEDLVLEN_bm | PMIC_HILVLEN_bm;
	
	// Power management - configure sleep mode to IDLE
	set_sleep_mode(SLEEP_SMODE_IDLE_gc);
	// Enable sleep mode
	sleep_enable();

#ifdef MMSN_DEBUG
	// Initialize serial communication terminal
	// usartCommTerminalInit();
	
	// Configure and initialize communication bus usart
	xmega_usart_configure();
		
	/* RS-485 PHYSICAL DEVICE CONFIGURATION */
	// Initialize GPIO related to RS-485 interface
	rs485_driver_gpio_initialize();
		
	// Enable driver to be able to send data
	rs485_driver_enable();

	// Redirect stream to standard output
	stdout = &mystdout;

	/* Print out welcome message */
	printf_P(PSTR("\nGeneric Board ver 1.00\n"));
#endif

	// Heartbeat timer - 8MHz prescales by 8 => 1MHz
	// Thus 1ms equals to 1000 ticks
	xmega_timer_config(&TIMER_HEARTBEAT, TC_CLKSEL_DIV8_gc, (TICKS_PER_MS * qt_measurement_period_msec));

	/* Initialize Touch sensors */
	touch_init();

	// Configure PIN6 as input
	PORT_DIRCLR(POWER_SUPPLY_MEASUREMENT_IO);
	
	// ADC conversion on pin 6
	uint16_t u16ConvResult = xmega_generate_adc_random_value(&ADCA, ADC_REFSEL_INT1V_gc | 0x02, ADC_CH_MUXPOS_PIN6_gc);
	printf("Power meter = %u\n", u16ConvResult);
	
	// Configure PIN5 as input
	PORT_DIRCLR(OPTO_IO);
	
	u16ConvResult = xmega_generate_adc_random_value(&ADCA, ADC_REFSEL_INT1V_gc | 0x02, ADC_CH_MUXPOS_PIN5_gc);
	printf("Opto = %u\n", u16ConvResult);

    /* loop forever */
    for(;;)
    {
        touch_measure();
		
		// Test every 2s
		if(gCounter >= 40)
		{
			printf("\n");
			printf("\nSensor[0]: %d - ", GET_SENSOR_STATE(0));
			printf("Sensor[1]: %d - ", GET_SENSOR_STATE(1));
			printf("Sensor[2]: %d - ", GET_SENSOR_STATE(2));
			printf("Sensor[3]: %d\n", GET_SENSOR_STATE(3));
			printf("Sensor[4]: %d - ", GET_SENSOR_STATE(4));
			printf("Sensor[5]: %d - ", GET_SENSOR_STATE(5));
			printf("Sensor[6]: %d - ", GET_SENSOR_STATE(6));
			printf("Sensor[7]: %d\n", GET_SENSOR_STATE(7));
			printf("Sensor[8]: %d - ", GET_SENSOR_STATE(8));
			printf("Sensor[9]: %d - ", GET_SENSOR_STATE(9));
			printf("Sensor[10]: %d - ", GET_SENSOR_STATE(10));
			printf("Sensor[11]: %d\n", GET_SENSOR_STATE(11));
			printf("Sensor[12]: %d - ", GET_SENSOR_STATE(12));
			printf("Sensor[13]: %d - ", GET_SENSOR_STATE(13));
			printf("Sensor[14]: %d - ", GET_SENSOR_STATE(14));
			printf("Sensor[15]: %d\n", GET_SENSOR_STATE(15));
			
			printf("Sensor[16]: %d - ", GET_SENSOR_STATE(16));
			printf("Sensor[17]: %d - ", GET_SENSOR_STATE(17));
			printf("Sensor[18]: %d - ", GET_SENSOR_STATE(18));
			printf("Sensor[19]: %d\n", GET_SENSOR_STATE(19));
			printf("Sensor[20]: %d - ", GET_SENSOR_STATE(20));
			printf("Sensor[21]: %d - ", GET_SENSOR_STATE(21));
			printf("Sensor[22]: %d - ", GET_SENSOR_STATE(22));
			printf("Sensor[23]: %d\n", GET_SENSOR_STATE(23));
			printf("Sensor[24]: %d - ", GET_SENSOR_STATE(24));
			printf("Sensor[25]: %d - ", GET_SENSOR_STATE(25));
			printf("Sensor[26]: %d - ", GET_SENSOR_STATE(26));
			printf("Sensor[27]: %d\n", GET_SENSOR_STATE(27));
			printf("Sensor[28]: %d - ", GET_SENSOR_STATE(28));
			printf("Sensor[29]: %d - ", GET_SENSOR_STATE(29));
			printf("Sensor[30]: %d - ", GET_SENSOR_STATE(30));
			printf("Sensor[31]: %d\n", GET_SENSOR_STATE(31));
			printf("\n");
			
			u16ConvResult = xmega_generate_adc_random_value(&ADCA, ADC_REFSEL_INT1V_gc, ADC_CH_MUXPOS_PIN5_gc);
			printf("Opto = %i\n", u16ConvResult);
			/*
			printf("\nCh_Sig[0]: %u	", qt_measure_data.channel_signals[0]);
			printf("Ch_Sig[1]: %u	", qt_measure_data.channel_signals[1]);
			printf("Ch_Sig[2]: %u	", qt_measure_data.channel_signals[2]);
			printf("Ch_Sig[3]: %u", qt_measure_data.channel_signals[3]);
			printf("\nCh_Sig[4]: %u	", qt_measure_data.channel_signals[4]);
			printf("Ch_Sig[5]: %u	", qt_measure_data.channel_signals[5]);
			printf("Ch_Sig[6]: %u	", qt_measure_data.channel_signals[6]);
			printf("Ch_Sig[7]: %u", qt_measure_data.channel_signals[7]);
			printf("\nCh_Sig[8]: %u	", qt_measure_data.channel_signals[8]);
			printf("Ch_Sig[9]: %u	", qt_measure_data.channel_signals[9]);
			
			printf("Ch_Sig[10]: %u	", qt_measure_data.channel_signals[10]);
			printf("Ch_Sig[11]: %u", qt_measure_data.channel_signals[11]);
			printf("\nCh_Sig[12]: %u	", qt_measure_data.channel_signals[12]);
			printf("Ch_Sig[13]: %u	", qt_measure_data.channel_signals[13]);
			printf("Ch_Sig[14]: %u	", qt_measure_data.channel_signals[14]);
			printf("Ch_Sig[15]: %u", qt_measure_data.channel_signals[15]);
			printf("\nCh_Sig[16]: %u	", qt_measure_data.channel_signals[16]);
			printf("Ch_Sig[17]: %u	", qt_measure_data.channel_signals[17]);
			printf("Ch_Sig[18]: %u	", qt_measure_data.channel_signals[18]);
			printf("Ch_Sig[19]: %u", qt_measure_data.channel_signals[19]);
			printf("\nCh_Sig[20]: %u	", qt_measure_data.channel_signals[20]);
			
			printf("Ch_Sig[21]: %u	", qt_measure_data.channel_signals[21]);
			printf("Ch_Sig[22]: %u	", qt_measure_data.channel_signals[22]);
			printf("Ch_Sig[23]: %u", qt_measure_data.channel_signals[23]);
			printf("\nCh_Sig[24]: %u	", qt_measure_data.channel_signals[24]);
			printf("Ch_Sig[25]: %u	", qt_measure_data.channel_signals[25]);
			printf("Ch_Sig[26]: %u	", qt_measure_data.channel_signals[26]);
			printf("Ch_Sig[27]: %u", qt_measure_data.channel_signals[27]);
			printf("\nCh_Sig[28]: %u	", qt_measure_data.channel_signals[28]);
			printf("Ch_Sig[29]: %u	", qt_measure_data.channel_signals[29]);
			printf("Ch_Sig[30]: %u	", qt_measure_data.channel_signals[30]);
			printf("Ch_Sig[31]: %u", qt_measure_data.channel_signals[31]); */
			
			printf("\ndelta[0]: %i	", qt_get_sensor_delta(0));
			printf("delta[1]: %i	", qt_get_sensor_delta(1));
			printf("delta[2]: %i	", qt_get_sensor_delta(2));
			printf("delta[3]: %i", qt_get_sensor_delta(3));
			printf("\ndelta[4]: %i	", qt_get_sensor_delta(4));
			printf("delta[5]: %i	", qt_get_sensor_delta(5));
			printf("delta[6]: %i	", qt_get_sensor_delta(6));
			printf("delta[7]: %i", qt_get_sensor_delta(7));
			printf("\ndelta[8]: %i	", qt_get_sensor_delta(8));
			printf("delta[9]: %i	", qt_get_sensor_delta(9));
			
			printf("delta[10]: %i	", qt_get_sensor_delta(10));
			printf("delta[11]: %i", qt_get_sensor_delta(11));
			printf("\ndelta[12]: %i	", qt_get_sensor_delta(12));
			printf("delta[13]: %i	", qt_get_sensor_delta(13));
			printf("delta[14]: %i	", qt_get_sensor_delta(14));
			printf("delta[15]: %i", qt_get_sensor_delta(15));
			printf("\ndelta[16]: %i	", qt_get_sensor_delta(16));
			printf("delta[17]: %i	", qt_get_sensor_delta(17));
			printf("delta[18]: %i	", qt_get_sensor_delta(18));
			printf("delta[19]: %i", qt_get_sensor_delta(19));
			printf("\ndelta[20]: %i	", qt_get_sensor_delta(20));
			
			printf("delta[21]: %i	", qt_get_sensor_delta(21));
			printf("delta[22]: %i	", qt_get_sensor_delta(22));
			printf("delta[23]: %i", qt_get_sensor_delta(23));
			printf("\ndelta[24]: %i	", qt_get_sensor_delta(24));
			printf("delta[25]: %i	", qt_get_sensor_delta(25));
			printf("delta[26]: %i	", qt_get_sensor_delta(26));
			printf("delta[27]: %i", qt_get_sensor_delta(27));
			printf("\ndelta[28]: %i	", qt_get_sensor_delta(28));
			printf("delta[29]: %i	", qt_get_sensor_delta(29));
			printf("delta[30]: %i	", qt_get_sensor_delta(30));
			printf("delta[31]: %i", qt_get_sensor_delta(31));
			
			gCounter = 0;
		}

    /*  Time Non-critical host application code goes here  */
    }
}