コード例 #1
0
ファイル: structCommon.c プロジェクト: juvf/terem5
void epa_On()
{
	GPIO_SetBits(GPIOC, GPIO_Pin_2); //вкл епа

	{
		//инициализируем порты управления аналоговыми ключами выбора канала
		GPIO_InitTypeDef port;
		GPIO_StructInit(&port);
		port.GPIO_Pin = GPIO_Pin_12;
		port.GPIO_Mode = GPIO_Mode_OUT;
		port.GPIO_OType = GPIO_OType_PP;
		port.GPIO_PuPd = GPIO_PuPd_UP;
		port.GPIO_Speed = GPIO_Speed_2MHz;
		GPIO_Init(GPIOC, &port);

		port.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_7;
		GPIO_Init(GPIOB, &port);

		RCC_AHB1PeriphClockCmd(RCC_AHB1ENR_GPIODEN, ENABLE);
		port.GPIO_Pin = GPIO_Pin_7;
		GPIO_Init(GPIOD, &port);
	}


	switchOn(100); //выключаем все ключи

	initSpi1();
	vTaskDelay(2);

	initAdc();
}
コード例 #2
0
ファイル: adcs.c プロジェクト: patriciobos/TpFinal
void initAdcs (void)
{
 	int idx;

	for (idx = 1; idx < (sizeof (adc) / sizeof (adc_t)); ++idx)
		initAdc (adc[idx]);
}
コード例 #3
0
ファイル: menu.c プロジェクト: pseudoblau/Versuch1
/*! \brief Starts the passed program
 *
 * \param programIndex Index of the program to start.
 */
void start(uint8_t programIndex)
{
	// initialize and start the passed 'program'
	switch (programIndex)
	{
	case 0:
		lcd_clear();
		helloWorld();
		break;
	case 1:
		activateLedMask = 0xFFFF;	// use all LEDs
		initLedBar();
		initClock();
		displayClock();
		break;
	case 2:
		activateLedMask = 0xFFFE;	// don't use led 0
		initLedBar();
		initAdc();
		displayAdc();
		break;
	default:
		break;
	}

	// do not resume to the menu until all buttons are released
	os_waitForNoInput();
}
コード例 #4
0
/**
 * this function test the lightsensor
 * first init the rgbled and then setAdcThresh
 */
void testlightsensor(){
	int lightsensor;
	initAdc();
	for(int i=0;i<1000;i++){
		lightsensor = getLightReading();
		printf("the value from lightsensor: %d\n",lightsensor);
	}
}
コード例 #5
0
/** Entry point. This is the first thing which is called after startup code.
  * This never returns. */
