Merge remote-tracking branch 'upstream/MK3' into MK3-new_lang

This commit is contained in:
Robert Pelnar 2018-06-01 00:43:16 +02:00
commit 5a2b056d47
13 changed files with 350 additions and 322 deletions

View File

@ -437,6 +437,7 @@ void force_high_power_mode(bool start_high_power_section);
#endif //TMC2130 #endif //TMC2130
// G-codes // G-codes
void gcode_G28(bool home_x, bool home_y, bool home_z, bool calib);
bool gcode_M45(bool onlyZ, int8_t verbosity_level); bool gcode_M45(bool onlyZ, int8_t verbosity_level);
void gcode_M114(); void gcode_M114();
void gcode_M701(); void gcode_M701();

View File

@ -131,7 +131,7 @@ class MarlinSerial //: public Stream
if (M_UCSRxA & (1<<M_FEx)) { if (M_UCSRxA & (1<<M_FEx)) {
// Characters received with the framing errors will be ignored. // Characters received with the framing errors will be ignored.
// The temporary variable "c" was made volatile, so the compiler does not optimize this out. // The temporary variable "c" was made volatile, so the compiler does not optimize this out.
volatile unsigned char c = M_UDRx; (void)(*(char *)M_UDRx);
} else { } else {
unsigned char c = M_UDRx; unsigned char c = M_UDRx;
int i = (unsigned int)(rx_buffer.head + 1) % RX_BUFFER_SIZE; int i = (unsigned int)(rx_buffer.head + 1) % RX_BUFFER_SIZE;
@ -155,7 +155,7 @@ class MarlinSerial //: public Stream
if (UCSR1A & (1<<FE1)) { if (UCSR1A & (1<<FE1)) {
// Characters received with the framing errors will be ignored. // Characters received with the framing errors will be ignored.
// The temporary variable "c" was made volatile, so the compiler does not optimize this out. // The temporary variable "c" was made volatile, so the compiler does not optimize this out.
volatile unsigned char c = UDR1; (void)(*(char *)UDR1);
} else { } else {
unsigned char c = UDR1; unsigned char c = UDR1;
int i = (unsigned int)(rx_buffer.head + 1) % RX_BUFFER_SIZE; int i = (unsigned int)(rx_buffer.head + 1) % RX_BUFFER_SIZE;

View File

@ -1034,7 +1034,7 @@ void setup()
stdout = uartout; stdout = uartout;
SERIAL_PROTOCOLLNPGM("start"); SERIAL_PROTOCOLLNPGM("start");
SERIAL_ECHO_START; SERIAL_ECHO_START;
printf_P(PSTR(" "FW_VERSION_FULL"\n")); printf_P(PSTR(" " FW_VERSION_FULL "\n"));
#if 0 #if 0
SERIAL_ECHOLN("Reading eeprom from 0 to 100: start"); SERIAL_ECHOLN("Reading eeprom from 0 to 100: start");
@ -1282,7 +1282,7 @@ void setup()
} }
else else
printf_P(PSTR("Card NG!\n")); printf_P(PSTR("Card NG!\n"));
#endif DEBUG_SD_SPEED_TEST #endif //DEBUG_SD_SPEED_TEST
if (eeprom_read_byte((uint8_t*)EEPROM_POWER_COUNT) == 0xff) eeprom_write_byte((uint8_t*)EEPROM_POWER_COUNT, 0); if (eeprom_read_byte((uint8_t*)EEPROM_POWER_COUNT) == 0xff) eeprom_write_byte((uint8_t*)EEPROM_POWER_COUNT, 0);
if (eeprom_read_byte((uint8_t*)EEPROM_CRASH_COUNT_X) == 0xff) eeprom_write_byte((uint8_t*)EEPROM_CRASH_COUNT_X, 0); if (eeprom_read_byte((uint8_t*)EEPROM_CRASH_COUNT_X) == 0xff) eeprom_write_byte((uint8_t*)EEPROM_CRASH_COUNT_X, 0);
@ -2116,6 +2116,9 @@ void homeaxis(int axis, uint8_t cnt, uint8_t* pstep)
} }
else if ((axis==Z_AXIS)?HOMEAXIS_DO(Z):0) else if ((axis==Z_AXIS)?HOMEAXIS_DO(Z):0)
{ {
#ifdef TMC2130
FORCE_HIGH_POWER_START;
#endif
int axis_home_dir = home_dir(axis); int axis_home_dir = home_dir(axis);
current_position[axis] = 0; current_position[axis] = 0;
plan_set_position(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS]); plan_set_position(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS]);
@ -2124,7 +2127,11 @@ void homeaxis(int axis, uint8_t cnt, uint8_t* pstep)
plan_buffer_line(destination[X_AXIS], destination[Y_AXIS], destination[Z_AXIS], destination[E_AXIS], feedrate/60, active_extruder); plan_buffer_line(destination[X_AXIS], destination[Y_AXIS], destination[Z_AXIS], destination[E_AXIS], feedrate/60, active_extruder);
st_synchronize(); st_synchronize();
#ifdef TMC2130 #ifdef TMC2130
if ((tmc2130_mode == TMC2130_MODE_NORMAL) && (READ(Z_TMC2130_DIAG) != 0)) return; //Z crash if (READ(Z_TMC2130_DIAG) != 0) { //Z crash
FORCE_HIGH_POWER_END;
kill(MSG_BED_LEVELING_FAILED_POINT_LOW);
return;
}
#endif //TMC2130 #endif //TMC2130
current_position[axis] = 0; current_position[axis] = 0;
plan_set_position(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS]); plan_set_position(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS]);
@ -2136,13 +2143,20 @@ void homeaxis(int axis, uint8_t cnt, uint8_t* pstep)
plan_buffer_line(destination[X_AXIS], destination[Y_AXIS], destination[Z_AXIS], destination[E_AXIS], feedrate/60, active_extruder); plan_buffer_line(destination[X_AXIS], destination[Y_AXIS], destination[Z_AXIS], destination[E_AXIS], feedrate/60, active_extruder);
st_synchronize(); st_synchronize();
#ifdef TMC2130 #ifdef TMC2130
if ((tmc2130_mode == TMC2130_MODE_NORMAL) && (READ(Z_TMC2130_DIAG) != 0)) return; //Z crash if (READ(Z_TMC2130_DIAG) != 0) { //Z crash
FORCE_HIGH_POWER_END;
kill(MSG_BED_LEVELING_FAILED_POINT_LOW);
return;
}
#endif //TMC2130 #endif //TMC2130
axis_is_at_home(axis); axis_is_at_home(axis);
destination[axis] = current_position[axis]; destination[axis] = current_position[axis];
feedrate = 0.0; feedrate = 0.0;
endstops_hit_on_purpose(); endstops_hit_on_purpose();
axis_known_position[axis] = true; axis_known_position[axis] = true;
#ifdef TMC2130
FORCE_HIGH_POWER_END;
#endif
} }
enable_endstops(endstops_enabled); enable_endstops(endstops_enabled);
} }
@ -2308,6 +2322,281 @@ void force_high_power_mode(bool start_high_power_section) {
} }
#endif //TMC2130 #endif //TMC2130
void gcode_G28(bool home_x, bool home_y, bool home_z, bool calib){
st_synchronize();
#if 0
SERIAL_ECHOPGM("G28, initial "); print_world_coordinates();
SERIAL_ECHOPGM("G28, initial "); print_physical_coordinates();
#endif
// Flag for the display update routine and to disable the print cancelation during homing.
homing_flag = true;
// Either all X,Y,Z codes are present, or none of them.
bool home_all_axes = home_x == home_y && home_x == home_z;
if (home_all_axes)
// No X/Y/Z code provided means to home all axes.
home_x = home_y = home_z = true;
#ifdef ENABLE_AUTO_BED_LEVELING
plan_bed_level_matrix.set_to_identity(); //Reset the plane ("erase" all leveling data)
#endif //ENABLE_AUTO_BED_LEVELING
// Reset world2machine_rotation_and_skew and world2machine_shift, therefore
// the planner will not perform any adjustments in the XY plane.
// Wait for the motors to stop and update the current position with the absolute values.
world2machine_revert_to_uncorrected();
// For mesh bed leveling deactivate the matrix temporarily.
// It is necessary to disable the bed leveling for the X and Y homing moves, so that the move is performed
// in a single axis only.
// In case of re-homing the X or Y axes only, the mesh bed leveling is restored after G28.
#ifdef MESH_BED_LEVELING
uint8_t mbl_was_active = mbl.active;
mbl.active = 0;
current_position[Z_AXIS] = st_get_position_mm(Z_AXIS);
#endif
// Reset baby stepping to zero, if the babystepping has already been loaded before. The babystepsTodo value will be
// consumed during the first movements following this statement.
if (home_z)
babystep_undo();
saved_feedrate = feedrate;
saved_feedmultiply = feedmultiply;
feedmultiply = 100;
previous_millis_cmd = millis();
enable_endstops(true);
memcpy(destination, current_position, sizeof(destination));
feedrate = 0.0;
#if Z_HOME_DIR > 0 // If homing away from BED do Z first
if(home_z)
homeaxis(Z_AXIS);
#endif
#ifdef QUICK_HOME
// In the quick mode, if both x and y are to be homed, a diagonal move will be performed initially.
if(home_x && home_y) //first diagonal move
{
current_position[X_AXIS] = 0;current_position[Y_AXIS] = 0;
int x_axis_home_dir = home_dir(X_AXIS);
plan_set_position(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS]);
destination[X_AXIS] = 1.5 * max_length(X_AXIS) * x_axis_home_dir;destination[Y_AXIS] = 1.5 * max_length(Y_AXIS) * home_dir(Y_AXIS);
feedrate = homing_feedrate[X_AXIS];
if(homing_feedrate[Y_AXIS]<feedrate)
feedrate = homing_feedrate[Y_AXIS];
if (max_length(X_AXIS) > max_length(Y_AXIS)) {
feedrate *= sqrt(pow(max_length(Y_AXIS) / max_length(X_AXIS), 2) + 1);
} else {
feedrate *= sqrt(pow(max_length(X_AXIS) / max_length(Y_AXIS), 2) + 1);
}
plan_buffer_line(destination[X_AXIS], destination[Y_AXIS], destination[Z_AXIS], destination[E_AXIS], feedrate/60, active_extruder);
st_synchronize();
axis_is_at_home(X_AXIS);
axis_is_at_home(Y_AXIS);
plan_set_position(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS]);
destination[X_AXIS] = current_position[X_AXIS];
destination[Y_AXIS] = current_position[Y_AXIS];
plan_buffer_line(destination[X_AXIS], destination[Y_AXIS], destination[Z_AXIS], destination[E_AXIS], feedrate/60, active_extruder);
feedrate = 0.0;
st_synchronize();
endstops_hit_on_purpose();
current_position[X_AXIS] = destination[X_AXIS];
current_position[Y_AXIS] = destination[Y_AXIS];
current_position[Z_AXIS] = destination[Z_AXIS];
}
#endif /* QUICK_HOME */
#ifdef TMC2130
if(home_x)
{
if (!calib)
homeaxis(X_AXIS);
else
tmc2130_home_calibrate(X_AXIS);
}
if(home_y)
{
if (!calib)
homeaxis(Y_AXIS);
else
tmc2130_home_calibrate(Y_AXIS);
}
#endif //TMC2130
if(code_seen(axis_codes[X_AXIS]) && code_value_long() != 0)
current_position[X_AXIS]=code_value()+add_homing[X_AXIS];
if(code_seen(axis_codes[Y_AXIS]) && code_value_long() != 0)
current_position[Y_AXIS]=code_value()+add_homing[Y_AXIS];
#if Z_HOME_DIR < 0 // If homing towards BED do Z last
#ifndef Z_SAFE_HOMING
if(home_z) {
#if defined (Z_RAISE_BEFORE_HOMING) && (Z_RAISE_BEFORE_HOMING > 0)
destination[Z_AXIS] = Z_RAISE_BEFORE_HOMING * home_dir(Z_AXIS) * (-1); // Set destination away from bed
feedrate = max_feedrate[Z_AXIS];
plan_buffer_line(destination[X_AXIS], destination[Y_AXIS], destination[Z_AXIS], destination[E_AXIS], feedrate, active_extruder);
st_synchronize();
#endif // defined (Z_RAISE_BEFORE_HOMING) && (Z_RAISE_BEFORE_HOMING > 0)
#if (defined(MESH_BED_LEVELING) && !defined(MK1BP)) // If Mesh bed leveling, move X&Y to safe position for home
if (!(axis_known_position[X_AXIS] && axis_known_position[Y_AXIS] ))
{
homeaxis(X_AXIS);
homeaxis(Y_AXIS);
}
// 1st mesh bed leveling measurement point, corrected.
world2machine_initialize();
world2machine(pgm_read_float(bed_ref_points_4), pgm_read_float(bed_ref_points_4+1), destination[X_AXIS], destination[Y_AXIS]);
world2machine_reset();
if (destination[Y_AXIS] < Y_MIN_POS)
destination[Y_AXIS] = Y_MIN_POS;
destination[Z_AXIS] = MESH_HOME_Z_SEARCH; // Set destination away from bed
feedrate = homing_feedrate[Z_AXIS]/10;
current_position[Z_AXIS] = 0;
enable_endstops(false);
#ifdef DEBUG_BUILD
SERIAL_ECHOLNPGM("plan_set_position()");
MYSERIAL.println(current_position[X_AXIS]);MYSERIAL.println(current_position[Y_AXIS]);
MYSERIAL.println(current_position[Z_AXIS]);MYSERIAL.println(current_position[E_AXIS]);
#endif
plan_set_position(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS]);
#ifdef DEBUG_BUILD
SERIAL_ECHOLNPGM("plan_buffer_line()");
MYSERIAL.println(destination[X_AXIS]);MYSERIAL.println(destination[Y_AXIS]);
MYSERIAL.println(destination[Z_AXIS]);MYSERIAL.println(destination[E_AXIS]);
MYSERIAL.println(feedrate);MYSERIAL.println(active_extruder);
#endif
plan_buffer_line(destination[X_AXIS], destination[Y_AXIS], destination[Z_AXIS], destination[E_AXIS], feedrate, active_extruder);
st_synchronize();
current_position[X_AXIS] = destination[X_AXIS];
current_position[Y_AXIS] = destination[Y_AXIS];
enable_endstops(true);
endstops_hit_on_purpose();
homeaxis(Z_AXIS);
#else // MESH_BED_LEVELING
homeaxis(Z_AXIS);
#endif // MESH_BED_LEVELING
}
#else // defined(Z_SAFE_HOMING): Z Safe mode activated.
if(home_all_axes) {
destination[X_AXIS] = round(Z_SAFE_HOMING_X_POINT - X_PROBE_OFFSET_FROM_EXTRUDER);
destination[Y_AXIS] = round(Z_SAFE_HOMING_Y_POINT - Y_PROBE_OFFSET_FROM_EXTRUDER);
destination[Z_AXIS] = Z_RAISE_BEFORE_HOMING * home_dir(Z_AXIS) * (-1); // Set destination away from bed
feedrate = XY_TRAVEL_SPEED/60;
current_position[Z_AXIS] = 0;
plan_set_position(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS]);
plan_buffer_line(destination[X_AXIS], destination[Y_AXIS], destination[Z_AXIS], destination[E_AXIS], feedrate, active_extruder);
st_synchronize();
current_position[X_AXIS] = destination[X_AXIS];
current_position[Y_AXIS] = destination[Y_AXIS];
homeaxis(Z_AXIS);
}
// Let's see if X and Y are homed and probe is inside bed area.
if(home_z) {
if ( (axis_known_position[X_AXIS]) && (axis_known_position[Y_AXIS]) \
&& (current_position[X_AXIS]+X_PROBE_OFFSET_FROM_EXTRUDER >= X_MIN_POS) \
&& (current_position[X_AXIS]+X_PROBE_OFFSET_FROM_EXTRUDER <= X_MAX_POS) \
&& (current_position[Y_AXIS]+Y_PROBE_OFFSET_FROM_EXTRUDER >= Y_MIN_POS) \
&& (current_position[Y_AXIS]+Y_PROBE_OFFSET_FROM_EXTRUDER <= Y_MAX_POS)) {
current_position[Z_AXIS] = 0;
plan_set_position(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS]);
destination[Z_AXIS] = Z_RAISE_BEFORE_HOMING * home_dir(Z_AXIS) * (-1); // Set destination away from bed
feedrate = max_feedrate[Z_AXIS];
plan_buffer_line(destination[X_AXIS], destination[Y_AXIS], destination[Z_AXIS], destination[E_AXIS], feedrate, active_extruder);
st_synchronize();
homeaxis(Z_AXIS);
} else if (!((axis_known_position[X_AXIS]) && (axis_known_position[Y_AXIS]))) {
LCD_MESSAGERPGM(MSG_POSITION_UNKNOWN);
SERIAL_ECHO_START;
SERIAL_ECHOLNRPGM(MSG_POSITION_UNKNOWN);
} else {
LCD_MESSAGERPGM(MSG_ZPROBE_OUT);
SERIAL_ECHO_START;
SERIAL_ECHOLNRPGM(MSG_ZPROBE_OUT);
}
}
#endif // Z_SAFE_HOMING
#endif // Z_HOME_DIR < 0
if(code_seen(axis_codes[Z_AXIS]) && code_value_long() != 0)
current_position[Z_AXIS]=code_value()+add_homing[Z_AXIS];
#ifdef ENABLE_AUTO_BED_LEVELING
if(home_z)
current_position[Z_AXIS] += zprobe_zoffset; //Add Z_Probe offset (the distance is negative)
#endif
// Set the planner and stepper routine positions.
// At this point the mesh bed leveling and world2machine corrections are disabled and current_position
// contains the machine coordinates.
plan_set_position(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS]);
#ifdef ENDSTOPS_ONLY_FOR_HOMING
enable_endstops(false);
#endif
feedrate = saved_feedrate;
feedmultiply = saved_feedmultiply;
previous_millis_cmd = millis();
endstops_hit_on_purpose();
#ifndef MESH_BED_LEVELING
// If MESH_BED_LEVELING is not active, then it is the original Prusa i3.
// Offer the user to load the baby step value, which has been adjusted at the previous print session.
if(card.sdprinting && eeprom_read_word((uint16_t *)EEPROM_BABYSTEP_Z))
lcd_adjust_z();
#endif
// Load the machine correction matrix
world2machine_initialize();
// and correct the current_position XY axes to match the transformed coordinate system.
world2machine_update_current();
#if (defined(MESH_BED_LEVELING) && !defined(MK1BP))
if (code_seen(axis_codes[X_AXIS]) || code_seen(axis_codes[Y_AXIS]) || code_seen('W') || code_seen(axis_codes[Z_AXIS]))
{
if (! home_z && mbl_was_active) {
// Re-enable the mesh bed leveling if only the X and Y axes were re-homed.
mbl.active = true;
// and re-adjust the current logical Z axis with the bed leveling offset applicable at the current XY position.
current_position[Z_AXIS] -= mbl.get_z(st_get_position_mm(X_AXIS), st_get_position_mm(Y_AXIS));
}
}
else
{
st_synchronize();
homing_flag = false;
// Push the commands to the front of the message queue in the reverse order!
// There shall be always enough space reserved for these commands.
enquecommand_front_P((PSTR("G80")));
//goto case_G80;
}
#endif
if (farm_mode) { prusa_statistics(20); };
homing_flag = false;
#if 0
SERIAL_ECHOPGM("G28, final "); print_world_coordinates();
SERIAL_ECHOPGM("G28, final "); print_physical_coordinates();
SERIAL_ECHOPGM("G28, final "); print_mesh_bed_leveling_table();
#endif
}
bool gcode_M45(bool onlyZ, int8_t verbosity_level) bool gcode_M45(bool onlyZ, int8_t verbosity_level)
{ {
bool final_result = false; bool final_result = false;
@ -3014,284 +3303,16 @@ void process_commands()
#endif //FWRETRACT #endif //FWRETRACT
case 28: //G28 Home all Axis one at a time case 28: //G28 Home all Axis one at a time
{ {
st_synchronize();
#if 0
SERIAL_ECHOPGM("G28, initial "); print_world_coordinates();
SERIAL_ECHOPGM("G28, initial "); print_physical_coordinates();
#endif
// Flag for the display update routine and to disable the print cancelation during homing.
homing_flag = true;
// Which axes should be homed? // Which axes should be homed?
bool home_x = code_seen(axis_codes[X_AXIS]); bool home_x = code_seen(axis_codes[X_AXIS]);
bool home_y = code_seen(axis_codes[Y_AXIS]); bool home_y = code_seen(axis_codes[Y_AXIS]);
bool home_z = code_seen(axis_codes[Z_AXIS]); bool home_z = code_seen(axis_codes[Z_AXIS]);
// calibrate? // calibrate?
bool calib = code_seen('C'); bool calib = code_seen('C');
// Either all X,Y,Z codes are present, or none of them.
bool home_all_axes = home_x == home_y && home_x == home_z;
if (home_all_axes)
// No X/Y/Z code provided means to home all axes.
home_x = home_y = home_z = true;
#ifdef ENABLE_AUTO_BED_LEVELING gcode_G28(home_x, home_y, home_z, calib);
plan_bed_level_matrix.set_to_identity(); //Reset the plane ("erase" all leveling data)
#endif //ENABLE_AUTO_BED_LEVELING break;
// Reset world2machine_rotation_and_skew and world2machine_shift, therefore
// the planner will not perform any adjustments in the XY plane.
// Wait for the motors to stop and update the current position with the absolute values.
world2machine_revert_to_uncorrected();
// For mesh bed leveling deactivate the matrix temporarily.
// It is necessary to disable the bed leveling for the X and Y homing moves, so that the move is performed
// in a single axis only.
// In case of re-homing the X or Y axes only, the mesh bed leveling is restored after G28.
#ifdef MESH_BED_LEVELING
uint8_t mbl_was_active = mbl.active;
mbl.active = 0;
current_position[Z_AXIS] = st_get_position_mm(Z_AXIS);
#endif
// Reset baby stepping to zero, if the babystepping has already been loaded before. The babystepsTodo value will be
// consumed during the first movements following this statement.
if (home_z)
babystep_undo();
saved_feedrate = feedrate;
saved_feedmultiply = feedmultiply;
feedmultiply = 100;
previous_millis_cmd = millis();
enable_endstops(true);
memcpy(destination, current_position, sizeof(destination));
feedrate = 0.0;
#if Z_HOME_DIR > 0 // If homing away from BED do Z first
if(home_z)
homeaxis(Z_AXIS);
#endif
#ifdef QUICK_HOME
// In the quick mode, if both x and y are to be homed, a diagonal move will be performed initially.
if(home_x && home_y) //first diagonal move
{
current_position[X_AXIS] = 0;current_position[Y_AXIS] = 0;
int x_axis_home_dir = home_dir(X_AXIS);
plan_set_position(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS]);
destination[X_AXIS] = 1.5 * max_length(X_AXIS) * x_axis_home_dir;destination[Y_AXIS] = 1.5 * max_length(Y_AXIS) * home_dir(Y_AXIS);
feedrate = homing_feedrate[X_AXIS];
if(homing_feedrate[Y_AXIS]<feedrate)
feedrate = homing_feedrate[Y_AXIS];
if (max_length(X_AXIS) > max_length(Y_AXIS)) {
feedrate *= sqrt(pow(max_length(Y_AXIS) / max_length(X_AXIS), 2) + 1);
} else {
feedrate *= sqrt(pow(max_length(X_AXIS) / max_length(Y_AXIS), 2) + 1);
}
plan_buffer_line(destination[X_AXIS], destination[Y_AXIS], destination[Z_AXIS], destination[E_AXIS], feedrate/60, active_extruder);
st_synchronize();
axis_is_at_home(X_AXIS);
axis_is_at_home(Y_AXIS);
plan_set_position(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS]);
destination[X_AXIS] = current_position[X_AXIS];
destination[Y_AXIS] = current_position[Y_AXIS];
plan_buffer_line(destination[X_AXIS], destination[Y_AXIS], destination[Z_AXIS], destination[E_AXIS], feedrate/60, active_extruder);
feedrate = 0.0;
st_synchronize();
endstops_hit_on_purpose();
current_position[X_AXIS] = destination[X_AXIS];
current_position[Y_AXIS] = destination[Y_AXIS];
current_position[Z_AXIS] = destination[Z_AXIS];
}
#endif /* QUICK_HOME */
#ifdef TMC2130
if(home_x)
{
if (!calib)
homeaxis(X_AXIS);
else
tmc2130_home_calibrate(X_AXIS);
}
if(home_y)
{
if (!calib)
homeaxis(Y_AXIS);
else
tmc2130_home_calibrate(Y_AXIS);
}
#endif //TMC2130
if(code_seen(axis_codes[X_AXIS]) && code_value_long() != 0)
current_position[X_AXIS]=code_value()+add_homing[X_AXIS];
if(code_seen(axis_codes[Y_AXIS]) && code_value_long() != 0)
current_position[Y_AXIS]=code_value()+add_homing[Y_AXIS];
#if Z_HOME_DIR < 0 // If homing towards BED do Z last
#ifndef Z_SAFE_HOMING
if(home_z) {
#if defined (Z_RAISE_BEFORE_HOMING) && (Z_RAISE_BEFORE_HOMING > 0)
destination[Z_AXIS] = Z_RAISE_BEFORE_HOMING * home_dir(Z_AXIS) * (-1); // Set destination away from bed
feedrate = max_feedrate[Z_AXIS];
plan_buffer_line(destination[X_AXIS], destination[Y_AXIS], destination[Z_AXIS], destination[E_AXIS], feedrate, active_extruder);
st_synchronize();
#endif // defined (Z_RAISE_BEFORE_HOMING) && (Z_RAISE_BEFORE_HOMING > 0)
#if (defined(MESH_BED_LEVELING) && !defined(MK1BP)) // If Mesh bed leveling, moxve X&Y to safe position for home
if (!(axis_known_position[X_AXIS] && axis_known_position[Y_AXIS] ))
{
homeaxis(X_AXIS);
homeaxis(Y_AXIS);
}
// 1st mesh bed leveling measurement point, corrected.
world2machine_initialize();
world2machine(pgm_read_float(bed_ref_points_4), pgm_read_float(bed_ref_points_4+1), destination[X_AXIS], destination[Y_AXIS]);
world2machine_reset();
if (destination[Y_AXIS] < Y_MIN_POS)
destination[Y_AXIS] = Y_MIN_POS;
destination[Z_AXIS] = MESH_HOME_Z_SEARCH; // Set destination away from bed
feedrate = homing_feedrate[Z_AXIS]/10;
current_position[Z_AXIS] = 0;
enable_endstops(false);
#ifdef DEBUG_BUILD
SERIAL_ECHOLNPGM("plan_set_position()");
MYSERIAL.println(current_position[X_AXIS]);MYSERIAL.println(current_position[Y_AXIS]);
MYSERIAL.println(current_position[Z_AXIS]);MYSERIAL.println(current_position[E_AXIS]);
#endif
plan_set_position(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS]);
#ifdef DEBUG_BUILD
SERIAL_ECHOLNPGM("plan_buffer_line()");
MYSERIAL.println(destination[X_AXIS]);MYSERIAL.println(destination[Y_AXIS]);
MYSERIAL.println(destination[Z_AXIS]);MYSERIAL.println(destination[E_AXIS]);
MYSERIAL.println(feedrate);MYSERIAL.println(active_extruder);
#endif
plan_buffer_line(destination[X_AXIS], destination[Y_AXIS], destination[Z_AXIS], destination[E_AXIS], feedrate, active_extruder);
st_synchronize();
current_position[X_AXIS] = destination[X_AXIS];
current_position[Y_AXIS] = destination[Y_AXIS];
enable_endstops(true);
endstops_hit_on_purpose();
homeaxis(Z_AXIS);
#else // MESH_BED_LEVELING
homeaxis(Z_AXIS);
#endif // MESH_BED_LEVELING
}
#else // defined(Z_SAFE_HOMING): Z Safe mode activated.
if(home_all_axes) {
destination[X_AXIS] = round(Z_SAFE_HOMING_X_POINT - X_PROBE_OFFSET_FROM_EXTRUDER);
destination[Y_AXIS] = round(Z_SAFE_HOMING_Y_POINT - Y_PROBE_OFFSET_FROM_EXTRUDER);
destination[Z_AXIS] = Z_RAISE_BEFORE_HOMING * home_dir(Z_AXIS) * (-1); // Set destination away from bed
feedrate = XY_TRAVEL_SPEED/60;
current_position[Z_AXIS] = 0;
plan_set_position(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS]);
plan_buffer_line(destination[X_AXIS], destination[Y_AXIS], destination[Z_AXIS], destination[E_AXIS], feedrate, active_extruder);
st_synchronize();
current_position[X_AXIS] = destination[X_AXIS];
current_position[Y_AXIS] = destination[Y_AXIS];
homeaxis(Z_AXIS);
}
// Let's see if X and Y are homed and probe is inside bed area.
if(home_z) {
if ( (axis_known_position[X_AXIS]) && (axis_known_position[Y_AXIS]) \
&& (current_position[X_AXIS]+X_PROBE_OFFSET_FROM_EXTRUDER >= X_MIN_POS) \
&& (current_position[X_AXIS]+X_PROBE_OFFSET_FROM_EXTRUDER <= X_MAX_POS) \
&& (current_position[Y_AXIS]+Y_PROBE_OFFSET_FROM_EXTRUDER >= Y_MIN_POS) \
&& (current_position[Y_AXIS]+Y_PROBE_OFFSET_FROM_EXTRUDER <= Y_MAX_POS)) {
current_position[Z_AXIS] = 0;
plan_set_position(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS]);
destination[Z_AXIS] = Z_RAISE_BEFORE_HOMING * home_dir(Z_AXIS) * (-1); // Set destination away from bed
feedrate = max_feedrate[Z_AXIS];
plan_buffer_line(destination[X_AXIS], destination[Y_AXIS], destination[Z_AXIS], destination[E_AXIS], feedrate, active_extruder);
st_synchronize();
homeaxis(Z_AXIS);
} else if (!((axis_known_position[X_AXIS]) && (axis_known_position[Y_AXIS]))) {
LCD_MESSAGERPGM(MSG_POSITION_UNKNOWN);
SERIAL_ECHO_START;
SERIAL_ECHOLNRPGM(MSG_POSITION_UNKNOWN);
} else {
LCD_MESSAGERPGM(MSG_ZPROBE_OUT);
SERIAL_ECHO_START;
SERIAL_ECHOLNRPGM(MSG_ZPROBE_OUT);
}
}
#endif // Z_SAFE_HOMING
#endif // Z_HOME_DIR < 0
if(code_seen(axis_codes[Z_AXIS]) && code_value_long() != 0)
current_position[Z_AXIS]=code_value()+add_homing[Z_AXIS];
#ifdef ENABLE_AUTO_BED_LEVELING
if(home_z)
current_position[Z_AXIS] += zprobe_zoffset; //Add Z_Probe offset (the distance is negative)
#endif
// Set the planner and stepper routine positions.
// At this point the mesh bed leveling and world2machine corrections are disabled and current_position
// contains the machine coordinates.
plan_set_position(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS]);
#ifdef ENDSTOPS_ONLY_FOR_HOMING
enable_endstops(false);
#endif
feedrate = saved_feedrate;
feedmultiply = saved_feedmultiply;
previous_millis_cmd = millis();
endstops_hit_on_purpose();
#ifndef MESH_BED_LEVELING
// If MESH_BED_LEVELING is not active, then it is the original Prusa i3.
// Offer the user to load the baby step value, which has been adjusted at the previous print session.
if(card.sdprinting && eeprom_read_word((uint16_t *)EEPROM_BABYSTEP_Z))
lcd_adjust_z();
#endif
// Load the machine correction matrix
world2machine_initialize();
// and correct the current_position XY axes to match the transformed coordinate system.
world2machine_update_current();
#if (defined(MESH_BED_LEVELING) && !defined(MK1BP))
if (code_seen(axis_codes[X_AXIS]) || code_seen(axis_codes[Y_AXIS]) || code_seen('W') || code_seen(axis_codes[Z_AXIS]))
{
if (! home_z && mbl_was_active) {
// Re-enable the mesh bed leveling if only the X and Y axes were re-homed.
mbl.active = true;
// and re-adjust the current logical Z axis with the bed leveling offset applicable at the current XY position.
current_position[Z_AXIS] -= mbl.get_z(st_get_position_mm(X_AXIS), st_get_position_mm(Y_AXIS));
}
}
else
{
st_synchronize();
homing_flag = false;
// Push the commands to the front of the message queue in the reverse order!
// There shall be always enough space reserved for these commands.
// enquecommand_front_P((PSTR("G80")));
goto case_G80;
}
#endif
if (farm_mode) { prusa_statistics(20); };
homing_flag = false;
#if 0
SERIAL_ECHOPGM("G28, final "); print_world_coordinates();
SERIAL_ECHOPGM("G28, final "); print_physical_coordinates();
SERIAL_ECHOPGM("G28, final "); print_mesh_bed_leveling_table();
#endif
break;
} }
#ifdef ENABLE_AUTO_BED_LEVELING #ifdef ENABLE_AUTO_BED_LEVELING
case 29: // G29 Detailed Z-Probe, probes the bed at 3 or more points. case 29: // G29 Detailed Z-Probe, probes the bed at 3 or more points.
@ -3506,6 +3527,14 @@ void process_commands()
#ifdef PINDA_THERMISTOR #ifdef PINDA_THERMISTOR
if (true) if (true)
{ {
if (calibration_status() >= CALIBRATION_STATUS_XYZ_CALIBRATION) {
//we need to know accurate position of first calibration point
//if xyz calibration was not performed yet, interrupt temperature calibration and inform user that xyz cal. is needed
lcd_show_fullscreen_message_and_wait_P(_i("Please run XYZ calibration first."));
break;
}
if (!(axis_known_position[X_AXIS] && axis_known_position[Y_AXIS] && axis_known_position[Z_AXIS])) if (!(axis_known_position[X_AXIS] && axis_known_position[Y_AXIS] && axis_known_position[Z_AXIS]))
{ {
// We don't know where we are! HOME! // We don't know where we are! HOME!
@ -3520,20 +3549,19 @@ void process_commands()
if (result) if (result)
{ {
current_position[Z_AXIS] = MESH_HOME_Z_SEARCH;
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 3000 / 60, active_extruder);
current_position[Z_AXIS] = 50; current_position[Z_AXIS] = 50;
current_position[Y_AXIS] += 180; current_position[Y_AXIS] = 180;
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 3000 / 60, active_extruder); plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 3000 / 60, active_extruder);
st_synchronize(); st_synchronize();
lcd_show_fullscreen_message_and_wait_P(_T(MSG_REMOVE_STEEL_SHEET)); lcd_show_fullscreen_message_and_wait_P(_T(MSG_REMOVE_STEEL_SHEET));
current_position[Y_AXIS] -= 180; current_position[Y_AXIS] = pgm_read_float(bed_ref_points_4 + 1);
current_position[X_AXIS] = pgm_read_float(bed_ref_points_4);
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 3000 / 60, active_extruder); plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 3000 / 60, active_extruder);
st_synchronize(); st_synchronize();
feedrate = homing_feedrate[Z_AXIS] / 10; gcode_G28(false, false, true, false);
enable_endstops(true);
endstops_hit_on_purpose();
homeaxis(Z_AXIS);
plan_set_position(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS]);
enable_endstops(false);
} }
if ((current_temperature_pinda > 35) && (farm_mode == false)) { if ((current_temperature_pinda > 35) && (farm_mode == false)) {
//waiting for PIDNA probe to cool down in case that we are not in farm mode //waiting for PIDNA probe to cool down in case that we are not in farm mode
@ -3563,8 +3591,11 @@ void process_commands()
custom_message_type = 4; custom_message_type = 4;
custom_message_state = 1; custom_message_state = 1;
custom_message = _T(MSG_TEMP_CALIBRATION); custom_message = _T(MSG_TEMP_CALIBRATION);
current_position[Z_AXIS] = MESH_HOME_Z_SEARCH;
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 3000 / 60, active_extruder);
current_position[X_AXIS] = PINDA_PREHEAT_X; current_position[X_AXIS] = PINDA_PREHEAT_X;
current_position[Y_AXIS] = PINDA_PREHEAT_Y; current_position[Y_AXIS] = PINDA_PREHEAT_Y;
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 3000 / 60, active_extruder);
current_position[Z_AXIS] = PINDA_PREHEAT_Z; current_position[Z_AXIS] = PINDA_PREHEAT_Z;
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 3000 / 60, active_extruder); plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 3000 / 60, active_extruder);
st_synchronize(); st_synchronize();
@ -3577,11 +3608,10 @@ void process_commands()
eeprom_update_byte((uint8_t*)EEPROM_CALIBRATION_STATUS_PINDA, 0); //invalidate temp. calibration in case that in will be aborted during the calibration process eeprom_update_byte((uint8_t*)EEPROM_CALIBRATION_STATUS_PINDA, 0); //invalidate temp. calibration in case that in will be aborted during the calibration process
current_position[Z_AXIS] = 5; current_position[Z_AXIS] = MESH_HOME_Z_SEARCH;
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 3000 / 60, active_extruder); plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 3000 / 60, active_extruder);
current_position[X_AXIS] = pgm_read_float(bed_ref_points_4);
current_position[X_AXIS] = pgm_read_float(bed_ref_points); current_position[Y_AXIS] = pgm_read_float(bed_ref_points_4 + 1);
current_position[Y_AXIS] = pgm_read_float(bed_ref_points + 1);
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 3000 / 60, active_extruder); plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 3000 / 60, active_extruder);
st_synchronize(); st_synchronize();
@ -3622,8 +3652,11 @@ void process_commands()
custom_message_state = i + 2; custom_message_state = i + 2;
setTargetBed(50 + 10 * (temp - 30) / 5); setTargetBed(50 + 10 * (temp - 30) / 5);
// setTargetHotend(255, 0); // setTargetHotend(255, 0);
current_position[Z_AXIS] = MESH_HOME_Z_SEARCH;
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 3000 / 60, active_extruder);
current_position[X_AXIS] = PINDA_PREHEAT_X; current_position[X_AXIS] = PINDA_PREHEAT_X;
current_position[Y_AXIS] = PINDA_PREHEAT_Y; current_position[Y_AXIS] = PINDA_PREHEAT_Y;
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 3000 / 60, active_extruder);
current_position[Z_AXIS] = PINDA_PREHEAT_Z; current_position[Z_AXIS] = PINDA_PREHEAT_Z;
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 3000 / 60, active_extruder); plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 3000 / 60, active_extruder);
st_synchronize(); st_synchronize();
@ -3632,10 +3665,10 @@ void process_commands()
delay_keep_alive(1000); delay_keep_alive(1000);
serialecho_temperatures(); serialecho_temperatures();
} }
current_position[Z_AXIS] = 5; current_position[Z_AXIS] = MESH_HOME_Z_SEARCH;
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 3000 / 60, active_extruder); plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 3000 / 60, active_extruder);
current_position[X_AXIS] = pgm_read_float(bed_ref_points); current_position[X_AXIS] = pgm_read_float(bed_ref_points_4);
current_position[Y_AXIS] = pgm_read_float(bed_ref_points + 1); current_position[Y_AXIS] = pgm_read_float(bed_ref_points_4 + 1);
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 3000 / 60, active_extruder); plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 3000 / 60, active_extruder);
st_synchronize(); st_synchronize();
find_z_result = find_bed_induction_sensor_point_z(-1.f); find_z_result = find_bed_induction_sensor_point_z(-1.f);
@ -3840,15 +3873,6 @@ void process_commands()
#endif //MK1BP #endif //MK1BP
case_G80: case_G80:
{ {
#ifdef TMC2130
//previously enqueued "G28 W0" failed (crash Z)
if (axis_known_position[X_AXIS] && axis_known_position[Y_AXIS] && !axis_known_position[Z_AXIS] && (READ(Z_TMC2130_DIAG) != 0))
{
kill(_T(MSG_BED_LEVELING_FAILED_POINT_LOW));
break;
}
#endif //TMC2130
mesh_bed_leveling_flag = true; mesh_bed_leveling_flag = true;
int8_t verbosity_level = 0; int8_t verbosity_level = 0;
static bool run = false; static bool run = false;

View File

@ -133,7 +133,7 @@ private:
#ifdef DEBUG_SD_SPEED_TEST #ifdef DEBUG_SD_SPEED_TEST
public: public:
#endif DEBUG_SD_SPEED_TEST #endif //DEBUG_SD_SPEED_TEST
Sd2Card card; Sd2Card card;
private: private:

View File

@ -36,7 +36,7 @@
#define _i(s) _I(s) #define _i(s) _I(s)
#define _T(s) s #define _T(s) s
#else //(LANG_MODE == 0) #else //(LANG_MODE == 0)
#define _I(s) (__extension__({static const char __c[] PROGMEM_I1 = "\xff\xff"s; &__c[0];})) #define _I(s) (__extension__({static const char __c[] PROGMEM_I1 = "\xff\xff" s; &__c[0];}))
#define ISTR(s) "\xff\xff" s #define ISTR(s) "\xff\xff" s
#define _i(s) lang_get_translation(_I(s)) #define _i(s) lang_get_translation(_I(s))
#define _T(s) lang_get_translation(s) #define _T(s) lang_get_translation(s)

View File

@ -962,6 +962,10 @@ static inline void update_current_position_z()
// At the current position, find the Z stop. // At the current position, find the Z stop.
inline bool find_bed_induction_sensor_point_z(float minimum_z, uint8_t n_iter, int verbosity_level) inline bool find_bed_induction_sensor_point_z(float minimum_z, uint8_t n_iter, int verbosity_level)
{ {
#ifdef TMC2130
FORCE_HIGH_POWER_START;
#endif
#ifdef SUPPORT_VERBOSITY #ifdef SUPPORT_VERBOSITY
if(verbosity_level >= 10) SERIAL_ECHOLNPGM("find bed induction sensor point z"); if(verbosity_level >= 10) SERIAL_ECHOLNPGM("find bed induction sensor point z");
#endif // SUPPORT_VERBOSITY #endif // SUPPORT_VERBOSITY
@ -978,7 +982,7 @@ inline bool find_bed_induction_sensor_point_z(float minimum_z, uint8_t n_iter, i
if (! endstop_z_hit_on_purpose()) if (! endstop_z_hit_on_purpose())
goto error; goto error;
#ifdef TMC2130 #ifdef TMC2130
if ((tmc2130_mode == TMC2130_MODE_NORMAL) && (READ(Z_TMC2130_DIAG) != 0)) goto error; //crash Z detected if (READ(Z_TMC2130_DIAG) != 0) goto error; //crash Z detected
#endif //TMC2130 #endif //TMC2130
for (uint8_t i = 0; i < n_iter; ++ i) for (uint8_t i = 0; i < n_iter; ++ i)
{ {
@ -993,7 +997,7 @@ inline bool find_bed_induction_sensor_point_z(float minimum_z, uint8_t n_iter, i
if (! endstop_z_hit_on_purpose()) if (! endstop_z_hit_on_purpose())
goto error; goto error;
#ifdef TMC2130 #ifdef TMC2130
if ((tmc2130_mode == TMC2130_MODE_NORMAL) && (READ(Z_TMC2130_DIAG) != 0)) goto error; //crash Z detected if (READ(Z_TMC2130_DIAG) != 0) goto error; //crash Z detected
#endif //TMC2130 #endif //TMC2130
// SERIAL_ECHOPGM("Bed find_bed_induction_sensor_point_z low, height: "); // SERIAL_ECHOPGM("Bed find_bed_induction_sensor_point_z low, height: ");
// MYSERIAL.print(current_position[Z_AXIS], 5); // MYSERIAL.print(current_position[Z_AXIS], 5);
@ -1007,16 +1011,23 @@ inline bool find_bed_induction_sensor_point_z(float minimum_z, uint8_t n_iter, i
if (n_iter > 1) if (n_iter > 1)
current_position[Z_AXIS] /= float(n_iter); current_position[Z_AXIS] /= float(n_iter);
enable_endstops(endstops_enabled); enable_endstops(endstops_enabled);
enable_z_endstop(endstop_z_enabled); enable_z_endstop(endstop_z_enabled);
// SERIAL_ECHOLNPGM("find_bed_induction_sensor_point_z 3"); // SERIAL_ECHOLNPGM("find_bed_induction_sensor_point_z 3");
return true; #ifdef TMC2130
FORCE_HIGH_POWER_END;
#endif
return true;
error: error:
// SERIAL_ECHOLNPGM("find_bed_induction_sensor_point_z 4"); // SERIAL_ECHOLNPGM("find_bed_induction_sensor_point_z 4");
enable_endstops(endstops_enabled); enable_endstops(endstops_enabled);
enable_z_endstop(endstop_z_enabled); enable_z_endstop(endstop_z_enabled);
return false; #ifdef TMC2130
FORCE_HIGH_POWER_END;
#endif
return false;
} }
#ifdef NEW_XYZCAL #ifdef NEW_XYZCAL

View File

@ -419,7 +419,7 @@ void tmc2130_check_overtemp()
lcd.print(' '); lcd.print(' ');
} }
} }
#endif DEBUG_CRASHDET_COUNTERS #endif //DEBUG_CRASHDET_COUNTERS
} }
void tmc2130_setup_chopper(uint8_t axis, uint8_t mres, uint8_t current_h, uint8_t current_r) void tmc2130_setup_chopper(uint8_t axis, uint8_t mres, uint8_t current_h, uint8_t current_r)

View File

@ -6816,7 +6816,7 @@ static bool lcd_selfcheck_pulleys(int axis)
} }
return(true); return(true);
} }
#endif TMC2130 #endif //TMC2130
static bool lcd_selfcheck_endstops() static bool lcd_selfcheck_endstops()

