void EEPROM::init() { #if EEPROM_MODE != 0 uint8_t check = computeChecksum(); uint8_t storedcheck = HAL::eprGetByte(EPR_INTEGRITY_BYTE); if(HAL::eprGetByte(EPR_MAGIC_BYTE) == EEPROM_MODE && storedcheck == check) { readDataFromEEPROM(); if (USE_CONFIGURATION_BAUD_RATE) { // Used if eeprom gets unusable baud rate set and communication wont work at all. if(HAL::eprGetInt32(EPR_BAUDRATE) != BAUDRATE) { HAL::eprSetInt32(EPR_BAUDRATE,BAUDRATE); baudrate = BAUDRATE; uint8_t newcheck = computeChecksum(); if(newcheck != HAL::eprGetByte(EPR_INTEGRITY_BYTE)) HAL::eprSetByte(EPR_INTEGRITY_BYTE,newcheck); } Com::printFLN(PSTR("EEprom baud rate restored from configuration.")); Com::printFLN(PSTR("RECOMPILE WITH USE_CONFIGURATION_BAUD_RATE == 0 to alter baud rate via EEPROM")); } } else { HAL::eprSetByte(EPR_MAGIC_BYTE,EEPROM_MODE); // Make datachange permanent initalizeUncached(); storeDataIntoEEPROM(storedcheck != check); } #endif }
void EEPROM::init() { #if EEPROM_MODE!=0 uint8_t check = computeChecksum(); uint8_t storedcheck = HAL::eprGetByte(EPR_INTEGRITY_BYTE); if(HAL::eprGetByte(EPR_MAGIC_BYTE)==EEPROM_MODE && storedcheck==check) { readDataFromEEPROM(); } else { HAL::eprSetByte(EPR_MAGIC_BYTE,EEPROM_MODE); // Make datachange permanent initalizeUncached(); storeDataIntoEEPROM(storedcheck!=check); } #endif }
void EEPROM::restoreEEPROMSettingsFromConfiguration() { #if EEPROM_MODE!=0 byte version = EEPROM_PROTOCOL_VERSION; baudrate = BAUDRATE; max_inactive_time = MAX_INACTIVE_TIME*1000L; stepper_inactive_time = STEPPER_INACTIVE_TIME*1000L; Printer::axisStepsPerMM[0] = XAXIS_STEPS_PER_MM; Printer::axisStepsPerMM[1] = YAXIS_STEPS_PER_MM; Printer::axisStepsPerMM[2] = ZAXIS_STEPS_PER_MM; Printer::axisStepsPerMM[3] = 1; Printer::maxFeedrate[0] = MAX_FEEDRATE_X; Printer::maxFeedrate[1] = MAX_FEEDRATE_Y; Printer::maxFeedrate[2] = MAX_FEEDRATE_Z; Printer::homingFeedrate[0] = HOMING_FEEDRATE_X; Printer::homingFeedrate[1] = HOMING_FEEDRATE_Y; Printer::homingFeedrate[2] = HOMING_FEEDRATE_Z; Printer::maxJerk = MAX_JERK; Printer::maxZJerk = MAX_ZJERK; #ifdef RAMP_ACCELERATION Printer::maxAccelerationMMPerSquareSecond[0] = maxAccelerationMMPerSquareSecond_X; Printer::maxAccelerationMMPerSquareSecond[1] = maxAccelerationMMPerSquareSecond_Y; Printer::maxAccelerationMMPerSquareSecond[2] = maxAccelerationMMPerSquareSecond_Z; Printer::maxTravelAccelerationMMPerSquareSecond[0] = maxTravelAccelerationMMPerSquareSecond_X; Printer::maxTravelAccelerationMMPerSquareSecond[1] = maxTravelAccelerationMMPerSquareSecond_Y; Printer::maxTravelAccelerationMMPerSquareSecond[2] = maxTravelAccelerationMMPerSquareSecond_Z; #endif #if USE_OPS==1 Printer::opsMode = OPS_MODE; Printer::opsMinDistance = OPS_MIN_DISTANCE; Printer::opsRetractDistance = OPS_RETRACT_DISTANCE; Printer::opsRetractBacklash = OPS_RETRACT_BACKLASH; Printer::opsMoveAfter = OPS_MOVE_AFTER; #endif #if HAVE_HEATED_BED heatedBedController.heatManager= HEATED_BED_HEAT_MANAGER; #ifdef TEMP_PID heatedBedController.pidDriveMax = HEATED_BED_PID_INTEGRAL_DRIVE_MAX; heatedBedController.pidDriveMin = HEATED_BED_PID_INTEGRAL_DRIVE_MIN; heatedBedController.pidPGain = HEATED_BED_PID_PGAIN; heatedBedController.pidIGain = HEATED_BED_PID_IGAIN; heatedBedController.pidDGain = HEATED_BED_PID_DGAIN; heatedBedController.pidMax = HEATED_BED_PID_MAX; #endif #endif Printer::xLength = X_MAX_LENGTH; Printer::yLength = Y_MAX_LENGTH; Printer::zLength = Z_MAX_LENGTH; Printer::xMin = X_MIN_POS; Printer::yMin = Y_MIN_POS; Printer::zMin = Z_MIN_POS; #if ENABLE_BACKLASH_COMPENSATION Printer::backlashX = X_BACKLASH; Printer::backlashY = Y_BACKLASH; Printer::backlashZ = Z_BACKLASH; #endif Extruder *e; #if NUM_EXTRUDER>0 e = &extruder[0]; e->stepsPerMM = EXT0_STEPS_PER_MM; e->maxFeedrate = EXT0_MAX_FEEDRATE; e->maxStartFeedrate = EXT0_MAX_START_FEEDRATE; e->maxAcceleration = EXT0_MAX_ACCELERATION; e->tempControl.heatManager = EXT0_HEAT_MANAGER; #ifdef TEMP_PID e->tempControl.pidDriveMax = EXT0_PID_INTEGRAL_DRIVE_MAX; e->tempControl.pidDriveMin = EXT0_PID_INTEGRAL_DRIVE_MIN; e->tempControl.pidPGain = EXT0_PID_P; e->tempControl.pidIGain = EXT0_PID_I; e->tempControl.pidDGain = EXT0_PID_D; e->tempControl.pidMax = EXT0_PID_MAX; #endif e->yOffset = EXT0_Y_OFFSET; e->xOffset = EXT0_X_OFFSET; e->watchPeriod = EXT0_WATCHPERIOD; #if RETRACT_DURING_HEATUP e->waitRetractTemperature = EXT0_WAIT_RETRACT_TEMP; e->waitRetractUnits = EXT0_WAIT_RETRACT_UNITS; #endif e->coolerSpeed = EXT0_EXTRUDER_COOLER_SPEED; #ifdef USE_ADVANCE #ifdef ENABLE_QUADRATIC_ADVANCE e->advanceK = EXT0_ADVANCE_K; #endif e->advanceL = EXT0_ADVANCE_L; #endif #endif // NUM_EXTRUDER>0 #if NUM_EXTRUDER>1 e = &extruder[1]; e->stepsPerMM = EXT1_STEPS_PER_MM; e->maxFeedrate = EXT1_MAX_FEEDRATE; e->maxStartFeedrate = EXT1_MAX_START_FEEDRATE; e->maxAcceleration = EXT1_MAX_ACCELERATION; e->tempControl.heatManager = EXT1_HEAT_MANAGER; #ifdef TEMP_PID e->tempControl.pidDriveMax = EXT1_PID_INTEGRAL_DRIVE_MAX; e->tempControl.pidDriveMin = EXT1_PID_INTEGRAL_DRIVE_MIN; e->tempControl.pidPGain = EXT1_PID_P; e->tempControl.pidIGain = EXT1_PID_I; e->tempControl.pidDGain = EXT1_PID_D; e->tempControl.pidMax = EXT1_PID_MAX; #endif e->yOffset = EXT1_Y_OFFSET; e->xOffset = EXT1_X_OFFSET; e->watchPeriod = EXT1_WATCHPERIOD; #if RETRACT_DURING_HEATUP e->waitRetractTemperature = EXT1_WAIT_RETRACT_TEMP; e->waitRetractUnits = EXT1_WAIT_RETRACT_UNITS; #endif e->coolerSpeed = EXT1_EXTRUDER_COOLER_SPEED; #ifdef USE_ADVANCE #ifdef ENABLE_QUADRATIC_ADVANCE e->advanceK = EXT1_ADVANCE_K; #endif e->advanceL = EXT1_ADVANCE_L; #endif #endif // NUM_EXTRUDER > 1 #if NUM_EXTRUDER>2 e = &extruder[2]; e->stepsPerMM = EXT2_STEPS_PER_MM; e->maxFeedrate = EXT2_MAX_FEEDRATE; e->maxStartFeedrate = EXT2_MAX_START_FEEDRATE; e->maxAcceleration = EXT2_MAX_ACCELERATION; e->tempControl.heatManager = EXT2_HEAT_MANAGER; #ifdef TEMP_PID e->tempControl.pidDriveMax = EXT2_PID_INTEGRAL_DRIVE_MAX; e->tempControl.pidDriveMin = EXT2_PID_INTEGRAL_DRIVE_MIN; e->tempControl.pidPGain = EXT2_PID_P; e->tempControl.pidIGain = EXT2_PID_I; e->tempControl.pidDGain = EXT2_PID_D; e->tempControl.pidMax = EXT2_PID_MAX; #endif e->yOffset = EXT2_Y_OFFSET; e->xOffset = EXT2_X_OFFSET; e->watchPeriod = EXT2_WATCHPERIOD; #if RETRACT_DURING_HEATUP e->waitRetractTemperature = EXT2_WAIT_RETRACT_TEMP; e->waitRetractUnits = EXT2_WAIT_RETRACT_UNITS; #endif e->coolerSpeed = EXT2_EXTRUDER_COOLER_SPEED; #ifdef USE_ADVANCE #ifdef ENABLE_QUADRATIC_ADVANCE e->advanceK = EXT2_ADVANCE_K; #endif e->advanceL = EXT2_ADVANCE_L; #endif #endif // NUM_EXTRUDER > 2 #if NUM_EXTRUDER>3 e = &extruder[3]; e->stepsPerMM = EXT3_STEPS_PER_MM; e->maxFeedrate = EXT3_MAX_FEEDRATE; e->maxStartFeedrate = EXT3_MAX_START_FEEDRATE; e->maxAcceleration = EXT3_MAX_ACCELERATION; e->tempControl.heatManager = EXT3_HEAT_MANAGER; #ifdef TEMP_PID e->tempControl.pidDriveMax = EXT3_PID_INTEGRAL_DRIVE_MAX; e->tempControl.pidDriveMin = EXT3_PID_INTEGRAL_DRIVE_MIN; e->tempControl.pidPGain = EXT3_PID_P; e->tempControl.pidIGain = EXT3_PID_I; e->tempControl.pidDGain = EXT3_PID_D; e->tempControl.pidMax = EXT3_PID_MAX; #endif e->yOffset = EXT3_Y_OFFSET; e->xOffset = EXT3_X_OFFSET; e->watchPeriod = EXT3_WATCHPERIOD; #if RETRACT_DURING_HEATUP e->waitRetractTemperature = EXT3_WAIT_RETRACT_TEMP; e->waitRetractUnits = EXT3_WAIT_RETRACT_UNITS; #endif e->coolerSpeed = EXT3_EXTRUDER_COOLER_SPEED; #ifdef USE_ADVANCE #ifdef ENABLE_QUADRATIC_ADVANCE e->advanceK = EXT3_ADVANCE_K; #endif e->advanceL = EXT3_ADVANCE_L; #endif #endif // NUM_EXTRUDER > 3 #if NUM_EXTRUDER>4 e = &extruder[4]; e->stepsPerMM = EXT4_STEPS_PER_MM; e->maxFeedrate = EXT4_MAX_FEEDRATE; e->maxStartFeedrate = EXT4_MAX_START_FEEDRATE; e->maxAcceleration = EXT4_MAX_ACCELERATION; e->tempControl.heatManager = EXT4_HEAT_MANAGER; #ifdef TEMP_PID e->tempControl.pidDriveMax = EXT4_PID_INTEGRAL_DRIVE_MAX; e->tempControl.pidDriveMin = EXT4_PID_INTEGRAL_DRIVE_MIN; e->tempControl.pidPGain = EXT4_PID_P; e->tempControl.pidIGain = EXT4_PID_I; e->tempControl.pidDGain = EXT4_PID_D; e->tempControl.pidMax = EXT4_PID_MAX; #endif e->yOffset = EXT4_Y_OFFSET; e->xOffset = EXT4_X_OFFSET; e->watchPeriod = EXT4_WATCHPERIOD; #if RETRACT_DURING_HEATUP e->waitRetractTemperature = EXT4_WAIT_RETRACT_TEMP; e->waitRetractUnits = EXT4_WAIT_RETRACT_UNITS; #endif e->coolerSpeed = EXT4_EXTRUDER_COOLER_SPEED; #ifdef USE_ADVANCE #ifdef ENABLE_QUADRATIC_ADVANCE e->advanceK = EXT4_ADVANCE_K; #endif e->advanceL = EXT4_ADVANCE_L; #endif #endif // NUM_EXTRUDER > 4 #if NUM_EXTRUDER>5 e = &extruder[5]; e->stepsPerMM = EXT5_STEPS_PER_MM; e->maxFeedrate = EXT5_MAX_FEEDRATE; e->maxStartFeedrate = EXT5_MAX_START_FEEDRATE; e->maxAcceleration = EXT5_MAX_ACCELERATION; e->tempControl.heatManager = EXT5_HEAT_MANAGER; #ifdef TEMP_PID e->tempControl.pidDriveMax = EXT5_PID_INTEGRAL_DRIVE_MAX; e->tempControl.pidDriveMin = EXT5_PID_INTEGRAL_DRIVE_MIN; e->tempControl.pidPGain = EXT5_PID_P; e->tempControl.pidIGain = EXT5_PID_I; e->tempControl.pidDGain = EXT5_PID_D; e->tempControl.pidMax = EXT5_PID_MAX; #endif e->yOffset = EXT5_Y_OFFSET; e->xOffset = EXT5_X_OFFSET; e->watchPeriod = EXT5_WATCHPERIOD; #if RETRACT_DURING_HEATUP e->waitRetractTemperature = EXT5_WAIT_RETRACT_TEMP; e->waitRetractUnits = EXT5_WAIT_RETRACT_UNITS; #endif e->coolerSpeed = EXT5_EXTRUDER_COOLER_SPEED; #ifdef USE_ADVANCE #ifdef ENABLE_QUADRATIC_ADVANCE e->advanceK = EXT5_ADVANCE_K; #endif e->advanceL = EXT5_ADVANCE_L; #endif #endif // NUM_EXTRUDER > 5 #if FEATURE_AUTOLEVEL Printer::setAutolevelActive(false); Printer::resetTransformationMatrix(true); #endif initalizeUncached(); Extruder::selectExtruderById(current_extruder->id); Printer::updateDerivedParameter(); Extruder::initHeatedBed(); Com::printInfoF(Com::tEPRConfigResetDefaults); #else Com::printErrorF(tNoEEPROMSupport); #endif }
void EEPROM::storeDataIntoEEPROM(byte corrupted) { #if EEPROM_MODE!=0 HAL::epr_set_long(EPR_BAUDRATE,baudrate); HAL::epr_set_long(EPR_MAX_INACTIVE_TIME,max_inactive_time); HAL::epr_set_long(EPR_STEPPER_INACTIVE_TIME,stepper_inactive_time); //#define EPR_ACCELERATION_TYPE 1 HAL::epr_set_float(EPR_XAXIS_STEPS_PER_MM,Printer::axisStepsPerMM[0]); HAL::epr_set_float(EPR_YAXIS_STEPS_PER_MM,Printer::axisStepsPerMM[1]); HAL::epr_set_float(EPR_ZAXIS_STEPS_PER_MM,Printer::axisStepsPerMM[2]); HAL::epr_set_float(EPR_X_MAX_FEEDRATE,Printer::maxFeedrate[0]); HAL::epr_set_float(EPR_Y_MAX_FEEDRATE,Printer::maxFeedrate[1]); HAL::epr_set_float(EPR_Z_MAX_FEEDRATE,Printer::maxFeedrate[2]); HAL::epr_set_float(EPR_X_HOMING_FEEDRATE,Printer::homingFeedrate[0]); HAL::epr_set_float(EPR_Y_HOMING_FEEDRATE,Printer::homingFeedrate[1]); HAL::epr_set_float(EPR_Z_HOMING_FEEDRATE,Printer::homingFeedrate[2]); HAL::epr_set_float(EPR_MAX_JERK,Printer::maxJerk); HAL::epr_set_float(EPR_MAX_ZJERK,Printer::maxZJerk); #ifdef RAMP_ACCELERATION HAL::epr_set_float(EPR_X_MAX_ACCEL,Printer::maxAccelerationMMPerSquareSecond[0]); HAL::epr_set_float(EPR_Y_MAX_ACCEL,Printer::maxAccelerationMMPerSquareSecond[1]); HAL::epr_set_float(EPR_Z_MAX_ACCEL,Printer::maxAccelerationMMPerSquareSecond[2]); HAL::epr_set_float(EPR_X_MAX_TRAVEL_ACCEL,Printer::maxTravelAccelerationMMPerSquareSecond[0]); HAL::epr_set_float(EPR_Y_MAX_TRAVEL_ACCEL,Printer::maxTravelAccelerationMMPerSquareSecond[1]); HAL::epr_set_float(EPR_Z_MAX_TRAVEL_ACCEL,Printer::maxTravelAccelerationMMPerSquareSecond[2]); #endif #if USE_OPS==1 HAL::epr_set_float(EPR_OPS_MIN_DISTANCE,Printer::opsMinDistance); HAL::epr_set_byte(EPR_OPS_MODE,Printer::opsMode); HAL::epr_set_float(EPR_OPS_MOVE_AFTER,Printer::opsMoveAfter); HAL::epr_set_float(EPR_OPS_RETRACT_DISTANCE,Printer::opsRetractDistance); HAL::epr_set_float(EPR_OPS_RETRACT_BACKLASH,Printer::opsRetractBacklash); #else HAL::epr_set_float(EPR_OPS_MIN_DISTANCE,OPS_MIN_DISTANCE); HAL::epr_set_byte(EPR_OPS_MODE,OPS_MODE); HAL::epr_set_float(EPR_OPS_MOVE_AFTER,OPS_MOVE_AFTER); HAL::epr_set_float(EPR_OPS_RETRACT_DISTANCE,OPS_RETRACT_DISTANCE); HAL::epr_set_float(EPR_OPS_RETRACT_BACKLASH,OPS_RETRACT_BACKLASH); #endif #if HAVE_HEATED_BED HAL::epr_set_byte(EPR_BED_HEAT_MANAGER,heatedBedController.heatManager); #else HAL::epr_set_byte(EPR_BED_HEAT_MANAGER,HEATED_BED_HEAT_MANAGER); #endif #if defined(TEMP_PID) && HAVE_HEATED_BED HAL::epr_set_byte(EPR_BED_DRIVE_MAX,heatedBedController.pidDriveMax); HAL::epr_set_byte(EPR_BED_DRIVE_MIN,heatedBedController.pidDriveMin); HAL::epr_set_float(EPR_BED_PID_PGAIN,heatedBedController.pidPGain); HAL::epr_set_float(EPR_BED_PID_IGAIN,heatedBedController.pidIGain); HAL::epr_set_float(EPR_BED_PID_DGAIN,heatedBedController.pidDGain); HAL::epr_set_byte(EPR_BED_PID_MAX,heatedBedController.pidMax); #else HAL::epr_set_byte(EPR_BED_DRIVE_MAX,HEATED_BED_PID_INTEGRAL_DRIVE_MAX); HAL::epr_set_byte(EPR_BED_DRIVE_MIN,HEATED_BED_PID_INTEGRAL_DRIVE_MIN); HAL::epr_set_float(EPR_BED_PID_PGAIN,HEATED_BED_PID_PGAIN); HAL::epr_set_float(EPR_BED_PID_IGAIN,HEATED_BED_PID_IGAIN); HAL::epr_set_float(EPR_BED_PID_DGAIN,HEATED_BED_PID_DGAIN); HAL::epr_set_byte(EPR_BED_PID_MAX,HEATED_BED_PID_MAX); #endif HAL::epr_set_float(EPR_X_HOME_OFFSET,Printer::xMin); HAL::epr_set_float(EPR_Y_HOME_OFFSET,Printer::yMin); HAL::epr_set_float(EPR_Z_HOME_OFFSET,Printer::zMin); HAL::epr_set_float(EPR_X_LENGTH,Printer::xLength); HAL::epr_set_float(EPR_Y_LENGTH,Printer::yLength); HAL::epr_set_float(EPR_Z_LENGTH,Printer::zLength); #if ENABLE_BACKLASH_COMPENSATION HAL::epr_set_float(EPR_BACKLASH_X,Printer::backlashX); HAL::epr_set_float(EPR_BACKLASH_Y,Printer::backlashY); HAL::epr_set_float(EPR_BACKLASH_Z,Printer::backlashZ); #else HAL::epr_set_float(EPR_BACKLASH_X,0); HAL::epr_set_float(EPR_BACKLASH_Y,0); HAL::epr_set_float(EPR_BACKLASH_Z,0); #endif #if FEATURE_AUTOLEVEL HAL::epr_set_byte(EPR_AUTOLEVEL_ACTIVE,Printer::isAutolevelActive()); for(byte i=0; i<9; i++) HAL::epr_set_float(EPR_AUTOLEVEL_MATRIX+((int)i)<<2,Printer::autolevelTransformation[i]); #endif // now the extruder for(byte i=0; i<NUM_EXTRUDER; i++) { int o=i*EEPROM_EXTRUDER_LENGTH+EEPROM_EXTRUDER_OFFSET; Extruder *e = &extruder[i]; HAL::epr_set_float(o+EPR_EXTRUDER_STEPS_PER_MM,e->stepsPerMM); HAL::epr_set_float(o+EPR_EXTRUDER_MAX_FEEDRATE,e->maxFeedrate); HAL::epr_set_float(o+EPR_EXTRUDER_MAX_START_FEEDRATE,e->maxStartFeedrate); HAL::epr_set_float(o+EPR_EXTRUDER_MAX_ACCELERATION,e->maxAcceleration); HAL::epr_set_byte(o+EPR_EXTRUDER_HEAT_MANAGER,e->tempControl.heatManager); #ifdef TEMP_PID HAL::epr_set_byte(o+EPR_EXTRUDER_DRIVE_MAX,e->tempControl.pidDriveMax); HAL::epr_set_byte(o+EPR_EXTRUDER_DRIVE_MIN,e->tempControl.pidDriveMin); HAL::epr_set_float(o+EPR_EXTRUDER_PID_PGAIN,e->tempControl.pidPGain); HAL::epr_set_float(o+EPR_EXTRUDER_PID_IGAIN,e->tempControl.pidIGain); HAL::epr_set_float(o+EPR_EXTRUDER_PID_DGAIN,e->tempControl.pidDGain); HAL::epr_set_byte(o+EPR_EXTRUDER_PID_MAX,e->tempControl.pidMax); #endif HAL::epr_set_long(o+EPR_EXTRUDER_X_OFFSET,e->xOffset); HAL::epr_set_long(o+EPR_EXTRUDER_Y_OFFSET,e->yOffset); HAL::epr_set_int(o+EPR_EXTRUDER_WATCH_PERIOD,e->watchPeriod); #if RETRACT_DURING_HEATUP HAL::epr_set_int(o+EPR_EXTRUDER_WAIT_RETRACT_TEMP,e->waitRetractTemperature); HAL::epr_set_int(o+EPR_EXTRUDER_WAIT_RETRACT_UNITS,e->waitRetractUnits); #else HAL::epr_set_int(o+EPR_EXTRUDER_WAIT_RETRACT_TEMP,EXT0_WAIT_RETRACT_TEMP); HAL::epr_set_int(o+EPR_EXTRUDER_WAIT_RETRACT_UNITS,EXT0_WAIT_RETRACT_UNITS); #endif HAL::epr_set_byte(o+EPR_EXTRUDER_COOLER_SPEED,e->coolerSpeed); #ifdef USE_ADVANCE #ifdef ENABLE_QUADRATIC_ADVANCE HAL::epr_set_float(o+EPR_EXTRUDER_ADVANCE_K,e->advanceK); #else HAL::epr_set_float(o+EPR_EXTRUDER_ADVANCE_K,0); #endif HAL::epr_set_float(o+EPR_EXTRUDER_ADVANCE_L,e->advanceL); #else HAL::epr_set_float(o+EPR_EXTRUDER_ADVANCE_K,0); HAL::epr_set_float(o+EPR_EXTRUDER_ADVANCE_L,0); #endif } if(corrupted) { HAL::epr_set_long(EPR_PRINTING_TIME,0); HAL::epr_set_float(EPR_PRINTING_DISTANCE,0); initalizeUncached(); } // Save version and build checksum HAL::epr_set_byte(EPR_VERSION,EEPROM_PROTOCOL_VERSION); HAL::epr_set_byte(EPR_INTEGRITY_BYTE,computeChecksum()); #endif }
void EEPROM::storeDataIntoEEPROM(uint8_t corrupted) { #if EEPROM_MODE != 0 HAL::eprSetInt32(EPR_BAUDRATE,baudrate); HAL::eprSetInt32(EPR_MAX_INACTIVE_TIME,maxInactiveTime); HAL::eprSetInt32(EPR_STEPPER_INACTIVE_TIME,stepperInactiveTime); //#define EPR_ACCELERATION_TYPE 1 HAL::eprSetFloat(EPR_XAXIS_STEPS_PER_MM,Printer::axisStepsPerMM[X_AXIS]); HAL::eprSetFloat(EPR_YAXIS_STEPS_PER_MM,Printer::axisStepsPerMM[Y_AXIS]); HAL::eprSetFloat(EPR_ZAXIS_STEPS_PER_MM,Printer::axisStepsPerMM[Z_AXIS]); HAL::eprSetFloat(EPR_X_MAX_FEEDRATE,Printer::maxFeedrate[X_AXIS]); HAL::eprSetFloat(EPR_Y_MAX_FEEDRATE,Printer::maxFeedrate[Y_AXIS]); HAL::eprSetFloat(EPR_Z_MAX_FEEDRATE,Printer::maxFeedrate[Z_AXIS]); HAL::eprSetFloat(EPR_X_HOMING_FEEDRATE,Printer::homingFeedrate[X_AXIS]); HAL::eprSetFloat(EPR_Y_HOMING_FEEDRATE,Printer::homingFeedrate[Y_AXIS]); HAL::eprSetFloat(EPR_Z_HOMING_FEEDRATE,Printer::homingFeedrate[Z_AXIS]); HAL::eprSetFloat(EPR_MAX_JERK,Printer::maxJerk); #if DRIVE_SYSTEM != DELTA HAL::eprSetFloat(EPR_MAX_ZJERK,Printer::maxZJerk); #endif #if RAMP_ACCELERATION HAL::eprSetFloat(EPR_X_MAX_ACCEL,Printer::maxAccelerationMMPerSquareSecond[X_AXIS]); HAL::eprSetFloat(EPR_Y_MAX_ACCEL,Printer::maxAccelerationMMPerSquareSecond[Y_AXIS]); HAL::eprSetFloat(EPR_Z_MAX_ACCEL,Printer::maxAccelerationMMPerSquareSecond[Z_AXIS]); HAL::eprSetFloat(EPR_X_MAX_TRAVEL_ACCEL,Printer::maxTravelAccelerationMMPerSquareSecond[X_AXIS]); HAL::eprSetFloat(EPR_Y_MAX_TRAVEL_ACCEL,Printer::maxTravelAccelerationMMPerSquareSecond[Y_AXIS]); HAL::eprSetFloat(EPR_Z_MAX_TRAVEL_ACCEL,Printer::maxTravelAccelerationMMPerSquareSecond[Z_AXIS]); #endif #if HAVE_HEATED_BED HAL::eprSetByte(EPR_BED_HEAT_MANAGER,heatedBedController.heatManager); #else HAL::eprSetByte(EPR_BED_HEAT_MANAGER,HEATED_BED_HEAT_MANAGER); #endif #if defined(TEMP_PID) && HAVE_HEATED_BED HAL::eprSetByte(EPR_BED_DRIVE_MAX,heatedBedController.pidDriveMax); HAL::eprSetByte(EPR_BED_DRIVE_MIN,heatedBedController.pidDriveMin); HAL::eprSetFloat(EPR_BED_PID_PGAIN,heatedBedController.pidPGain); HAL::eprSetFloat(EPR_BED_PID_IGAIN,heatedBedController.pidIGain); HAL::eprSetFloat(EPR_BED_PID_DGAIN,heatedBedController.pidDGain); HAL::eprSetByte(EPR_BED_PID_MAX,heatedBedController.pidMax); #else HAL::eprSetByte(EPR_BED_DRIVE_MAX,HEATED_BED_PID_INTEGRAL_DRIVE_MAX); HAL::eprSetByte(EPR_BED_DRIVE_MIN,HEATED_BED_PID_INTEGRAL_DRIVE_MIN); HAL::eprSetFloat(EPR_BED_PID_PGAIN,HEATED_BED_PID_PGAIN_OR_DEAD_TIME); HAL::eprSetFloat(EPR_BED_PID_IGAIN,HEATED_BED_PID_IGAIN); HAL::eprSetFloat(EPR_BED_PID_DGAIN,HEATED_BED_PID_DGAIN); HAL::eprSetByte(EPR_BED_PID_MAX,HEATED_BED_PID_MAX); #endif //SHOT("storeDataIntoEEPROM"); SHOWM(Printer::xMin);SHOWM(Printer::yMin);SHOWM(Printer::zMin); HAL::eprSetFloat(EPR_X_HOME_OFFSET,Printer::xMin); HAL::eprSetFloat(EPR_Y_HOME_OFFSET,Printer::yMin); HAL::eprSetFloat(EPR_Z_HOME_OFFSET,Printer::zMin); HAL::eprSetFloat(EPR_X_LENGTH,Printer::xLength); HAL::eprSetFloat(EPR_Y_LENGTH,Printer::yLength); HAL::eprSetFloat(EPR_Z_LENGTH,Printer::zLength); #if NONLINEAR_SYSTEM HAL::eprSetFloat(EPR_DELTA_HORIZONTAL_RADIUS, Printer::radius0); #endif #if ENABLE_BACKLASH_COMPENSATION HAL::eprSetFloat(EPR_BACKLASH_X,Printer::backlashX); HAL::eprSetFloat(EPR_BACKLASH_Y,Printer::backlashY); HAL::eprSetFloat(EPR_BACKLASH_Z,Printer::backlashZ); #else HAL::eprSetFloat(EPR_BACKLASH_X,0); HAL::eprSetFloat(EPR_BACKLASH_Y,0); HAL::eprSetFloat(EPR_BACKLASH_Z,0); #endif #if FEATURE_AUTOLEVEL HAL::eprSetByte(EPR_AUTOLEVEL_ACTIVE,Printer::isAutolevelActive()); for(uint8_t i=0; i<9; i++) HAL::eprSetFloat(EPR_AUTOLEVEL_MATRIX + (((int)i) << 2),Printer::autolevelTransformation[i]); #endif // now the extruder for(uint8_t i=0; i<NUM_EXTRUDER; i++) { #if FEATURE_WATCHDOG HAL::pingWatchdog(); #endif // FEATURE_WATCHDOG int o=i*EEPROM_EXTRUDER_LENGTH+EEPROM_EXTRUDER_OFFSET; Extruder *e = &extruder[i]; HAL::eprSetFloat(o+EPR_EXTRUDER_STEPS_PER_MM,e->stepsPerMM); HAL::eprSetFloat(o+EPR_EXTRUDER_MAX_FEEDRATE,e->maxFeedrate); HAL::eprSetFloat(o+EPR_EXTRUDER_MAX_START_FEEDRATE,e->maxStartFeedrate); HAL::eprSetFloat(o+EPR_EXTRUDER_MAX_ACCELERATION,e->maxAcceleration); HAL::eprSetByte(o+EPR_EXTRUDER_HEAT_MANAGER,e->tempControl.heatManager); #if TEMP_PID HAL::eprSetByte(o+EPR_EXTRUDER_DRIVE_MAX,e->tempControl.pidDriveMax); HAL::eprSetByte(o+EPR_EXTRUDER_DRIVE_MIN,e->tempControl.pidDriveMin); HAL::eprSetFloat(o+EPR_EXTRUDER_PID_PGAIN,e->tempControl.pidPGain); HAL::eprSetFloat(o+EPR_EXTRUDER_PID_IGAIN,e->tempControl.pidIGain); HAL::eprSetFloat(o+EPR_EXTRUDER_PID_DGAIN,e->tempControl.pidDGain); HAL::eprSetByte(o+EPR_EXTRUDER_PID_MAX,e->tempControl.pidMax); #endif HAL::eprSetInt32(o+EPR_EXTRUDER_X_OFFSET,e->xOffset); HAL::eprSetInt32(o+EPR_EXTRUDER_Y_OFFSET,e->yOffset); HAL::eprSetInt16(o+EPR_EXTRUDER_WATCH_PERIOD,e->watchPeriod); #if RETRACT_DURING_HEATUP HAL::eprSetInt16(o+EPR_EXTRUDER_WAIT_RETRACT_TEMP,e->waitRetractTemperature); HAL::eprSetInt16(o+EPR_EXTRUDER_WAIT_RETRACT_UNITS,e->waitRetractUnits); #else HAL::eprSetInt16(o+EPR_EXTRUDER_WAIT_RETRACT_TEMP,EXT0_WAIT_RETRACT_TEMP); HAL::eprSetInt16(o+EPR_EXTRUDER_WAIT_RETRACT_UNITS,EXT0_WAIT_RETRACT_UNITS); #endif HAL::eprSetByte(o+EPR_EXTRUDER_COOLER_SPEED,e->coolerSpeed); #if USE_ADVANCE #if ENABLE_QUADRATIC_ADVANCE HAL::eprSetFloat(o+EPR_EXTRUDER_ADVANCE_K,e->advanceK); #else HAL::eprSetFloat(o+EPR_EXTRUDER_ADVANCE_K,0); #endif HAL::eprSetFloat(o+EPR_EXTRUDER_ADVANCE_L,e->advanceL); #else HAL::eprSetFloat(o+EPR_EXTRUDER_ADVANCE_K,0); HAL::eprSetFloat(o+EPR_EXTRUDER_ADVANCE_L,0); #endif } #if MIXING_EXTRUDER storeMixingRatios(false); #endif if(corrupted) { HAL::eprSetInt32(EPR_PRINTING_TIME,0); HAL::eprSetFloat(EPR_PRINTING_DISTANCE,0); initalizeUncached(); } // Save version and build checksum HAL::eprSetByte(EPR_VERSION,EEPROM_PROTOCOL_VERSION); HAL::eprSetByte(EPR_INTEGRITY_BYTE,computeChecksum()); #endif }
void EEPROM::restoreEEPROMSettingsFromConfiguration() { #if EEPROM_MODE != 0 baudrate = BAUDRATE; maxInactiveTime = MAX_INACTIVE_TIME*1000L; EEPROM::buselight = bool(CASE_LIGHT_DEFAULT_ON); EEPROM::bkeeplighton = bool(CASE_KEEP_LIGHT_DEFAULT_ON); UIDisplay::display_mode=CASE_DISPLAY_MODE_DEFAULT; HAL::enablesound = bool(CASE_SOUND_DEFAULT_ON); EEPROM::busesensor = bool(CASE_FILAMENT_SENSOR_DEFAULT_ON); EEPROM::btopsensor = bool(CASE_TOP_SENSOR_DEFAULT_ON); EEPROM::ftemp_ext_pla=UI_SET_PRESET_EXTRUDER_TEMP_PLA; EEPROM::ftemp_ext_abs=UI_SET_PRESET_EXTRUDER_TEMP_ABS; EEPROM::ftemp_bed_pla=UI_SET_PRESET_HEATED_BED_TEMP_PLA; EEPROM::ftemp_bed_abs=UI_SET_PRESET_HEATED_BED_TEMP_ABS; #if CASE_LIGHTS_PIN>=0 WRITE(CASE_LIGHTS_PIN, byte(EEPROM::buselight)); #endif // CASE_LIGHTS_PIN stepperInactiveTime = STEPPER_INACTIVE_TIME*1000L; Printer::axisStepsPerMM[X_AXIS] = XAXIS_STEPS_PER_MM; Printer::axisStepsPerMM[Y_AXIS] = YAXIS_STEPS_PER_MM; Printer::axisStepsPerMM[Z_AXIS] = ZAXIS_STEPS_PER_MM; Printer::axisStepsPerMM[E_AXIS] = 1; Printer::maxFeedrate[X_AXIS] = MAX_FEEDRATE_X; Printer::maxFeedrate[Y_AXIS] = MAX_FEEDRATE_Y; Printer::maxFeedrate[Z_AXIS] = MAX_FEEDRATE_Z; Printer::homingFeedrate[X_AXIS] = HOMING_FEEDRATE_X; Printer::homingFeedrate[Y_AXIS] = HOMING_FEEDRATE_Y; Printer::homingFeedrate[Z_AXIS] = HOMING_FEEDRATE_Z; Printer::maxJerk = MAX_JERK; #if DRIVE_SYSTEM != DELTA Printer::maxZJerk = MAX_ZJERK; #endif #if RAMP_ACCELERATION Printer::maxAccelerationMMPerSquareSecond[X_AXIS] = MAX_ACCELERATION_UNITS_PER_SQ_SECOND_X; Printer::maxAccelerationMMPerSquareSecond[Y_AXIS] = MAX_ACCELERATION_UNITS_PER_SQ_SECOND_Y; Printer::maxAccelerationMMPerSquareSecond[Z_AXIS] = MAX_ACCELERATION_UNITS_PER_SQ_SECOND_Z; Printer::maxTravelAccelerationMMPerSquareSecond[X_AXIS] = MAX_TRAVEL_ACCELERATION_UNITS_PER_SQ_SECOND_X; Printer::maxTravelAccelerationMMPerSquareSecond[Y_AXIS] = MAX_TRAVEL_ACCELERATION_UNITS_PER_SQ_SECOND_Y; Printer::maxTravelAccelerationMMPerSquareSecond[Z_AXIS] = MAX_TRAVEL_ACCELERATION_UNITS_PER_SQ_SECOND_Z; #endif #if HAVE_HEATED_BED heatedBedController.heatManager= HEATED_BED_HEAT_MANAGER; #if TEMP_PID heatedBedController.pidDriveMax = HEATED_BED_PID_INTEGRAL_DRIVE_MAX; heatedBedController.pidDriveMin = HEATED_BED_PID_INTEGRAL_DRIVE_MIN; heatedBedController.pidPGain = HEATED_BED_PID_PGAIN_OR_DEAD_TIME; heatedBedController.pidIGain = HEATED_BED_PID_IGAIN; heatedBedController.pidDGain = HEATED_BED_PID_DGAIN; heatedBedController.pidMax = HEATED_BED_PID_MAX; #endif #endif Printer::xLength = X_MAX_LENGTH; Printer::yLength = Y_MAX_LENGTH; Printer::zLength = Z_MAX_LENGTH; Printer::xMin = X_MIN_POS; Printer::yMin = Y_MIN_POS; Printer::zMin = Z_MIN_POS; #if ENABLE_BACKLASH_COMPENSATION Printer::backlashX = X_BACKLASH; Printer::backlashY = Y_BACKLASH; Printer::backlashZ = Z_BACKLASH; #endif Extruder *e; #if NUM_EXTRUDER>0 e = &extruder[0]; e->stepsPerMM = EXT0_STEPS_PER_MM; e->maxFeedrate = EXT0_MAX_FEEDRATE; e->maxStartFeedrate = EXT0_MAX_START_FEEDRATE; e->maxAcceleration = EXT0_MAX_ACCELERATION; e->tempControl.heatManager = EXT0_HEAT_MANAGER; #if TEMP_PID e->tempControl.pidDriveMax = EXT0_PID_INTEGRAL_DRIVE_MAX; e->tempControl.pidDriveMin = EXT0_PID_INTEGRAL_DRIVE_MIN; e->tempControl.pidPGain = EXT0_PID_PGAIN_OR_DEAD_TIME; e->tempControl.pidIGain = EXT0_PID_I; e->tempControl.pidDGain = EXT0_PID_D; e->tempControl.pidMax = EXT0_PID_MAX; #endif e->yOffset = EXT0_Y_OFFSET; e->xOffset = EXT0_X_OFFSET; e->watchPeriod = EXT0_WATCHPERIOD; #if RETRACT_DURING_HEATUP e->waitRetractTemperature = EXT0_WAIT_RETRACT_TEMP; e->waitRetractUnits = EXT0_WAIT_RETRACT_UNITS; #endif e->coolerSpeed = EXT0_EXTRUDER_COOLER_SPEED; #if USE_ADVANCE #if ENABLE_QUADRATIC_ADVANCE e->advanceK = EXT0_ADVANCE_K; #endif e->advanceL = EXT0_ADVANCE_L; #endif #endif // NUM_EXTRUDER>0 #if NUM_EXTRUDER>1 e = &extruder[1]; e->stepsPerMM = EXT1_STEPS_PER_MM; e->maxFeedrate = EXT1_MAX_FEEDRATE; e->maxStartFeedrate = EXT1_MAX_START_FEEDRATE; e->maxAcceleration = EXT1_MAX_ACCELERATION; e->tempControl.heatManager = EXT1_HEAT_MANAGER; #if TEMP_PID e->tempControl.pidDriveMax = EXT1_PID_INTEGRAL_DRIVE_MAX; e->tempControl.pidDriveMin = EXT1_PID_INTEGRAL_DRIVE_MIN; e->tempControl.pidPGain = EXT1_PID_PGAIN_OR_DEAD_TIME; e->tempControl.pidIGain = EXT1_PID_I; e->tempControl.pidDGain = EXT1_PID_D; e->tempControl.pidMax = EXT1_PID_MAX; #endif e->yOffset = EXT1_Y_OFFSET; e->xOffset = EXT1_X_OFFSET; e->watchPeriod = EXT1_WATCHPERIOD; #if RETRACT_DURING_HEATUP e->waitRetractTemperature = EXT1_WAIT_RETRACT_TEMP; e->waitRetractUnits = EXT1_WAIT_RETRACT_UNITS; #endif e->coolerSpeed = EXT1_EXTRUDER_COOLER_SPEED; #if USE_ADVANCE #if ENABLE_QUADRATIC_ADVANCE e->advanceK = EXT1_ADVANCE_K; #endif e->advanceL = EXT1_ADVANCE_L; #endif #endif // NUM_EXTRUDER > 1 #if NUM_EXTRUDER>2 e = &extruder[2]; e->stepsPerMM = EXT2_STEPS_PER_MM; e->maxFeedrate = EXT2_MAX_FEEDRATE; e->maxStartFeedrate = EXT2_MAX_START_FEEDRATE; e->maxAcceleration = EXT2_MAX_ACCELERATION; e->tempControl.heatManager = EXT2_HEAT_MANAGER; #if TEMP_PID e->tempControl.pidDriveMax = EXT2_PID_INTEGRAL_DRIVE_MAX; e->tempControl.pidDriveMin = EXT2_PID_INTEGRAL_DRIVE_MIN; e->tempControl.pidPGain = EXT2_PID_PGAIN_OR_DEAD_TIME; e->tempControl.pidIGain = EXT2_PID_I; e->tempControl.pidDGain = EXT2_PID_D; e->tempControl.pidMax = EXT2_PID_MAX; #endif e->yOffset = EXT2_Y_OFFSET; e->xOffset = EXT2_X_OFFSET; e->watchPeriod = EXT2_WATCHPERIOD; #if RETRACT_DURING_HEATUP e->waitRetractTemperature = EXT2_WAIT_RETRACT_TEMP; e->waitRetractUnits = EXT2_WAIT_RETRACT_UNITS; #endif e->coolerSpeed = EXT2_EXTRUDER_COOLER_SPEED; #if USE_ADVANCE #if ENABLE_QUADRATIC_ADVANCE e->advanceK = EXT2_ADVANCE_K; #endif e->advanceL = EXT2_ADVANCE_L; #endif #endif // NUM_EXTRUDER > 2 #if NUM_EXTRUDER>3 e = &extruder[3]; e->stepsPerMM = EXT3_STEPS_PER_MM; e->maxFeedrate = EXT3_MAX_FEEDRATE; e->maxStartFeedrate = EXT3_MAX_START_FEEDRATE; e->maxAcceleration = EXT3_MAX_ACCELERATION; e->tempControl.heatManager = EXT3_HEAT_MANAGER; #if TEMP_PID e->tempControl.pidDriveMax = EXT3_PID_INTEGRAL_DRIVE_MAX; e->tempControl.pidDriveMin = EXT3_PID_INTEGRAL_DRIVE_MIN; e->tempControl.pidPGain = EXT3_PID_PGAIN_OR_DEAD_TIME; e->tempControl.pidIGain = EXT3_PID_I; e->tempControl.pidDGain = EXT3_PID_D; e->tempControl.pidMax = EXT3_PID_MAX; #endif e->yOffset = EXT3_Y_OFFSET; e->xOffset = EXT3_X_OFFSET; e->watchPeriod = EXT3_WATCHPERIOD; #if RETRACT_DURING_HEATUP e->waitRetractTemperature = EXT3_WAIT_RETRACT_TEMP; e->waitRetractUnits = EXT3_WAIT_RETRACT_UNITS; #endif e->coolerSpeed = EXT3_EXTRUDER_COOLER_SPEED; #if USE_ADVANCE #if ENABLE_QUADRATIC_ADVANCE e->advanceK = EXT3_ADVANCE_K; #endif e->advanceL = EXT3_ADVANCE_L; #endif #endif // NUM_EXTRUDER > 3 #if NUM_EXTRUDER>4 e = &extruder[4]; e->stepsPerMM = EXT4_STEPS_PER_MM; e->maxFeedrate = EXT4_MAX_FEEDRATE; e->maxStartFeedrate = EXT4_MAX_START_FEEDRATE; e->maxAcceleration = EXT4_MAX_ACCELERATION; e->tempControl.heatManager = EXT4_HEAT_MANAGER; #if TEMP_PID e->tempControl.pidDriveMax = EXT4_PID_INTEGRAL_DRIVE_MAX; e->tempControl.pidDriveMin = EXT4_PID_INTEGRAL_DRIVE_MIN; e->tempControl.pidPGain = EXT4_PID_PGAIN_OR_DEAD_TIME; e->tempControl.pidIGain = EXT4_PID_I; e->tempControl.pidDGain = EXT4_PID_D; e->tempControl.pidMax = EXT4_PID_MAX; #endif e->yOffset = EXT4_Y_OFFSET; e->xOffset = EXT4_X_OFFSET; e->watchPeriod = EXT4_WATCHPERIOD; #if RETRACT_DURING_HEATUP e->waitRetractTemperature = EXT4_WAIT_RETRACT_TEMP; e->waitRetractUnits = EXT4_WAIT_RETRACT_UNITS; #endif e->coolerSpeed = EXT4_EXTRUDER_COOLER_SPEED; #if USE_ADVANCE #if ENABLE_QUADRATIC_ADVANCE e->advanceK = EXT4_ADVANCE_K; #endif e->advanceL = EXT4_ADVANCE_L; #endif #endif // NUM_EXTRUDER > 4 #if NUM_EXTRUDER>5 e = &extruder[5]; e->stepsPerMM = EXT5_STEPS_PER_MM; e->maxFeedrate = EXT5_MAX_FEEDRATE; e->maxStartFeedrate = EXT5_MAX_START_FEEDRATE; e->maxAcceleration = EXT5_MAX_ACCELERATION; e->tempControl.heatManager = EXT5_HEAT_MANAGER; #if TEMP_PID e->tempControl.pidDriveMax = EXT5_PID_INTEGRAL_DRIVE_MAX; e->tempControl.pidDriveMin = EXT5_PID_INTEGRAL_DRIVE_MIN; e->tempControl.pidPGain = EXT5_PID_PGAIN_OR_DEAD_TIME; e->tempControl.pidIGain = EXT5_PID_I; e->tempControl.pidDGain = EXT5_PID_D; e->tempControl.pidMax = EXT5_PID_MAX; #endif e->yOffset = EXT5_Y_OFFSET; e->xOffset = EXT5_X_OFFSET; e->watchPeriod = EXT5_WATCHPERIOD; #if RETRACT_DURING_HEATUP e->waitRetractTemperature = EXT5_WAIT_RETRACT_TEMP; e->waitRetractUnits = EXT5_WAIT_RETRACT_UNITS; #endif e->coolerSpeed = EXT5_EXTRUDER_COOLER_SPEED; #if USE_ADVANCE #if ENABLE_QUADRATIC_ADVANCE e->advanceK = EXT5_ADVANCE_K; #endif e->advanceL = EXT5_ADVANCE_L; #endif #endif // NUM_EXTRUDER > 5 #if FEATURE_AUTOLEVEL Printer::setAutolevelActive(false); Printer::resetTransformationMatrix(true); #endif #if MIXING_EXTRUDER restoreMixingRatios(); #endif initalizeUncached(); Printer::updateDerivedParameter(); Extruder::selectExtruderById(Extruder::current->id); Extruder::initHeatedBed(); Com::printInfoF(Com::tEPRConfigResetDefaults); #else Com::printErrorF(Com::tNoEEPROMSupport); #endif }