/** * Post-process after Retrieve or Reset */ void Config_Postprocess() { // steps per s2 needs to be updated to agree with units per s2 planner.reset_acceleration_rates(); #if MECH(DELTA) set_delta_constants(); #endif #if ENABLED(PIDTEMP) updatePID(); #endif calculate_volumetric_multipliers(); }
void Config_ResetDefault() { float tmp1[]=DEFAULT_AXIS_STEPS_PER_UNIT; float tmp2[]=DEFAULT_MAX_FEEDRATE; long tmp3[]=DEFAULT_MAX_ACCELERATION; for (short i=0;i<4;i++) { axis_steps_per_unit[i]=tmp1[i]; max_feedrate[i]=tmp2[i]; max_acceleration_units_per_sq_second[i]=tmp3[i]; } // steps per sq second need to be updated to agree with the units per sq second reset_acceleration_rates(); acceleration=DEFAULT_ACCELERATION; retract_acceleration=DEFAULT_RETRACT_ACCELERATION; minimumfeedrate=DEFAULT_MINIMUMFEEDRATE; minsegmenttime=DEFAULT_MINSEGMENTTIME; mintravelfeedrate=DEFAULT_MINTRAVELFEEDRATE; max_xy_jerk=DEFAULT_XYJERK; max_z_jerk=DEFAULT_ZJERK; max_e_jerk=DEFAULT_EJERK; add_homeing[0] = add_homeing[1] = add_homeing[2] = 0; #ifdef DELTA endstop_adj[0] = endstop_adj[1] = endstop_adj[2] = 0; delta_radius = DEFAULT_DELTA_RADIUS; delta_diagonal_rod = DEFAULT_DELTA_DIAGONAL_ROD; tower_adj[0] = tower_adj[1] = tower_adj[2] = tower_adj[3] = tower_adj[4] = tower_adj[5] = 0; max_pos[2] = MANUAL_Z_HOME_POS; delta_segments_per_second= DELTA_SEGMENTS_PER_SECOND; set_default_z_probe_offset(); set_delta_constants(); #endif #ifdef ULTIPANEL plaPreheatHotendTemp = PLA_PREHEAT_HOTEND_TEMP; plaPreheatHPBTemp = PLA_PREHEAT_HPB_TEMP; plaPreheatFanSpeed = PLA_PREHEAT_FAN_SPEED; absPreheatHotendTemp = ABS_PREHEAT_HOTEND_TEMP; absPreheatHPBTemp = ABS_PREHEAT_HPB_TEMP; absPreheatFanSpeed = ABS_PREHEAT_FAN_SPEED; #endif #ifdef ENABLE_AUTO_BED_LEVELING zprobe_zoffset = -Z_PROBE_OFFSET_FROM_EXTRUDER; #endif #ifdef DOGLCD lcd_contrast = DEFAULT_LCD_CONTRAST; #endif #ifdef PIDTEMP Kp = DEFAULT_Kp; Ki = scalePID_i(DEFAULT_Ki); Kd = scalePID_d(DEFAULT_Kd); // call updatePID (similar to when we have processed M301) updatePID(); #ifdef PID_ADD_EXTRUSION_RATE Kc = DEFAULT_Kc; #endif//PID_ADD_EXTRUSION_RATE #endif//PIDTEMP SERIAL_ECHO_START; SERIAL_ECHOLNPGM("Hardcoded Default Settings Loaded"); }
void Config_RetrieveSettings() { int i=EEPROM_OFFSET; char stored_ver[4]; char ver[4]=EEPROM_VERSION; EEPROM_READ_VAR(i,stored_ver); //read stored version // SERIAL_ECHOLN("Version: [" << ver << "] Stored version: [" << stored_ver << "]"); if (strncmp(ver,stored_ver,3) == 0) { // version number match EEPROM_READ_VAR(i,axis_steps_per_unit); EEPROM_READ_VAR(i,max_feedrate); EEPROM_READ_VAR(i,max_acceleration_units_per_sq_second); // steps per sq second need to be updated to agree with the units per sq second (as they are what is used in the planner) reset_acceleration_rates(); EEPROM_READ_VAR(i,acceleration); EEPROM_READ_VAR(i,retract_acceleration); EEPROM_READ_VAR(i,minimumfeedrate); EEPROM_READ_VAR(i,mintravelfeedrate); EEPROM_READ_VAR(i,minsegmenttime); EEPROM_READ_VAR(i,max_xy_jerk); EEPROM_READ_VAR(i,max_z_jerk); EEPROM_READ_VAR(i,max_e_jerk); EEPROM_READ_VAR(i,add_homeing); #ifdef DELTA EEPROM_READ_VAR(i,endstop_adj); EEPROM_READ_VAR(i,delta_radius); EEPROM_READ_VAR(i,delta_diagonal_rod); EEPROM_READ_VAR(i,max_pos); EEPROM_READ_VAR(i,tower_adj); EEPROM_READ_VAR(i,z_probe_offset); EEPROM_READ_VAR(i,delta_segments_per_second); // Update delta constants for updated delta_radius & tower_adj values set_delta_constants(); #endif #ifndef ULTIPANEL int plaPreheatHotendTemp, plaPreheatHPBTemp, plaPreheatFanSpeed; int absPreheatHotendTemp, absPreheatHPBTemp, absPreheatFanSpeed; #endif EEPROM_READ_VAR(i,plaPreheatHotendTemp); EEPROM_READ_VAR(i,plaPreheatHPBTemp); EEPROM_READ_VAR(i,plaPreheatFanSpeed); EEPROM_READ_VAR(i,absPreheatHotendTemp); EEPROM_READ_VAR(i,absPreheatHPBTemp); EEPROM_READ_VAR(i,absPreheatFanSpeed); EEPROM_READ_VAR(i,zprobe_zoffset); #ifndef PIDTEMP float Kp,Ki,Kd; #endif // do not need to scale PID values as the values in EEPROM are already scaled EEPROM_READ_VAR(i,Kp); EEPROM_READ_VAR(i,Ki); EEPROM_READ_VAR(i,Kd); #ifndef DOGLCD int lcd_contrast; #endif EEPROM_READ_VAR(i,lcd_contrast); // Call updatePID (similar to when we have processed M301) updatePID(); SERIAL_ECHO_START; SERIAL_ECHOLNPGM("Stored settings retrieved"); } else { Config_ResetDefault(); } #ifdef EEPROM_CHITCHAT Config_PrintSettings(); #endif }
/** * Reset Configuration Settings - M502 */ void Config_ResetDefault() { float tmp1[] = DEFAULT_AXIS_STEPS_PER_UNIT; float tmp2[] = DEFAULT_MAX_FEEDRATE; float tmp3[] = DEFAULT_MAX_ACCELERATION; float tmp4[] = DEFAULT_RETRACT_ACCELERATION; float tmp5[] = DEFAULT_EJERK; #if ENABLED(PIDTEMP) float tmp6[] = DEFAULT_Kp; float tmp7[] = DEFAULT_Ki; float tmp8[] = DEFAULT_Kd; float tmp9[] = DEFAULT_Kc; #endif // PIDTEMP #if ENABLED(HOTEND_OFFSET_X) && ENABLED(HOTEND_OFFSET_Y) && ENABLED(HOTEND_OFFSET_Z) float tmp10[] = HOTEND_OFFSET_X; float tmp11[] = HOTEND_OFFSET_Y; float tmp12[] = HOTEND_OFFSET_Z; #else float tmp10[] = {0}; float tmp11[] = {0}; float tmp12[] = {0}; #endif #if MB(ALLIGATOR) float tmp13[] = MOTOR_CURRENT; #endif for (int8_t i = 0; i < 3 + EXTRUDERS; i++) { short max_i; max_i = sizeof(tmp1) / sizeof(*tmp1); if(i < max_i) axis_steps_per_unit[i] = tmp1[i]; else axis_steps_per_unit[i] = tmp1[max_i - 1]; max_i = sizeof(tmp2) / sizeof(*tmp2); if(i < max_i) max_feedrate[i] = tmp2[i]; else max_feedrate[i] = tmp2[max_i - 1]; max_i = sizeof(tmp3) / sizeof(*tmp3); if(i < max_i) max_acceleration_units_per_sq_second[i] = tmp3[i]; else max_acceleration_units_per_sq_second[i] = tmp3[max_i - 1]; if(i < EXTRUDERS) { max_i = sizeof(tmp4) / sizeof(*tmp4); if(i < max_i) retract_acceleration[i] = tmp4[i]; else retract_acceleration[i] = tmp4[max_i - 1]; max_i = sizeof(tmp5) / sizeof(*tmp5); if(i < max_i) max_e_jerk[i] = tmp5[i]; else max_e_jerk[i] = tmp5[max_i - 1]; max_i = sizeof(tmp10) / sizeof(*tmp10); if(i < max_i) hotend_offset[X_AXIS][i] = tmp10[i]; else hotend_offset[X_AXIS][i] = 0; max_i = sizeof(tmp11) / sizeof(*tmp11); if(i < max_i) hotend_offset[Y_AXIS][i] = tmp11[i]; else hotend_offset[Y_AXIS][i] = 0; max_i = sizeof(tmp12) / sizeof(*tmp12); if(i < max_i) hotend_offset[Z_AXIS][i] = tmp12[i]; else hotend_offset[Z_AXIS][i] = 0; } #if MB(ALLIGATOR) max_i = sizeof(tmp13) / sizeof(*tmp13); if(i < max_i) motor_current[i] = tmp13[i]; else motor_current[i] = tmp13[max_i - 1]; #endif } #if MECH(SCARA) for (int8_t i = 0; i < NUM_AXIS; i++) { if (i < COUNT(axis_scaling)) axis_scaling[i] = 1; } #endif // steps per sq second need to be updated to agree with the units per sq second reset_acceleration_rates(); acceleration = DEFAULT_ACCELERATION; travel_acceleration = DEFAULT_TRAVEL_ACCELERATION; minimumfeedrate = DEFAULT_MINIMUMFEEDRATE; minsegmenttime = DEFAULT_MINSEGMENTTIME; mintravelfeedrate = DEFAULT_MINTRAVELFEEDRATE; max_xy_jerk = DEFAULT_XYJERK; max_z_jerk = DEFAULT_ZJERK; home_offset[X_AXIS] = home_offset[Y_AXIS] = home_offset[Z_AXIS] = 0; #if ENABLED(AUTO_BED_LEVELING_FEATURE) zprobe_zoffset = Z_PROBE_OFFSET_FROM_EXTRUDER; #elif !MECH(DELTA) zprobe_zoffset = 0; #endif #if MECH(DELTA) delta_radius = DEFAULT_DELTA_RADIUS; delta_diagonal_rod = DELTA_DIAGONAL_ROD; endstop_adj[0] = TOWER_A_ENDSTOP_ADJ; endstop_adj[1] = TOWER_B_ENDSTOP_ADJ; endstop_adj[2] = TOWER_C_ENDSTOP_ADJ; tower_adj[0] = TOWER_A_POSITION_ADJ; tower_adj[1] = TOWER_B_POSITION_ADJ; tower_adj[2] = TOWER_C_POSITION_ADJ; tower_adj[3] = TOWER_A_RADIUS_ADJ; tower_adj[4] = TOWER_B_RADIUS_ADJ; tower_adj[5] = TOWER_C_RADIUS_ADJ; diagrod_adj[0] = TOWER_A_DIAGROD_ADJ; diagrod_adj[1] = TOWER_B_DIAGROD_ADJ; diagrod_adj[2] = TOWER_C_DIAGROD_ADJ; z_probe_offset[0] = X_PROBE_OFFSET_FROM_EXTRUDER; z_probe_offset[1] = Y_PROBE_OFFSET_FROM_EXTRUDER; z_probe_offset[2] = Z_PROBE_OFFSET_FROM_EXTRUDER; set_delta_constants(); #endif #if ENABLED(ULTIPANEL) plaPreheatHotendTemp = PLA_PREHEAT_HOTEND_TEMP; plaPreheatHPBTemp = PLA_PREHEAT_HPB_TEMP; plaPreheatFanSpeed = PLA_PREHEAT_FAN_SPEED; absPreheatHotendTemp = ABS_PREHEAT_HOTEND_TEMP; absPreheatHPBTemp = ABS_PREHEAT_HPB_TEMP; absPreheatFanSpeed = ABS_PREHEAT_FAN_SPEED; gumPreheatHotendTemp = GUM_PREHEAT_HOTEND_TEMP; gumPreheatHPBTemp = GUM_PREHEAT_HPB_TEMP; gumPreheatFanSpeed = GUM_PREHEAT_FAN_SPEED; #endif #if HAS(LCD_CONTRAST) lcd_contrast = DEFAULT_LCD_CONTRAST; #endif #if ENABLED(PIDTEMP) for (int8_t h = 0; h < HOTENDS; h++) { Kp[h] = tmp6[h]; Ki[h] = scalePID_i(tmp7[h]); Kd[h] = scalePID_d(tmp8[h]); Kc[h] = tmp9[h]; } #if ENABLED(PID_ADD_EXTRUSION_RATE) lpq_len = 20; // default last-position-queue size #endif // call updatePID (similar to when we have processed M301) updatePID(); #endif // PIDTEMP #if ENABLED(PIDTEMPBED) bedKp = DEFAULT_bedKp; bedKi = scalePID_i(DEFAULT_bedKi); bedKd = scalePID_d(DEFAULT_bedKd); #endif #if ENABLED(FWRETRACT) autoretract_enabled = false; retract_length = RETRACT_LENGTH; #if EXTRUDERS > 1 retract_length_swap = RETRACT_LENGTH_SWAP; #endif retract_feedrate = RETRACT_FEEDRATE; retract_zlift = RETRACT_ZLIFT; retract_recover_length = RETRACT_RECOVER_LENGTH; #if EXTRUDERS > 1 retract_recover_length_swap = RETRACT_RECOVER_LENGTH_SWAP; #endif retract_recover_feedrate = RETRACT_RECOVER_FEEDRATE; #endif volumetric_enabled = false; calculate_volumetric_multipliers(); #if ENABLED(IDLE_OOZING_PREVENT) IDLE_OOZING_enabled = true; #endif ECHO_LM(DB, "Hardcoded Default Settings Loaded"); }
/** * Retrieve Configuration Settings - M501 */ void Config_RetrieveSettings() { int i = EEPROM_OFFSET; char stored_ver[7]; char ver[7] = EEPROM_VERSION; EEPROM_READ_VAR(i, stored_ver); // read stored version //ECHO_EM("Version: [" << ver << "] Stored version: [" << stored_ver << "]"); if (strncmp(ver, stored_ver, 6) != 0) { Config_ResetDefault(); } else { float dummy = 0; // version number match EEPROM_READ_VAR(i, axis_steps_per_unit); EEPROM_READ_VAR(i, max_feedrate); EEPROM_READ_VAR(i, max_acceleration_units_per_sq_second); // steps per sq second need to be updated to agree with the units per sq second (as they are what is used in the planner) reset_acceleration_rates(); EEPROM_READ_VAR(i, acceleration); EEPROM_READ_VAR(i, retract_acceleration); EEPROM_READ_VAR(i, travel_acceleration); EEPROM_READ_VAR(i, minimumfeedrate); EEPROM_READ_VAR(i, mintravelfeedrate); EEPROM_READ_VAR(i, minsegmenttime); EEPROM_READ_VAR(i, max_xy_jerk); EEPROM_READ_VAR(i, max_z_jerk); EEPROM_READ_VAR(i, max_e_jerk); EEPROM_READ_VAR(i, home_offset); EEPROM_READ_VAR(i, hotend_offset); #if !MECH(DELTA) EEPROM_READ_VAR(i, zprobe_zoffset); #endif #if HEATER_USES_AD595 EEPROM_READ_VAR(i, ad595_offset); EEPROM_READ_VAR(i, ad595_gain); for (int8_t h = 0; h < HOTENDS; h++) if (ad595_gain[h] == 0) ad595_gain[h] == TEMP_SENSOR_AD595_GAIN; #endif #if MECH(DELTA) EEPROM_READ_VAR(i, endstop_adj); EEPROM_READ_VAR(i, delta_radius); EEPROM_READ_VAR(i, delta_diagonal_rod); EEPROM_READ_VAR(i, sw_endstop_max); EEPROM_READ_VAR(i, tower_adj); EEPROM_READ_VAR(i, diagrod_adj); EEPROM_READ_VAR(i, z_probe_offset); // Update delta constants for updated delta_radius & tower_adj values set_delta_constants(); #endif //DELTA #if DISABLED(ULTIPANEL) int plaPreheatHotendTemp, plaPreheatHPBTemp, plaPreheatFanSpeed, absPreheatHotendTemp, absPreheatHPBTemp, absPreheatFanSpeed, gumPreheatHotendTemp, gumPreheatHPBTemp, gumPreheatFanSpeed; #endif EEPROM_READ_VAR(i, plaPreheatHotendTemp); EEPROM_READ_VAR(i, plaPreheatHPBTemp); EEPROM_READ_VAR(i, plaPreheatFanSpeed); EEPROM_READ_VAR(i, absPreheatHotendTemp); EEPROM_READ_VAR(i, absPreheatHPBTemp); EEPROM_READ_VAR(i, absPreheatFanSpeed); EEPROM_READ_VAR(i, gumPreheatHotendTemp); EEPROM_READ_VAR(i, gumPreheatHPBTemp); EEPROM_READ_VAR(i, gumPreheatFanSpeed); #if ENABLED(PIDTEMP) for (int8_t h = 0; h < HOTENDS; h++) { EEPROM_READ_VAR(i, PID_PARAM(Kp, h)); EEPROM_READ_VAR(i, PID_PARAM(Ki, h)); EEPROM_READ_VAR(i, PID_PARAM(Kd, h)); EEPROM_READ_VAR(i, PID_PARAM(Kc, h)); } #endif // PIDTEMP #if DISABLED(PID_ADD_EXTRUSION_RATE) int lpq_len; #endif EEPROM_READ_VAR(i, lpq_len); #if ENABLED(PIDTEMPBED) EEPROM_READ_VAR(i, bedKp); EEPROM_READ_VAR(i, bedKi); EEPROM_READ_VAR(i, bedKd); #endif #if HASNT(LCD_CONTRAST) int lcd_contrast; #endif EEPROM_READ_VAR(i, lcd_contrast); #if MECH(SCARA) EEPROM_READ_VAR(i, axis_scaling); // 3 floats #endif #if ENABLED(FWRETRACT) EEPROM_READ_VAR(i, autoretract_enabled); EEPROM_READ_VAR(i, retract_length); #if EXTRUDERS > 1 EEPROM_READ_VAR(i, retract_length_swap); #else EEPROM_READ_VAR(i, dummy); #endif EEPROM_READ_VAR(i, retract_feedrate); EEPROM_READ_VAR(i, retract_zlift); EEPROM_READ_VAR(i, retract_recover_length); #if EXTRUDERS > 1 EEPROM_READ_VAR(i, retract_recover_length_swap); #else EEPROM_READ_VAR(i, dummy); #endif EEPROM_READ_VAR(i, retract_recover_feedrate); #endif // FWRETRACT EEPROM_READ_VAR(i, volumetric_enabled); for (int8_t e = 0; e < EXTRUDERS; e++) EEPROM_READ_VAR(i, filament_size[e]); calculate_volumetric_multipliers(); #if ENABLED(IDLE_OOZING_PREVENT) EEPROM_READ_VAR(i, IDLE_OOZING_enabled); #endif #if MB(ALLIGATOR) EEPROM_READ_VAR(i, motor_current); #endif // Call updatePID (similar to when we have processed M301) updatePID(); // Report settings retrieved and length ECHO_SV(DB, ver); ECHO_MV(" stored settings retrieved (", (unsigned long)i); ECHO_EM(" bytes)"); } #if ENABLED(EEPROM_CHITCHAT) Config_PrintSettings(); #endif }