View File

@ -210,11 +210,6 @@
#define TMC2130_PWM_AUTO_Y 1 // PWMCONF #define TMC2130_PWM_AUTO_Y 1 // PWMCONF
#define TMC2130_PWM_FREQ_Y 2 // PWMCONF #define TMC2130_PWM_FREQ_Y 2 // PWMCONF
#define TMC2130_PWM_GRAD_E 2 // PWMCONF
#define TMC2130_PWM_AMPL_E 235 // PWMCONF
#define TMC2130_PWM_AUTO_E 1 // PWMCONF
#define TMC2130_PWM_FREQ_E 2 // PWMCONF
#define TMC2130_PWM_GRAD_Z 4 // PWMCONF #define TMC2130_PWM_GRAD_Z 4 // PWMCONF
#define TMC2130_PWM_AMPL_Z 200 // PWMCONF #define TMC2130_PWM_AMPL_Z 200 // PWMCONF
#define TMC2130_PWM_AUTO_Z 1 // PWMCONF #define TMC2130_PWM_AUTO_Z 1 // PWMCONF

View File

@ -2226,10 +2226,8 @@ const char * const MSG_TEMP_CALIBRATION_ON_LANG_TABLE[LANG_NUM] PROGMEM = {
}; };
const char MSG_TEMP_CAL_FAILED_EN[] PROGMEM = "Temperature calibration failed"; const char MSG_TEMP_CAL_FAILED_EN[] PROGMEM = "Temperature calibration failed";
const char MSG_TEMP_CAL_FAILED_CZ[] PROGMEM = "Teplotni kalibrace selhala"; const char * const MSG_TEMP_CAL_FAILED_LANG_TABLE[1] PROGMEM = {
const char * const MSG_TEMP_CAL_FAILED_LANG_TABLE[LANG_NUM] PROGMEM = { MSG_TEMP_CAL_FAILED_EN
MSG_TEMP_CAL_FAILED_EN,
MSG_TEMP_CAL_FAILED_CZ
}; };
const char MSG_TEMP_CAL_WARNING_EN[] PROGMEM = "Stable ambient temperature 21-26C is needed a rigid stand is required."; const char MSG_TEMP_CAL_WARNING_EN[] PROGMEM = "Stable ambient temperature 21-26C is needed a rigid stand is required.";

