int main() { /// First step is to move over to the FRC w/ PLL clock from the default FRC clock. // Set the clock to 79.84MHz. PLLFBD = 63; // M = 65 CLKDIVbits.PLLPOST = 0; // N1 = 2 CLKDIVbits.PLLPRE = 1; // N2 = 3 // Initiate Clock Switch to FRM oscillator with PLL. __builtin_write_OSCCONH(0x01); __builtin_write_OSCCONL(OSCCON | 0x01); // Wait for Clock switch to occur. while (OSCCONbits.COSC != 1); // And finally wait for the PLL to lock. while (OSCCONbits.LOCK != 1); // Initialize ADCs for reading voltage and temperature sensors ImuNodeInit(F_OSC); // Set up a timer at 100.0320Hz, where F_timer = F_CY / 256 / prescalar. Timer2Init(SetTaskFlag, F_OSC / 2 / 256 / 100); // Run system tasks when a timer interrupt has been triggered. while (true) { if (runTasks) { Run100HzTasks(); runTasks = false; } RunContinuousTasks(); } }
void main() { UART_T1_Init(); P3M0 = 0x00; P3M1 = 0x00; Timer2Init(); Interrput_Init(); DoorNotCloseFlag = P33; P34 = ~P33; WDT_CONTR = 0x37; while(1) { WDT_CONTR |= 0x10; Delay100ms(); UART_Driver(); } }
// frequency (in hertz) and duration (in milliseconds). void MeBuzzer::tone(uint16_t frequency, uint32_t duration) { uint8_t prescalarbits = 0b001; long toggle_count = 0; uint32_t ocr = 0; timer2_pin_port = portOutputRegister(digitalPinToPort(buzzer_pin)); timer2_pin_mask = digitalPinToBitMask(buzzer_pin); // Set the pinMode as OUTPUT pinMode(buzzer_pin, OUTPUT); // Calculate the toggle count if (duration > 0) { toggle_count = 2 * frequency * duration / 1000; } else { toggle_count = -1; } timer2_toggle_count = toggle_count; Timer2Init(frequency); }
void HilNodeInit(void) { // Set a unique node ID for this node. nodeId = CAN_NODE_HIL; // And configure the Peripheral Pin Select pins: PPSUnLock; // To enable ECAN1 pins: TX on 7, RX on 4 PPSOutput(OUT_FN_PPS_C1TX, OUT_PIN_PPS_RP7); PPSInput(PPS_C1RX, PPS_RP4); // To enable UART1 pins: TX on 11, RX on 13 PPSOutput(OUT_FN_PPS_U1TX, OUT_PIN_PPS_RP11); PPSInput(PPS_U1RX, PPS_RP13); // Configure SPI1 so that: // * (input) SPI1.SDI = B8 PPSInput(PPS_SDI1, PPS_RP10); // * SPI1.SCK is output on B9 PPSOutput(OUT_FN_PPS_SCK1, OUT_PIN_PPS_RP9); // * (output) SPI1.SDO = B10 PPSOutput(OUT_FN_PPS_SDO1, OUT_PIN_PPS_RP8); PPSLock; // Enable pin A4, the amber LED on the CAN node, as an output. We'll blink this at 1Hz. It'll // stay lit when in HIL mode with it turning off whenever packets are received. _TRISA4 = 0; // Initialize communications for HIL. HilInit(); // Set Timer4 to be a 4Hz timer. Used for blinking the amber status LED. Timer4Init(HilNodeBlink, 39062); // Set up Timer2 for a 100Hz timer. This triggers CAN message transmission at the same frequency // that the sensors actually do onboard the boat. Timer2Init(HilNodeTimer100Hz, 1562); // Initialize ECAN1 Ecan1Init(); // Set a schedule for outgoing CAN messages // Transmit the rudder angle at 10Hz if (!AddMessageRepeating(&sched, SCHED_ID_RUDDER_ANGLE, 10)) { FATAL_ERROR(); } // Transmit the rudder status at 10Hz if (!AddMessageRepeating(&sched, SCHED_ID_RUDDER_LIMITS, 10)) { FATAL_ERROR(); } // Transmit the throttle status at 100Hz if (!AddMessageRepeating(&sched, SCHED_ID_THROTTLE_STATUS, 10)) { FATAL_ERROR(); } // Transmit the RC status at 2Hz if (!AddMessageRepeating(&sched, SCHED_ID_RC_STATUS, 2)) { FATAL_ERROR(); } // Transmit latitude/longitude at 5Hz if (!AddMessageRepeating(&sched, SCHED_ID_LAT_LON, 5)) { FATAL_ERROR(); } // Transmit heading & speed at 5Hz if (!AddMessageRepeating(&sched, SCHED_ID_COG_SOG, 5)) { FATAL_ERROR(); } // Transmit heading & speed at 5Hz if (!AddMessageRepeating(&sched, SCHED_ID_GPS_FIX, 5)) { FATAL_ERROR(); } }
int main() { char t[2]; char pos[2]; DelayInit(); //initializations and state resets OledInit(); Timer2Init(); initLEDs(); initButtons(); initRotary(); setLEDstate(0); unsigned int time = 0; OledClearBuffer(); //the OLED is cleared OledSetCursor(0, 0); //OLED cursor reset to first line OledPutString("ECE 2534 Lab 2"); //message displayed OledSetCursor(0, 1); //cursor moves to second line OledPutString("Thomas Yu"); //message displayed OledSetCursor(0, 2); //cursor moves to third OledPutString("LOCKED"); //message displayed OledSetCursor(0, 3); //cursor moves to third OledPutString("0"); //message displayed OledUpdate(); while (1) { OledSetCursor(0, 3); //cursor moves to third sprintf(pos, "%-2d", state); //state(int) converted to string OledPutString(pos); //message displayed OledUpdate(); if (go == 1) { sec1000 = 0; //time reset while (sec1000 < 15000) //increments for 15000 ms, or 15 secs { OledSetCursor(0, 3); //cursor moves to third sprintf(pos, "%-2d", state); OledPutString(pos); //current state updated OledUpdate(); OledSetCursor(14,3); //the countdown is updated sprintf(t, "%-2u", (15 - (sec1000/1000))); //the current time left in seconds is the OledPutString(t); //elapsed ms subtracted from 15000 OledUpdate(); if (unlocked == 1) { setLEDstate(1); //if unlocked then the led is turned on OledSetCursor(14,3); OledPutString(" "); //the countdown is cleared OledSetCursor(0,2); OledPutString("OPEN "); //open is displayed OledUpdate(); while (!getButtonState()) //this runs until button1 is pressed { OledSetCursor(0, 3); // this block of code continues to update sprintf(pos, "%-2d", state); //the rotary position as it is moved OledPutString(pos); OledUpdate(); } OledSetCursor(0,2); //after button1 is pressed, the lock is reset OledPutString("LOCKED"); setLEDstate(0); go = 0; unlocked = 0; r1 = 0; lock = 0; } } if ( go != 0) //if go was never set back to zero, then the { //correct combination was never entered unsigned int a = sec1000; //and the timer ran out while (sec1000 < a + 1000) //this while loop runs for 1 second { OledSetCursor(7,3); //Time Out! is displayed for the duration OledPutString("Time Out!"); OledUpdate(); } OledSetCursor(7,3); //Time Out! is cleared and the lock is reset OledPutString(" "); OledUpdate(); go = 0; r1 = 0; lock = 0; } } } return 0; }