示例#1
0
文件: main.c 项目: Ztuff/E3PRJ3
int main()
{
    /*UART initiering*/
    UART_1_Start();
    UART_1_UartPutString("This is a unit test of accelerometer ADXL345\n\r\n");
    /*I2C initiering*/
    I2C_1_Start(); 
    I2C_1_I2CMasterClearStatus();
    
    /*Opsætter accellerometer til I2C*/
    if(I2C_1_I2CMasterSendStart(ACCEL_ADDRESS, I2C_1_I2C_WRITE_XFER_MODE) == I2C_1_I2C_MSTR_NO_ERROR
        && I2C_1_I2CMasterWriteByte(PWR_CTRL_REG) == I2C_1_I2C_MSTR_NO_ERROR
        && I2C_1_I2CMasterWriteByte(PWR_MODE) == I2C_1_I2C_MSTR_NO_ERROR) 
    UART_1_UartPutString("Accelerometer ADXL345 initialized.\n\r\n");
    UART_1_UartPutString("10000 reads, from reg DEVID, will now be performed.\n\rPlease wait.\n\r\n");
    
    I2C_1_I2CMasterSendStop();
    int errors = 0; //Variabel til at tælle fejl 
    int i;
    for(i = 0; i < 10000; i++) //Forløkke som løber igennem læsningen 10000 gange. (fra DEVID) 
    {
        if (I2C_1_I2CMasterSendStart(ACCEL_ADDRESS, I2C_1_I2C_WRITE_XFER_MODE) == I2C_1_I2C_MSTR_NO_ERROR) /* Tjekker om transfer er sket uden fejl */
        { 
            if(I2C_1_I2CMasterWriteByte(DEVID) == I2C_1_I2C_MSTR_NO_ERROR)
            {
                if(I2C_1_I2CMasterSendRestart(ACCEL_ADDRESS, I2C_1_I2C_READ_XFER_MODE) == I2C_1_I2C_MSTR_NO_ERROR)
                {
                    rawData = I2C_1_I2CMasterReadByte(I2C_1_I2C_NAK_DATA); //Læser og gemmer læsningen i rawData
                    I2C_1_I2CMasterSendStop();
                    
                    if(rawData != 0xE5)errors++; //Hvis der læses andet end device ID, inkrementeres fejl. 
                    
                }
                else
                {
                    I2C_1_I2CMasterSendStop(); /* Send Stop */
                    errors++;
                }
            } 
            else 
            {
                errors++;
            }
        }
        else
        {
            I2C_1_I2CMasterSendStop(); /* Send Stop */
            errors++;
        }
        
    }
    
    char errorString[32];
    sprintf(errorString,  "Finished reading.\n\rErrors: %d\n\r\n", errors); //Gemmer antal errors i en string
    UART_1_UartPutString(errorString); //Udskriver hvor mange fejl. 
    char readingString[32];
    sprintf(readingString,  "Data from register: %d\n\r\n", rawData); // Gemmer rawData i som en string
    UART_1_UartPutString(readingString); //Udskriver hvad der står på rawData i UART
    while(1);
}
示例#2
0
//Internal I2C: IMU, Safety-CoP, potentiometers
void init_i2c1(void)
{
	#ifdef USE_I2C_INT	
	I2C_1_EnableInt();
	I2C_1_Start();	
	#endif	//USE_I2C_INT
}
void init(void)
{
    QuadDec_Right_Start();
    QuadDec_Left_Start();
    PWM_Motor_a_Start();
    PWM_Motor_b_Start();
    Motor_Right(0);
    Motor_Left(0);
    ADC_DelSig_Distance_Start();
    ADC_DelSig_Distance_StartConvert();
    AMux_D_Sensor_Start();
    UART_Line_Sensor_Start();
    I2C_1_Start();
    I2C_LCD_1_Start();
    I2C_LCD_Init();
    I2C_Color_init();
}
示例#4
0
int main()
{
    CyGlobalIntEnable; /* Uncomment this line to enable global interrupts. */
    isr_1_StartEx(nunchuck_isr);
   
    VDAC_Start();
    
    
    I2C_1_Start();
    SendHandshake();
    for(;;)
    {
        GetDataFromNunChuck();
        CyDelay(1);
        int test = GetJoystickY();
        VDAC_SetValue(test + 126);
    }
}
示例#5
0
void main()
{
    uint8 ButtonPressFlag = 0;
	int32 temp=0;
	uint32 lowest=24,i;
	uint32 increment=2;
	uint32 battery_volts;
	volatile uint32 counter=0;
    
	CYGlobalIntDisable;
	/* Intitalize hardware */
  	LEDControlReg_Write(0xff);         /* Turn off the LEDs on PORT2(pin 0-3) and PORT4 pin(0-3) */
    PSU_Enable_Write(3);
//	AMux_1_Start();                 /* Enable THe analog mux input to the ADC */
//    AcclADC_Start();                /* Start ADC */
//    VDAC8_1_Start();                /* Start and configure the VDAC used to measure the Thermistor */
//    VDAC8_1_SetRange(VDAC8_1_RANGE_1V);
//    VDAC8_1_SetValue(200 );

	PWM_0_Start();
	PWM_1_Start();
	PWM_2_Start();
	PWM_3_Start();
	
	PWM_4_Start();
	PWM_5_Start();
	PWM_6_Start();
	PWM_7_Start();
	
//	VBATT_ADC_Start();
	//VBATT_ADC_StartConvert();
//	VBATT_ADC_Stop(); //debugging

//	UART_1_Start();
	I2C_1_Start();
	I2C_1_EnableInt();
	
	Button_ClearInterrupt();
	ALERT2_ClearPending();
	ALERT1_ClearPending();
	
	ALERT1_StartEx(ALERT1_ISR);	

	Button_Pressed_StartEx(Button_Press_ISR);
	ALERT2_StartEx(ALERT2_ISR);

	
	CYGlobalIntEnable;              /* Enable global interrupt */
    
	I2C_1_MasterClearStatus();
		while(set_ina226(CH1)!=CYRET_SUCCESS);
		while(set_tmp100(CH1)!=CYRET_SUCCESS);


	while(1)
	{
		if(0)
		//if(Status_Reg_1_Read()&1)
		{
			read_tmp100(CH1);
			read_ina226(CH1);
		}
		LEDControlReg_Write(((uint8)~(PSU_Enable_Read())));
		for(i=0;i<65000;i++);
		LEDControlReg_Write(((uint8)~(PSU_Enable_Read())) & ~(1<<7));
		for(i=0;i<65000;i++);
//		CyPmSaveClocks();
//		CyPmSleep(PM_SLEEP_TIME_NONE, PM_SLEEP_SRC_PICU);
//        CyPmRestoreClocks();
        
//		battery_volts = VBATT_ADC_GetResult32();
	
		if(reset==1)
		{
	
		for(i=0;i<65000;i++); //delay for half a second.
		PSU_Enable_Write(3); //Both PSU ON
		I2C_1_Start();
		I2C_1_EnableInt();
		while(set_ina226(CH1)!=CYRET_SUCCESS);
		while(set_tmp100(CH1)!=CYRET_SUCCESS);
		reset=0;
		}
		
	}
	
	
	


    while(1)
    {
        /* Calculate the current board temperature */
        temp = Thermistor_TemperatureCompute() / 10; //we get 24.1 as 241. We drop fractionals.
		uint32 barrels_above= (temp-lowest)/increment;
		if(temp<=lowest) barrels_above=0; //negative temperatures are too low!
		if(barrels_above>8) barrels_above=8;
		LEDControlReg_Write(1<<barrels_above);
		
    }
}
示例#6
0
int main()
{
    //Enable custom ISR's
    initAllISR();
    
    //Enable Globals
    CyGlobalIntEnable;    
    
    //INITIALIZE 12C, XBEE, Veg
    Veg_Start();
    Veg_StartConvert();
    Xbee_UART_Start();
    I2C_1_Start();   
    CyDelay(250);
    
    //read EEPROM, config, and oscillator trimming value
    readEEPROM();
    writeOscTrimValue();
    writeConfigValue();
    
    //Initialize PSOC state
    state = WAKE;
    
    //Start Sleep Timer 
    SleepTimer_Start();
    
    
    for(;;)
    {
        /* Place your application code here. */
        if (state == WAKE){
            
            //change state
            state = GETDATA;
        } // end WAKE
        
        else if (state == GETDATA){
            
            //MLX READ------------------------------------------
            //Temperature, compensation, and whole frame read
            uint16 ptat = readPTAT();          
            uint16 comp = readCompensation();
            readFrame();    
            //END MLX READ--------------------------------------

            //VEG READ------------------------------------------
            //Get and scale ADC
            int depth;
            for (depth = 0; depth < NUM_LEVELS; depth++) {
                voltage[depth] = Veg_GetResult16(0)*(3.3/4096);
                temperature[depth] = 22.3;
            }
            
            
            
            //END VEG READ--------------------------------------
            
            //change state
            state = TXDATA;
        } // end GETDATA
        
        else if (state == TXDATA){
            
            //TX MLX
            //tx whole frame, PTAT, and compensation
            XBeeTxFrame();
            XBeeTxPTAT();
            XBeeTxCompensation();
            //END TX MLX----------------------------------------
            
            //TX VEG--------------------------------------------
            char level[4];
            int depth;
            //string for calculating Checksum
            char toCksm[56];
            Xbee_UART_PutString("V,");
            
            for (depth = 0; depth < NUM_LEVELS; depth++) {
                sprintf(level, "%d:", depth);
                sprintf(Veg_out, "%1.4f:", voltage[depth]);
                //Add hard coded temperature value
                sprintf(temp_out, "%2.1f,", temperature[depth]);
                //if first level, copy string, otherwise concatenate
                if (depth == 0) {
                    strcpy(toCksm, level);    
                }
                else {
                    strcat(toCksm, level);
                }
                
                strcat(toCksm, Veg_out);
                strcat(toCksm, temp_out);
                
                //Transmit level string
                Xbee_UART_PutString(level);
                Xbee_UART_PutString(Veg_out);
                Xbee_UART_PutString(temp_out);
            }       //end for
            
            //Transmit Checksum for Vegetronix
             Xbee_UART_PutChar(calculateCheckSum(toCksm, strlen(toCksm)));
            
            //END TX VEG----------------------------------------
            
            //Change State
            state = SLEEPMODE;
        } // end TXDATA
        
        else if (state == SLEEPMODE){
            //put her to sleep
            //CyDelay(2000);
            if (wake_count % wakeCycles == 0) {
                //Change State
                state = WAKE;
                continue;
            }
            else {
                sleepPsoc();   
            }
            
            
        } // END SLEEPM0DE
        
        else{ // Error in state machine, to be filled out. Likely a reset will occur here. 
            
            //Change State
            state = WAKE;
        } // End Error Catch
        
    }
}