Ejemplo n.º 1
0
void Manual_Mode(char ShowPos)
{
//ShowPos show position on OLED = 1 or not = 0
unsigned char AsciiString[9]; 
float Xmm=0,Ymm=0,Zmm=0;

	while (SBR!=SBW); 				//wait for step buffer to empty
	mT4IntEnable(!TRUE);			//Disable T4 step buffer interrput
	Feed_Rate = VERY_SLOW_MOVE;		//Set speed to slow
	moveX = !TRUE;					//Turn off all steppers
	moveY = !TRUE;
	moveZ = !TRUE;
	Axis_Stepper_Motors(On);
	OLED_Manual_Screen();
	
	while(!XPlusRight_Btn); 				//Wait for menu selection key to be released
	while(Manual_Select == NOT_PRESSED){
		Manual_Mode_Set = TRUE;
	
		if(Feed_Rate>1000)Feed_Rate -=75;	//Ramping of the move speed
		if(Feed_Rate>100)Feed_Rate -=5;	//the longer the button is 
		if(Feed_Rate<400) Feed_Rate = 400;	//pressed
		
		//Set direction & move
		if (!XPlusRight_Btn) { Set_X_Dir = X_RIGHT; moveX =TRUE;}
		if (!XMinusLeft_Btn) { Set_X_Dir = X_LEFT; moveX =TRUE;}
		if (XPlusRight_Btn && XMinusLeft_Btn) moveX = !TRUE;
		if (!YPlusTop_Btn)   { Set_Y_Dir = Y_BACK; moveY =TRUE;}
		if (!YMinusBot_Btn)  { Set_Y_Dir = Y_FORWARD; moveY =TRUE;}
		if (YPlusTop_Btn && YMinusBot_Btn) moveY = !TRUE;
		if (!ZPlus_up_Btn)   { Set_Z_Dir = Z_UP; moveZ =TRUE;}
		if (!ZMinus_down_Btn){ Set_Z_Dir = Z_DOWN; moveZ =TRUE;}
		if (ZPlus_up_Btn && ZMinus_down_Btn) moveZ = !TRUE;
		if (!moveX && !moveY && !moveZ) Feed_Rate = VERY_SLOW_MOVE;	//Re-set move speed
			
		//Report current position to OLED. 
		if(ShowPos){
			Xmm = (float)lSaveSteps_X / StepsPer_mm;
			sprintf(AsciiString, "%6.2f",Xmm);		// Converts number to text
			OLED_FastText57(4, 64, AsciiString,0);    // Write the new number	
			Ymm = (float)lSaveSteps_Y / StepsPer_mm;   
			sprintf(AsciiString, "%6.2f",Ymm);	    // Converts number to text
			OLED_FastText57(5, 64, AsciiString,0);    // Write the new number	
			Zmm = (float)lSaveSteps_Z / ZStepsPer_mm;   
			sprintf(AsciiString, "%6.2f",Zmm);		// Converts number to text
			OLED_FastText57(6, 64, AsciiString,0);    // Write the new number	
		}
	}
	Manual_Mode_Set = !TRUE;
	mT4IntEnable(!TRUE);				//Disable T4 step buffer interrput
}//ManualMode
Ejemplo n.º 2
0
void Axis_Stepper_Motors(int on_off)
{
	if(on_off == On){
		X_Disable = !TRUE; 		//to enable X axis
		Y_Disable = !TRUE; 		//to enable Y axis
		Z_Disable = !TRUE; 		//to enable Z axis
		mT4IntEnable(TRUE);		//Turn on interrupts
	}
	else{
		X_Disable = TRUE; 		//to disable X axis
		Y_Disable = TRUE; 		//to disable Y axis
		Z_Disable = TRUE; 		//to disable Z axis
		mT4IntEnable(!TRUE);	//Turn off interrupts
	}	
}		
Ejemplo n.º 3
0
//******************************************************************
void GoToRest(void)
{
//Variables required for Run3DLine	
//Values set from last move: lSaveSteps_X,lSaveSteps_Y,lSaveSteps_Z
//Values set here: lX_Steps,lY_Steps,lZ_Steps

extern float X_Rest_mm,Y_Rest_mm,Z_Rest_mm;

	GX_On=1; //Enable axis for move
	GY_On=1;
	GZ_On=0; //To stop any Z move
	Feed_Rate = GO_TO_REST_RATE; //set speed
	
	X_Steps = X_Rest_mm * StepsPer_mm;//Convert mm coordinate to steps
	Y_Steps = Y_Rest_mm * StepsPer_mm;
	//Z_Steps = Z_Rest_mm * ZStepsPer_mm;//Uncomment for Z move
			
	lX_Steps= f_to_sl(X_Steps);	//Convert to integer steps
	lY_Steps= f_to_sl(Y_Steps);	//float to signed long.	
	//lZ_Steps= f_to_sl(Z_Steps);//Uncomment for Z move
	
	mT4IntEnable(TRUE);
	
	Stepper_Run3DLine();//Run line and reset all values
	
	GX_On=0; 
	GY_On=0;
	//GZ_On=0;//Uncomment for Z move
	Delayms(250);
	
}//GoToRest
Ejemplo n.º 4
0
void rk86_video_init_cursor_timer(void) {
    // Setup timer 4.
    PR4 = 1 * ((BUSFREQ/2)/1000) - 1;
    T4CON = 0x8010;
    mT4SetIntPriority(1);
    mT4ClearIntFlag();
    mT4IntEnable(1);
}
Ejemplo n.º 5
0
/***************************************************************************************************
InitTimers
Initialise the 1 mSec timer used for internal timekeeping.
****************************************************************************************************/
void initTimers(void) {

 	// setup timer 4
    PR4 = 1 * ((BUSFREQ/2)/1000) - 1;       					// 1 mSec
    T4CON = 0x8010;         							// T4 on, prescaler 1:2
    mT4SetIntPriority(1);  							// lower priority
    mT4ClearIntFlag();      							// clear interrupt flag
    mT4IntEnable(1);       							// enable interrupt 
    P_SD_ACTIVITY_TRIS = 0; P_SD_LED_SET_LO;				// initialise the SD card activity led (maintained by timers.c)
}
Ejemplo n.º 6
0
extern void timerEnableInterrupt(timer * pTimer, const int PreviousSetting)
{
  switch(pTimer->m_TimerNumber) {
    case 1: mT1IntEnable(PreviousSetting); break;
    case 2: mT2IntEnable(PreviousSetting); break;
    case 3: mT3IntEnable(PreviousSetting); break;
    case 4: mT4IntEnable(PreviousSetting); break;
    case 5: mT5IntEnable(PreviousSetting); break;
    default: while (true);
  }
}
Ejemplo n.º 7
0
//******************************************************************
void Stepper_InitIO (void)
{
	// Setup timers
	//Timer 1
	T1CON = 0x8030;	//Set up timer 1 Fosc/2, prescaled 1:256 
	
	DDPCONbits.JTAGEN = 0; //To release port A pins from use by JTAG port
	
	//Set Tris for Stepper
	//X
	 AD1PCFGbits.PCFG8 = 1;   //AtoD port cfg AN8/B8
	 TRISBbits.TRISB8    = OUTPUT;	//Step
	 AD1PCFGbits.PCFG9 = 1;   //AtoD port cfg AN9/B9
	 TRISBbits.TRISB9    = OUTPUT;	//Dir
	 AD1PCFGbits.PCFG13 = 1;   //AtoD port cfg AN13/B13
	 TRISBbits.TRISB13    = OUTPUT;	//Enable
	 TRISDbits.TRISD4    = INPUT;	//X_HomeSwitch
	//Y
	 TRISDbits.TRISD8    = OUTPUT;	//Step
	 TRISDbits.TRISD9    = OUTPUT;	//Dir
	 TRISDbits.TRISD10    = OUTPUT;	//Enable
	 TRISCbits.TRISC13     = INPUT;	//Y_HomeSwitch
	 
	//Z
	 TRISDbits.TRISD2     = OUTPUT;	//Step
	 TRISDbits.TRISD7    = OUTPUT;	//Dir
	 TRISDbits.TRISD3     = OUTPUT;	//Enable
	 TRISCbits.TRISC14     = INPUT;	//Z_HomeSwitch
	 
	X_Disable = TRUE; 		
	Y_Disable = TRUE; 		
	Z_Disable = TRUE; 		
	
	//Timer 4 is used to time the stepper motor steps
	//PB clk = 8MHz Post scaler = 2 to 1 tick every 25nS	
	T4CON = 0x0;			//Clear timer setting register
	T4CONSET = 0x0010;		//Set PS to 2
	TMR4 = 0;				//Reset clock
	PR4 = 500;				//Initialise PR4 value (when T4 matches PR4 it interrupts)
	mT4SetIntPriority(7);	//Set T4 interrupt to top priority
	INTEnableSystemMultiVectoredInt();//Set T4 to vectored i.e. Fast
	mT4ClearIntFlag();		//Clear interrupt flag
	T4CONSET = 0x8000;		//Turn on T4
	mT4IntEnable(!TRUE);	//Disable T4 interrputs
	
	// init the circular buffer pointers
	 SBR = 0;
	 SBW = 0;
	 // Init Rapid moves
	 G_CodeRapidXYMove=0;
	 G_CodeRapidZMove=0;
	 
}//InitStepper
Ejemplo n.º 8
0
extern int timerDisableInterrupt(timer * pTimer)
{
  int PreviousSetting;

  switch(pTimer->m_TimerNumber) {
    case 1: PreviousSetting = mT1GetIntEnable(); mT1IntEnable(0); break;
    case 2: PreviousSetting = mT2GetIntEnable(); mT2IntEnable(0); break;
    case 3: PreviousSetting = mT3GetIntEnable(); mT3IntEnable(0); break;
    case 4: PreviousSetting = mT4GetIntEnable(); mT4IntEnable(0); break;
    case 5: PreviousSetting = mT5GetIntEnable(); mT5IntEnable(0); break;
    default: while (true);
  }

  return PreviousSetting;
}
Ejemplo n.º 9
0
int RapMan_Home(void)
{
int i;
	OLED_Home_Screen();
	
	moveX = !TRUE;					//Turn off all steppers
	moveY = !TRUE;
	moveZ = !TRUE;
	Stepper_InitIO();
	Axis_Stepper_Motors(On);
	Manual_Mode_Set = TRUE;
	
	Feed_Rate = HOME_SPEED_Z;		//Move tool down to prevent crash
	OLED_FastText57(3, 0, "Z DOWN     ",0);
	Set_Z_Dir = Z_DOWN;
	moveZ = TRUE;
	for(i=0;i<200000;i++);
	moveZ = !TRUE;
	
	OLED_FastText57(3, 0, "Y FORWARD  ",0);
	Feed_Rate = HOME_SPEED_X_Y;		//Move tool forward to prevent crash
	Set_Y_Dir = Y_FORWARD;
	moveY = TRUE;
	for(i=0;i<60000;i++);
	moveY = !TRUE;
	
	OLED_FastText57(3, 0, "HOME X    ",0);	//Display operation
	Feed_Rate = HOME_SPEED_X_Y;				//Set homing speed
	while(!X_HomeSwitch && Manual_Select){	//Keep homing until the switch is pressed
		Set_X_Dir = X_LEFT;					//Direction of home		
		while(!X_HomeSwitch && Manual_Select)moveX = TRUE;	
		moveX = !TRUE;
		for(i=0;i<20000;i++);				//Wait to allow de-bounce of switch/ noise
	}
	moveX=TRUE;								//Move a little more to ensure full switch
	for(i=0;i<10000;i++);
	moveX = !TRUE;
	
	Feed_Rate = HOME_SPEED_X_Y_SET;			//At slow speed pull away from switch
	while(X_HomeSwitch && Manual_Select){	//to get accurate switch point
		Set_X_Dir = X_RIGHT;
		while(X_HomeSwitch && Manual_Select)moveX = TRUE;
		moveX = !TRUE;
		for(i=0;i<2000;i++);				//Wait to allow de-bounce of switch/ noise
		lSaveSteps_X = X_HOME_MM * StepsPer_mm;	//*************HOME X
		lHomeStepsX = lSaveSteps_X;
	}
	
	OLED_FastText57(3, 0, "HOME Y    ",0);
	Feed_Rate = HOME_SPEED_X_Y;
	while(!Y_HomeSwitch && Manual_Select){		
		Set_Y_Dir = Y_BACK;
		while(!Y_HomeSwitch && Manual_Select)moveY = TRUE;
		moveY = !TRUE;
		for(i=0;i<20000;i++);
	}	
	moveY=TRUE;
	for(i=0;i<10000;i++);
	moveY = !TRUE;
	
	Feed_Rate = HOME_SPEED_X_Y_SET;
	while(Y_HomeSwitch && Manual_Select){	
		Set_Y_Dir = Y_FORWARD;
		while(Y_HomeSwitch && Manual_Select)moveY = TRUE;
		moveY = !TRUE;
		for(i=0;i<2000;i++);
		lSaveSteps_Y = Y_HOME_MM * StepsPer_mm;//*************HOME Y
		lHomeStepsY = lSaveSteps_Y;
	}		
	
	OLED_FastText57(3, 0, "HOME Z    ",0);
	Feed_Rate = HOME_SPEED_Z;
	while(!Z_HomeSwitch && Manual_Select){	
		Set_Z_Dir = Z_UP;
		while(!Z_HomeSwitch && Manual_Select)moveZ = TRUE;
		moveZ = !TRUE;
		for(i=0;i<2000;i++);	
	}
	moveZ=TRUE;
	for(i=0;i<10000;i++);
	moveZ = !TRUE;
	
	Feed_Rate = HOME_SPEED_Z_SET;
	while(Z_HomeSwitch && Manual_Select){	
		Set_Z_Dir = Z_DOWN;
		while(Z_HomeSwitch && Manual_Select)moveZ = TRUE;
		moveZ = !TRUE;
		for(i=0;i<2000;i++);
		lSaveSteps_Z = Z_HOME_MM;//*************HOME Z
		lHomeStepsZ = lSaveSteps_Z;
	}
	Manual_Mode_Set = !TRUE;
	mT4IntEnable(!TRUE);
	if(!Manual_Select)
	{
		OLED_FastText57(3, 0, "HOME ABORTED",0);
		for(i=0;i<2000000;i++);
		return !TRUE;
	}
	else
	{
		OLED_FastText57(3, 0, "HOME COMPLETE",0);
		for(i=0;i<2000000;i++);
		return TRUE;
	}	
}//Home