int main(int argc, char** argv) { //DDPCONbits.JTAGEN = 0; // Disable JTAG mPORTGSetPinsDigitalIn(0x00FF); mPORTBSetPinsAnalogIn(0x00FF); //Enable all analog SYSTEMConfig(SYS_FREQ, SYS_CFG_WAIT_STATES | SYS_CFG_PCACHE); CloseADC10(); SetChanADC10(INITCH); OpenADC10(CONFIG1, CONFIG2, CONFIG3, CFGPORT, CFGSCAN); ConfigIntADC10(CFGINT); EnableADC10(); //Initialize the DB_UTILS IO channel DBINIT(); // Display the introduction DBPRINTF("Welcome to the Analog Input Test.\n"); DBPRINTF("The build date and time is (" __DATE__ "," __TIME__ ")\n"); while (1){ //Get damper value from PIC analog input int i = 0; for(i;i<1;i++){ int analog = ReadADC10(i); DBPRINTF("Hammer %d = %d", i, analog); DBPRINTF("\n"); } int digital = mPORTGReadBits(BIT_0); DBPRINTF("digital: %X \n \n", digital ); } return 0; }
// Perform homing cycle to locate and set machine zero. Only '$H' executes this command. // NOTE: There should be no motions in the buffer and Grbl must be in an idle state before // executing the homing cycle. This prevents incorrect buffered plans after homing. void MotionGoHome(void) { plan_init(); uint16_t limitStatus; uint16_t stepCount; sys.state = STATE_HOMING; // Set system state variable // LIMIT_PCMSK &= ~LIMIT_MASK; // Disable hard limits pin change register for cycle duration xLimitDetected = FALSE; yLimitDetected = FALSE; BSP_SetStepSize(X_AXIS, QUARTER); BSP_SetStepSize(Y_AXIS, QUARTER); BSP_SetStepSize(Z_AXIS, QUARTER); settings.steps_per_mm[X_AXIS] = X_STEPS_MM(QUARTER_STEP); settings.steps_per_mm[Y_AXIS] = Y_STEPS_MM(QUARTER_STEP); settings.steps_per_mm[Z_AXIS] = Z_STEPS_MM(QUARTER_STEP); // Find out if X or Y axis are at limit limitStatus = mPORTCReadBits(xLimitInput.pin||yLimitInput.pin); if(limitStatus) { if(limitStatus & xLimitInput.pin) // If Xat Limit { stepCount = 0; BSP_Timer3Start(100); OpenOC2(XS_PWM_ENA, (ReadPeriod3()>>1), ReadPeriod3()>>1); BSP_AxisEnable(X_AXIS, NEGATIVE); while((mPORTCReadBits(xLimitInput.pin))) { stepCount++; steps_X = 0x1; if(stepCount >= 20) mPORTGToggleBits(xAxis.directionPin.pin); } BSP_AxisDisable(X_AXIS); if(mPORTGReadBits(xAxis.directionPin.pin) == POSITIVE) gcode.position[X_AXIS] = 215.000; else gcode.position[X_AXIS] =0; } if(limitStatus & yLimitInput.pin) // If Xat Limit { stepCount = 0; BSP_Timer2Start(100); OpenOC1(XS_PWM_ENA, (ReadPeriod2()>>1), ReadPeriod2()>>1); BSP_AxisEnable(Y_AXIS, NEGATIVE); while((mPORTCReadBits(yLimitInput.pin))) { stepCount++; steps_Y = 0x1; if(stepCount >= 20) mPORTEToggleBits(yAxis.directionPin.pin); } if(mPORTEReadBits(xAxis.directionPin.pin) == POSITIVE) gcode.position[Y_AXIS] = 215.000; else gcode.position[Y_AXIS] =0; }
void sampleButtons() { //BTN1 samples[0] <<= 1; if(mPORTGReadBits(BIT_6)) samples[0] |= 0x01; //BTN2 samples[1] <<= 1; if(mPORTGReadBits(BIT_7)) samples[1] |= 0x01; //BTN3 samples[2] <<= 1; if(mPORTDReadBits(BIT_13)) samples[2] |= 0x01; //BTN_ROTARY bit 4 samples[3] <<= 1; if(mPORTFReadBits(BIT_4)) samples[3] |= 0x01; }
void __ISR(_TIMER_3_VECTOR, ipl2) _InterruptHandler_TMR3(void) { // if(current_block->direction_bits[Y_AXIS]) // PORTSetBits(xAxis.directionPin.port, xAxis.directionPin.pin); // else // PORTClearBits(yAxis.directionPin.port, yAxis.directionPin.pin); if(steps_X) { if(!(mPORTGReadBits(xAxis.enablePin.pin))) steps_X--; } else if (current_block != Null) { if(current_block->steps_x) { if(!(mPORTGReadBits(xAxis.enablePin.pin))) current_block->steps_x--; } else { //CloseOC2(); BSP_AxisDisable(X_AXIS); BSP_Timer3Stop(); } } else { //CloseOC2(); BSP_AxisDisable(X_AXIS); BSP_Timer3Stop(); } // clear the interrupt flag mT3ClearIntFlag(); }