View File

@ -728,8 +728,8 @@ extern const char* const MSG_TEMP_CALIBRATION_OFF_LANG_TABLE[LANG_NUM];
#define MSG_TEMP_CALIBRATION_OFF LANG_TABLE_SELECT(MSG_TEMP_CALIBRATION_OFF_LANG_TABLE) #define MSG_TEMP_CALIBRATION_OFF LANG_TABLE_SELECT(MSG_TEMP_CALIBRATION_OFF_LANG_TABLE)
extern const char* const MSG_TEMP_CALIBRATION_ON_LANG_TABLE[LANG_NUM]; extern const char* const MSG_TEMP_CALIBRATION_ON_LANG_TABLE[LANG_NUM];
#define MSG_TEMP_CALIBRATION_ON LANG_TABLE_SELECT(MSG_TEMP_CALIBRATION_ON_LANG_TABLE) #define MSG_TEMP_CALIBRATION_ON LANG_TABLE_SELECT(MSG_TEMP_CALIBRATION_ON_LANG_TABLE)
extern const char* const MSG_TEMP_CAL_FAILED_LANG_TABLE[LANG_NUM]; extern const char* const MSG_TEMP_CAL_FAILED_LANG_TABLE[1];
#define MSG_TEMP_CAL_FAILED LANG_TABLE_SELECT(MSG_TEMP_CAL_FAILED_LANG_TABLE) #define MSG_TEMP_CAL_FAILED LANG_TABLE_SELECT_EXPLICIT(MSG_TEMP_CAL_FAILED_LANG_TABLE, 0)
extern const char* const MSG_TEMP_CAL_WARNING_LANG_TABLE[1]; extern const char* const MSG_TEMP_CAL_WARNING_LANG_TABLE[1];
#define MSG_TEMP_CAL_WARNING LANG_TABLE_SELECT_EXPLICIT(MSG_TEMP_CAL_WARNING_LANG_TABLE, 0) #define MSG_TEMP_CAL_WARNING LANG_TABLE_SELECT_EXPLICIT(MSG_TEMP_CAL_WARNING_LANG_TABLE, 0)
extern const char* const MSG_TOSHIBA_FLASH_AIR_COMPATIBILITY_OFF_LANG_TABLE[1]; extern const char* const MSG_TOSHIBA_FLASH_AIR_COMPATIBILITY_OFF_LANG_TABLE[1];

