void servo_init() { // All servo outputs low initially RUBIKS_PLATFORM_PIN = 0; RUBIKS_TWIST_PIN = 0; SIMON_YELLOW_PIN = 0; SIMON_BLUE_PIN = 0; SIMON_RED_PIN = 0; SIMON_GREEN_PIN = 0; ARM_POSITION_PIN = 0; ARM_SLIDE_LEFT_PIN = 0; ARM_SLIDE_RIGHT_PIN = 0; ETCH_VERTICAL_PIN = 0; ETCH_HORIZ_PIN = 0; // Configure timers and output comparators config_servo_timer3(); config_output_capture1(); config_servo_timer2(); config_output_capture2(); u16_slotWidthTicks = usToU16Ticks(SLOT_WIDTH, getTimerPrescale(T3CONbits)); DELAY_MS(500); // Config all the servo outputs CONFIG_RD2_AS_DIG_OUTPUT(); CONFIG_RD3_AS_DIG_OUTPUT(); CONFIG_RD4_AS_DIG_OUTPUT(); CONFIG_RD5_AS_DIG_OUTPUT(); CONFIG_RD6_AS_DIG_OUTPUT(); CONFIG_RD7_AS_DIG_OUTPUT(); CONFIG_RD8_AS_DIG_OUTPUT(); CONFIG_RD9_AS_DIG_OUTPUT(); CONFIG_RD10_AS_DIG_OUTPUT(); CONFIG_RD11_AS_DIG_OUTPUT(); CONFIG_RB13_AS_DIG_OUTPUT(); // Turn on the timers T3CONbits.TON = 1; T2CONbits.TON = 1; }
// well the spi has to be setup. enough said inline void configSPI1() { SPI1CON1 = SEC_PRESCAL_4_1 | // 4:1 prescale = 60MHz / 4 = 15MHz PRI_PRESCAL_1_1 | CLK_POL_ACTIVE_HIGH | //clock active high (CKP = 0) SPI_CKE_ON | //out changes inactive to active (CKE=0) SPI_MODE16_ON | //16-bit mode MASTER_ENABLE_ON; //master mode CONFIG_SDO1_TO_RP(RD4_RP); //use RD4 for SDO CONFIG_RD4_AS_DIG_OUTPUT(); //Ensure that this is a digital output if(MY_ID == 0) { CONFIG_SCK1OUT_TO_RP(RD1_RP); //use RD5 for SCLK CONFIG_RD1_AS_DIG_INPUT(); //Ensure that this is a digital input } else { CONFIG_SCK1OUT_TO_RP(RD5_RP); //use RD5 for SCLK CONFIG_RD5_AS_DIG_INPUT(); //Ensure that this is a digital input } CONFIG_DAC(); //chip select for MCP41xxx DAC_DISABLE(); //disable the chip select SPI1STATbits.SPIEN = 1; //enable SPI mode }