int main(void)
{
	initUsart();
	initAdc();
	initLcdAndInput();

	do
	{
		processPacket();
	} while (true);
}
コード例 #6
0
ファイル: adc.c プロジェクト: combohehe/BootLoader
void adc_main(void){
#else
void main(void){
#endif
   JOYSTICK_DIRECTION joystickDirection = CENTRED;
   INT8 adc_value;
   UINT8 potVoltage = 0;
   BOOL updateLCD = TRUE;

   initAdc();

   while( !stopApplication() ){
      ADC_ENABLE_CHANNEL(7);
      ADC_SINGLE_CONVERSION(ADC_REF_AVDD | ADC_8_BIT | ADC_AIN7);
      ADC_SAMPLE_SINGLE();

      while(!ADC_SAMPLE_READY());

      ADC_DISABLE_CHANNEL(7);

      adc_value = ADCH;

      if (potVoltage != scaleValue(adc_value)){
         //potVoltage changed since last sample
         potVoltage = scaleValue(adc_value);
         updateLCD = TRUE;
      }

      if (joystickDirection != getJoystickDirection()){
         //joystickDirection change since last sample
         joystickDirection = getJoystickDirection();
         updateLCD = TRUE;
      }

      if (updateLCD){
         updateVoltageLCD(potVoltage, adc_value);
         updateJoystickDirectionLCD(joystickDirection);
         updateLCD = FALSE;
      }
      updateCounter(adc_value);
   }

   LED1 = LED3 = LED_OFF;
   return;
}
コード例 #7
0
ファイル: main.c プロジェクト: z80/voltamper
int main(void)
{
    halInit();
    chSysInit();

    initLed();
    dacInit();
    initAdc();
    initRelay();
    cpu_io_init();

    while (TRUE)
    {
    	cpu_io_process();

    	/*
    	DacCfg dac;
        setLeds( 1 );
    	dac.dac1 = 0;
    	dac.dac2 = 0;
        dacSet( &dac );
    	chThdSleepMilliseconds( 3000 );
        setLeds( 2 );
    	dac.dac1 = 2047;
    	dac.dac2 = 2047;
        dacSet( &dac );
    	chThdSleepMilliseconds( 3000 );

    	setLeds( 4 );
    	dac.dac1 = 3063;
    	dac.dac2 = 3063;
        dacSet( &dac );
    	chThdSleepMilliseconds( 3000 );

    	setLeds( 4 );
    	dac.dac1 = 4095;
    	dac.dac2 = 4095;
        dacSet( &dac );
    	chThdSleepMilliseconds( 3000 );
		*/
    }
    return 0;
}
コード例 #8
0
ファイル: ele542Projet.c プロジェクト: hervens/ELE542_LAB
int main(void)
 {
        //Init Motor
     /*
        BYTE_SET(DDRD,0xFE);
        PORTB = 0xFF;
        PORTB = 0xC0;
        DDRA  = 0x10;
        PORTA = 0x00;
       */ 
		
		initAdc();
		initUART();
		initTimer();
	//	DDRC=0xFF;
		

		//Enable interrupt after all init else Infinite loop
        sei();
        
       	calibration(); 

        //Enable_watchdog(WDTO_500MS);

	for (;;) 
	{  /* loop forever */
//		lireTelecommande();
/*		if(timerOvf == 1)
		{

		*/
	Vitesse_D = getUartVitesse();
	Angle_D = getUartAngle();
	Vg = getAvgSpeedMoteurGauche();
	Vd = getAvgSpeedMoteurDroit();

	CalculPWM(Vitesse_D,Angle_D,Vg,Vd,&Duty_G,&Duty_D);

		/*	timerOvf = 0;
		}
  */  
	}
}
コード例 #9
0
int main(void)
{
	DDRF = 0x00;
	DDRA = 0xFF;
	DDRB = 0xFF;
	
	sei();
	
	initAdc();
	
	
    /* Replace with your application code */
    while (1) 
    {
		_delay_ms(10);
		AdcConvert();
    }
	
	return 1;
}
コード例 #10
0
void IRQbspInit()
{
    //Enable all gpios, as well as AFIO, SPI1, TIM3
    RCC->APB2ENR |= RCC_APB2ENR_IOPAEN | RCC_APB2ENR_IOPBEN |
                    RCC_APB2ENR_IOPCEN | RCC_APB2ENR_IOPDEN |
                    RCC_APB2ENR_AFIOEN | RCC_APB2ENR_SPI1EN;
    RCC->APB1ENR |= RCC_APB1ENR_TIM3EN | RCC_APB1ENR_PWREN;
    RCC_SYNC();

    //Board has no JTAG nor SWD, and those pins are used
    //HSE is not used, remap PD0/PD1 in order to avoid leaving them floating
    AFIO->MAPR |= AFIO_MAPR_SWJ_CFG_2 | AFIO_MAPR_PD01_REMAP;

    //Note: all OUT pins speed limited to 2MHz except SPI and UART, that are
    //limited to 10MHz. This has been done to reduce power supply "noise"
    //PA5 AF out, PA6 AF out, PA7 in pulldown, PA9 AF out, PA10 in pu, other OUT
    GPIOA->CRL=0x98912222;
    GPIOA->CRH=0x22222892;
    GPIOA->ODR=0x0410;     //Enable pullup on PA10, and set PA4 high (SPI CS)
    GPIOB->CRL=0x22222222; //Port B : all out
    GPIOB->CRH=0x22222222;
    GPIOB->ODR=0x0f00;     //Keep display off at boot
    GPIOC->CRH=0x22222222; //PC13 through PC15: all out
    GPIOD->CRL=0x22222222; //PD0 and PD1 all out
    
    initAdc();
    configureLowVoltageDetect();

    DefaultConsole::instance().IRQset(intrusive_ref_ptr<Device>(
        new STM32Serial(defaultSerial,defaultSerialSpeed,
        defaultSerialFlowctrl ? STM32Serial::RTSCTS : STM32Serial::NOFLOWCTRL)));
    
    //The serial port drver reconfigures PA9 to 50MHz AF out and PA10 to
    //floating in, but we want them as configured previously, so override
    GPIOA->CRH=0x22222892;
    GPIOA->ODR=0x0410;     //Enable pullup on PA10, and set PA4 high (SPI CS)
}
コード例 #11
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) {}
}
 int main() {
	AdcChannel channel[] = {
		ADC_BATTERY_VOLTAGE,
		ADC_WHITE_LINE1,
		ADC_WHITE_LINE2,
		ADC_WHITE_LINE3,
		ADC_IR_PROXIMITY1,
		ADC_IR_PROXIMITY2,
		ADC_IR_PROXIMITY3,
		ADC_IR_PROXIMITY4,
		ADC_IR_PROXIMITY5,
		ADC_IR_RANGE1,
		ADC_IR_RANGE2,
		ADC_IR_RANGE3,
		ADC_IR_RANGE4,
		ADC_IR_RANGE5,
		ADC_SERVO_POD1,
		ADC_SERVO_POD1,
		ADC_LAST
	};

	char strChannel[17][20] = {
		"ADC_BATTERY_VOLTAGE",
		"ADC_WHITE_LINE1",
		"ADC_WHITE_LINE2",
		"ADC_WHITE_LINE3",
		"ADC_IR_PROXIMITY1",
		"ADC_IR_PROXIMITY2",
		"ADC_IR_PROXIMITY3",
		"ADC_IR_PROXIMITY4",
		"ADC_IR_PROXIMITY5",
		"ADC_IR_RANGE1",
		"ADC_IR_RANGE2",
		"ADC_IR_RANGE3",
		"ADC_IR_RANGE4",
		"ADC_IR_RANGE5",
		"ADC_SERVO_POD1",
		"ADC_SERVO_POD2",
		"ADC_LAST"
	};

	char buf[17];
	UINT value, idx;

	initAdc();
	initLcd();
	
	for(idx = 0; idx < (sizeof(channel)/sizeof(channel[0])); idx ++) {
		lcdClear();
		lcdCursor(1,1);
		lcdString(strChannel[idx]);
		lcdCursor(2,1);

		if(getAdcValue(channel[idx], &value) == STATUS_OK) {
			snprintf(buf, sizeof(buf), "%d", value);
			lcdString(buf);
		}
		else {
			lcdString("Error");
		}
		_delay_ms(DELAY_COUNT);
	}
	

	return 0;
 }