View File

@ -415,4 +415,3 @@
#define MSG_CHANGED_PRINTER "Varovani: doslo ke zmene typu tiskarny." #define MSG_CHANGED_PRINTER "Varovani: doslo ke zmene typu tiskarny."
#define MSG_CHANGED_BOTH "Varovani: doslo ke zmene typu tiskarny a motherboardu." #define MSG_CHANGED_BOTH "Varovani: doslo ke zmene typu tiskarny a motherboardu."
#define MSG_WAITING_TEMP_PINDA "Cekani na zchladnuti PINDA" #define MSG_WAITING_TEMP_PINDA "Cekani na zchladnuti PINDA"
#define MSG_TEMP_CAL_FAILED "Teplotni kalibrace selhala"

View File

@ -424,4 +424,4 @@
#define(length=20, lines=4) MSG_CHANGED_PRINTER "Warning: printer type changed." #define(length=20, lines=4) MSG_CHANGED_PRINTER "Warning: printer type changed."
#define(length=20, lines=4) MSG_CHANGED_BOTH "Warning: both printer type and motherboard type changed." #define(length=20, lines=4) MSG_CHANGED_BOTH "Warning: both printer type and motherboard type changed."
#define(length=20, lines=3) MSG_WAITING_TEMP_PINDA "Waiting for PINDA probe cooling" #define(length=20, lines=3) MSG_WAITING_TEMP_PINDA "Waiting for PINDA probe cooling"
#define(length=20, lines=8) MSG_TEMP_CAL_FAILED "Temperature calibration failed" #define(length=20, lines=8) MSG_TEMP_CAL_FAILED "Temperature calibration failed"