/********************************************************************* * 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 }
//--------------------------------------------------------------------------------------------------------------- // 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 }
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); }