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); }
//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(); }
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); } }
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); } }
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 } }