/*********************************************************************
* Function: void TouchStoreCalibration(void)
*
* PreCondition: EEPROMInit() must be called before
*
* Input: none
*
* Output: none
*
* Side Effects: none
*
* Overview: stores calibration parameters into EEPROM
*
* Note: none
*
********************************************************************/
void TouchStoreCalibration(void){
#if ((GRAPHICS_PICTAIL_VERSION == 2) || (GRAPHICS_PICTAIL_VERSION == 250))
    EEPROMWriteWord(_calXMin, ADDRESS_XMIN);
    EEPROMWriteWord(_calXMax, ADDRESS_XMAX);
    EEPROMWriteWord(_calYMin, ADDRESS_YMIN);
    EEPROMWriteWord(_calYMax, ADDRESS_YMAX);
    EEPROMWriteWord(GRAPHICS_LIBRARY_VERSION,ADDRESS_VERSION);
#else
    SST25SectorErase(ADDRESS_XMIN); // erase 4K sector
    SST25WriteWord(_calXMin, ADDRESS_XMIN);
    SST25WriteWord(_calXMax, ADDRESS_XMAX);
    SST25WriteWord(_calYMin, ADDRESS_YMIN);
    SST25WriteWord(_calYMax, ADDRESS_YMAX);
    SST25WriteWord(GRAPHICS_LIBRARY_VERSION,ADDRESS_VERSION);
#endif
}
Example #2
0
//---------------------------------------------------------------------------------------------------------------
// Public functions
//---------------------------------------------------------------------------------------------------------------
void MotorInit(void)
{	
	// Configure PWM pins as outputs
	trisc.MOTOR_LEFT_PIN = 0;
	trisc.MOTOR_RIGHT_PIN = 0;
	
	// Stop motors
	portc.MOTOR_LEFT_PIN = 0;
	portc.MOTOR_RIGHT_PIN = 0;
	
	// Check if the EEPROM contains the duty cycle values
	Motor_Left_Duty_Cycle_Forward = EEPROMReadWord(MOTOR_LEFT_EEPROM_ADDRESS_DUTY_CYCLE_FORWARD);
	
	// Is the EEPROM memory empty ?
	if (Motor_Left_Duty_Cycle_Forward == 0xFFFF)
	{
		// Write default duty cycles to EEPROM
		EEPROMWriteWord(MOTOR_LEFT_EEPROM_ADDRESS_DUTY_CYCLE_FORWARD, MOTOR_LEFT_DEFAULT_DUTY_CYCLE_FORWARD);
		EEPROMWriteWord(MOTOR_LEFT_EEPROM_ADDRESS_DUTY_CYCLE_BACKWARD, MOTOR_LEFT_DEFAULT_DUTY_CYCLE_BACKWARD);
		EEPROMWriteWord(MOTOR_RIGHT_EEPROM_ADDRESS_DUTY_CYCLE_FORWARD, MOTOR_RIGHT_DEFAULT_DUTY_CYCLE_FORWARD);
		EEPROMWriteWord(MOTOR_RIGHT_EEPROM_ADDRESS_DUTY_CYCLE_BACKWARD, MOTOR_RIGHT_DEFAULT_DUTY_CYCLE_BACKWARD);
	
		// Use default values
		Motor_Left_Duty_Cycle_Forward = MOTOR_LEFT_DEFAULT_DUTY_CYCLE_FORWARD;
		Motor_Left_Duty_Cycle_Backward = MOTOR_LEFT_DEFAULT_DUTY_CYCLE_BACKWARD;
		Motor_Right_Duty_Cycle_Forward = MOTOR_RIGHT_DEFAULT_DUTY_CYCLE_FORWARD;
		Motor_Right_Duty_Cycle_Backward = MOTOR_RIGHT_DEFAULT_DUTY_CYCLE_BACKWARD;
	}
	else
	{
		// Load values from EEPROM
		Motor_Left_Duty_Cycle_Backward = EEPROMReadWord(MOTOR_LEFT_EEPROM_ADDRESS_DUTY_CYCLE_BACKWARD);
		Motor_Right_Duty_Cycle_Forward = EEPROMReadWord(MOTOR_RIGHT_EEPROM_ADDRESS_DUTY_CYCLE_FORWARD);
		Motor_Right_Duty_Cycle_Backward = EEPROMReadWord(MOTOR_RIGHT_EEPROM_ADDRESS_DUTY_CYCLE_BACKWARD);
	}
	
	// Set the PWM period to 4.44 ms (it is the longuest we can achieve with a 3.6864 MHz clock)
	pr2 = 255;
	t2con = 0x06; // Enable timer 2 and set a 16x prescaler
}
Example #3
0
void MotorChangeSpeed(TMotor Motor, TMotorDirection Direction, unsigned char Is_Speed_Increased)
{
	// The left motor is mounted in the opposite direction than the right motor
	if (Motor == MOTOR_LEFT)
	{
		if (Direction == MOTOR_DIRECTION_FORWARD)
		{
			if (Is_Speed_Increased)
			{
				if (Motor_Left_Duty_Cycle_Forward > MOTOR_MINIMUM_DUTY_CYCLE_VALUE) Motor_Left_Duty_Cycle_Forward--;
			}
			else
			{
				if (Motor_Left_Duty_Cycle_Forward < MOTOR_MAXIMUM_DUTY_CYCLE_VALUE) Motor_Left_Duty_Cycle_Forward++;
			}
			EEPROMWriteWord(MOTOR_LEFT_EEPROM_ADDRESS_DUTY_CYCLE_FORWARD, Motor_Left_Duty_Cycle_Forward);
		}
		else
		{
			if (Is_Speed_Increased)
			{
				if (Motor_Left_Duty_Cycle_Backward < MOTOR_MAXIMUM_DUTY_CYCLE_VALUE) Motor_Left_Duty_Cycle_Backward++; // Motor is mounted in the opposite direction
			}
			else
			{
				if (Motor_Left_Duty_Cycle_Backward > MOTOR_MINIMUM_DUTY_CYCLE_VALUE) Motor_Left_Duty_Cycle_Backward--;
			}
			EEPROMWriteWord(MOTOR_LEFT_EEPROM_ADDRESS_DUTY_CYCLE_BACKWARD, Motor_Left_Duty_Cycle_Backward);
		}
		
		// Set new speed
		MotorSetState(MOTOR_LEFT, Motor_Left_State);
	}
	else
	{
		if (Direction == MOTOR_DIRECTION_FORWARD)
		{
			if (Is_Speed_Increased)
			{
				if (Motor_Right_Duty_Cycle_Forward < MOTOR_MAXIMUM_DUTY_CYCLE_VALUE) Motor_Right_Duty_Cycle_Forward++;
			}
			else
			{
				if (Motor_Right_Duty_Cycle_Forward > MOTOR_MINIMUM_DUTY_CYCLE_VALUE) Motor_Right_Duty_Cycle_Forward--;
			}
			EEPROMWriteWord(MOTOR_RIGHT_EEPROM_ADDRESS_DUTY_CYCLE_FORWARD, Motor_Right_Duty_Cycle_Forward);
		}
		else
		{
			if (Is_Speed_Increased)
			{
				if (Motor_Right_Duty_Cycle_Backward > MOTOR_MINIMUM_DUTY_CYCLE_VALUE) Motor_Right_Duty_Cycle_Backward--;
			}
			else
			{
				if (Motor_Right_Duty_Cycle_Backward < MOTOR_MAXIMUM_DUTY_CYCLE_VALUE) Motor_Right_Duty_Cycle_Backward++;
			}
			EEPROMWriteWord(MOTOR_RIGHT_EEPROM_ADDRESS_DUTY_CYCLE_BACKWARD, Motor_Right_Duty_Cycle_Backward);
		}
		
		// Set new speed
		MotorSetState(MOTOR_RIGHT, Motor_Right_State);
	}
}
/*********************************************************************
* Function: void TouchStoreCalibration(void)
*
* PreCondition: EEPROMInit() must be called before
*
* Input: none
*
* Output: none
*
* Side Effects: none
*
* Overview: stores calibration parameters into EEPROM
*
* Note: none
*
********************************************************************/
void TouchStoreCalibration(void){
    EEPROMWriteWord(_calXMin, EEPROM_XMIN);
    EEPROMWriteWord(_calXMax, EEPROM_XMAX);
    EEPROMWriteWord(_calYMin, EEPROM_YMIN);
    EEPROMWriteWord(_calYMax, EEPROM_YMAX);
}