コード例 #13
0
ファイル: main.cpp プロジェクト: itismattei/robotPid
int main(void) {
	
	volatile uint32_t valore = 0, i, blink = 0, contatore, lampeggio_led;
	volatile int32_t arrot;
	volatile int16_t val1 = 0, x, y, z;
	distanza DIST;

	//--------------------------//
	///definizione strutture/////
	//-------------------------//

	//volatile double d = 1.9845637456;
	gyro G;
	accelerazione A;
	cinematica CIN;
	/// servono differenti PID, almeno uno per la rotazione ed uno per lo spostamento
	/// per la rotazione sarebbero interessante usarne 2, uno per la ortazione soft ed uno per la rotazione
	/// brusca.
	pid CTRL[3], * pidPtr;
	/// descrittore della sintassi dei comandi
	syn_stat synSTATO;
	/// modulo zigbee per telemetria
	xbee XB;
	/// pwm servi e motori
	pwm PWM, pwmServi;
	/// struttura del sensore di colore
	colore COL;
	/// sensore di temperatura ad infrarossi
	temperatura TEMP;
	TEMPER sensIR;
	/// indormazioni sul sopravvissuto
	survivor SUR;
	//inizializzazione struttura per qei
	qei QEI;
	/// oggetto che riallinea il mezzo
	allineamento AL;

	/// disabilita le interruzioni
	DI();
	pidPtr = CTRL;
	dPtr = &DIST;
	TEMPptr =  &TEMP;
	CIN.Aptr = &A;
	CIN.distPTR = &DIST;
	CIN.vel = 0.0;

	dati DATA;

	//passaggio degli indirizzi delle strutture alla struttura generale
	dati_a_struttura(&G, &DIST, &CIN, &COL, &TEMP, &SUR, &DATA);

	/// commento per provare il merge su server remoto

	/// setup di base
	setupMCU();
	/// imposta i parametri del PID
	setupPID(CTRL);
	/// imposta le UART
	setupUART();
    //inizializzo l'i2c
	InitI2C0();
	/// messaggio d'inizio
	PRINT_WELCOME();
	/// inizializza il giroscopio
	initGyro(&G, Z_AXIS);
	/// inizializza il timer 0 e genera un tick da 10 ms
	initTimer0(10, &G);
	/// inizializza il timer 1
	initTimer1(100);
	/// inizializza il contatore della persistenza del comando
	synSTATO.tick = 0;
	/// inizializza il pwm
	pwmMotInit(&PWM);
	// TODO: //pwmServoInit (&pwmServi);
	/// inizializza l'adc e lo prepara a funzionare ad interruzioni.
	initAdc(&DIST);
	/// reset dell'automa di analisi della sintassi
	resetAutoma(&synSTATO);

	//servo = (pwm *) &pwmServi;

	/// iniziailizzazione del lettore encoder
	qei_init(&QEI);

	/// abilita le interruzioni
	EI();
	/// attende che il sensore vada a regime
	if (G.IsPresent == OK){
		PRINTF("\nAzzeramento assi giroscopio\n");
		while (blink < 70){
			if (procCom == 1){
				procCom = 0;
				blink++;
			}
		}
		blink = 0;
		/// azzeramento degli assi
		azzeraAssi(&G);
	}

	/// test della presenza del modulo zig-bee
	/// il modulo zig-be si attiva con al sequnza '+++' e risponde con 'OK' (maiuscolo)
	if (testXbee() == 0){
		// ok;
		XB.present = 1;
		PRINTF("Modulo xbee presente.\n");
	}
	else{
		XB.present = 0;
		PRINTF("Modulo xbee non presente.\n");
	}

	pwm_power(&PWM);
	contatore = 0;

	//// inizializza l'accelrometro
	//stato =  writeI2CByte(CTRL_REG1_A, ODR1 + ODR0 + ZaxEN + YaxEN + XaxEN);
	// scrivo nel registro 0x20 il valore 0x0F, cioe' banda minima, modulo on e assi on
	/// sintassi: indirizzo slave, num parm, indirizzo reg, valore da scrivere
	//I2CSend(ACCEL_ADDR, 2, CTRL_REG1_A, ODR1 + ODR0 + ZaxEN + YaxEN + XaxEN);
	A.isPresent = testAccel();
	if (A.isPresent)
		impostaAccel(&A);

	/// taratura sul sensore di luminosita'
	whiteBal(&COL);
	/// taratura del sensore di temepratura
	taraturaTemp(&TEMP);

	///
	qei_test(&QEI);
	/// task principale
	while(1){

		/// invia la risposta per i comandi di rotazione, quando sono stati eseguiti
		if(pidPtr->rispondi == TRUE){
			rispostaRotazione(pidPtr, &synSTATO);
			pidPtr->rispondi = FALSE;
		}

		if (procCom == 1 ){
			//UARTCharPutNonBlocking(UART1_BASE, 'c');
			procCom = 0;
			contatore++;
			lampeggio_led++;


			if(lampeggio_led >= 50)
			{
				lampeggio_led = 0;

				 if(DATA.surPtr->isSurvivor == TRUE )
				{
					if(HWREG(GPIO_PORTF_BASE + (GPIO_O_DATA + (GREEN_LED << 2))) != GREEN_LED )
						HWREG(GPIO_PORTF_BASE + (GPIO_O_DATA + (RED_LED << 2))) = 0;

					HWREG(GPIO_PORTF_BASE + (GPIO_O_DATA + (GREEN_LED | RED_LED << 2))) ^=  GREEN_LED | RED_LED;


				}

				HWREG(GPIO_PORTF_BASE + (GPIO_O_DATA + (GREEN_LED << 2))) ^=  GREEN_LED;
			}


			/*  LETTURA DEL COMANDO */

			/// restituisce l'indirizzo del PID da utilizzare nel successivo processo di calcolo
			pidPtr =  leggiComando(&synSTATO, CTRL, pidPtr, &DATA);

			/* LETTURA SENSORI  */


			/// effettua i calcoli solo se il giroscopio e' presente
			/// TODO: il PID viene calcolato ongi 10ms oppure ogni 20ms? Come è meglio?


			/* misura gli encoder e calcola spostameti e velocità */
			/* misura i sensori di distanza */
			if (DIST.run == true)
				/// TODO controllare se riesce a funzionare mentre legge le accelerazioni su I2C
				ROM_ADCProcessorTrigger(ADC0_BASE, 0);

			/// misura i dati forniti dall'accelerometro se disponibili
			if(A.isPresent)
				misuraAccelerazioni(&A);
			/// le misure del giroscopio invece sono effettuate solo dall'apposito pid

			/*if(G.IsPresent == OK)
				if( contatore == 1){
					/// ogni 10 ms effettua il calcolo del PID
					contatore = 0;
					HWREG(GPIO_PORTB_BASE + (GPIO_O_DATA + (GPIO_PIN_0 << 2))) |=  GPIO_PIN_0;
					PID(&G, pidPtr, &PWM, &CIN);
					setXPWM(&CTRL[1], &PWM);
					procCom = 0;
					HWREG(GPIO_PORTB_BASE + (GPIO_O_DATA + (GPIO_PIN_0 << 2))) &=  ~GPIO_PIN_0;
					blink++;
					/// lampeggio del led con periodo di 2 s.
					if (blink >= 100){
						HWREG(GPIO_PORTF_BASE + (GPIO_O_DATA + ((GPIO_PIN_2 | GPIO_PIN_1) << 2))) = 0;
						HWREG(GPIO_PORTF_BASE + (GPIO_O_DATA + (GPIO_PIN_3 << 2))) ^= GPIO_PIN_3;
						blink = 0;
					}
				///provvede ad integrare la misura della velcita' angolare ogni 10 ms
				//misuraAngoli(&G);
				//PRINTF("asse x: %d\t", G.pitch);
				//PRINTF("\tasse y: %d\t", G.roll);
				//PRINTF("\tasse z: %d\n", G.yaw);
				//PRINTF("uscita PID: %d\n", C.uscita);
			}*/

			/* RISPOSTA AL COMANDO */
			inviaSensore(&synSTATO, &DATA);

		}
	}
}