Merge branch 'MK3' into PFW-943

This commit is contained in:
MRprusa3d 2019-09-16 15:29:28 +02:00 committed by GitHub
commit 0e1d559f03
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
65 changed files with 9994 additions and 6265 deletions

View File

@ -16,8 +16,8 @@ extern uint16_t nPrinterType;
extern PGM_P sPrinterName;
// Firmware version
#define FW_VERSION "3.7.2"
#define FW_COMMIT_NR 2363
#define FW_VERSION "3.8.0"
#define FW_COMMIT_NR 2684
// FW_VERSION_UNKNOWN means this is an unofficial build.
// The firmware should only be checked into github with this symbol.
#define FW_DEV_VERSION FW_VERSION_UNKNOWN
@ -113,11 +113,6 @@ extern PGM_P sPrinterName;
// #define PS_DEFAULT_OFF
// This makes temp sensor 1 a redundant sensor for sensor 0. If the temperatures difference between these sensors is to high the print will be aborted.
//#define TEMP_SENSOR_1_AS_REDUNDANT
#define MAX_REDUNDANT_TEMP_SENSOR_DIFF 10
// Actual temperature must be close to target for this long before M109 returns success
#define TEMP_RESIDENCY_TIME 3 // (seconds)
#define TEMP_HYSTERESIS 5 // (degC) range of +/- temperatures considered "close" to the target one
@ -291,6 +286,8 @@ your extruder heater takes 2 minutes to hit the target on heating.
#define Z_HEIGHT_HIDE_LIVE_ADJUST_MENU 2.0f
#define HOME_Z_SEARCH_THRESHOLD 0.15f // Threshold of the Z height in calibration
//============================= Bed Auto Leveling ===========================
//#define ENABLE_AUTO_BED_LEVELING // Delete the comment to enable (remove // at the start of the line)

View File

@ -10,14 +10,6 @@
#endif
#define BED_CHECK_INTERVAL 5000 //ms between checks in bang-bang control
//// Heating sanity check:
// This waits for the watch period in milliseconds whenever an M104 or M109 increases the target temperatureLCD_PROGRESS_BAR
// If the temperature has not increased at the end of that period, the target temperature is set to zero.
// It can be reset with another M104/M109. This check is also only triggered if the target temperature and the current temperature
// differ by at least 2x WATCH_TEMP_INCREASE
//#define WATCH_TEMP_PERIOD 40000 //40 seconds
//#define WATCH_TEMP_INCREASE 10 //Heat up at least 10 degree in 20 seconds
#ifdef PIDTEMP
// this adds an experimental additional term to the heating power, proportional to the extrusion speed.
// if Kc is chosen well, the additional required power due to increased melting should be compensated.
@ -400,10 +392,6 @@ const unsigned int dropsegments=5; //everything with less than this number of st
//============================= Define Defines ============================
//===========================================================================
#if EXTRUDERS > 1 && defined TEMP_SENSOR_1_AS_REDUNDANT
#error "You cannot use TEMP_SENSOR_1_AS_REDUNDANT if EXTRUDERS > 1"
#endif
#if EXTRUDERS > 1 && defined HEATERS_PARALLEL
#error "You cannot use HEATERS_PARALLEL if EXTRUDERS > 1"
#endif

View File

@ -308,11 +308,6 @@ extern bool axis_known_position[3];
extern int fanSpeed;
extern int8_t lcd_change_fil_state;
const char smooth1[] PROGMEM = "Smooth1";
const char smooth2[] PROGMEM = "Smooth2";
const char textured[] PROGMEM = "Textur1";
const char *const defaultSheetNames[] PROGMEM = {smooth1,smooth2,textured};
#ifdef TMC2130
void homeaxis(int axis, uint8_t cnt = 1, uint8_t* pstep = 0);
#else

View File

@ -524,24 +524,6 @@ bool fans_check_enabled = true;
#ifdef TMC2130
extern int8_t CrashDetectMenu;
void crashdet_enable()
{
tmc2130_sg_stop_on_crash = true;
eeprom_update_byte((uint8_t*)EEPROM_CRASH_DET, 0xFF);
CrashDetectMenu = 1;
}
void crashdet_disable()
{
tmc2130_sg_stop_on_crash = false;
tmc2130_sg_crash = 0;
eeprom_update_byte((uint8_t*)EEPROM_CRASH_DET, 0x00);
CrashDetectMenu = 0;
}
void crashdet_stop_and_save_print()
{
stop_and_save_print_to_ram(10, -default_retraction); //XY - no change, Z 10mm up, E -1mm retract
@ -631,7 +613,7 @@ void crashdet_detected(uint8_t mask)
void crashdet_recover()
{
crashdet_restore_print_and_continue();
tmc2130_sg_stop_on_crash = true;
if (lcd_crash_detect_enabled()) tmc2130_sg_stop_on_crash = true;
}
void crashdet_cancel()
@ -1262,15 +1244,15 @@ void setup()
uint8_t silentMode = eeprom_read_byte((uint8_t*)EEPROM_SILENT);
if (silentMode == 0xff) silentMode = 0;
tmc2130_mode = TMC2130_MODE_NORMAL;
uint8_t crashdet = eeprom_read_byte((uint8_t*)EEPROM_CRASH_DET);
if (crashdet && !farm_mode)
if (lcd_crash_detect_enabled() && !farm_mode)
{
crashdet_enable();
lcd_crash_detect_enable();
puts_P(_N("CrashDetect ENABLED!"));
}
else
{
crashdet_disable();
lcd_crash_detect_disable();
puts_P(_N("CrashDetect DISABLED"));
}
@ -1509,8 +1491,10 @@ void setup()
#ifndef DEBUG_DISABLE_STARTMSGS
KEEPALIVE_STATE(PAUSED_FOR_USER);
check_if_fw_is_on_right_printer();
show_fw_version_warnings();
if (!farm_mode) {
check_if_fw_is_on_right_printer();
show_fw_version_warnings();
}
switch (hw_changed) {
//if motherboard or printer type was changed inform user as it can indicate flashing wrong firmware version
@ -2023,14 +2007,14 @@ static void do_blocking_move_to(float x, float y, float z) {
feedrate = homing_feedrate[Z_AXIS];
current_position[Z_AXIS] = z;
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], feedrate/60, active_extruder);
plan_buffer_line_curposXYZE(feedrate/60, active_extruder);
st_synchronize();
feedrate = XY_TRAVEL_SPEED;
current_position[X_AXIS] = x;
current_position[Y_AXIS] = y;
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], feedrate/60, active_extruder);
plan_buffer_line_curposXYZE(feedrate/60, active_extruder);
st_synchronize();
feedrate = oldFeedRate;
@ -2360,77 +2344,77 @@ void ramming() {
max_feedrate[E_AXIS] = 50;
//current_position[E_AXIS] -= 8;
//plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 2100 / 60, active_extruder);
//plan_buffer_line_curposXYZE(2100 / 60, active_extruder);
//current_position[E_AXIS] += 8;
//plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 2100 / 60, active_extruder);
//plan_buffer_line_curposXYZE(2100 / 60, active_extruder);
current_position[E_AXIS] += 5.4;
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 2800 / 60, active_extruder);
plan_buffer_line_curposXYZE(2800 / 60, active_extruder);
current_position[E_AXIS] += 3.2;
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_curposXYZE(3000 / 60, active_extruder);
current_position[E_AXIS] += 3;
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 3400 / 60, active_extruder);
plan_buffer_line_curposXYZE(3400 / 60, active_extruder);
st_synchronize();
max_feedrate[E_AXIS] = 80;
current_position[E_AXIS] -= 82;
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 9500 / 60, active_extruder);
plan_buffer_line_curposXYZE(9500 / 60, active_extruder);
max_feedrate[E_AXIS] = 50;//tmp[E_AXIS];
current_position[E_AXIS] -= 20;
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 1200 / 60, active_extruder);
plan_buffer_line_curposXYZE(1200 / 60, active_extruder);
current_position[E_AXIS] += 5;
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 400 / 60, active_extruder);
plan_buffer_line_curposXYZE(400 / 60, active_extruder);
current_position[E_AXIS] += 5;
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 600 / 60, active_extruder);
plan_buffer_line_curposXYZE(600 / 60, active_extruder);
current_position[E_AXIS] -= 10;
st_synchronize();
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 600 / 60, active_extruder);
plan_buffer_line_curposXYZE(600 / 60, active_extruder);
current_position[E_AXIS] += 10;
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 600 / 60, active_extruder);
plan_buffer_line_curposXYZE(600 / 60, active_extruder);
current_position[E_AXIS] -= 10;
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 800 / 60, active_extruder);
plan_buffer_line_curposXYZE(800 / 60, active_extruder);
current_position[E_AXIS] += 10;
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 800 / 60, active_extruder);
plan_buffer_line_curposXYZE(800 / 60, active_extruder);
current_position[E_AXIS] -= 10;
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 800 / 60, active_extruder);
plan_buffer_line_curposXYZE(800 / 60, active_extruder);
st_synchronize();
}
else {
//ABS
max_feedrate[E_AXIS] = 50;
//current_position[E_AXIS] -= 8;
//plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 2100 / 60, active_extruder);
//plan_buffer_line_curposXYZE(2100 / 60, active_extruder);
//current_position[E_AXIS] += 8;
//plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 2100 / 60, active_extruder);
//plan_buffer_line_curposXYZE(2100 / 60, active_extruder);
current_position[E_AXIS] += 3.1;
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 2000 / 60, active_extruder);
plan_buffer_line_curposXYZE(2000 / 60, active_extruder);
current_position[E_AXIS] += 3.1;
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 2500 / 60, active_extruder);
plan_buffer_line_curposXYZE(2500 / 60, active_extruder);
current_position[E_AXIS] += 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_curposXYZE(3000 / 60, active_extruder);
st_synchronize();
//current_position[X_AXIS] += 23; //delay
//plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 600/60, active_extruder); //delay
//plan_buffer_line_curposXYZE(600/60, active_extruder); //delay
//current_position[X_AXIS] -= 23; //delay
//plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 600/60, active_extruder); //delay
//plan_buffer_line_curposXYZE(600/60, active_extruder); //delay
_delay(4700);
max_feedrate[E_AXIS] = 80;
current_position[E_AXIS] -= 92;
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 9900 / 60, active_extruder);
plan_buffer_line_curposXYZE(9900 / 60, active_extruder);
max_feedrate[E_AXIS] = 50;//tmp[E_AXIS];
current_position[E_AXIS] -= 5;
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 800 / 60, active_extruder);
plan_buffer_line_curposXYZE(800 / 60, active_extruder);
current_position[E_AXIS] += 5;
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 400 / 60, active_extruder);
plan_buffer_line_curposXYZE(400 / 60, active_extruder);
current_position[E_AXIS] -= 5;
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 600 / 60, active_extruder);
plan_buffer_line_curposXYZE(600 / 60, active_extruder);
st_synchronize();
current_position[E_AXIS] += 5;
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 600 / 60, active_extruder);
plan_buffer_line_curposXYZE(600 / 60, active_extruder);
current_position[E_AXIS] -= 5;
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 600 / 60, active_extruder);
plan_buffer_line_curposXYZE(600 / 60, active_extruder);
current_position[E_AXIS] += 5;
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 600 / 60, active_extruder);
plan_buffer_line_curposXYZE(600 / 60, active_extruder);
current_position[E_AXIS] -= 5;
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 600 / 60, active_extruder);
plan_buffer_line_curposXYZE(600 / 60, active_extruder);
st_synchronize();
}
@ -2489,7 +2473,7 @@ static void gcode_G28(bool home_x_axis, long home_x_value, bool home_y_axis, lon
if (home_all_axes) {
current_position[Z_AXIS] += MESH_HOME_Z_SEARCH;
feedrate = homing_feedrate[Z_AXIS];
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], feedrate / 60, active_extruder);
plan_buffer_line_curposXYZE(feedrate / 60, active_extruder);
st_synchronize();
}
#ifdef ENABLE_AUTO_BED_LEVELING
@ -2807,7 +2791,7 @@ bool gcode_M45(bool onlyZ, int8_t verbosity_level)
enable_endstops(false);
current_position[X_AXIS] += 5;
current_position[Y_AXIS] += 5;
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], homing_feedrate[Z_AXIS] / 40, active_extruder);
plan_buffer_line_curposXYZE(homing_feedrate[Z_AXIS] / 40, active_extruder);
st_synchronize();
// Let the user move the Z axes up to the end stoppers.
@ -2857,7 +2841,7 @@ bool gcode_M45(bool onlyZ, int8_t verbosity_level)
bool endstops_enabled = enable_endstops(false);
current_position[Z_AXIS] -= 1; //move 1mm down with disabled endstop
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], homing_feedrate[Z_AXIS] / 40, active_extruder);
plan_buffer_line_curposXYZE(homing_feedrate[Z_AXIS] / 40, active_extruder);
st_synchronize();
// Move the print head close to the bed.
@ -2868,7 +2852,7 @@ bool gcode_M45(bool onlyZ, int8_t verbosity_level)
tmc2130_home_enter(Z_AXIS_MASK);
#endif //TMC2130
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], homing_feedrate[Z_AXIS] / 40, active_extruder);
plan_buffer_line_curposXYZE(homing_feedrate[Z_AXIS] / 40, active_extruder);
st_synchronize();
#ifdef TMC2130
@ -2876,7 +2860,8 @@ bool gcode_M45(bool onlyZ, int8_t verbosity_level)
#endif //TMC2130
enable_endstops(endstops_enabled);
if (st_get_position_mm(Z_AXIS) == MESH_HOME_Z_SEARCH)
if ((st_get_position_mm(Z_AXIS) <= (MESH_HOME_Z_SEARCH + HOME_Z_SEARCH_THRESHOLD)) &&
(st_get_position_mm(Z_AXIS) >= (MESH_HOME_Z_SEARCH - HOME_Z_SEARCH_THRESHOLD)))
{
if (onlyZ)
{
@ -2908,7 +2893,7 @@ bool gcode_M45(bool onlyZ, int8_t verbosity_level)
clean_up_after_endstop_move(l_feedmultiply);
// Print head up.
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], homing_feedrate[Z_AXIS] / 40, active_extruder);
plan_buffer_line_curposXYZE(homing_feedrate[Z_AXIS] / 40, active_extruder);
st_synchronize();
//#ifndef NEW_XYZCAL
if (result >= 0)
@ -2928,7 +2913,7 @@ bool gcode_M45(bool onlyZ, int8_t verbosity_level)
clean_up_after_endstop_move(l_feedmultiply);
// Print head up.
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], homing_feedrate[Z_AXIS] / 40, active_extruder);
plan_buffer_line_curposXYZE(homing_feedrate[Z_AXIS] / 40, active_extruder);
st_synchronize();
// if (result >= 0) babystep_apply();
#endif //HEATBED_V2
@ -3038,21 +3023,18 @@ static void gcode_M600(bool automatic, float x_position, float y_position, float
//Retract E
current_position[E_AXIS] += e_shift;
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS],
current_position[E_AXIS], FILAMENTCHANGE_RFEED, active_extruder);
plan_buffer_line_curposXYZE(FILAMENTCHANGE_RFEED, active_extruder);
st_synchronize();
//Lift Z
current_position[Z_AXIS] += z_shift;
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS],
current_position[E_AXIS], FILAMENTCHANGE_ZFEED, active_extruder);
plan_buffer_line_curposXYZE(FILAMENTCHANGE_ZFEED, active_extruder);
st_synchronize();
//Move XY to side
current_position[X_AXIS] = x_position;
current_position[Y_AXIS] = y_position;
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS],
current_position[E_AXIS], FILAMENTCHANGE_XYFEED, active_extruder);
plan_buffer_line_curposXYZE(FILAMENTCHANGE_XYFEED, active_extruder);
st_synchronize();
//Beep, manage nozzle heater and wait for user to start unload filament
@ -3077,8 +3059,7 @@ static void gcode_M600(bool automatic, float x_position, float y_position, float
lcd_set_cursor(0, 2);
lcd_puts_P(_T(MSG_PLEASE_WAIT));
current_position[X_AXIS] -= 100;
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS],
current_position[E_AXIS], FILAMENTCHANGE_XYFEED, active_extruder);
plan_buffer_line_curposXYZE(FILAMENTCHANGE_XYFEED, active_extruder);
st_synchronize();
lcd_show_fullscreen_message_and_wait_P(_i("Please open idler and remove filament manually."));////MSG_CHECK_IDLER c=20 r=4
}
@ -3115,8 +3096,7 @@ static void gcode_M600(bool automatic, float x_position, float y_position, float
if (!automatic)
{
current_position[E_AXIS] += FILAMENTCHANGE_RECFEED;
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS],
current_position[E_AXIS], FILAMENTCHANGE_EXFEED, active_extruder);
plan_buffer_line_curposXYZE(FILAMENTCHANGE_EXFEED, active_extruder);
}
//Move XY back
@ -3183,12 +3163,12 @@ void gcode_M701()
lcd_setstatuspgm(_T(MSG_LOADING_FILAMENT));
current_position[E_AXIS] += 40;
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 400 / 60, active_extruder); //fast sequence
plan_buffer_line_curposXYZE(400 / 60, active_extruder); //fast sequence
st_synchronize();
marlin_rise_z();
current_position[E_AXIS] += 30;
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 400 / 60, active_extruder); //fast sequence
plan_buffer_line_curposXYZE(400 / 60, active_extruder); //fast sequence
load_filament_final_feed(); //slow sequence
st_synchronize();
@ -3266,6 +3246,56 @@ static void gcode_PRUSA_SN()
puts_P(_N("Not in farm mode."));
}
}
//! Detection of faulty RAMBo 1.1b boards equipped with bigger capacitors
//! at the TACH_1 pin, which causes bad detection of print fan speed.
//! Warning: This function is not to be used by ordinary users, it is here only for automated testing purposes,
//! it may even interfere with other functions of the printer! You have been warned!
//! The test idea is to measure the time necessary to charge the capacitor.
//! So the algorithm is as follows:
//! 1. Set TACH_1 pin to INPUT mode and LOW
//! 2. Wait a few ms
//! 3. disable interrupts and measure the time until the TACH_1 pin reaches HIGH
//! Repeat 1.-3. several times
//! Good RAMBo's times are in the range of approx. 260-320 us
//! Bad RAMBo's times are approx. 260-1200 us
//! So basically we are interested in maximum time, the minima are mostly the same.
//! May be that's why the bad RAMBo's still produce some fan RPM reading, but not corresponding to reality
static void gcode_PRUSA_BadRAMBoFanTest(){
//printf_P(PSTR("Enter fan pin test\n"));
#if !defined(DEBUG_DISABLE_FANCHECK) && defined(FANCHECK) && defined(TACH_1) && TACH_1 >-1
fan_measuring = false; // prevent EXTINT7 breaking into the measurement
unsigned long tach1max = 0;
uint8_t tach1cntr = 0;
for( /* nothing */; tach1cntr < 100; ++tach1cntr){
//printf_P(PSTR("TACH_1: %d\n"), tach1cntr);
SET_OUTPUT(TACH_1);
WRITE(TACH_1, LOW);
_delay(20); // the delay may be lower
unsigned long tachMeasure = _micros();
cli();
SET_INPUT(TACH_1);
// just wait brutally in an endless cycle until we reach HIGH
// if this becomes a problem it may be improved to non-endless cycle
while( READ(TACH_1) == 0 ) ;
sei();
tachMeasure = _micros() - tachMeasure;
if( tach1max < tachMeasure )
tach1max = tachMeasure;
//printf_P(PSTR("TACH_1: %d: capacitor check time=%lu us\n"), (int)tach1cntr, tachMeasure);
}
//printf_P(PSTR("TACH_1: max=%lu us\n"), tach1max);
SERIAL_PROTOCOLPGM("RAMBo FAN ");
if( tach1max > 500 ){
// bad RAMBo
SERIAL_PROTOCOLLNPGM("BAD");
} else {
SERIAL_PROTOCOLLNPGM("OK");
}
// cleanup after the test function
SET_INPUT(TACH_1);
WRITE(TACH_1, HIGH);
#endif
}
#ifdef BACKLASH_X
extern uint8_t st_backlash_x;
@ -3607,7 +3637,9 @@ void process_commands()
- `Lz`
- `Beat` - Kick farm link timer
- `FR` - Full factory reset
- `nozzle D<diameter` - Set the nozzle diameter
- `nozzle set <diameter>` - set nozzle diameter (farm mode only), e.g. `PRUSA nozzle set 0.4`
- `nozzle D<diameter>` - check the nozzle diameter (farm mode only), works like M862.1 P, e.g. `PRUSA nozzle D0.4`
- `nozzle` - prints nozzle diameter (farm mode only), works like M862.1 P, e.g. `PRUSA nozzle`
*
*/
@ -3621,7 +3653,9 @@ void process_commands()
else if (code_seen("PRN")) { // PRUSA PRN
printf_P(_N("%d"), status_number);
}else if (code_seen("FAN")) { // PRUSA FAN
} else if( code_seen("FANPINTST") ){
gcode_PRUSA_BadRAMBoFanTest();
}else if (code_seen("FAN")) { //! PRUSA FAN
printf_P(_N("E0:%d RPM\nPRN0:%d RPM\n"), 60*fan_speed[0], 60*fan_speed[1]);
}else if (code_seen("fn")) { // PRUSA fn
if (farm_mode) {
@ -3783,9 +3817,13 @@ eeprom_update_word((uint16_t*)EEPROM_NOZZLE_DIAMETER_uM,0xFFFF);
// }
}
else if (code_seen('^')) {
// nothing, this is a version line
} else if(code_seen('G'))
// This prevents reading files with "^" in their names.
// Since it is unclear, if there is some usage of this construct,
// it will be deprecated in 3.9 alpha a possibly completely removed in the future:
// else if (code_seen('^')) {
// // nothing, this is a version line
// }
else if(code_seen('G'))
{
gcode_in_progress = (int)code_value();
// printf_P(_N("BEGIN G-CODE=%u\n"), gcode_in_progress);
@ -4333,15 +4371,15 @@ if(eSoundMode!=e_SOUND_MODE_SILENT)
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);
plan_buffer_line_curposXYZE(3000 / 60, active_extruder);
current_position[Z_AXIS] = 50;
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_curposXYZE(3000 / 60, active_extruder);
st_synchronize();
lcd_show_fullscreen_message_and_wait_P(_T(MSG_REMOVE_STEEL_SHEET));
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_curposXYZE(3000 / 60, active_extruder);
st_synchronize();
gcode_G28(false, false, true);
@ -4349,7 +4387,7 @@ if(eSoundMode!=e_SOUND_MODE_SILENT)
if ((current_temperature_pinda > 35) && (farm_mode == false)) {
//waiting for PIDNA probe to cool down in case that we are not in farm mode
current_position[Z_AXIS] = 100;
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_curposXYZE(3000 / 60, active_extruder);
if (lcd_wait_for_pinda(35) == false) { //waiting for PINDA probe to cool, if this takes more then time expected, temp. cal. fails
lcd_temp_cal_show_result(false);
break;
@ -4373,12 +4411,12 @@ if(eSoundMode!=e_SOUND_MODE_SILENT)
custom_message_state = 1;
lcd_setstatuspgm(_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);
plan_buffer_line_curposXYZE(3000 / 60, active_extruder);
current_position[X_AXIS] = PINDA_PREHEAT_X;
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);
plan_buffer_line_curposXYZE(3000 / 60, active_extruder);
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_curposXYZE(3000 / 60, active_extruder);
st_synchronize();
while (current_temperature_pinda < start_temp)
@ -4390,10 +4428,10 @@ if(eSoundMode!=e_SOUND_MODE_SILENT)
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] = 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_curposXYZE(3000 / 60, active_extruder);
current_position[X_AXIS] = pgm_read_float(bed_ref_points_4);
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_curposXYZE(3000 / 60, active_extruder);
st_synchronize();
bool find_z_result = find_bed_induction_sensor_point_z(-1.f);
@ -4421,12 +4459,12 @@ if(eSoundMode!=e_SOUND_MODE_SILENT)
setTargetBed(50 + 10 * (temp - 30) / 5);
// 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);
plan_buffer_line_curposXYZE(3000 / 60, active_extruder);
current_position[X_AXIS] = PINDA_PREHEAT_X;
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);
plan_buffer_line_curposXYZE(3000 / 60, active_extruder);
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_curposXYZE(3000 / 60, active_extruder);
st_synchronize();
while (current_temperature_pinda < temp)
{
@ -4434,10 +4472,10 @@ if(eSoundMode!=e_SOUND_MODE_SILENT)
serialecho_temperatures();
}
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_curposXYZE(3000 / 60, active_extruder);
current_position[X_AXIS] = pgm_read_float(bed_ref_points_4);
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_curposXYZE(3000 / 60, active_extruder);
st_synchronize();
find_z_result = find_bed_induction_sensor_point_z(-1.f);
if (find_z_result == false) {
@ -4477,7 +4515,7 @@ if(eSoundMode!=e_SOUND_MODE_SILENT)
current_position[X_AXIS] = PINDA_PREHEAT_X;
current_position[Y_AXIS] = PINDA_PREHEAT_Y;
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_curposXYZE(3000 / 60, active_extruder);
st_synchronize();
while (abs(degBed() - PINDA_MIN_T) > 1) {
@ -4493,11 +4531,11 @@ if(eSoundMode!=e_SOUND_MODE_SILENT)
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;
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_curposXYZE(3000 / 60, active_extruder);
current_position[X_AXIS] = BED_X0;
current_position[Y_AXIS] = BED_Y0;
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_curposXYZE(3000 / 60, active_extruder);
st_synchronize();
find_bed_induction_sensor_point_z(-1.f);
@ -4514,7 +4552,7 @@ if(eSoundMode!=e_SOUND_MODE_SILENT)
current_position[X_AXIS] = PINDA_PREHEAT_X;
current_position[Y_AXIS] = PINDA_PREHEAT_Y;
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_curposXYZE(3000 / 60, active_extruder);
st_synchronize();
while (degBed() < t_c) {
delay_keep_alive(1000);
@ -4525,10 +4563,10 @@ if(eSoundMode!=e_SOUND_MODE_SILENT)
serialecho_temperatures();
}
current_position[Z_AXIS] = 5;
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_curposXYZE(3000 / 60, active_extruder);
current_position[X_AXIS] = BED_X0;
current_position[Y_AXIS] = BED_Y0;
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_curposXYZE(3000 / 60, active_extruder);
st_synchronize();
find_bed_induction_sensor_point_z(-1.f);
z_shift = (int)((current_position[Z_AXIS] - zero_z)*cs.axis_steps_per_unit[Z_AXIS]);
@ -4669,7 +4707,7 @@ if(eSoundMode!=e_SOUND_MODE_SILENT)
// Cycle through all points and probe them
// First move up. During this first movement, the babystepping will be reverted.
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], homing_feedrate[Z_AXIS] / 60, active_extruder);
plan_buffer_line_curposXYZE(homing_feedrate[Z_AXIS] / 60, active_extruder);
// The move to the first calibration point.
current_position[X_AXIS] = BED_X0;
current_position[Y_AXIS] = BED_Y0;
@ -4684,7 +4722,7 @@ if(eSoundMode!=e_SOUND_MODE_SILENT)
world2machine_clamp(current_position[X_AXIS], current_position[Y_AXIS]);
#endif //SUPPORT_VERBOSITY
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], homing_feedrate[X_AXIS] / 30, active_extruder);
plan_buffer_line_curposXYZE(homing_feedrate[X_AXIS] / 30, active_extruder);
// Wait until the move is finished.
st_synchronize();
@ -4736,7 +4774,7 @@ if(eSoundMode!=e_SOUND_MODE_SILENT)
if((ix == 0) && (iy == 0)) current_position[Z_AXIS] = MESH_HOME_Z_SEARCH;
else current_position[Z_AXIS] += 2.f / nMeasPoints; //use relative movement from Z coordinate where PINDa triggered on previous point. This makes calibration faster.
float init_z_bckp = current_position[Z_AXIS];
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], Z_LIFT_FEEDRATE, active_extruder);
plan_buffer_line_curposXYZE(Z_LIFT_FEEDRATE, active_extruder);
st_synchronize();
// Move to XY position of the sensor point.
@ -4757,7 +4795,7 @@ if(eSoundMode!=e_SOUND_MODE_SILENT)
#endif // SUPPORT_VERBOSITY
//printf_P(PSTR("after clamping: [%f;%f]\n"), current_position[X_AXIS], current_position[Y_AXIS]);
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], XY_AXIS_FEEDRATE, active_extruder);
plan_buffer_line_curposXYZE(XY_AXIS_FEEDRATE, active_extruder);
st_synchronize();
// Go down until endstop is hit
@ -4769,7 +4807,7 @@ if(eSoundMode!=e_SOUND_MODE_SILENT)
if (init_z_bckp - current_position[Z_AXIS] < 0.1f) { //broken cable or initial Z coordinate too low. Go to MESH_HOME_Z_SEARCH and repeat last step (z-probe) again to distinguish between these two cases.
//printf_P(PSTR("Another attempt! Current Z position: %f\n"), current_position[Z_AXIS]);
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], Z_LIFT_FEEDRATE, active_extruder);
plan_buffer_line_curposXYZE(Z_LIFT_FEEDRATE, active_extruder);
st_synchronize();
if (!find_bed_induction_sensor_point_z((has_z && mesh_point > 0) ? z0 - Z_CALIBRATION_THRESHOLD : -10.f, nProbeRetry)) { //if we have data from z calibration max allowed difference is 1mm for each point, if we dont have data max difference is 10mm from initial point
@ -4824,7 +4862,7 @@ if(eSoundMode!=e_SOUND_MODE_SILENT)
MYSERIAL.print(current_position[Z_AXIS], 5);
}
#endif // SUPPORT_VERBOSITY
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], Z_LIFT_FEEDRATE, active_extruder);
plan_buffer_line_curposXYZE(Z_LIFT_FEEDRATE, active_extruder);
st_synchronize();
if (mesh_point != nMeasPoints * nMeasPoints) {
Sound_MakeSound(e_SOUND_TYPE_StandardAlert);
@ -4841,14 +4879,14 @@ if(eSoundMode!=e_SOUND_MODE_SILENT)
// ~ Z-homing (can not be used "G28", because X & Y-homing would have been done before (Z-homing))
bState=enable_z_endstop(false);
current_position[Z_AXIS] -= 1;
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], homing_feedrate[Z_AXIS] / 40, active_extruder);
plan_buffer_line_curposXYZE(homing_feedrate[Z_AXIS] / 40, active_extruder);
st_synchronize();
enable_z_endstop(true);
#ifdef TMC2130
tmc2130_home_enter(Z_AXIS_MASK);
#endif // TMC2130
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], homing_feedrate[Z_AXIS] / 40, active_extruder);
plan_buffer_line_curposXYZE(homing_feedrate[Z_AXIS] / 40, active_extruder);
st_synchronize();
#ifdef TMC2130
tmc2130_home_exit();
@ -4981,7 +5019,7 @@ if(eSoundMode!=e_SOUND_MODE_SILENT)
//unretract (after PINDA preheat retraction)
if (degHotend(active_extruder) > EXTRUDE_MINTEMP && temp_cal_active == true && calibration_status_pinda() == true && target_temperature_bed >= 50) {
current_position[E_AXIS] += default_retraction;
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 400, active_extruder);
plan_buffer_line_curposXYZE(400, active_extruder);
}
KEEPALIVE_STATE(NOT_BUSY);
// Restore custom message state
@ -5286,7 +5324,7 @@ if(eSoundMode!=e_SOUND_MODE_SILENT)
// -----------------------------------
case 23:
starpos = (strchr(strchr_pointer + 4,'*'));
if(starpos!=NULL)
if(starpos!=NULL)
*(starpos)='\0';
card.openFile(strchr_pointer + 4,true);
break;
@ -5306,11 +5344,18 @@ if(eSoundMode!=e_SOUND_MODE_SILENT)
card.pauseSDPrint();
break;
//! ### M26 - Set SD index
//! ### M26 S\<index\> - Set SD index
//! Set position in SD card file to index in bytes.
//! This command is expected to be called after M23 and before M24.
//! Otherwise effect of this command is undefined.
// ----------------------------------
case 26:
if(card.cardOK && code_seen('S')) {
card.setIndex(code_value_long());
long index = code_value_long();
card.setIndex(index);
// We don't disable interrupt during update of sdpos_atomic
// as we expect, that SD card print is not active in this moment
sdpos_atomic = index;
}
break;
@ -5847,7 +5892,6 @@ Sigma_Exit:
{
setTargetHotendSafe(code_value(), extruder);
}
setWatch();
break;
}
@ -5992,7 +6036,6 @@ Sigma_Exit:
}
#endif
setWatch();
codenum = _millis();
/* See if we are heating up or cooling down */
@ -7305,21 +7348,34 @@ Sigma_Exit:
// ----------------------------------------------
/*!
Checks the parameters of the printer and gcode and performs compatibility check
- M862.1 { P<nozzle_diameter> | Q }
- M862.2 { P<model_code> | Q }
- M862.3 { P"<model_name>" | Q }
- M862.4 { P<fw_version> | Q }
- M862.5 { P<gcode_level> | Q }
- M862.1 [ P<nozzle_diameter> | Q ]
When run with P<> argument, the check is performed against the input value.
When run with Q argument, the current value is shown.
- M862.2 [ P<model_code> | Q ]
M862.3 accepts text identifiers of printer types too.
The syntax of M862.3 is (note the quotes around the type):
- M862.3 [ P<model_name> | Q ]
- M862.4 [ P<fw_version> | Q]
- M862.5 [ P<gcode_level> | Q]
When run with P<> argument, the check is performed against the input value.
When run with Q argument, the current value is shown.
M862.3 P "MK3S"
Accepted printer type identifiers and their numeric counterparts:
- MK1 (100)
- MK2 (200)
- MK2MM (201)
- MK2S (202)
- MK2SMM (203)
- MK2.5 (250)
- MK2.5MMU2 (20250)
- MK2.5S (252)
- MK2.5SMMU2S (20252)
- MK3 (300)
- MK3MMU2 (20300)
- MK3S (302)
- MK3SMMU2S (20302)
*/
case 862: // M862: print checking
float nDummy;
@ -7699,7 +7755,7 @@ Sigma_Exit:
if (mmu_enabled)
{
st_synchronize();
mmu_continue_loading(is_usb_printing);
mmu_continue_loading(is_usb_printing || (lcd_commands_type == LcdCommands::Layer1Cal));
mmu_extruder = tmp_extruder; //filament change is finished
mmu_load_to_nozzle();
}
@ -7743,7 +7799,7 @@ Sigma_Exit:
#endif //defined(MMU_HAS_CUTTER) && defined(MMU_ALWAYS_CUT)
mmu_command(MmuCmd::T0 + tmp_extruder);
manage_response(true, true, MMU_TCODE_MOVE);
mmu_continue_loading(is_usb_printing);
mmu_continue_loading(is_usb_printing || (lcd_commands_type == LcdCommands::Layer1Cal));
mmu_extruder = tmp_extruder; //filament change is finished
@ -8953,7 +9009,7 @@ void bed_check(float x_dimension, float y_dimension, int x_points_num, int y_poi
card.openFile(filename_wldsd, false);
/*destination[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], Z_LIFT_FEEDRATE, active_extruder);
//plan_buffer_line_curposXYZE(Z_LIFT_FEEDRATE, active_extruder);
plan_buffer_line(destination[X_AXIS], destination[Y_AXIS], destination[Z_AXIS], destination[E_AXIS], Z_LIFT_FEEDRATE, active_extruder);
for(int8_t i=0; i < NUM_AXIS; i++) {
@ -8987,7 +9043,7 @@ void bed_check(float x_dimension, float y_dimension, int x_points_num, int y_poi
if (iy & 1) ix = (x_points_num - 1) - ix; // Zig zag
float z0 = 0.f;
/*destination[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], Z_LIFT_FEEDRATE, active_extruder);
//plan_buffer_line_curposXYZE(Z_LIFT_FEEDRATE, active_extruder);
plan_buffer_line(destination[X_AXIS], destination[Y_AXIS], destination[Z_AXIS], destination[E_AXIS], Z_LIFT_FEEDRATE, active_extruder);
for(int8_t i=0; i < NUM_AXIS; i++) {
@ -9151,7 +9207,7 @@ void bed_analysis(float x_dimension, float y_dimension, int x_points_num, int y_
card.openFile(filename_wldsd, false);
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], homing_feedrate[Z_AXIS] / 60, active_extruder);
plan_buffer_line_curposXYZE(homing_feedrate[Z_AXIS] / 60, active_extruder);
int XY_AXIS_FEEDRATE = homing_feedrate[X_AXIS] / 20;
int Z_LIFT_FEEDRATE = homing_feedrate[Z_AXIS] / 40;
@ -9176,14 +9232,14 @@ void bed_analysis(float x_dimension, float y_dimension, int x_points_num, int y_
if (iy & 1) ix = (x_points_num - 1) - ix; // Zig zag
float z0 = 0.f;
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], Z_LIFT_FEEDRATE, active_extruder);
plan_buffer_line_curposXYZE(Z_LIFT_FEEDRATE, active_extruder);
st_synchronize();
current_position[X_AXIS] = 13.f + ix * (x_dimension / (x_points_num - 1)) - bed_zero_ref_x + shift_x;
current_position[Y_AXIS] = 6.4f + iy * (y_dimension / (y_points_num - 1)) - bed_zero_ref_y + shift_y;
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], XY_AXIS_FEEDRATE, active_extruder);
plan_buffer_line_curposXYZE(XY_AXIS_FEEDRATE, active_extruder);
st_synchronize();
if (!find_bed_induction_sensor_point_z(-10.f)) { //if we have data from z calibration max allowed difference is 1mm for each point, if we dont have data max difference is 10mm from initial point
@ -9297,12 +9353,12 @@ void temp_compensation_start() {
if (degHotend(active_extruder) > EXTRUDE_MINTEMP) {
current_position[E_AXIS] -= default_retraction;
}
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 400, active_extruder);
plan_buffer_line_curposXYZE(400, active_extruder);
current_position[X_AXIS] = PINDA_PREHEAT_X;
current_position[Y_AXIS] = PINDA_PREHEAT_Y;
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_curposXYZE(3000 / 60, active_extruder);
st_synchronize();
while (fabs(degBed() - target_temperature_bed) > 1) delay_keep_alive(1000);
@ -9423,17 +9479,17 @@ void long_pause() //long pause print
//retract
current_position[E_AXIS] -= default_retraction;
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 400, active_extruder);
plan_buffer_line_curposXYZE(400, active_extruder);
//lift z
current_position[Z_AXIS] += Z_PAUSE_LIFT;
if (current_position[Z_AXIS] > Z_MAX_POS) current_position[Z_AXIS] = Z_MAX_POS;
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 15, active_extruder);
plan_buffer_line_curposXYZE(15, active_extruder);
//Move XY to side
current_position[X_AXIS] = X_PAUSE_POS;
current_position[Y_AXIS] = Y_PAUSE_POS;
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 50, active_extruder);
plan_buffer_line_curposXYZE(50, active_extruder);
// Turn off the print fan
fanSpeed = 0;
@ -9451,7 +9507,7 @@ void serialecho_temperatures() {
SERIAL_PROTOCOL_F(degBed(), 1);
SERIAL_PROTOCOLLN("");
}
extern uint32_t sdpos_atomic;
#ifdef UVLO_SUPPORT
void uvlo_()
@ -9538,7 +9594,6 @@ void uvlo_()
st_synchronize();
disable_e0();
disable_z();
// Move Z up to the next 0th full step.
// Write the file position.
eeprom_update_dword((uint32_t*)(EEPROM_FILE_POSITION), sd_position);
@ -9578,8 +9633,6 @@ void uvlo_()
st_synchronize();
printf_P(_N("stps%d\n"), tmc2130_rd_MSCNT(Z_AXIS));
disable_z();
// Increment power failure counter
eeprom_update_byte((uint8_t*)EEPROM_POWER_COUNT, eeprom_read_byte((uint8_t*)EEPROM_POWER_COUNT) + 1);
eeprom_update_word((uint16_t*)EEPROM_POWER_COUNT_TOT, eeprom_read_word((uint16_t*)EEPROM_POWER_COUNT_TOT) + 1);
@ -9588,7 +9641,7 @@ void uvlo_()
#if 0
// Move the print head to the side of the print until all the power stored in the power supply capacitors is depleted.
current_position[X_AXIS] = (current_position[X_AXIS] < 0.5f * (X_MIN_POS + X_MAX_POS)) ? X_MIN_POS : X_MAX_POS;
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 500, active_extruder);
plan_buffer_line_curposXYZE(500, active_extruder);
st_synchronize();
#endif
wdt_enable(WDTO_500MS);
@ -9617,7 +9670,6 @@ tmc2130_set_current_r(Z_AXIS, 20);
z_microsteps=tmc2130_rd_MSCNT(Z_TMC2130_CS);
#endif //TMC2130
planner_abort_hard();
disable_z();
//save current position only in case, where the printer is moving on Z axis, which is only when EEPROM_UVLO is 1
//EEPROM_UVLO is 1 after normal uvlo or after recover_print(), when the extruder is moving on Z axis after rehome
@ -10154,7 +10206,7 @@ void restore_print_from_ram_and_continue(float e_move)
else {
//not sd printing nor usb printing
}
printf_P(PSTR("ok\n")); //dummy response because of octoprint is waiting for this
SERIAL_PROTOCOLLNRPGM(MSG_OK); //dummy response because of octoprint is waiting for this
lcd_setstatuspgm(_T(WELCOME_MSG));
saved_printing = false;
}
@ -10225,7 +10277,7 @@ static void print_time_remaining_init()
void load_filament_final_feed()
{
current_position[E_AXIS]+= FILAMENTCHANGE_FINALFEED;
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], FILAMENTCHANGE_EFEED_FINAL, active_extruder);
plan_buffer_line_curposXYZE(FILAMENTCHANGE_EFEED_FINAL, active_extruder);
}
//! @brief Wait for user to check the state
@ -10355,22 +10407,22 @@ void M600_load_filament_movements()
do
{
current_position[E_AXIS] += 0.002;
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 500, active_extruder);
plan_buffer_line_curposXYZE(500, active_extruder);
delay_keep_alive(2);
}
while (!lcd_clicked());
st_synchronize();
current_position[E_AXIS] += bowden_length[mmu_extruder];
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 3000, active_extruder);
plan_buffer_line_curposXYZE(3000, active_extruder);
current_position[E_AXIS] += FIL_LOAD_LENGTH - 60;
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 1400, active_extruder);
plan_buffer_line_curposXYZE(1400, active_extruder);
current_position[E_AXIS] += 40;
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 400, active_extruder);
plan_buffer_line_curposXYZE(400, active_extruder);
current_position[E_AXIS] += 10;
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 50, active_extruder);
plan_buffer_line_curposXYZE(50, active_extruder);
#else
current_position[E_AXIS]+= FILAMENTCHANGE_FIRSTFEED ;
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], FILAMENTCHANGE_EFEED_FIRST, active_extruder);
plan_buffer_line_curposXYZE(FILAMENTCHANGE_EFEED_FIRST, active_extruder);
#endif
load_filament_final_feed();
lcd_loading_filament();
@ -10465,34 +10517,20 @@ if(!(bEnableForce_z||eeprom_read_byte((uint8_t*)EEPROM_SILENT)))
void disable_force_z()
{
uint16_t z_microsteps=0;
uint16_t z_microsteps=0;
if(!bEnableForce_z)
return; // motor already disabled (may be ;-p )
bEnableForce_z=false;
if(!bEnableForce_z) return; // motor already disabled (may be ;-p )
// alignment to full-step
bEnableForce_z=false;
// switching to silent mode
#ifdef TMC2130
z_microsteps=tmc2130_rd_MSCNT(Z_TMC2130_CS);
#endif // TMC2130
planner_abort_hard();
sei();
plan_buffer_line(
current_position[X_AXIS],
current_position[Y_AXIS],
current_position[Z_AXIS]+float((1024-z_microsteps+7)>>4)/cs.axis_steps_per_unit[Z_AXIS],
current_position[E_AXIS],
40, active_extruder);
st_synchronize();
// switching to silent mode
#ifdef TMC2130
tmc2130_mode=TMC2130_MODE_SILENT;
update_mode_profile();
tmc2130_init(true);
tmc2130_mode=TMC2130_MODE_SILENT;
update_mode_profile();
tmc2130_init(true);
#endif // TMC2130
axis_known_position[Z_AXIS]=false;
axis_known_position[Z_AXIS]=false;
}

View File

@ -394,7 +394,10 @@ bool SdBaseFile::make83Name(const char* str, uint8_t* name, const char** ptr) {
i = 8; // place for extension
} else {
// illegal FAT characters
PGM_P p = PSTR("|<>^+=?/[];,*\"\\");
//PGM_P p = PSTR("|<>^+=?/[];,*\"\\");
// 2019-08-27 really?
// Microsoft defines, that only a subset of these characters is not allowed.
PGM_P p = PSTR("|<>?/*\"\\");
uint8_t b;
while ((b = pgm_read_byte(p++))) if (b == c) goto fail;
// check size and only allow ASCII printable characters

View File

@ -224,9 +224,13 @@ void cmdqueue_dump_to_serial_single_line(int nr, const char *p)
SERIAL_ECHOPGM("Entry nr: ");
SERIAL_ECHO(nr);
SERIAL_ECHOPGM(", type: ");
SERIAL_ECHO(int(*p));
int type = *p;
SERIAL_ECHO(type);
SERIAL_ECHOPGM(", size: ");
unsigned int size = *(unsigned int*)(p + 1);
SERIAL_ECHO(size);
SERIAL_ECHOPGM(", cmd: ");
SERIAL_ECHO(p+1);
SERIAL_ECHO(p + CMDHDRSIZE);
SERIAL_ECHOLNPGM("");
}
@ -247,7 +251,7 @@ void cmdqueue_dump_to_serial()
for (const char *p = cmdbuffer + bufindr; p < cmdbuffer + bufindw; ++ nr) {
cmdqueue_dump_to_serial_single_line(nr, p);
// Skip the command.
for (++p; *p != 0; ++ p);
for (p += CMDHDRSIZE; *p != 0; ++ p);
// Skip the gaps.
for (++p; p < cmdbuffer + bufindw && *p == 0; ++ p);
}
@ -255,14 +259,14 @@ void cmdqueue_dump_to_serial()
for (const char *p = cmdbuffer + bufindr; p < cmdbuffer + sizeof(cmdbuffer); ++ nr) {
cmdqueue_dump_to_serial_single_line(nr, p);
// Skip the command.
for (++p; *p != 0; ++ p);
for (p += CMDHDRSIZE; *p != 0; ++ p);
// Skip the gaps.
for (++p; p < cmdbuffer + sizeof(cmdbuffer) && *p == 0; ++ p);
}
for (const char *p = cmdbuffer; p < cmdbuffer + bufindw; ++ nr) {
cmdqueue_dump_to_serial_single_line(nr, p);
// Skip the command.
for (++p; *p != 0; ++ p);
for (p += CMDHDRSIZE; *p != 0; ++ p);
// Skip the gaps.
for (++p; p < cmdbuffer + bufindw && *p == 0; ++ p);
}

View File

@ -45,6 +45,8 @@ extern bool cmdbuffer_front_already_processed;
// Debugging information will be sent to serial line.
//#define CMDBUFFER_DEBUG
extern uint32_t sdpos_atomic;
extern int serial_count;
extern boolean comment_mode;
extern char *strchr_pointer;

View File

@ -58,7 +58,7 @@
//define LANG_MODE 0 // primary language only
#define LANG_MODE 1 // sec. language support
#define LANG_SIZE_RESERVED 0x2800 // reserved space for secondary language (10240 bytes)
#define LANG_SIZE_RESERVED 0x3000 // reserved space for secondary language (12288 bytes)
#endif //_CONFIG_H

View File

@ -41,7 +41,8 @@ bool eeprom_is_uninitialized<char>(char *address)
return (0xff == eeprom_read_byte(reinterpret_cast<uint8_t*>(address)));
}
bool is_sheet_initialized(uint8_t sheet_num){
bool eeprom_is_sheet_initialized(uint8_t sheet_num)
{
return (0xffff != eeprom_read_word(reinterpret_cast<uint16_t*>(&(EEPROM_Sheets_base->
s[sheet_num].z_offset))));
}
@ -61,7 +62,14 @@ void eeprom_init()
if (eeprom_read_word((uint16_t*)EEPROM_MMU_LOAD_FAIL_TOT) == 0xffff) eeprom_update_word((uint16_t *)EEPROM_MMU_LOAD_FAIL_TOT, 0);
if (eeprom_read_byte((uint8_t*)EEPROM_MMU_FAIL) == 0xff) eeprom_update_byte((uint8_t *)EEPROM_MMU_FAIL, 0);
if (eeprom_read_byte((uint8_t*)EEPROM_MMU_LOAD_FAIL) == 0xff) eeprom_update_byte((uint8_t *)EEPROM_MMU_LOAD_FAIL, 0);
if (eeprom_read_byte(&(EEPROM_Sheets_base->active_sheet)) == 0xff) eeprom_update_byte(&(EEPROM_Sheets_base->active_sheet), 0);
if (eeprom_read_byte(&(EEPROM_Sheets_base->active_sheet)) == 0xff)
{
eeprom_update_byte(&(EEPROM_Sheets_base->active_sheet), 0);
// When upgrading from version older version (before multiple sheets were implemented in v3.8.0)
// Sheet 1 uses the previous Live adjust Z (@EEPROM_BABYSTEP_Z)
int last_babystep = eeprom_read_word((uint16_t *)EEPROM_BABYSTEP_Z);
eeprom_update_word(reinterpret_cast<uint16_t *>(&(EEPROM_Sheets_base->s[0].z_offset)), last_babystep);
}
for (uint_least8_t i = 0; i < (sizeof(Sheets::s)/sizeof(Sheets::s[0])); ++i)
{
@ -72,24 +80,108 @@ void eeprom_init()
}
if(is_uninitialized)
{
SheetName sheetName;
eeprom_default_sheet_name(i,sheetName);
char sheet_PROGMEM_buffer[8];
strcpy_P(sheet_PROGMEM_buffer, (char *)pgm_read_word(&(defaultSheetNames[i])));
for (uint_least8_t a = 0; a < sizeof(Sheet::name); ++a){
eeprom_write(&(EEPROM_Sheets_base->s[i].name[a]), sheet_PROGMEM_buffer[a]);
}
// When upgrading from version older version (before multiple sheets were implemented in v3.8.0)
// Sheet 1 uses the previous Live adjust Z (@EEPROM_BABYSTEP_Z)
if(i == 0){
int last_babystep = eeprom_read_word((uint16_t *)EEPROM_BABYSTEP_Z);
eeprom_write_word(reinterpret_cast<uint16_t *>(&(EEPROM_Sheets_base->s[i].z_offset)), last_babystep);
eeprom_write(&(EEPROM_Sheets_base->s[i].name[a]), sheetName.c[a]);
}
}
}
if(!eeprom_is_sheet_initialized(eeprom_read_byte(&(EEPROM_Sheets_base->active_sheet))))
{
eeprom_switch_to_next_sheet();
}
check_babystep();
}
//! @brief Get default sheet name for index
//!
//! | index | sheetName |
//! | ----- | --------- |
//! | 0 | Smooth1 |
//! | 1 | Smooth2 |
//! | 2 | Textur1 |
//! | 3 | Textur2 |
//! | 4 | Custom1 |
//! | 5 | Custom2 |
//! | 6 | Custom3 |
//! | 7 | Custom4 |
//!
//! @param[in] index
//! @param[out] sheetName
void eeprom_default_sheet_name(uint8_t index, SheetName &sheetName)
{
static_assert(8 == sizeof(SheetName),"Default sheet name needs to be adjusted.");
if (index < 2)
{
strcpy_P(sheetName.c, PSTR("Smooth"));
}
else if (index < 4)
{
strcpy_P(sheetName.c, PSTR("Textur"));
}
else
{
strcpy_P(sheetName.c, PSTR("Custom"));
}
switch (index)
{
case 0:
sheetName.c[6] = '1';
break;
case 1:
sheetName.c[6] = '2';
break;
case 2:
sheetName.c[6] = '1';
break;
case 3:
sheetName.c[6] = '2';
break;
case 4:
sheetName.c[6] = '1';
break;
case 5:
sheetName.c[6] = '2';
break;
case 6:
sheetName.c[6] = '3';
break;
case 7:
sheetName.c[6] = '4';
break;
default:
break;
}
sheetName.c[7] = '\0';
}
//! @brief Get next initialized sheet
//!
//! If current sheet is the only sheet initialized, current sheet is returned.
//!
//! @param sheet Current sheet
//! @return next initialized sheet
//! @retval -1 no sheet is initialized
int8_t eeprom_next_initialized_sheet(int8_t sheet)
{
for (int8_t i = 0; i < static_cast<int8_t>(sizeof(Sheets::s)/sizeof(Sheet)); ++i)
{
++sheet;
if (sheet >= static_cast<int8_t>(sizeof(Sheets::s)/sizeof(Sheet))) sheet = 0;
if (eeprom_is_sheet_initialized(sheet)) return sheet;
}
return -1;
}
void eeprom_switch_to_next_sheet()
{
int8_t sheet = eeprom_read_byte(&(EEPROM_Sheets_base->active_sheet));
sheet = eeprom_next_initialized_sheet(sheet);
if (sheet >= 0) eeprom_update_byte(&(EEPROM_Sheets_base->active_sheet), sheet);
}

View File

@ -3,12 +3,6 @@
#include <stdint.h>
#ifdef __cplusplus
void eeprom_init();
extern bool is_sheet_initialized(uint8_t sheet_num);
#endif
typedef struct
{
char name[7]; //!< Can be null terminated, doesn't need to be null terminated
@ -19,12 +13,12 @@ typedef struct
typedef struct
{
Sheet s[3];
Sheet s[8];
uint8_t active_sheet;
} Sheets;
// sizeof(Sheets). Do not change it unless EEPROM_Sheets_base is last item in EEPROM.
// Otherwise it would move following items.
#define EEPROM_SHEETS_SIZEOF 34
#define EEPROM_SHEETS_SIZEOF 89
#ifdef __cplusplus
static_assert(sizeof(Sheets) == EEPROM_SHEETS_SIZEOF, "Sizeof(Sheets) is not EEPROM_SHEETS_SIZEOF.");
@ -36,9 +30,9 @@ static_assert(sizeof(Sheets) == EEPROM_SHEETS_SIZEOF, "Sizeof(Sheets) is not EEP
#define EEPROM_TOP 4096
#define EEPROM_SILENT 4095
#define EEPROM_LANG 4094
#define EEPROM_BABYSTEP_X 4092
#define EEPROM_BABYSTEP_Y 4090
#define EEPROM_BABYSTEP_Z 4088
#define EEPROM_BABYSTEP_X 4092 //unused
#define EEPROM_BABYSTEP_Y 4090 //unused
#define EEPROM_BABYSTEP_Z 4088 //legacy, multiple values stored now in EEPROM_Sheets_base
#define EEPROM_CALIBRATION_STATUS 4087
#define EEPROM_BABYSTEP_Z0 4085
#define EEPROM_FILAMENTUSED 4081
@ -238,5 +232,16 @@ enum
EEPROM_MMU_CUTTER_ENABLED_always = 2,
};
#ifdef __cplusplus
void eeprom_init();
bool eeprom_is_sheet_initialized(uint8_t sheet_num);
struct SheetName
{
char c[sizeof(Sheet::name) + 1];
};
void eeprom_default_sheet_name(uint8_t index, SheetName &sheetName);
int8_t eeprom_next_initialized_sheet(int8_t sheet);
void eeprom_switch_to_next_sheet();
#endif
#endif // EEPROM_H

View File

@ -40,15 +40,26 @@ void lay1cal_preheat()
}
//! @brief Print intro line
//! @brief Load filament
//! @param cmd_buffer character buffer needed to format gcodes
//! @param filament filament to use (applies for MMU only)
void lay1cal_intro_line(char *cmd_buffer, uint8_t filament)
void lay1cal_load_filament(char *cmd_buffer, uint8_t filament)
{
static const char cmd_intro_mmu_0[] PROGMEM = "M83";
static const char cmd_intro_mmu_1[] PROGMEM = "G1 Y-3.0 F1000.0";
static const char cmd_intro_mmu_2[] PROGMEM = "G1 Z0.4 F1000.0";
static const char cmd_intro_mmu_3[] PROGMEM = "G1 X55.0 E32.0 F1073.0"; // call T code before
if (mmu_enabled)
{
enquecommand_P(PSTR("M83"));
enquecommand_P(PSTR("G1 Y-3.0 F1000.0"));
enquecommand_P(PSTR("G1 Z0.4 F1000.0"));
sprintf_P(cmd_buffer, PSTR("T%d"), filament);
enquecommand(cmd_buffer);
}
}
//! @brief Print intro line
void lay1cal_intro_line()
{
static const char cmd_intro_mmu_3[] PROGMEM = "G1 X55.0 E32.0 F1073.0";
static const char cmd_intro_mmu_4[] PROGMEM = "G1 X5.0 E32.0 F1800.0";
static const char cmd_intro_mmu_5[] PROGMEM = "G1 X55.0 E8.0 F2000.0";
static const char cmd_intro_mmu_6[] PROGMEM = "G1 Z0.3 F1000.0";
@ -61,10 +72,7 @@ void lay1cal_intro_line(char *cmd_buffer, uint8_t filament)
static const char * const intro_mmu_cmd[] PROGMEM =
{
cmd_intro_mmu_0,
cmd_intro_mmu_1,
cmd_intro_mmu_2,
cmd_intro_mmu_3, // call T code before
cmd_intro_mmu_3,
cmd_intro_mmu_4,
cmd_intro_mmu_5,
cmd_intro_mmu_6,
@ -80,11 +88,6 @@ void lay1cal_intro_line(char *cmd_buffer, uint8_t filament)
{
for (uint8_t i = 0; i < (sizeof(intro_mmu_cmd)/sizeof(intro_mmu_cmd[0])); ++i)
{
if (3 == i)
{
sprintf_P(cmd_buffer, PSTR("T%d"), filament);
enquecommand(cmd_buffer);
}
enquecommand_P(static_cast<char*>(pgm_read_ptr(&intro_mmu_cmd[i])));
}
}

View File

@ -7,7 +7,8 @@
#include <stdint.h>
void lay1cal_preheat();
void lay1cal_intro_line(char *cmd_buffer, uint8_t filament);
void lay1cal_load_filament(char *cmd_buffer, uint8_t filament);
void lay1cal_intro_line();
void lay1cal_before_meander();
void lay1cal_meander(char *cmd_buffer);
void lay1cal_square(char *cmd_buffer, uint8_t i);

View File

@ -19,91 +19,162 @@
// So the automaton runs atop of inner 8 (or 16) cycles.
// The finite automaton is running in the ISR(TIMER0_OVF_vect)
// 2019-08-14 update: the original algorithm worked very well, however there were 2 regressions:
// 1. 62kHz ISR requires considerable amount of processing power,
// USB transfer speed dropped by 20%, which was most notable when doing short G-code segments.
// 2. Some users reported TLed PSU started clicking when running at 120V/60Hz.
// This looks like the original algorithm didn't maintain base PWM 30Hz, but only 15Hz
// To address both issues, there is an improved approach based on the idea of leveraging
// different CLK prescalers in some automaton states - i.e. when holding LOW or HIGH on the output pin,
// we don't have to clock 62kHz, but we can increase the CLK prescaler for these states to 8 (or even 64).
// That shall result in the ISR not being called that much resulting in regained performance
// Theoretically this is relatively easy, however one must be very carefull handling the AVR's timer
// control registers correctly, especially setting them in a correct order.
// Some registers are double buffered, some changes are applied in next cycles etc.
// The biggest problem was with the CLK prescaler itself - this circuit is shared among almost all timers,
// we don't want to reset the prescaler counted value when transiting among automaton states.
// Resetting the prescaler would make the PWM more precise, right now there are temporal segments
// of variable period ranging from 0 to 7 62kHz ticks - that's logical, the timer must "sync"
// to the new slower CLK after setting the slower prescaler value.
// In our application, this isn't any significant problem and may be ignored.
// Doing changes in timer's registers non-correctly results in artefacts on the output pin
// - it can toggle unnoticed, which will result in bed clicking again.
// That's why there are special transition states ZERO_TO_RISE and ONE_TO_FALL, which enable the
// counter change its operation atomically and without artefacts on the output pin.
// The resulting signal on the output pin was checked with an osciloscope.
// If there are any change requirements in the future, the signal must be checked with an osciloscope again,
// ad-hoc changes may completely screw things up!
///! Definition off finite automaton states
enum class States : uint8_t {
ZERO = 0,
RISE = 1,
ONE = 2,
FALL = 3
};
///! State table for the inner part of the finite automaton
///! Basically it specifies what shall happen if the outer automaton is requesting setting the heat pin to 0 (OFF) or 1 (ON)
///! ZERO: steady 0 (OFF), no change for the whole period
///! RISE: 8 (16) fast PWM cycles with increasing duty up to steady ON
///! ONE: steady 1 (ON), no change for the whole period
///! FALL: 8 (16) fast PWM cycles with decreasing duty down to steady OFF
///! @@TODO move it into progmem
static States stateTable[4*2] = {
// off on
States::ZERO, States::RISE, // ZERO
States::FALL, States::ONE, // RISE
States::FALL, States::ONE, // ONE
States::ZERO, States::RISE // FALL
ZERO_START = 0,///< entry point of the automaton - reads the soft_pwm_bed value for the next whole PWM cycle
ZERO, ///< steady 0 (OFF), no change for the whole period
ZERO_TO_RISE, ///< metastate allowing the timer change its state atomically without artefacts on the output pin
RISE, ///< 16 fast PWM cycles with increasing duty up to steady ON
RISE_TO_ONE, ///< metastate allowing the timer change its state atomically without artefacts on the output pin
ONE, ///< steady 1 (ON), no change for the whole period
ONE_TO_FALL, ///< metastate allowing the timer change its state atomically without artefacts on the output pin
FALL, ///< 16 fast PWM cycles with decreasing duty down to steady OFF
FALL_TO_ZERO ///< metastate allowing the timer change its state atomically without artefacts on the output pin
};
///! Inner states of the finite automaton
static States state = States::ZERO;
static States state = States::ZERO_START;
///! Inner and outer PWM counters
static uint8_t outer = 0;
static uint8_t inner = 0;
///! Fast PWM counter is used in the RISE and FALL states (62.5kHz)
static uint8_t slowCounter = 0;
///! Slow PWM counter is used in the ZERO and ONE states (62.5kHz/8 or 64)
static uint8_t fastCounter = 0;
///! PWM counter for the whole cycle - a cache for soft_pwm_bed
static uint8_t pwm = 0;
///! the slow PWM duty for the next 30Hz cycle
///! The slow PWM duty for the next 30Hz cycle
///! Set in the whole firmware at various places
extern unsigned char soft_pwm_bed;
/// Fine tuning of automaton cycles
#if 1
static const uint8_t innerMax = 16;
static const uint8_t innerShift = 4;
#else
static const uint8_t innerMax = 8;
static const uint8_t innerShift = 5;
#endif
/// fastMax - how many fast PWM steps to do in RISE and FALL states
/// 16 is a good compromise between silenced bed ("smooth" edges)
/// and not burning the switching MOSFET
static const uint8_t fastMax = 16;
/// Scaler 16->256 for fast PWM
static const uint8_t fastShift = 4;
/// Increment slow PWM counter by slowInc every ZERO or ONE state
/// This allows for fine-tuning the basic PWM switching frequency
/// A possible further optimization - use a 64 prescaler (instead of 8)
/// increment slowCounter by 1
/// but use less bits of soft PWM - something like soft_pwm_bed >> 2
/// that may further reduce the CPU cycles required by the bed heating automaton
/// Due to the nature of bed heating the reduced PID precision may not be a major issue, however doing 8x less ISR(timer0_ovf) may significantly improve the performance
static const uint8_t slowInc = 1;
ISR(TIMER0_OVF_vect) // timer compare interrupt service routine
{
if( inner ){
switch(state){
case States::ZERO:
OCR0B = 255;
// Commenting the following code saves 6B, but it is left here for reference
// It is not necessary to set it all over again, because we can only get into the ZERO state from the FALL state (which sets this register)
// TCCR0A |= (1 << COM0B1) | (1 << COM0B0);
break;
case States::RISE:
OCR0B = (innerMax - inner) << innerShift;
// TCCR0A |= (1 << COM0B1); // this bit is always 1
TCCR0A &= ~(1 << COM0B0);
break;
case States::ONE:
OCR0B = 255;
// again - may be skipped, because we get into the ONE state only from RISE (which sets this register)
// TCCR0A |= (1 << COM0B1);
TCCR0A &= ~(1 << COM0B0);
break;
case States::FALL:
OCR0B = (innerMax - inner) << innerShift; // this is the same as in RISE, because now we are setting the zero part of duty due to inverting mode
// must switch to inverting mode already here, because it takes a whole PWM cycle and it would make a "1" at the end of this pwm cycle
TCCR0A |= /*(1 << COM0B1) |*/ (1 << COM0B0);
break;
switch(state){
case States::ZERO_START:
pwm = soft_pwm_bed << 1;// expecting soft_pwm_bed to be 7bit!
if( pwm != 0 ){
state = States::ZERO; // do nothing, let it tick once again after the 30Hz period
}
break;
case States::ZERO: // end of state ZERO - we'll either stay in ZERO or change to RISE
// In any case update our cache of pwm value for the next whole cycle from soft_pwm_bed
slowCounter += slowInc; // this does software timer_clk/256 or less (depends on slowInc)
if( slowCounter > pwm ){
return;
} // otherwise moving towards RISE
state = States::ZERO_TO_RISE; // and finalize the change in a transitional state RISE0
break;
// even though it may look like the ZERO state may be glued together with the ZERO_TO_RISE, don't do it
// the timer must tick once more in order to get rid of occasional output pin toggles.
case States::ZERO_TO_RISE: // special state for handling transition between prescalers and switching inverted->non-inverted fast-PWM without toggling the output pin.
// It must be done in consequent steps, otherwise the pin will get flipped up and down during one PWM cycle.
// Also beware of the correct sequence of the following timer control registers initialization - it really matters!
state = States::RISE; // prepare for standard RISE cycles
fastCounter = fastMax - 1;// we'll do 16-1 cycles of RISE
TCNT0 = 255; // force overflow on the next clock cycle
TCCR0B = (1 << CS00); // change prescaler to 1, i.e. 62.5kHz
TCCR0A &= ~(1 << COM0B0); // Clear OC0B on Compare Match, set OC0B at BOTTOM (non-inverting mode)
break;
case States::RISE:
OCR0B = (fastMax - fastCounter) << fastShift;
if( fastCounter ){
--fastCounter;
} else { // end of RISE cycles, changing into state ONE
state = States::RISE_TO_ONE;
OCR0B = 255; // full duty
TCNT0 = 254; // make the timer overflow in the next cycle
// @@TODO these constants are still subject to investigation
}
break;
case States::RISE_TO_ONE:
state = States::ONE;
OCR0B = 255; // full duty
TCNT0 = 255; // make the timer overflow in the next cycle
TCCR0B = (1 << CS01); // change prescaler to 8, i.e. 7.8kHz
break;
case States::ONE: // state ONE - we'll either stay in ONE or change to FALL
OCR0B = 255;
slowCounter += slowInc; // this does software timer_clk/256 or less
if( slowCounter < pwm ){
return;
}
if( (soft_pwm_bed << 1) >= (255 - slowInc - 1) ){ //@@TODO simplify & explain
// if slowInc==2, soft_pwm == 251 will be the first to do short drops to zero. 252 will keep full heating
return; // want full duty for the next ONE cycle again - so keep on heating and just wait for the next timer ovf
}
// otherwise moving towards FALL
// @@TODO it looks like ONE_TO_FALL isn't necessary, there are no artefacts at all
state = States::ONE;//_TO_FALL;
// TCCR0B = (1 << CS00); // change prescaler to 1, i.e. 62.5kHz
// break;
// case States::ONE_TO_FALL:
// OCR0B = 255; // zero duty
state=States::FALL;
fastCounter = fastMax - 1;// we'll do 16-1 cycles of RISE
TCNT0 = 255; // force overflow on the next clock cycle
TCCR0B = (1 << CS00); // change prescaler to 1, i.e. 62.5kHz
// must switch to inverting mode already here, because it takes a whole PWM cycle and it would make a "1" at the end of this pwm cycle
// COM0B1 remains set both in inverting and non-inverting mode
TCCR0A |= (1 << COM0B0); // inverting mode
break;
case States::FALL:
OCR0B = (fastMax - fastCounter) << fastShift; // this is the same as in RISE, because now we are setting the zero part of duty due to inverting mode
//TCCR0A |= (1 << COM0B0); // already set in ONE_TO_FALL
if( fastCounter ){
--fastCounter;
} else { // end of FALL cycles, changing into state ZERO
state = States::FALL_TO_ZERO;
TCNT0 = 128; //@@TODO again - need to wait long enough to propagate the timer state changes
OCR0B = 255;
}
break;
case States::FALL_TO_ZERO:
state = States::ZERO_START; // go to read new soft_pwm_bed value for the next cycle
TCNT0 = 128;
OCR0B = 255;
TCCR0B = (1 << CS01); // change prescaler to 8, i.e. 7.8kHz
break;
}
--inner;
} else {
if( ! outer ){ // at the end of 30Hz PWM period
// synchro is not needed (almost), soft_pwm_bed is just 1 byte, 1-byte write instruction is atomic
pwm = soft_pwm_bed << 1;
}
if( pwm > outer || pwm >= 254 ){
// soft_pwm_bed has a range of 0-127, that why a <<1 is done here. That also means that we may get only up to 254 which we want to be full-time 1 (ON)
state = stateTable[ uint8_t(state) * 2 + 1 ];
} else {
// switch OFF
state = stateTable[ uint8_t(state) * 2 + 0 ];
}
++outer;
inner = innerMax;
}
}

View File

@ -143,7 +143,7 @@ static void lcd_command(uint8_t value, uint16_t delayExtra = 0)
static void lcd_write(uint8_t value)
{
if (value == '\n' || value == '\r')
if (value == '\n')
{
if (lcd_currline > 3) lcd_currline = -1;
lcd_set_cursor(0, lcd_currline + 1); // LF
@ -189,9 +189,10 @@ static void lcd_begin(uint8_t clear)
#endif
}
static void lcd_putchar(char c, FILE *)
static int lcd_putchar(char c, FILE *)
{
lcd_write(c);
return 0;
}
void lcd_init(void)
@ -257,7 +258,9 @@ void lcd_no_display(void)
lcd_displaycontrol &= ~LCD_DISPLAYON;
lcd_command(LCD_DISPLAYCONTROL | lcd_displaycontrol);
}
#endif
#ifdef VT100 //required functions for VT100
// Turns the underline cursor on/off
void lcd_no_cursor(void)
{
@ -270,7 +273,9 @@ void lcd_cursor(void)
lcd_displaycontrol |= LCD_CURSORON;
lcd_command(LCD_DISPLAYCONTROL | lcd_displaycontrol);
}
#endif
#if 0
// Turn on and off the blinking cursor
void lcd_no_blink(void)
{

View File

@ -11,7 +11,6 @@
extern FILE _lcdout;
#define lcdout (&_lcdout)
extern void lcd_putchar(char c, FILE *stream);
extern void lcd_init(void);

View File

@ -203,9 +203,13 @@ void menu_format_sheet_E(const Sheet &sheet_E, SheetFormatBuffer &buffer)
void menu_format_sheet_select_E(const Sheet &sheet_E, SheetFormatBuffer &buffer)
{
uint_least8_t index = sprintf_P(buffer.c,PSTR("%-9.9S["), _T(MSG_SHEET));
eeprom_read_block(&(buffer.c[index]), sheet_E.name, 7);
buffer.c[index + 7] = ']';
buffer.c[index + 8] = '\0';
eeprom_read_block(&(buffer.c[index]), sheet_E.name, sizeof(sheet_E.name)/sizeof(sheet_E.name[0]));
for (const uint_least8_t start = index; static_cast<uint_least8_t>(index - start) < sizeof(sheet_E.name)/sizeof(sheet_E.name[0]); ++index)
{
if (buffer.c[index] == '\0') break;
}
buffer.c[index] = ']';
buffer.c[index + 1] = '\0';
}
static void menu_draw_item_select_sheet_E(char type_char, const Sheet &sheet)
@ -290,14 +294,18 @@ uint8_t menu_item_submenu_E(const Sheet &sheet, menu_func_t submenu)
return 0;
}
uint8_t menu_item_submenu_select_sheet_E(const Sheet &sheet, menu_func_t submenu)
uint8_t menu_item_function_E(const Sheet &sheet, menu_func_t func)
{
if (menu_item == menu_line)
{
if (lcd_draw_update) menu_draw_item_select_sheet_E(LCD_STR_ARROW_RIGHT[0], sheet);
if (lcd_draw_update) menu_draw_item_select_sheet_E(' ', sheet);
if (menu_clicked && (lcd_encoder == menu_item))
{
menu_submenu(submenu);
menu_clicked = false;
lcd_consume_click();
lcd_update_enabled = 0;
if (func) func();
lcd_update_enabled = 1;
return menu_item_ret();
}
}

View File

@ -103,8 +103,8 @@ extern uint8_t menu_item_submenu_P(const char* str, menu_func_t submenu);
#define MENU_ITEM_SUBMENU_E(sheet, submenu) do { if (menu_item_submenu_E(sheet, submenu)) return; } while (0)
extern uint8_t menu_item_submenu_E(const Sheet &sheet, menu_func_t submenu);
#define MENU_ITEM_SUBMENU_SELECT_SHEET_E(sheet, submenu) do { if (menu_item_submenu_select_sheet_E(sheet, submenu)) return; } while (0)
extern uint8_t menu_item_submenu_select_sheet_E(const Sheet &sheet, menu_func_t submenu);
#define MENU_ITEM_FUNCTION_E(sheet, submenu) do { if (menu_item_function_E(sheet, submenu)) return; } while (0)
extern uint8_t menu_item_function_E(const Sheet &sheet, menu_func_t func);
#define MENU_ITEM_BACK_P(str) do { if (menu_item_back_P(str)) return; } while (0)
extern uint8_t menu_item_back_P(const char* str);

View File

@ -919,7 +919,7 @@ static inline void go_xy(float x, float y, float fr)
static inline void go_to_current(float fr)
{
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], fr, active_extruder);
plan_buffer_line_curposXYZE(fr, active_extruder);
st_synchronize();
}
@ -2769,7 +2769,7 @@ bool sample_z() {
//make space
current_position[Z_AXIS] += 150;
go_to_current(homing_feedrate[Z_AXIS] / 60);
//plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], feedrate, active_extruder););
//plan_buffer_line_curposXYZE(feedrate, active_extruder););
lcd_show_fullscreen_message_and_wait_P(_T(MSG_PLACE_STEEL_SHEET));

View File

@ -537,7 +537,7 @@ void mmu_command(MmuCmd cmd)
void mmu_load_step(bool synchronize)
{
current_position[E_AXIS] = current_position[E_AXIS] + MMU_LOAD_FEEDRATE * 0.1;
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], MMU_LOAD_FEEDRATE, active_extruder);
plan_buffer_line_curposXYZE(MMU_LOAD_FEEDRATE, active_extruder);
if (synchronize) st_synchronize();
}
@ -602,7 +602,7 @@ bool mmu_get_response(uint8_t move)
{
printf_P(PSTR("Unload 1\n"));
current_position[E_AXIS] = current_position[E_AXIS] - MMU_LOAD_FEEDRATE * MMU_LOAD_TIME_MS*0.001;
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], MMU_LOAD_FEEDRATE, active_extruder);
plan_buffer_line_curposXYZE(MMU_LOAD_FEEDRATE, active_extruder);
st_synchronize();
}
}
@ -620,7 +620,7 @@ bool mmu_get_response(uint8_t move)
{
printf_P(PSTR("Unload 2\n"));
current_position[E_AXIS] = current_position[E_AXIS] - MMU_LOAD_FEEDRATE * MMU_LOAD_TIME_MS*0.001;
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], MMU_LOAD_FEEDRATE, active_extruder);
plan_buffer_line_curposXYZE(MMU_LOAD_FEEDRATE, active_extruder);
st_synchronize();
}
}
@ -698,13 +698,13 @@ void manage_response(bool move_axes, bool turn_off_nozzle, uint8_t move)
//lift z
current_position[Z_AXIS] += Z_PAUSE_LIFT;
if (current_position[Z_AXIS] > Z_MAX_POS) current_position[Z_AXIS] = Z_MAX_POS;
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 15, active_extruder);
plan_buffer_line_curposXYZE(15, active_extruder);
st_synchronize();
//Move XY to side
current_position[X_AXIS] = X_PAUSE_POS;
current_position[Y_AXIS] = Y_PAUSE_POS;
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 50, active_extruder);
plan_buffer_line_curposXYZE(50, active_extruder);
st_synchronize();
}
if (turn_off_nozzle) {
@ -762,10 +762,10 @@ void manage_response(bool move_axes, bool turn_off_nozzle, uint8_t move)
lcd_display_message_fullscreen_P(_i("MMU OK. Resuming position..."));
current_position[X_AXIS] = x_position_bckp;
current_position[Y_AXIS] = y_position_bckp;
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 50, active_extruder);
plan_buffer_line_curposXYZE(50, active_extruder);
st_synchronize();
current_position[Z_AXIS] = z_position_bckp;
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 15, active_extruder);
plan_buffer_line_curposXYZE(15, active_extruder);
st_synchronize();
}
else {
@ -804,19 +804,19 @@ void mmu_load_to_nozzle()
current_position[E_AXIS] += 7.2f;
}
float feedrate = 562;
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], feedrate / 60, active_extruder);
plan_buffer_line_curposXYZE(feedrate / 60, active_extruder);
st_synchronize();
current_position[E_AXIS] += 14.4f;
feedrate = 871;
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], feedrate / 60, active_extruder);
plan_buffer_line_curposXYZE(feedrate / 60, active_extruder);
st_synchronize();
current_position[E_AXIS] += 36.0f;
feedrate = 1393;
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], feedrate / 60, active_extruder);
plan_buffer_line_curposXYZE(feedrate / 60, active_extruder);
st_synchronize();
current_position[E_AXIS] += 14.4f;
feedrate = 871;
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], feedrate / 60, active_extruder);
plan_buffer_line_curposXYZE(feedrate / 60, active_extruder);
st_synchronize();
if (!saved_e_relative_mode) axis_relative_modes[E_AXIS] = false;
}
@ -889,7 +889,7 @@ void mmu_M600_load_filament(bool automatic, float nozzle_temp)
mmu_command(MmuCmd::T0 + tmp_extruder);
manage_response(false, true, MMU_LOAD_MOVE);
mmu_continue_loading(is_usb_printing);
mmu_continue_loading(is_usb_printing || (lcd_commands_type == LcdCommands::Layer1Cal));
mmu_extruder = tmp_extruder; //filament change is finished
mmu_load_to_nozzle();
@ -903,7 +903,7 @@ void extr_mov(float shift, float feed_rate)
{ //move extruder no matter what the current heater temperature is
set_extrude_min_temp(.0);
current_position[E_AXIS] += shift;
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], feed_rate, active_extruder);
plan_buffer_line_curposXYZE(feed_rate, active_extruder);
set_extrude_min_temp(EXTRUDE_MINTEMP);
}
#endif //SNMM
@ -978,7 +978,7 @@ void extr_adj(uint8_t extruder) //loading filament for SNMM
{
#ifndef SNMM
MmuCmd cmd = MmuCmd::L0 + extruder;
if (cmd > MmuCmd::L4)
if (extruder > (MmuCmd::L4 - MmuCmd::L0))
{
printf_P(PSTR("Filament out of range %d \n"),extruder);
return;
@ -1069,8 +1069,7 @@ void mmu_filament_ramming()
for(uint8_t i = 0; i < (sizeof(ramming_sequence)/sizeof(E_step));++i)
{
current_position[E_AXIS] += pgm_read_float(&(ramming_sequence[i].extrude));
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS],
current_position[E_AXIS], pgm_read_float(&(ramming_sequence[i].feed_rate)), active_extruder);
plan_buffer_line_curposXYZE(pgm_read_float(&(ramming_sequence[i].feed_rate)), active_extruder);
st_synchronize();
}
}
@ -1140,39 +1139,39 @@ void extr_unload()
lcd_set_cursor(0, 2); lcd_puts_P(_T(MSG_PLEASE_WAIT));
if (current_position[Z_AXIS] < 15) {
current_position[Z_AXIS] += 15; //lifting in Z direction to make space for extrusion
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 25, active_extruder);
plan_buffer_line_curposXYZE(25, active_extruder);
}
current_position[E_AXIS] += 10; //extrusion
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 10, active_extruder);
plan_buffer_line_curposXYZE(10, active_extruder);
st_current_set(2, E_MOTOR_HIGH_CURRENT);
if (current_temperature[0] < 230) { //PLA & all other filaments
current_position[E_AXIS] += 5.4;
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 2800 / 60, active_extruder);
plan_buffer_line_curposXYZE(2800 / 60, active_extruder);
current_position[E_AXIS] += 3.2;
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_curposXYZE(3000 / 60, active_extruder);
current_position[E_AXIS] += 3;
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 3400 / 60, active_extruder);
plan_buffer_line_curposXYZE(3400 / 60, active_extruder);
}
else { //ABS
current_position[E_AXIS] += 3.1;
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 2000 / 60, active_extruder);
plan_buffer_line_curposXYZE(2000 / 60, active_extruder);
current_position[E_AXIS] += 3.1;
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 2500 / 60, active_extruder);
plan_buffer_line_curposXYZE(2500 / 60, active_extruder);
current_position[E_AXIS] += 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_curposXYZE(3000 / 60, active_extruder);
/*current_position[X_AXIS] += 23; //delay
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 600 / 60, active_extruder); //delay
plan_buffer_line_curposXYZE(600 / 60, active_extruder); //delay
current_position[X_AXIS] -= 23; //delay
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 600 / 60, active_extruder); //delay*/
plan_buffer_line_curposXYZE(600 / 60, active_extruder); //delay*/
delay_keep_alive(4700);
}
max_feedrate[E_AXIS] = 80;
current_position[E_AXIS] -= (bowden_length[mmu_extruder] + 60 + FIL_LOAD_LENGTH) / 2;
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 500, active_extruder);
plan_buffer_line_curposXYZE(500, active_extruder);
current_position[E_AXIS] -= (bowden_length[mmu_extruder] + 60 + FIL_LOAD_LENGTH) / 2;
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 500, active_extruder);
plan_buffer_line_curposXYZE(500, active_extruder);
st_synchronize();
//st_current_init();
if (SilentMode != SILENT_MODE_OFF) st_current_set(2, tmp_motor[2]); //set back to normal operation currents
@ -1465,11 +1464,9 @@ bFilamentAction=false; // NOT in "mmu_fil_eject_menu(
static bool can_load()
{
current_position[E_AXIS] += 60;
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS],
current_position[E_AXIS], MMU_LOAD_FEEDRATE, active_extruder);
plan_buffer_line_curposXYZE(MMU_LOAD_FEEDRATE, active_extruder);
current_position[E_AXIS] -= 52;
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS],
current_position[E_AXIS], MMU_LOAD_FEEDRATE, active_extruder);
plan_buffer_line_curposXYZE(MMU_LOAD_FEEDRATE, active_extruder);
st_synchronize();
uint_least8_t filament_detected_count = 0;
@ -1479,8 +1476,7 @@ static bool can_load()
for(uint_least8_t i = 0; i < steps; ++i)
{
current_position[E_AXIS] -= e_increment;
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS],
current_position[E_AXIS], MMU_LOAD_FEEDRATE, active_extruder);
plan_buffer_line_curposXYZE(MMU_LOAD_FEEDRATE, active_extruder);
st_synchronize();
if(0 == PIN_GET(IR_SENSOR_PIN))
{
@ -1601,13 +1597,13 @@ void mmu_continue_loading(bool blocking)
//lift z
current_position[Z_AXIS] += Z_PAUSE_LIFT;
if (current_position[Z_AXIS] > Z_MAX_POS) current_position[Z_AXIS] = Z_MAX_POS;
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 15, active_extruder);
plan_buffer_line_curposXYZE(15, active_extruder);
st_synchronize();
//Move XY to side
current_position[X_AXIS] = X_PAUSE_POS;
current_position[Y_AXIS] = Y_PAUSE_POS;
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 50, active_extruder);
plan_buffer_line_curposXYZE(50, active_extruder);
st_synchronize();
mmu_command(MmuCmd::U0);

View File

@ -651,11 +651,15 @@ void planner_abort_hard()
waiting_inside_plan_buffer_line_print_aborted = true;
}
void plan_buffer_line_curposXYZE(float feed_rate, uint8_t extruder) {
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], feed_rate, extruder );
}
float junction_deviation = 0.1;
// Add a new linear movement to the buffer. steps_x, _y and _z is the absolute position in
// mm. Microseconds specify how many microseconds the move should take to perform. To aid acceleration
// calculation the caller must also provide the physical length of the line in millimeters.
void plan_buffer_line(float x, float y, float z, const float &e, float feed_rate, const uint8_t &extruder)
void plan_buffer_line(float x, float y, float z, const float &e, float feed_rate, uint8_t extruder)
{
// Calculate the buffer head after we push this byte
int next_buffer_head = next_block_index(block_buffer_head);

View File

@ -140,7 +140,14 @@ void plan_buffer_line(float x, float y, float z, const float &e, float feed_rate
// Get the position applying the bed level matrix if enabled
vector_3 plan_get_position();
#else
void plan_buffer_line(float x, float y, float z, const float &e, float feed_rate, const uint8_t &extruder);
/// Extracting common call of
/// plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[3], ...
/// saves almost 5KB.
/// The performance penalty is negligible, since these planned lines are usually maintenance moves with the extruder.
void plan_buffer_line_curposXYZE(float feed_rate, uint8_t extruder);
void plan_buffer_line(float x, float y, float z, const float &e, float feed_rate, uint8_t extruder);
//void plan_buffer_line(const float &x, const float &y, const float &z, const float &e, float feed_rate, const uint8_t &extruder);
#endif // ENABLE_AUTO_BED_LEVELING

View File

@ -135,10 +135,15 @@ switch(eSoundMode)
static void Sound_DoSound_Blind_Alert(void)
{
_tone(BEEPER,300);
_delay_ms(75);
_noTone(BEEPER);
_delay_ms(75);
uint8_t nI;
for(nI=0; nI<20; nI++)
{
WRITE(BEEPER,HIGH);
delayMicroseconds(94);
WRITE(BEEPER,LOW);
delayMicroseconds(94);
}
}
static void Sound_DoSound_Encoder_Move(void)

View File

@ -3,10 +3,10 @@
#define SOUND_H
#define MSG_SOUND_MODE_LOUD "Sound [loud]"
#define MSG_SOUND_MODE_ONCE "Sound [once]"
#define MSG_SOUND_MODE_LOUD "Sound [loud]"
#define MSG_SOUND_MODE_ONCE "Sound [once]"
#define MSG_SOUND_MODE_SILENT "Sound [silent]"
#define MSG_SOUND_MODE_BLIND "Sound [blind]"
#define MSG_SOUND_MODE_BLIND "Sound [assist]"
#define e_SOUND_MODE_NULL 0xFF

View File

@ -1562,7 +1562,8 @@ void EEPROM_read_st(int pos, uint8_t* value, uint8_t size)
void st_current_init() //Initialize Digipot Motor Current
{
uint8_t SilentMode = eeprom_read_byte((uint8_t*)EEPROM_SILENT);
uint8_t SilentMode = eeprom_read_byte((uint8_t*)EEPROM_SILENT);
if (SilentMode == 0xff) SilentMode = 0; //set power to High Power (MK2.5) or Normal Power (MK3, unused)
SilentModeMenu = SilentMode;
#ifdef MOTOR_CURRENT_PWM_XY_PIN
pinMode(MOTOR_CURRENT_PWM_XY_PIN, OUTPUT);

View File

@ -79,10 +79,6 @@ int current_voltage_raw_IR = 0;
int current_temperature_bed_raw = 0;
float current_temperature_bed = 0.0;
#ifdef TEMP_SENSOR_1_AS_REDUNDANT
int redundant_temperature_raw = 0;
float redundant_temperature = 0.0;
#endif
#ifdef PIDTEMP
@ -181,13 +177,8 @@ static int bed_minttemp_raw = HEATER_BED_RAW_LO_TEMP;
static int bed_maxttemp_raw = HEATER_BED_RAW_HI_TEMP;
#endif
#ifdef TEMP_SENSOR_1_AS_REDUNDANT
static void *heater_ttbl_map[2] = {(void *)HEATER_0_TEMPTABLE, (void *)HEATER_1_TEMPTABLE };
static uint8_t heater_ttbllen_map[2] = { HEATER_0_TEMPTABLE_LEN, HEATER_1_TEMPTABLE_LEN };
#else
static void *heater_ttbl_map[EXTRUDERS] = ARRAY_BY_EXTRUDERS( (void *)HEATER_0_TEMPTABLE, (void *)HEATER_1_TEMPTABLE, (void *)HEATER_2_TEMPTABLE );
static uint8_t heater_ttbllen_map[EXTRUDERS] = ARRAY_BY_EXTRUDERS( HEATER_0_TEMPTABLE_LEN, HEATER_1_TEMPTABLE_LEN, HEATER_2_TEMPTABLE_LEN );
#endif
static void *heater_ttbl_map[EXTRUDERS] = ARRAY_BY_EXTRUDERS( (void *)HEATER_0_TEMPTABLE, (void *)HEATER_1_TEMPTABLE, (void *)HEATER_2_TEMPTABLE );
static uint8_t heater_ttbllen_map[EXTRUDERS] = ARRAY_BY_EXTRUDERS( HEATER_0_TEMPTABLE_LEN, HEATER_1_TEMPTABLE_LEN, HEATER_2_TEMPTABLE_LEN );
static float analog2temp(int raw, uint8_t e);
static float analog2tempBed(int raw);
@ -201,11 +192,6 @@ enum TempRunawayStates
TempRunaway_ACTIVE = 2,
};
#ifdef WATCH_TEMP_PERIOD
int watch_start_temp[EXTRUDERS] = ARRAY_BY_EXTRUDERS(0,0,0);
unsigned long watchmillis[EXTRUDERS] = ARRAY_BY_EXTRUDERS(0,0,0);
#endif //WATCH_TEMP_PERIOD
#ifndef SOFT_PWM_SCALE
#define SOFT_PWM_SCALE 0
#endif
@ -734,34 +720,6 @@ void manage_heater()
{
soft_pwm[e] = 0;
}
#ifdef WATCH_TEMP_PERIOD
if(watchmillis[e] && _millis() - watchmillis[e] > WATCH_TEMP_PERIOD)
{
if(degHotend(e) < watch_start_temp[e] + WATCH_TEMP_INCREASE)
{
setTargetHotend(0, e);
LCD_MESSAGEPGM("Heating failed");
SERIAL_ECHO_START;
SERIAL_ECHOLN("Heating failed");
}else{
watchmillis[e] = 0;
}
}
#endif
#ifdef TEMP_SENSOR_1_AS_REDUNDANT
if(fabs(current_temperature[0] - redundant_temperature) > MAX_REDUNDANT_TEMP_SENSOR_DIFF) {
disable_heater();
if(IsStopped() == false) {
SERIAL_ERROR_START;
SERIAL_ERRORLNPGM("Extruder switched off. Temperature difference between temp sensors is too high !");
LCD_ALERTMESSAGEPGM("Err: REDUNDANT TEMP ERROR");
}
#ifndef BOGUS_TEMPERATURE_FAILSAFE_OVERRIDE
Stop();
#endif
}
#endif
} // End extruder for loop
#define FAN_CHECK_PERIOD 5000 //5s
@ -913,11 +871,7 @@ void manage_heater()
// Derived from RepRap FiveD extruder::getTemperature()
// For hot end temperature measurement.
static float analog2temp(int raw, uint8_t e) {
#ifdef TEMP_SENSOR_1_AS_REDUNDANT
if(e > EXTRUDERS)
#else
if(e >= EXTRUDERS)
#endif
{
SERIAL_ERROR_START;
SERIAL_ERROR((int)e);
@ -1060,10 +1014,6 @@ static void updateTemperaturesFromRawValues()
current_temperature_bed = analog2tempBed(current_temperature_bed_raw);
#endif //DEBUG_HEATER_BED_SIM
#ifdef TEMP_SENSOR_1_AS_REDUNDANT
redundant_temperature = analog2temp(redundant_temperature_raw, 1);
#endif
CRITICAL_SECTION_START;
temp_meas_ready = false;
CRITICAL_SECTION_END;
@ -1227,20 +1177,6 @@ void tp_init()
#endif //BED_MAXTEMP
}
void setWatch()
{
#ifdef WATCH_TEMP_PERIOD
for (int e = 0; e < EXTRUDERS; e++)
{
if(degHotend(e) < degTargetHotend(e) - (WATCH_TEMP_INCREASE * 2))
{
watch_start_temp[e] = degHotend(e);
watchmillis[e] = _millis();
}
}
#endif
}
#if (defined (TEMP_RUNAWAY_BED_HYSTERESIS) && TEMP_RUNAWAY_BED_TIMEOUT > 0) || (defined (TEMP_RUNAWAY_EXTRUDER_HYSTERESIS) && TEMP_RUNAWAY_EXTRUDER_TIMEOUT > 0)
void temp_runaway_check(int _heater_id, float _target_temperature, float _current_temperature, float _output, bool _isbed)
{

View File

@ -80,10 +80,6 @@ extern int current_voltage_raw_bed;
extern int current_voltage_raw_IR;
#endif //IR_SENSOR_ANALOG
#ifdef TEMP_SENSOR_1_AS_REDUNDANT
extern float redundant_temperature;
#endif
#if defined(CONTROLLERFAN_PIN) && CONTROLLERFAN_PIN > -1
extern unsigned char soft_pwm_bed;
#endif
@ -226,7 +222,6 @@ FORCE_INLINE bool isCoolingBed() {
int getHeaterPower(int heater);
void disable_heater();
void setWatch();
void updatePID();

View File

@ -26,7 +26,7 @@ void timer0_init(void)
OCR0B = 255;
// Set fast PWM mode and inverting mode.
TCCR0A = (1 << WGM01) | (1 << WGM00) | (1 << COM0B1) | (1 << COM0B0);
TCCR0B = (1 << CS00); // no clock prescaling
TCCR0B = (1 << CS01); // CLK/8 prescaling
TIMSK0 |= (1 << TOIE0); // enable timer overflow interrupt
// Everything, that used to be on timer0 was moved to timer2 (delay, beeping, millis etc.)

File diff suppressed because it is too large Load Diff

View File

@ -55,6 +55,11 @@ void lcd_menu_statistics();
void lcd_menu_extruder_info(); // NOT static due to using inside "Marlin_main" module ("manage_inactivity()")
void lcd_menu_show_sensors_state(); // NOT static due to using inside "Marlin_main" module ("manage_inactivity()")
#ifdef TMC2130
bool lcd_crash_detect_enabled();
void lcd_crash_detect_enable();
void lcd_crash_detect_disable();
#endif
extern const char* lcd_display_message_fullscreen_P(const char *msg, uint8_t &nlines);
extern const char* lcd_display_message_fullscreen_P(const char *msg);
@ -164,6 +169,7 @@ enum class FilamentAction : uint_least8_t
MmuUnLoad,
MmuEject,
MmuCut,
Preheat,
};
extern FilamentAction eFilamentAction;

View File

@ -27,7 +27,7 @@ const char STR_REVISION_RC [] PROGMEM = "rc";
inline bool is_whitespace_or_nl(char c)
{
return c == ' ' || c == '\t' || c == '\n' || c == 'r';
return c == ' ' || c == '\t' || c == '\n' || c == '\r';
}
inline bool is_whitespace_or_nl_or_eol(char c)
@ -401,8 +401,11 @@ lcd_update_enable(true); // display / status-line recovery
case ClCheckMode::_Undef:
break;
}
bSettings=false; // flag ('fake parameter') for 'lcd_hw_setup_menu()' function
menu_submenu(lcd_hw_setup_menu);
if(!farm_mode)
{
bSettings=false; // flag ('fake parameter') for 'lcd_hw_setup_menu()' function
menu_submenu(lcd_hw_setup_menu);
}
}
void printer_model_check(uint16_t nPrinterModel)
@ -421,13 +424,13 @@ switch(oCheckModel)
{
case ClCheckModel::_Warn:
// lcd_show_fullscreen_message_and_wait_P(_i("Printer model differs from the G-code. Continue?"));
lcd_display_message_fullscreen_P(_i("Printer model differs from the G-code. Continue?"));
lcd_display_message_fullscreen_P(_i("G-code sliced for a different printer type. Continue?"));
lcd_wait_for_click_delay(MSG_PRINT_CHECKING_FAILED_TIMEOUT);
//???custom_message_type=CUSTOM_MSG_TYPE_STATUS; // display / status-line recovery
lcd_update_enable(true); // display / status-line recovery
break;
case ClCheckModel::_Strict:
lcd_show_fullscreen_message_and_wait_P(_i("Printer model differs from the G-code. Please check the value in settings. Print cancelled."));
lcd_show_fullscreen_message_and_wait_P(_i("G-code sliced for a different printer type. Please re-slice the model again. Print cancelled."));
lcd_print_stop();
break;
case ClCheckModel::_None:
@ -471,13 +474,13 @@ switch(oCheckVersion)
{
case ClCheckVersion::_Warn:
// lcd_show_fullscreen_message_and_wait_P(_i("Printer FW version differs from the G-code. Continue?"));
lcd_display_message_fullscreen_P(_i("Printer FW version differs from the G-code. Continue?"));
lcd_display_message_fullscreen_P(_i("G-code sliced for a newer firmware. Continue?"));
lcd_wait_for_click_delay(MSG_PRINT_CHECKING_FAILED_TIMEOUT);
//???custom_message_type=CUSTOM_MSG_TYPE_STATUS; // display / status-line recovery
lcd_update_enable(true); // display / status-line recovery
break;
case ClCheckVersion::_Strict:
lcd_show_fullscreen_message_and_wait_P(_i("Printer FW version differs from the G-code. Please check the value in settings. Print cancelled."));
lcd_show_fullscreen_message_and_wait_P(_i("G-code sliced for a newer firmware. Please update the firmware. Print cancelled."));
lcd_print_stop();
break;
case ClCheckVersion::_None:
@ -504,13 +507,13 @@ switch(oCheckGcode)
{
case ClCheckGcode::_Warn:
// lcd_show_fullscreen_message_and_wait_P(_i("Printer G-code level differs from the G-code. Continue?"));
lcd_display_message_fullscreen_P(_i("Printer G-code level differs from the G-code. Continue?"));
lcd_display_message_fullscreen_P(_i("G-code sliced for a different level. Continue?"));
lcd_wait_for_click_delay(MSG_PRINT_CHECKING_FAILED_TIMEOUT);
//???custom_message_type=CUSTOM_MSG_TYPE_STATUS; // display / status-line recovery
lcd_update_enable(true); // display / status-line recovery
break;
case ClCheckGcode::_Strict:
lcd_show_fullscreen_message_and_wait_P(_i("Printer G-code level differs from the G-code. Please check the value in settings. Print cancelled."));
lcd_show_fullscreen_message_and_wait_P(_i("G-code sliced for a different level. Please re-slice the model again. Print cancelled."));
lcd_print_stop();
break;
case ClCheckGcode::_None:
@ -570,13 +573,13 @@ switch(oCheckModel)
{
case ClCheckModel::_Warn:
// lcd_show_fullscreen_message_and_wait_P(_i("Printer model differs from the G-code. Continue?"));
lcd_display_message_fullscreen_P(_i("Printer model differs from the G-code. Continue?"));
lcd_display_message_fullscreen_P(_i("G-code sliced for a different printer type. Continue?"));
lcd_wait_for_click_delay(MSG_PRINT_CHECKING_FAILED_TIMEOUT);
//???custom_message_type=CUSTOM_MSG_TYPE_STATUS; // display / status-line recovery
lcd_update_enable(true); // display / status-line recovery
break;
case ClCheckModel::_Strict:
lcd_show_fullscreen_message_and_wait_P(_i("Printer model differs from the G-code. Please check the value in settings. Print cancelled."));
lcd_show_fullscreen_message_and_wait_P(_i("G-code sliced for a different printer type. Please re-slice the model again. Print cancelled."));
lcd_print_stop();
break;
case ClCheckModel::_None:

View File

@ -257,7 +257,7 @@ BED SETTINGS
#define BED_ADJUSTMENT_UM_MAX 100
#define MESH_HOME_Z_CALIB 0.2
#define MESH_HOME_Z_SEARCH 5 //Z lift for homing, mesh bed leveling etc.
#define MESH_HOME_Z_SEARCH 5.0f // Z lift for homing, mesh bed leveling etc.
#define X_PROBE_OFFSET_FROM_EXTRUDER 23 // Z probe to nozzle X offset: -left +right
#define Y_PROBE_OFFSET_FROM_EXTRUDER 9 // Z probe to nozzle Y offset: -front +behind
@ -326,6 +326,10 @@ PREHEAT SETTINGS
#define PLA_PREHEAT_HPB_TEMP 55
#define PLA_PREHEAT_FAN_SPEED 0
#define ASA_PREHEAT_HOTEND_TEMP 260
#define ASA_PREHEAT_HPB_TEMP 105
#define ASA_PREHEAT_FAN_SPEED 0
#define ABS_PREHEAT_HOTEND_TEMP 255
#define ABS_PREHEAT_HPB_TEMP 100
#define ABS_PREHEAT_FAN_SPEED 0

View File

@ -256,7 +256,7 @@ BED SETTINGS
#define BED_ADJUSTMENT_UM_MAX 100
#define MESH_HOME_Z_CALIB 0.2
#define MESH_HOME_Z_SEARCH 5 //Z lift for homing, mesh bed leveling etc.
#define MESH_HOME_Z_SEARCH 5.0f // Z lift for homing, mesh bed leveling etc.
#define X_PROBE_OFFSET_FROM_EXTRUDER 23 // Z probe to nozzle X offset: -left +right
#define Y_PROBE_OFFSET_FROM_EXTRUDER 9 // Z probe to nozzle Y offset: -front +behind
@ -319,31 +319,27 @@ PREHEAT SETTINGS
#define FARM_PREHEAT_HOTEND_TEMP 250
#define FARM_PREHEAT_HPB_TEMP 80
#define FARM_PREHEAT_FAN_SPEED 0
#define PLA_PREHEAT_HOTEND_TEMP 215
#define PLA_PREHEAT_HPB_TEMP 55
#define PLA_PREHEAT_FAN_SPEED 0
#define ASA_PREHEAT_HOTEND_TEMP 260
#define ASA_PREHEAT_HPB_TEMP 105
#define ABS_PREHEAT_HOTEND_TEMP 255
#define ABS_PREHEAT_HPB_TEMP 100
#define ABS_PREHEAT_FAN_SPEED 0
#define HIPS_PREHEAT_HOTEND_TEMP 220
#define HIPS_PREHEAT_HPB_TEMP 100
#define HIPS_PREHEAT_FAN_SPEED 0
#define PP_PREHEAT_HOTEND_TEMP 254
#define PP_PREHEAT_HPB_TEMP 100
#define PP_PREHEAT_FAN_SPEED 0
#define PET_PREHEAT_HOTEND_TEMP 240
#define PET_PREHEAT_HPB_TEMP 90
#define PET_PREHEAT_FAN_SPEED 0
#define FLEX_PREHEAT_HOTEND_TEMP 230
#define FLEX_PREHEAT_HPB_TEMP 50
#define FLEX_PREHEAT_FAN_SPEED 0
/*------------------------------------
THERMISTORS SETTINGS

View File

@ -314,7 +314,7 @@
#define BED_ADJUSTMENT_UM_MAX 100
#define MESH_HOME_Z_CALIB 0.2
#define MESH_HOME_Z_SEARCH 5 //Z lift for homing, mesh bed leveling etc.
#define MESH_HOME_Z_SEARCH 5.0f // Z lift for homing, mesh bed leveling etc.
#define X_PROBE_OFFSET_FROM_EXTRUDER 23 // Z probe to nozzle X offset: -left +right
#define Y_PROBE_OFFSET_FROM_EXTRUDER 5 // Z probe to nozzle Y offset: -front +behind
@ -377,31 +377,27 @@
#define FARM_PREHEAT_HOTEND_TEMP 250
#define FARM_PREHEAT_HPB_TEMP 80
#define FARM_PREHEAT_FAN_SPEED 0
#define PLA_PREHEAT_HOTEND_TEMP 215
#define PLA_PREHEAT_HPB_TEMP 60
#define PLA_PREHEAT_FAN_SPEED 0
#define ASA_PREHEAT_HOTEND_TEMP 260
#define ASA_PREHEAT_HPB_TEMP 105
#define ABS_PREHEAT_HOTEND_TEMP 255
#define ABS_PREHEAT_HPB_TEMP 100
#define ABS_PREHEAT_FAN_SPEED 0
#define HIPS_PREHEAT_HOTEND_TEMP 220
#define HIPS_PREHEAT_HPB_TEMP 100
#define HIPS_PREHEAT_FAN_SPEED 0
#define PP_PREHEAT_HOTEND_TEMP 254
#define PP_PREHEAT_HPB_TEMP 100
#define PP_PREHEAT_FAN_SPEED 0
#define PET_PREHEAT_HOTEND_TEMP 230
#define PET_PREHEAT_HPB_TEMP 85
#define PET_PREHEAT_FAN_SPEED 0
#define FLEX_PREHEAT_HOTEND_TEMP 240
#define FLEX_PREHEAT_HPB_TEMP 50
#define FLEX_PREHEAT_FAN_SPEED 0
/*------------------------------------
THERMISTORS SETTINGS

View File

@ -315,7 +315,7 @@
#define BED_ADJUSTMENT_UM_MAX 100
#define MESH_HOME_Z_CALIB 0.2
#define MESH_HOME_Z_SEARCH 5 //Z lift for homing, mesh bed leveling etc.
#define MESH_HOME_Z_SEARCH 5.0f // Z lift for homing, mesh bed leveling etc.
#define X_PROBE_OFFSET_FROM_EXTRUDER 23 // Z probe to nozzle X offset: -left +right
#define Y_PROBE_OFFSET_FROM_EXTRUDER 5 // Z probe to nozzle Y offset: -front +behind
@ -378,31 +378,27 @@
#define FARM_PREHEAT_HOTEND_TEMP 250
#define FARM_PREHEAT_HPB_TEMP 80
#define FARM_PREHEAT_FAN_SPEED 0
#define PLA_PREHEAT_HOTEND_TEMP 215
#define PLA_PREHEAT_HPB_TEMP 60
#define PLA_PREHEAT_FAN_SPEED 0
#define ASA_PREHEAT_HOTEND_TEMP 260
#define ASA_PREHEAT_HPB_TEMP 105
#define ABS_PREHEAT_HOTEND_TEMP 255
#define ABS_PREHEAT_HPB_TEMP 100
#define ABS_PREHEAT_FAN_SPEED 0
#define HIPS_PREHEAT_HOTEND_TEMP 220
#define HIPS_PREHEAT_HPB_TEMP 100
#define HIPS_PREHEAT_FAN_SPEED 0
#define PP_PREHEAT_HOTEND_TEMP 254
#define PP_PREHEAT_HPB_TEMP 100
#define PP_PREHEAT_FAN_SPEED 0
#define PET_PREHEAT_HOTEND_TEMP 230
#define PET_PREHEAT_HPB_TEMP 85
#define PET_PREHEAT_FAN_SPEED 0
#define FLEX_PREHEAT_HOTEND_TEMP 240
#define FLEX_PREHEAT_HPB_TEMP 50
#define FLEX_PREHEAT_FAN_SPEED 0
/*------------------------------------
THERMISTORS SETTINGS

View File

@ -314,7 +314,7 @@
#define BED_ADJUSTMENT_UM_MAX 100
#define MESH_HOME_Z_CALIB 0.2
#define MESH_HOME_Z_SEARCH 5 //Z lift for homing, mesh bed leveling etc.
#define MESH_HOME_Z_SEARCH 5.0f // Z lift for homing, mesh bed leveling etc.
#define X_PROBE_OFFSET_FROM_EXTRUDER 23 // Z probe to nozzle X offset: -left +right
#define Y_PROBE_OFFSET_FROM_EXTRUDER 5 // Z probe to nozzle Y offset: -front +behind
@ -377,31 +377,27 @@
#define FARM_PREHEAT_HOTEND_TEMP 250
#define FARM_PREHEAT_HPB_TEMP 80
#define FARM_PREHEAT_FAN_SPEED 0
#define PLA_PREHEAT_HOTEND_TEMP 215
#define PLA_PREHEAT_HPB_TEMP 60
#define PLA_PREHEAT_FAN_SPEED 0
#define ASA_PREHEAT_HOTEND_TEMP 260
#define ASA_PREHEAT_HPB_TEMP 105
#define ABS_PREHEAT_HOTEND_TEMP 255
#define ABS_PREHEAT_HPB_TEMP 100
#define ABS_PREHEAT_FAN_SPEED 0
#define HIPS_PREHEAT_HOTEND_TEMP 220
#define HIPS_PREHEAT_HPB_TEMP 100
#define HIPS_PREHEAT_FAN_SPEED 0
#define PP_PREHEAT_HOTEND_TEMP 254
#define PP_PREHEAT_HPB_TEMP 100
#define PP_PREHEAT_FAN_SPEED 0
#define PET_PREHEAT_HOTEND_TEMP 230
#define PET_PREHEAT_HPB_TEMP 85
#define PET_PREHEAT_FAN_SPEED 0
#define FLEX_PREHEAT_HOTEND_TEMP 240
#define FLEX_PREHEAT_HPB_TEMP 50
#define FLEX_PREHEAT_FAN_SPEED 0
/*------------------------------------
THERMISTORS SETTINGS

View File

@ -315,7 +315,7 @@
#define BED_ADJUSTMENT_UM_MAX 100
#define MESH_HOME_Z_CALIB 0.2
#define MESH_HOME_Z_SEARCH 5 //Z lift for homing, mesh bed leveling etc.
#define MESH_HOME_Z_SEARCH 5.0f // Z lift for homing, mesh bed leveling etc.
#define X_PROBE_OFFSET_FROM_EXTRUDER 23 // Z probe to nozzle X offset: -left +right
#define Y_PROBE_OFFSET_FROM_EXTRUDER 5 // Z probe to nozzle Y offset: -front +behind
@ -378,31 +378,27 @@
#define FARM_PREHEAT_HOTEND_TEMP 250
#define FARM_PREHEAT_HPB_TEMP 80
#define FARM_PREHEAT_FAN_SPEED 0
#define PLA_PREHEAT_HOTEND_TEMP 215
#define PLA_PREHEAT_HPB_TEMP 60
#define PLA_PREHEAT_FAN_SPEED 0
#define ASA_PREHEAT_HOTEND_TEMP 260
#define ASA_PREHEAT_HPB_TEMP 105
#define ABS_PREHEAT_HOTEND_TEMP 255
#define ABS_PREHEAT_HPB_TEMP 100
#define ABS_PREHEAT_FAN_SPEED 0
#define HIPS_PREHEAT_HOTEND_TEMP 220
#define HIPS_PREHEAT_HPB_TEMP 100
#define HIPS_PREHEAT_FAN_SPEED 0
#define PP_PREHEAT_HOTEND_TEMP 254
#define PP_PREHEAT_HPB_TEMP 100
#define PP_PREHEAT_FAN_SPEED 0
#define PET_PREHEAT_HOTEND_TEMP 230
#define PET_PREHEAT_HPB_TEMP 85
#define PET_PREHEAT_FAN_SPEED 0
#define FLEX_PREHEAT_HOTEND_TEMP 240
#define FLEX_PREHEAT_HPB_TEMP 50
#define FLEX_PREHEAT_FAN_SPEED 0
/*------------------------------------
THERMISTORS SETTINGS

View File

@ -422,7 +422,7 @@
#define BED_ADJUSTMENT_UM_MAX 100
#define MESH_HOME_Z_CALIB 0.2
#define MESH_HOME_Z_SEARCH 5 //Z lift for homing, mesh bed leveling etc.
#define MESH_HOME_Z_SEARCH 5.0f // Z lift for homing, mesh bed leveling etc.
#define X_PROBE_OFFSET_FROM_EXTRUDER 23 // Z probe to nozzle X offset: -left +right
#define Y_PROBE_OFFSET_FROM_EXTRUDER 5 // Z probe to nozzle Y offset: -front +behind
@ -487,31 +487,27 @@
#define FARM_PREHEAT_HOTEND_TEMP 250
#define FARM_PREHEAT_HPB_TEMP 80
#define FARM_PREHEAT_FAN_SPEED 0
#define PLA_PREHEAT_HOTEND_TEMP 215
#define PLA_PREHEAT_HPB_TEMP 60
#define PLA_PREHEAT_FAN_SPEED 0
#define ASA_PREHEAT_HOTEND_TEMP 260
#define ASA_PREHEAT_HPB_TEMP 105
#define ABS_PREHEAT_HOTEND_TEMP 255
#define ABS_PREHEAT_HPB_TEMP 100
#define ABS_PREHEAT_FAN_SPEED 0
#define HIPS_PREHEAT_HOTEND_TEMP 220
#define HIPS_PREHEAT_HPB_TEMP 100
#define HIPS_PREHEAT_FAN_SPEED 0
#define PP_PREHEAT_HOTEND_TEMP 254
#define PP_PREHEAT_HPB_TEMP 100
#define PP_PREHEAT_FAN_SPEED 0
#define PET_PREHEAT_HOTEND_TEMP 230
#define PET_PREHEAT_HPB_TEMP 85
#define PET_PREHEAT_FAN_SPEED 0
#define FLEX_PREHEAT_HOTEND_TEMP 240
#define FLEX_PREHEAT_HPB_TEMP 50
#define FLEX_PREHEAT_FAN_SPEED 0
/*------------------------------------
THERMISTORS SETTINGS

View File

@ -424,7 +424,7 @@
#define BED_ADJUSTMENT_UM_MAX 100
#define MESH_HOME_Z_CALIB 0.2
#define MESH_HOME_Z_SEARCH 5 //Z lift for homing, mesh bed leveling etc.
#define MESH_HOME_Z_SEARCH 5.0f // Z lift for homing, mesh bed leveling etc.
#define X_PROBE_OFFSET_FROM_EXTRUDER 23 // Z probe to nozzle X offset: -left +right
#define Y_PROBE_OFFSET_FROM_EXTRUDER 5 // Z probe to nozzle Y offset: -front +behind
@ -489,31 +489,27 @@
#define FARM_PREHEAT_HOTEND_TEMP 250
#define FARM_PREHEAT_HPB_TEMP 80
#define FARM_PREHEAT_FAN_SPEED 0
#define PLA_PREHEAT_HOTEND_TEMP 215
#define PLA_PREHEAT_HPB_TEMP 60
#define PLA_PREHEAT_FAN_SPEED 0
#define ASA_PREHEAT_HOTEND_TEMP 260
#define ASA_PREHEAT_HPB_TEMP 105
#define ABS_PREHEAT_HOTEND_TEMP 255
#define ABS_PREHEAT_HPB_TEMP 100
#define ABS_PREHEAT_FAN_SPEED 0
#define HIPS_PREHEAT_HOTEND_TEMP 220
#define HIPS_PREHEAT_HPB_TEMP 100
#define HIPS_PREHEAT_FAN_SPEED 0
#define PP_PREHEAT_HOTEND_TEMP 254
#define PP_PREHEAT_HPB_TEMP 100
#define PP_PREHEAT_FAN_SPEED 0
#define PET_PREHEAT_HOTEND_TEMP 230
#define PET_PREHEAT_HPB_TEMP 85
#define PET_PREHEAT_FAN_SPEED 0
#define FLEX_PREHEAT_HOTEND_TEMP 240
#define FLEX_PREHEAT_HPB_TEMP 50
#define FLEX_PREHEAT_FAN_SPEED 0
/*------------------------------------
THERMISTORS SETTINGS

View File

@ -1,4 +1,4 @@
#!/bin/sh
#!/bin/bash
#
# postbuild.sh - multi-language support script
# Generate binary with secondary language.

View File

@ -1,4 +1,4 @@
#!/bin/sh
#!/bin/bash
#
# fw-clean.sh - multi-language support script
# Remove all firmware output files from lang folder.

View File

@ -1,4 +1,4 @@
#!/bin/sh
#!/bin/bash
#
# lang-add.sh - multi-language support script
# add new texts from list (lang_add.txt) to all dictionary files

View File

@ -1,4 +1,4 @@
#!/bin/sh
#!/bin/bash
#
# lang_check.sh - multi-language support script
# check lang_xx.bin (language binary file)

View File

@ -1,4 +1,4 @@
#!/bin/sh
#!/bin/bash
#
# lang-export.sh - multi-language support script
# for generating lang_xx.po

View File

@ -1,4 +1,4 @@
#!/bin/sh
#!/bin/bash
#
# lang-import.sh - multi-language support script
# for importing translated xx.po

View File

@ -8,10 +8,10 @@
"[0;0] point offset"
#MSG_CRASH_DET_ONLY_IN_NORMAL c=20 r=4
"Crash detection can\rbe turned on only in\rNormal mode"
"Crash detection can\x0abe turned on only in\x0aNormal mode"
#MSG_CRASH_DET_STEALTH_FORCE_OFF c=20 r=4
"WARNING:\rCrash detection\rdisabled in\rStealth mode"
"WARNING:\x0aCrash detection\x0adisabled in\x0aStealth mode"
#
">Cancel"
@ -930,3 +930,147 @@
#MSG_OFF
" [off]"
#
"Back"
#
"Checks"
#
"False triggering"
#
"FINDA:"
#
"Firmware [none]"
#
"Firmware [strict]"
#
"Firmware [warn]"
#
"HW Setup"
#
"IR:"
#
"Magnets comp.[N/A]"
#
"Magnets comp.[Off]"
#
"Magnets comp. [On]"
#
"Mesh [3x3]"
#
"Mesh [7x7]"
#
"Mesh bed leveling"
#
"MK3S firmware detected on MK3 printer"
#
"MMU Mode [Normal]"
#
"MMU Mode[Stealth]"
#
"Mode change in progress ..."
#
"Model [none]"
#
"Model [strict]"
#
"Model [warn]"
#
"Nozzle d. [0.25]"
#
"Nozzle d. [0.40]"
#
"Nozzle d. [0.60]"
#
"Nozzle [none]"
#
"Nozzle [strict]"
#
"Nozzle [warn]"
#
"G-code sliced for a different level. Continue?"
#
"G-code sliced for a different level. Please re-slice the model again. Print cancelled."
#
"G-code sliced for a different printer type. Continue?"
#
"G-code sliced for a different printer type. Please re-slice the model again. Print cancelled."
#
"G-code sliced for a newer firmware. Continue?"
#
"G-code sliced for a newer firmware. Please update the firmware. Print cancelled."
#
"PINDA:"
#
"Preheating to cut"
#
"Preheating to eject"
#
"Printer nozzle diameter differs from the G-code. Continue?"
#
"Printer nozzle diameter differs from the G-code. Please check the value in settings. Print cancelled."
#
"Rename"
#
"Select"
#
"Sensor info"
#
"Sheet"
#
"Sound [assist]"
#
"Steel sheets"
#
"Z-correct:"
#
"Z-probe nr. [1]"
#
"Z-probe nr. [3]"

View File

@ -11,12 +11,12 @@
"[0;0] odsazeni bodu"
#MSG_CRASH_DET_ONLY_IN_NORMAL c=20 r=4
"Crash detection can\rbe turned on only in\rNormal mode"
"Crash detekce muze\rbyt zapnuta pouze v\rNormal modu"
"Crash detection can\x0abe turned on only in\x0aNormal mode"
"Crash detekce muze\x0abyt zapnuta pouze v\x0aNormal modu"
#MSG_CRASH_DET_STEALTH_FORCE_OFF c=20 r=4
"WARNING:\rCrash detection\rdisabled in\rStealth mode"
"POZOR:\rCrash detekce\rdeaktivovana ve\rStealth modu"
"WARNING:\x0aCrash detection\x0adisabled in\x0aStealth mode"
"POZOR:\x0aCrash detekce\x0adeaktivovana ve\x0aStealth modu"
#
">Cancel"
@ -24,7 +24,7 @@
#MSG_BABYSTEPPING_Z c=15
"Adjusting Z:"
"Dostavovani Z:"
"Doladeni Z:"
#MSG_SELFTEST_CHECK_ALLCORRECT c=20
"All correct "
@ -316,7 +316,7 @@
#
"Filam. runouts"
"Vypadky filamentu"
"Vypadky filam."
#MSG_FILAMENT_CLEAN c=20 r=2
"Filament extruding & with correct color?"
@ -688,7 +688,7 @@
#
"Nozzle FAN"
"Trysk. vent."
"Tryska V."
#MSG_PAUSE_PRINT
"Pause print"
@ -792,7 +792,7 @@
#MSG_WIZARD_HEATING c=20 r=3
"Preheating nozzle. Please wait."
"Predehrivam trysku. Prosim cekejte."
"Predehrev trysky. Prosim cekejte."
#
"Please upgrade."
@ -812,15 +812,15 @@
#
"Preheating to load"
"Predehrivam k zavedeni"
"Predehrev k zavedeni"
#
"Preheating to unload"
"Predehrivam k vyjmuti"
"Predehrev k vyjmuti"
#MSG_SELFTEST_PRINT_FAN_SPEED c=18
"Print fan:"
"Tiskovy vent.:"
"Tiskovy v:"
#MSG_CARD_MENU
"Print from SD"
@ -828,7 +828,7 @@
#
"Press the knob"
"Stisknete tlacitko"
"Stisknete hl. tlacitko"
#MSG_PRINT_PAUSED c=20 r=1
"Print paused"
@ -844,7 +844,7 @@
#
"Print FAN"
"Tiskovy vent."
"Tiskovy v"
#MSG_PRUSA3D
"prusa3d.com"
@ -1240,4 +1240,196 @@
#MSG_OFF
" [off]"
" [vyp]"
#
"Back"
"Zpet"
#
"Checks"
"Kontrola"
#
"False triggering"
"Falesne spusteni"
#
"FINDA:"
"\x00"
#
"Firmware [none]"
"Firmware [Zadne]"
#
"Firmware [strict]"
"Firmware [Prisne]"
#
"Firmware [warn]"
"Firmware[Varovat]"
#
"HW Setup"
"HW nastaveni"
#
"IR:"
"\x00"
#
"Magnets comp.[N/A]"
"Komp. magnetu[N/A]"
#
"Magnets comp.[Off]"
"Komp. magnetu[Vyp]"
#
"Magnets comp. [On]"
"Komp. magnetu[Zap]"
#
"Mesh [3x3]"
"Mesh [3x3]"
#
"Mesh [7x7]"
"Mesh [7x7]"
#
"Mesh bed leveling"
"Mesh Bed Leveling"
#
"MK3S firmware detected on MK3 printer"
"MK3S firmware detekovan na tiskarne MK3"
#
"MMU Mode [Normal]"
"MMU mod [Normal]"
#
"MMU Mode[Stealth]"
"MMU Mod [Tichy]"
#
"Mode change in progress ..."
"Probiha zmena modu..."
#
"Model [none]"
"Model [Zadne]"
#
"Model [strict]"
"Model [Prisne]"
#
"Model [warn]"
"Model [Varovat]"
#
"Nozzle d. [0.25]"
"Tryska [0.25]"
#
"Nozzle d. [0.40]"
"Tryska [0.40]"
#
"Nozzle d. [0.60]"
"Tryska [0.60]"
#
"Nozzle [none]"
"Tryska [Zadne]"
#
"Nozzle [strict]"
"Tryska [Prisne]"
#
"Nozzle [warn]"
"Tryska [Varovat]"
#
"G-code sliced for a different level. Continue?"
"\x00"
#
"G-code sliced for a different level. Please re-slice the model again. Print cancelled."
"\x00"
#
"G-code sliced for a different printer type. Continue?"
"G-code je pripraven pro jiny typ tiskarny. Pokracovat?"
#
"G-code sliced for a different printer type. Please re-slice the model again. Print cancelled."
"G-code je pripraven pro jiny typ tiskarny. Prosim preslicujte model znovu. Tisk zrusen."
#
"G-code sliced for a newer firmware. Continue?"
"G-code je pripraven pro novejsi firmware. Pokracovat?"
#
"G-code sliced for a newer firmware. Please update the firmware. Print cancelled."
"G-code je pripraven pro novejsi firmware. Prosim aktualizujte firmware. Tisk zrusen."
#
"PINDA:"
"\x00"
#
"Preheating to cut"
"Predehrev k ustrizeni"
#
"Preheating to eject"
"Predehrev k vysunuti"
#
"Printer nozzle diameter differs from the G-code. Continue?"
"Prumer trysky tiskarny se lisi od G-code. Pokracovat?"
#
"Printer nozzle diameter differs from the G-code. Please check the value in settings. Print cancelled."
"Prumer trysky tiskarny se lisi od G-code. Prosim zkontrolujte nastaveni. Tisk zrusen."
#
"Rename"
"Prejmenovat"
#
"Select"
"Vybrat"
#
"Sensor info"
"Senzor info"
#
"Sheet"
"Plat"
#
"Sound [assist]"
"Zvuk [Asist.]"
#
"Steel sheets"
"Tiskove platy"
#
"Z-correct:"
"Korekce Z:"
#
"Z-probe nr. [1]"
"Pocet mereni Z [1]"
#
"Z-probe nr. [3]"
"Pocet mereni Z [3]"

View File

@ -11,12 +11,12 @@
"[0;0] Punktversatz"
#MSG_CRASH_DET_ONLY_IN_NORMAL c=20 r=4
"Crash detection can\rbe turned on only in\rNormal mode"
"Crash Erkennung kann\rnur im Modus Normal\rgenutzt werden"
"Crash detection can\x0abe turned on only in\x0aNormal mode"
"Crash Erkennung kann\x0anur im Modus Normal\x0agenutzt werden"
#MSG_CRASH_DET_STEALTH_FORCE_OFF c=20 r=4
"WARNING:\rCrash detection\rdisabled in\rStealth mode"
"WARNUNG:\rCrash Erkennung\rdeaktiviert im\rStealth Modus"
"WARNING:\x0aCrash detection\x0adisabled in\x0aStealth mode"
"WARNUNG:\x0aCrash Erkennung\x0adeaktiviert im\x0aStealth Modus"
#
">Cancel"
@ -24,11 +24,11 @@
#MSG_BABYSTEPPING_Z c=15
"Adjusting Z:"
"Z Einstellung:"
"Z Anpassen:"
#MSG_SELFTEST_CHECK_ALLCORRECT c=20
"All correct "
"Alles richtig "
"Alles richtig "
#MSG_WIZARD_DONE c=20 r=8
"All is done. Happy printing!"
@ -688,7 +688,7 @@
#
"Nozzle FAN"
"Duesen Luefter"
"Duesevent."
#MSG_PAUSE_PRINT
"Pause print"
@ -844,7 +844,7 @@
#
"Print FAN"
"Druckluefter"
"Druckvent"
#MSG_PRUSA3D
"prusa3d.com"
@ -884,7 +884,7 @@
#MSG_BED_CORRECTION_RIGHT c=14 r=1
"Right side[um]"
"Rechts [um]"
"Rechts [um]"
#MSG_SECOND_SERIAL_ON c=17 r=1
"RPi port [on]"
@ -928,7 +928,7 @@
#MSG_SELFTEST
"Selftest "
"Selbsttest "
"Selbsttest "
#MSG_SELFTEST_ERROR
"Selftest error !"
@ -936,7 +936,7 @@
#MSG_SELFTEST_FAILED c=20
"Selftest failed "
"Selbsttest misslung "
"Selbsttest misslang "
#MSG_FORCE_SELFTEST c=20 r=8
"Selftest will be run to calibrate accurate sensorless rehoming."
@ -972,7 +972,7 @@
#MSG_SORT_NONE c=17 r=1
"Sort [none]"
"Sort. [Keine]"
"Sort. [ohne]"
#MSG_SORT_TIME c=17 r=1
"Sort [time]"
@ -980,7 +980,7 @@
#
"Severe skew"
"Schwerer Schraeglauf"
"Schwer.Schr"
#MSG_SORT_ALPHA c=17 r=1
"Sort [alphabet]"
@ -996,7 +996,7 @@
#
"Slight skew"
"Leichter Schraeglauf"
"Leicht.Schr"
#MSG_SOUND_MUTE c=17 r=1
"Sound [mute]"
@ -1036,7 +1036,7 @@
#MSG_STOPPED
"STOPPED. "
"GESTOPPT. "
"GESTOPPT."
#MSG_SUPPORT
"Support"
@ -1048,15 +1048,15 @@
#MSG_TEMP_CALIBRATION c=20 r=1
"Temp. cal. "
"Temp Kalib. "
"Temp Kalib. "
#MSG_TEMP_CALIBRATION_ON c=20 r=1
"Temp. cal. [on]"
"Temp. Kal. [AN]"
"Temp. Kal. [an]"
#MSG_TEMP_CALIBRATION_OFF c=20 r=1
"Temp. cal. [off]"
"Temp. Kal. [AUS]"
"Temp. Kal. [aus]"
#MSG_CALIBRATION_PINDA_MENU c=17 r=1
"Temp. calibration"
@ -1241,4 +1241,196 @@
#MSG_OFF
" [off]"
" [aus]"
#
"Back"
"Zurueck"
#
"Checks"
"\x00"
#
"False triggering"
"Falschtriggerung"
#
"FINDA:"
"\x00"
#
"Firmware [none]"
"Firmware [ohne]"
#
"Firmware [strict]"
"Firmware [streng]"
#
"Firmware [warn]"
"\x00"
#
"HW Setup"
"HW Einstellungen"
#
"IR:"
"\x00"
#
"Magnets comp.[N/A]"
"Magnet Komp. [nv]"
#
"Magnets comp.[Off]"
"Magnet Komp. [Aus]"
#
"Magnets comp. [On]"
"Magnet Komp. [An]"
#
"Mesh [3x3]"
"\x00"
#
"Mesh [7x7]"
"\x00"
#
"Mesh bed leveling"
"Mesh Bett Ausgleich"
#
"MK3S firmware detected on MK3 printer"
"MK3S-Firmware auf MK3-Drucker erkannt"
#
"MMU Mode [Normal]"
"MMU Modus[Normal]"
#
"MMU Mode[Stealth]"
"MMU Mod.[Stealth]"
#
"Mode change in progress ..."
"Moduswechsel erfolgt..."
#
"Model [none]"
"Modell [ohne]"
#
"Model [strict]"
"Modell [streng]"
#
"Model [warn]"
"Modell [warn]"
#
"Nozzle d. [0.25]"
"Duese D. [0.25]"
#
"Nozzle d. [0.40]"
"Duese D. [0.40]"
#
"Nozzle d. [0.60]"
"Duese D. [0.60]"
#
"Nozzle [none]"
"Duese [ohne]"
#
"Nozzle [strict]"
"Duese [streng]"
#
"Nozzle [warn]"
"Duese [warn]"
#
"G-code sliced for a different level. Continue?"
"G-Code ist fuer einen anderen Level geslict. Fortfahren?"
#
"G-code sliced for a different level. Please re-slice the model again. Print cancelled."
"G-Code ist fuer einen anderen Level geslict. Bitte slicen Sie das Modell erneut. Druck abgebrochen."
#
"G-code sliced for a different printer type. Continue?"
"G-Code ist fuer einen anderen Drucker geslict. Fortfahren?"
#
"G-code sliced for a different printer type. Please re-slice the model again. Print cancelled."
"G-Code ist fuer einen anderen Drucker geslict. Bitte slicen Sie das Modell erneut. Druck abgebrochen."
#
"G-code sliced for a newer firmware. Continue?"
"G-Code ist fuer eine neuere Firmware geslict. Fortfahren?"
#
"G-code sliced for a newer firmware. Please update the firmware. Print cancelled."
"G-Code ist fuer eine neuere Firmware geslict. Bitte die Firmware updaten. Druck abgebrochen."
#
"PINDA:"
"\x00"
#
"Preheating to cut"
"Heizen zum Schnitt"
#
"Preheating to eject"
"Heizen zum Auswurf"
#
"Printer nozzle diameter differs from the G-code. Continue?"
"Der Durchmesser der Druckerduese weicht vom G-Code ab. Fortfahren?"
#
"Printer nozzle diameter differs from the G-code. Please check the value in settings. Print cancelled."
"Der Durchmesser der Druckerduese weicht vom G-Code ab. Bitte ueberpruefen Sie den Wert in den Einstellungen. Druck abgebrochen."
#
"Rename"
"Umbenennen"
#
"Select"
"Auswahl"
#
"Sensor info"
"Sensor Info"
#
"Sheet"
"Blech"
#
"Sound [assist]"
"Sound [Assist]"
#
"Steel sheets"
"Stahlbleche"
#
"Z-correct:"
"Z-Korrektur:"
#
"Z-probe nr. [1]"
"Z-Probe Nr. [1]"
#
"Z-probe nr. [3]"
"Z-Probe Nr. [3]"

View File

@ -11,12 +11,12 @@
"[0;0] punto offset"
#MSG_CRASH_DET_ONLY_IN_NORMAL c=20 r=4
"Crash detection can\rbe turned on only in\rNormal mode"
"Dec. choque\rpuede ser activada solo en\rModo normal"
"Crash detection can\x0abe turned on only in\x0aNormal mode"
"Dec. choque puede\x0aser activada solo en\x0aModo normal"
#MSG_CRASH_DET_STEALTH_FORCE_OFF c=20 r=4
"WARNING:\rCrash detection\rdisabled in\rStealth mode"
"ATENCION:\rDec. choque\rdesactivada en\rModo silencio"
"WARNING:\x0aCrash detection\x0adisabled in\x0aStealth mode"
"ATENCION:\x0aDec. choque\x0adesactivada en\x0aModo silencio"
#
">Cancel"
@ -24,7 +24,7 @@
#MSG_BABYSTEPPING_Z c=15
"Adjusting Z:"
"Ajustar Z:"
"Ajustando Z:"
#MSG_SELFTEST_CHECK_ALLCORRECT c=20
"All correct "
@ -104,7 +104,7 @@
#MSG_BED
"Bed"
"Base calefactable "
"Base"
#MSG_MENU_BELT_STATUS c=15 r=1
"Belt status"
@ -216,7 +216,7 @@
#MSG_EXTRUDER_CORRECTION c=10
"E-correct:"
"E-correcion:"
"Correccion-E:"
#MSG_EJECT_FILAMENT c=17 r=1
"Eject filament"
@ -256,7 +256,7 @@
#MSG_SELFTEST_EXTRUDER_FAN_SPEED c=18
"Extruder fan:"
"Ventilador del extrusor:"
"Vent.extrusor:"
#MSG_INFO_EXTRUDER c=15 r=1
"Extruder info"
@ -568,7 +568,7 @@
#
"Measured skew"
"Desviacion medida:"
"Desviacion med:"
#
"MMU fails"
@ -648,7 +648,7 @@
#
"N/A"
"No disponible"
"N/A"
#MSG_NO
"No"
@ -672,7 +672,7 @@
#MSG_WIZARD_WILL_PREHEAT c=20 r=4
"Now I will preheat nozzle for PLA."
"Voy a precalentar la boquilla para PLA ahora."
"Ahora precalentare la boquilla para PLA."
#MSG_NOZZLE
"Nozzle"
@ -688,7 +688,7 @@
#
"Nozzle FAN"
"Ventilador de capa"
"Vent. capa"
#MSG_PAUSE_PRINT
"Pause print"
@ -820,7 +820,7 @@
#MSG_SELFTEST_PRINT_FAN_SPEED c=18
"Print fan:"
"Ventilador del fusor:"
"Vent.fusor:"
#MSG_CARD_MENU
"Print from SD"
@ -844,7 +844,7 @@
#
"Print FAN"
"Ventilador del extrusor"
"Vent.extr"
#MSG_PRUSA3D
"prusa3d.com"
@ -880,7 +880,7 @@
#MSG_RESUMING_PRINT c=20 r=1
"Resuming print"
"Resumiendo impresion"
"Continuando impresion"
#MSG_BED_CORRECTION_RIGHT c=14 r=1
"Right side[um]"
@ -972,15 +972,15 @@
#MSG_SORT_NONE c=17 r=1
"Sort [none]"
"Ordenar [nada]"
"Ordenar [ninguno]"
#MSG_SORT_TIME c=17 r=1
"Sort [time]"
"Ordenar [Fecha]"
"Ordenar [tiempo]"
#
"Severe skew"
"Inclinacion severa"
"Incl.severa"
#MSG_SORT_ALPHA c=17 r=1
"Sort [alphabet]"
@ -996,7 +996,7 @@
#
"Slight skew"
"Ligeramente inclinado"
"Liger.incl."
#MSG_SOUND_MUTE c=17 r=1
"Sound [mute]"
@ -1052,11 +1052,11 @@
#MSG_TEMP_CALIBRATION_ON c=20 r=1
"Temp. cal. [on]"
"Cal. temp. [ON]"
"Cal. temp. [on]"
#MSG_TEMP_CALIBRATION_OFF c=20 r=1
"Temp. cal. [off]"
"Cal. temp. [OFF]"
"Cal. temp. [off]"
#MSG_CALIBRATION_PINDA_MENU c=17 r=1
"Temp. calibration"
@ -1200,7 +1200,7 @@
#
"X-correct:"
"X-correcion:"
"Correccion-X:"
#MSG_BED_SKEW_OFFSET_DETECTION_PERFECT c=20 r=8
"XYZ calibration ok. X/Y axes are perpendicular. Congratulations!"
@ -1236,8 +1236,200 @@
#
"Y-correct:"
"Y-correcion:"
"Correccion-Y:"
#MSG_OFF
" [off]"
" [apagado]"
#
"Back"
"atras"
#
"Checks"
"Comprobaciones"
#
"False triggering"
"Falsa activacion"
#
"FINDA:"
"FINDA:"
#
"Firmware [none]"
"Firmware[ninguno]"
#
"Firmware [strict]"
"Firmware[estrict]"
#
"Firmware [warn]"
"Firmware [aviso]"
#
"HW Setup"
"Configuracion HW"
#
"IR:"
"\x00"
#
"Magnets comp.[N/A]"
"Comp. imanes [N/A]"
#
"Magnets comp.[Off]"
"Comp. imanes [Off]"
#
"Magnets comp. [On]"
"Comp. imanes [On]"
#
"Mesh [3x3]"
"Malla [3x3]"
#
"Mesh [7x7]"
"Malla [7x7]"
#
"Mesh bed leveling"
"Nivelacion Malla Base"
#
"MK3S firmware detected on MK3 printer"
"Firmware MK3S detectado en impresora MK3"
#
"MMU Mode [Normal]"
"Modo MMU [Normal]"
#
"MMU Mode[Stealth]"
"Modo MMU[Silenci]"
#
"Mode change in progress ..."
"Cambio de modo progresando ..."
#
"Model [none]"
"Modelo [ninguno]"
#
"Model [strict]"
"Modelo [estricto]"
#
"Model [warn]"
"Modelo [aviso]"
#
"Nozzle d. [0.25]"
"Diam. nozzl[0.25]"
#
"Nozzle d. [0.40]"
"Diam. nozzl[0.40]"
#
"Nozzle d. [0.60]"
"Diam. nozzl[0.60]"
#
"Nozzle [none]"
"Nozzle [ninguno]"
#
"Nozzle [strict]"
"Nozzle [estricto]"
#
"Nozzle [warn]"
"Nozzle [aviso]"
#
"G-code sliced for a different level. Continue?"
"Codigo G laminado para un nivel diferente. ?Continuar?"
#
"G-code sliced for a different level. Please re-slice the model again. Print cancelled."
"Codigo G laminado para un nivel diferente. Por favor relamina el modelo de nuevo. Impresion cancelada."
#
"G-code sliced for a different printer type. Continue?"
"Codigo G laminado para un tipo de impresora diferente. ?Continuar?"
#
"G-code sliced for a different printer type. Please re-slice the model again. Print cancelled."
"Codigo G laminado para una impresora diferente. Por favor relamina el modelo de nuevo. Impresion cancelada."
#
"G-code sliced for a newer firmware. Continue?"
"Codigo G laminado para nuevo firmware. ?Continuar?"
#
"G-code sliced for a newer firmware. Please update the firmware. Print cancelled."
"Codigo G laminado para nuevo firmware. Por favor actualiza el firmware. Impresion cancelada."
#
"PINDA:"
"PINDA:"
#
"Preheating to cut"
"Precalentando para laminar"
#
"Preheating to eject"
"Precalentar para expulsar"
#
"Printer nozzle diameter differs from the G-code. Continue?"
"Diametro nozzle impresora difiere de cod.G. ?Continuar?"
#
"Printer nozzle diameter differs from the G-code. Please check the value in settings. Print cancelled."
"Diametro nozzle Impresora difiere de cod.G. Comprueba los valores en ajustes. Impresion cancelada."
#
"Rename"
"Renombrar"
#
"Select"
"Seleccionar"
#
"Sensor info"
"Info sensor"
#
"Sheet"
"Lamina"
#
"Sound [assist]"
"Sonido [asistido]"
#
"Steel sheets"
"Lamina de acero"
#
"Z-correct:"
"Correccion-Z:"
#
"Z-probe nr. [1]"
"Z-sensor nr. [1]"
#
"Z-probe nr. [3]"
"Z-sensor nr. [3]"

View File

@ -11,12 +11,12 @@
"Offset point [0;0]"
#MSG_CRASH_DET_ONLY_IN_NORMAL c=20 r=4
"Crash detection can\rbe turned on only in\rNormal mode"
"La detection de crash peut etre\ractive seulement\ren mode Normal"
"Crash detection can\x0abe turned on only in\x0aNormal mode"
"La detection de\x0acrash peut etre\x0aactive seulement en\x0amode Normal"
#MSG_CRASH_DET_STEALTH_FORCE_OFF c=20 r=4
"WARNING:\rCrash detection\rdisabled in\rStealth mode"
"ATTENTION :\rDetection de crash\r desactivee en\rmode Furtif"
"WARNING:\x0aCrash detection\x0adisabled in\x0aStealth mode"
"ATTENTION:\x0aDetection de crash\x0adesactivee en\x0amode Furtif"
#
">Cancel"
@ -24,7 +24,7 @@
#MSG_BABYSTEPPING_Z c=15
"Adjusting Z:"
"Ajust. de Z:"
"Ajuster Z :"
#MSG_SELFTEST_CHECK_ALLCORRECT c=20
"All correct "
@ -172,15 +172,15 @@
#MSG_CRASHDETECT_ON
"Crash det. [on]"
"Detect. crash[on]"
"Detect.crash [on]"
#MSG_CRASHDETECT_NA
"Crash det. [N/A]"
"Detect. crash [N/A]"
"Detect.crash[N/A]"
#MSG_CRASHDETECT_OFF
"Crash det. [off]"
"Detect. crash[off]"
"Detect.crash[off]"
#MSG_CRASH_DETECTED c=20 r=1
"Crash detected."
@ -288,7 +288,7 @@
#MSG_FAN_SPEED c=14
"Fan speed"
"Vitesse ventil"
"Vitesse vent."
#MSG_SELFTEST_FAN c=20
"Fan test"
@ -604,7 +604,7 @@
#MSG_STEALTH_MODE_ON
"Mode [Stealth]"
"Mode [Furtif]"
"Mode [Furtif]"
#MSG_AUTO_MODE_ON
"Mode [auto power]"
@ -612,7 +612,7 @@
#MSG_SILENT_MODE_OFF
"Mode [high power]"
"Mode [haute puiss]"
"Mode[haute puiss]"
#
"MMU2 connected"
@ -688,7 +688,7 @@
#
"Nozzle FAN"
"Ventilateur buse"
"Vent. buse"
#MSG_PAUSE_PRINT
"Pause print"
@ -804,7 +804,7 @@
#
"Power failures"
"Coupures de courant"
"Coup.de courant"
#MSG_PRINT_ABORTED c=20
"Print aborted"
@ -820,7 +820,7 @@
#MSG_SELFTEST_PRINT_FAN_SPEED c=18
"Print fan:"
"Ventilo impr. :"
"Vent.impr:"
#MSG_CARD_MENU
"Print from SD"
@ -844,7 +844,7 @@
#
"Print FAN"
"Ventilo impression"
"Vent.impr"
#MSG_PRUSA3D
"prusa3d.com"
@ -868,7 +868,7 @@
#MSG_CALIBRATE_BED_RESET
"Reset XYZ calibr."
"Reinit. calibr. XYZ"
"Reinit.calibr. XYZ"
#MSG_BED_CORRECTION_RESET
"Reset"
@ -888,11 +888,11 @@
#MSG_SECOND_SERIAL_ON c=17 r=1
"RPi port [on]"
"Port RPi [on]"
"Port RPi [on]"
#MSG_SECOND_SERIAL_OFF c=17 r=1
"RPi port [off]"
"Port RPi [off]"
"Port RPi [off]"
#MSG_WIZARD_RERUN c=20 r=7
"Running Wizard will delete current calibration results and start from the beginning. Continue?"
@ -904,7 +904,7 @@
#MSG_TOSHIBA_FLASH_AIR_COMPATIBILITY_ON c=19 r=1
"SD card [flshAir]"
"Carte SD [flashAir]"
"CarteSD[flashAir]"
#
"Right"
@ -972,7 +972,7 @@
#MSG_SORT_NONE c=17 r=1
"Sort [none]"
"Tri : [aucun]"
"Tri [aucun]"
#MSG_SORT_TIME c=17 r=1
"Sort [time]"
@ -980,7 +980,7 @@
#
"Severe skew"
"Deviation severe"
"Deviat.sev."
#MSG_SORT_ALPHA c=17 r=1
"Sort [alphabet]"
@ -992,15 +992,15 @@
#MSG_SOUND_LOUD c=17 r=1
"Sound [loud]"
"Son [fort]"
"Son [fort]"
#
"Slight skew"
"Deviation legere"
"Deviat.leg."
#MSG_SOUND_MUTE c=17 r=1
"Sound [mute]"
"Son [muet]"
"Son [muet]"
#
"Some problem encountered, Z-leveling enforced ..."
@ -1008,11 +1008,11 @@
#MSG_SOUND_ONCE c=17 r=1
"Sound [once]"
"Son [une fois]"
"Son [une fois]"
#MSG_SOUND_SILENT c=17 r=1
"Sound [silent]"
"Son [silencieux]"
"Son [silencieux]"
#MSG_SPEED
"Speed"
@ -1240,4 +1240,196 @@
#MSG_OFF
" [off]"
" [off]"
#
"Back"
"Retour"
#
"Checks"
"Verifications"
#
"False triggering"
"Faux declenchement"
#
"FINDA:"
"FINDA:"
#
"Firmware [none]"
"Firmware [aucune]"
#
"Firmware [strict]"
"Firmware[stricte]"
#
"Firmware [warn]"
"Firmware [avert]"
#
"HW Setup"
"Config HW"
#
"IR:"
"IR:"
#
"Magnets comp.[N/A]"
"Comp. aimants[N/A]"
#
"Magnets comp.[Off]"
"Comp. aimants[Off]"
#
"Magnets comp. [On]"
"Comp. aimants [On]"
#
"Mesh [3x3]"
"\x00"
#
"Mesh [7x7]"
"\x00"
#
"Mesh bed leveling"
"\x00"
#
"MK3S firmware detected on MK3 printer"
"Firmware MK3S detecte sur imprimante MK3"
#
"MMU Mode [Normal]"
"Mode MMU [Normal]"
#
"MMU Mode[Stealth]"
"Mode MMU [Furtif]"
#
"Mode change in progress ..."
"Changement de mode en cours..."
#
"Model [none]"
"Modele [aucune]"
#
"Model [strict]"
"Modele [stricte]"
#
"Model [warn]"
"Modele [avert]"
#
"Nozzle d. [0.25]"
"Diam. buse [0.25]"
#
"Nozzle d. [0.40]"
"Diam. buse [0.40]"
#
"Nozzle d. [0.60]"
"Diam. buse [0.60]"
#
"Nozzle [none]"
"Buse [aucune]"
#
"Nozzle [strict]"
"Buse [stricte]"
#
"Nozzle [warn]"
"Buse [avert]"
#
"G-code sliced for a different level. Continue?"
"\x00"
#
"G-code sliced for a different level. Please re-slice the model again. Print cancelled."
"\x00"
#
"G-code sliced for a different printer type. Continue?"
"Le G-code a ete prepare pour une autre version de l'imprimante. Continuer?"
#
"G-code sliced for a different printer type. Please re-slice the model again. Print cancelled."
"Le G-code a ete prepare pour une autre version de l'imprimante. Veuillez decouper le modele a nouveau. L'impression a ete annulee. "
#
"G-code sliced for a newer firmware. Continue?"
"Le G-code a ete prepare pour une version plus recente du firmware. Continuer?"
#
"G-code sliced for a newer firmware. Please update the firmware. Print cancelled."
"Le G-code a ete prepare pour une version plus recente du firmware. Veuillez mettre a jour le firmware. L'impression annulee."
#
"PINDA:"
"PINDA:"
#
"Preheating to cut"
"Prechauffage pour couper"
#
"Preheating to eject"
"Prechauffage pour ejecter"
#
"Printer nozzle diameter differs from the G-code. Continue?"
"Diametre de la buse de l'imprimante different du G-Code. Continuer ?"
#
"Printer nozzle diameter differs from the G-code. Please check the value in settings. Print cancelled."
"Diametre de la buse de l'imprimante different du G-Code. Merci de verifier le parametre dans les reglages. Impression annulee."
#
"Rename"
"Renommer"
#
"Select"
"Selectionner"
#
"Sensor info"
"Info capteur"
#
"Sheet"
"Feuille"
#
"Sound [assist]"
"Son [Assist]"
#
"Steel sheets"
"Plaques en acier"
#
"Z-correct:"
"Correct-Z:"
#
"Z-probe nr. [1]"
"Sonde-Z num. [1]"
#
"Z-probe nr. [3]"
"Sonde-Z num. [3]"

View File

@ -11,12 +11,12 @@
"[0;0] punto offset"
#MSG_CRASH_DET_ONLY_IN_NORMAL c=20 r=4
"Crash detection can\rbe turned on only in\rNormal mode"
"Rilev. impatto\rattivabile solo\rin Modalita normale"
"Crash detection can\x0abe turned on only in\x0aNormal mode"
"Rilev. impatto\x0aattivabile solo\x0ain Modalita normale"
#MSG_CRASH_DET_STEALTH_FORCE_OFF c=20 r=4
"WARNING:\rCrash detection\rdisabled in\rStealth mode"
"ATTENZIONE:\rRilev. impatto\rdisattivato in\rModalita silenziosa"
"WARNING:\x0aCrash detection\x0adisabled in\x0aStealth mode"
"ATTENZIONE:\x0aRilev. impatto\x0adisattivato in\x0aModalita silenziosa"
#
">Cancel"
@ -256,7 +256,7 @@
#MSG_SELFTEST_EXTRUDER_FAN_SPEED c=18
"Extruder fan:"
"Ventola estrusore:"
"Ventola estr:"
#MSG_INFO_EXTRUDER c=15 r=1
"Extruder info"
@ -268,7 +268,7 @@
#
"Fail stats MMU"
"Statistiche fallimenti MMU"
"Stat.fall. MMU"
#MSG_FSENS_AUTOLOAD_ON c=17 r=1
"F. autoload [on]"
@ -284,11 +284,11 @@
#
"Fail stats"
"Statistiche fallimenti"
"Stat. fallimenti"
#MSG_FAN_SPEED c=14
"Fan speed"
"Velocita ventola"
"Velocita vent."
#MSG_SELFTEST_FAN c=20
"Fan test"
@ -296,7 +296,7 @@
#MSG_FANS_CHECK_ON c=17 r=1
"Fans check [on]"
"Controllo ventole [on]"
"Control.vent [on]"
#MSG_FANS_CHECK_OFF c=17 r=1
"Fans check [off]"
@ -304,7 +304,7 @@
#MSG_FSENSOR_ON
"Fil. sensor [on]"
"Sensor filam.[On]"
"Sensor filam.[on]"
#MSG_FSENSOR_NA
"Fil. sensor [N/A]"
@ -512,7 +512,7 @@
#MSG_BED_CORRECTION_LEFT c=14 r=1
"Left side [um]"
"Lato sinistro [um]"
"Sinistra [um]"
#
"Lin. correction"
@ -568,7 +568,7 @@
#
"Measured skew"
"Disassamento misurato"
"Deviazione mis"
#
"MMU fails"
@ -600,7 +600,7 @@
#
"MMU power fails"
"Mancanza corrente MMU"
"Manc. corr. MMU"
#MSG_STEALTH_MODE_ON
"Mode [Stealth]"
@ -628,15 +628,15 @@
#MSG_MOVE_X
"Move X"
"Muovi X"
"Sposta X"
#MSG_MOVE_Y
"Move Y"
"Muovi Y"
"Sposta Y"
#MSG_MOVE_Z
"Move Z"
"Muovi Z"
"Sposta Z"
#MSG_NO_MOVE
"No move."
@ -680,7 +680,7 @@
#MSG_DEFAULT_SETTINGS_LOADED c=20 r=4
"Old settings found. Default PID, Esteps etc. will be set."
"Sono state trovate impostazioni vecchie. I valori di default di PID, Esteps etc. saranno impostati"
"Sono state trovate impostazioni vecchie. Verranno impostati i valori predefiniti di PID, Esteps etc."
#
"Now remove the test print from steel sheet."
@ -820,7 +820,7 @@
#MSG_SELFTEST_PRINT_FAN_SPEED c=18
"Print fan:"
"Ventola di stampa:"
"Vent.stam:"
#MSG_CARD_MENU
"Print from SD"
@ -972,19 +972,19 @@
#MSG_SORT_NONE c=17 r=1
"Sort [none]"
"Ordina [none]"
"Ordina [nessuno]"
#MSG_SORT_TIME c=17 r=1
"Sort [time]"
"Ordina [time]"
"Ordina [tempo]"
#
"Severe skew"
"Disassamento grave"
"Devia.grave"
#MSG_SORT_ALPHA c=17 r=1
"Sort [alphabet]"
"Ordine [alfabet]"
"Ordine [alfabeti]"
#MSG_SORTING c=20 r=1
"Sorting files"
@ -996,7 +996,7 @@
#
"Slight skew"
"Disassamento lieve"
"Devia.lieve"
#MSG_SOUND_MUTE c=17 r=1
"Sound [mute]"
@ -1052,11 +1052,11 @@
#MSG_TEMP_CALIBRATION_ON c=20 r=1
"Temp. cal. [on]"
"Calib. temp. [ON]"
"Calib. temp. [on]"
#MSG_TEMP_CALIBRATION_OFF c=20 r=1
"Temp. cal. [off]"
"Calib. temp.[OFF]"
"Calib. temp.[off]"
#MSG_CALIBRATION_PINDA_MENU c=17 r=1
"Temp. calibration"
@ -1088,7 +1088,7 @@
#
"Total print time"
"Tempo di stampa totale"
"Tempo stampa totale"
#MSG_TUNE
"Tune"
@ -1112,7 +1112,7 @@
#MSG_UNLOAD_FILAMENT c=17
"Unload filament"
"Scarica filam."
"Scarica filamento"
#MSG_UNLOADING_FILAMENT c=20 r=1
"Unloading filament"
@ -1241,3 +1241,195 @@
#MSG_OFF
" [off]"
"\x00"
#
"Back"
"Indietro"
#
"Checks"
"Controlli"
#
"False triggering"
"Falso innesco"
#
"FINDA:"
"\x00"
#
"Firmware [none]"
"Firmware[nessuno]"
#
"Firmware [strict]"
"Firmware [esatto]"
#
"Firmware [warn]"
"Firmware [avviso]"
#
"HW Setup"
"Installazione HW"
#
"IR:"
"\x00"
#
"Magnets comp.[N/A]"
"Comp. Magneti[N/A]"
#
"Magnets comp.[Off]"
"Comp. Magneti[off]"
#
"Magnets comp. [On]"
"Comp. Magneti [on]"
#
"Mesh [3x3]"
"Griglia [3x3]"
#
"Mesh [7x7]"
"Griglia [7x7]"
#
"Mesh bed leveling"
"Mesh livel. letto"
#
"MK3S firmware detected on MK3 printer"
"Firmware MK3S rilevato su stampante MK3"
#
"MMU Mode [Normal]"
"Modalita MMU [Normale]"
#
"MMU Mode[Stealth]"
"Modalita MMU [Silenziosa]"
#
"Mode change in progress ..."
"Cambio modalita in corso ..."
#
"Model [none]"
"Modello [nessuno]"
#
"Model [strict]"
"Modello [esatto]"
#
"Model [warn]"
"Modello [avviso]"
#
"Nozzle d. [0.25]"
"Diam.Ugello[0.25]"
#
"Nozzle d. [0.40]"
"Diam.Ugello[0.40]"
#
"Nozzle d. [0.60]"
"Diam.Ugello[0.60]"
#
"Nozzle [none]"
"Ugello [nessuno]"
#
"Nozzle [strict]"
"Ugello [esatto]"
#
"Nozzle [warn]"
"Ugello [avviso]"
#
"G-code sliced for a different level. Continue?"
"G-code processato per un livello diverso. Continuare?"
#
"G-code sliced for a different level. Please re-slice the model again. Print cancelled."
"G-code processato per un livello diverso. Per favore esegui nuovamente lo slice del modello. Stampa annullata."
#
"G-code sliced for a different printer type. Continue?"
"G-code processato per una stampante diversa. Continuare?"
#
"G-code sliced for a different printer type. Please re-slice the model again. Print cancelled."
"G-code processato per una stampante diversa. Per favore esegui nuovamente lo slice del modello. Stampa annullata."
#
"G-code sliced for a newer firmware. Continue?"
"G-code processato per un firmware piu recente. Continuare?"
#
"G-code sliced for a newer firmware. Please update the firmware. Print cancelled."
"G-code processato per un firmware piu recente. Per favore aggiorna il firmware. Stampa annullata."
#
"PINDA:"
"\x00"
#
"Preheating to cut"
"Preriscaldamento per taglio"
#
"Preheating to eject"
"Preriscaldamento per espulsione"
#
"Printer nozzle diameter differs from the G-code. Continue?"
"Diametro ugello diverso da G-Code. Continuare?"
#
"Printer nozzle diameter differs from the G-code. Please check the value in settings. Print cancelled."
"Diametro ugello diverso dal G-Code. Controlla il valore nelle impostazioni. Stampa annullata."
#
"Rename"
"Rinomina"
#
"Select"
"Seleziona"
#
"Sensor info"
"Info Sensore"
#
"Sheet"
"Piano"
#
"Sound [assist]"
"Suono [assistito]"
#
"Steel sheets"
"Piani d'acciaio"
#
"Z-correct:"
"Correzione-Z:"
#
"Z-probe nr. [1]"
"Z-probe nr. [1]"
#
"Z-probe nr. [3]"
"Z-probe nr. [3]"

View File

@ -8,15 +8,15 @@
#MSG_MEASURED_OFFSET
"[0;0] point offset"
"[0;0] przesuniecie punktu"
"[0;0] przesun.punktu"
#MSG_CRASH_DET_ONLY_IN_NORMAL c=20 r=4
"Crash detection can\rbe turned on only in\rNormal mode"
"Wykrywanie zderzen moze\rbyc wlaczone tylko w\rtrybie Normalnym"
"Crash detection can\x0abe turned on only in\x0aNormal mode"
"Wykrywanie zderzen\x0amoze byc wlaczone\x0atylko w\x0atrybie Normalnym"
#MSG_CRASH_DET_STEALTH_FORCE_OFF c=20 r=4
"WARNING:\rCrash detection\rdisabled in\rStealth mode"
"UWAGA:\rWykrywanie zderzen\rwylaczone w\rtrybie Stealth"
"WARNING:\x0aCrash detection\x0adisabled in\x0aStealth mode"
"UWAGA:\x0aWykrywanie zderzen\x0awylaczone w\x0atrybie Stealth"
#
">Cancel"
@ -24,7 +24,7 @@
#MSG_BABYSTEPPING_Z c=15
"Adjusting Z:"
"Dostrajanie Z:"
"Ustawianie Z:"
#MSG_SELFTEST_CHECK_ALLCORRECT c=20
"All correct "
@ -44,7 +44,7 @@
#MSG_CONFIRM_CARRIAGE_AT_THE_TOP c=20 r=2
"Are left and right Z~carriages all up?"
"Obydwa konce osi dojechaly do gornych ogranicznikow?"
"Obydwa konce osi sa na szczycie?"
#MSG_AUTO_DEPLETE_ON c=17 r=1
"SpoolJoin [on]"
@ -216,7 +216,7 @@
#MSG_EXTRUDER_CORRECTION c=10
"E-correct:"
"Korekcja E:"
"Korekcja-E:"
#MSG_EJECT_FILAMENT c=17 r=1
"Eject filament"
@ -256,7 +256,7 @@
#MSG_SELFTEST_EXTRUDER_FAN_SPEED c=18
"Extruder fan:"
"Went. ekstrudera:"
"Went. ekstr:"
#MSG_INFO_EXTRUDER c=15 r=1
"Extruder info"
@ -688,7 +688,7 @@
#
"Nozzle FAN"
"Went. hotendu"
"Went. Hotend"
#MSG_PAUSE_PRINT
"Pause print"
@ -820,7 +820,7 @@
#MSG_SELFTEST_PRINT_FAN_SPEED c=18
"Print fan:"
"Went. wydruku:"
"Went.wydr:"
#MSG_CARD_MENU
"Print from SD"
@ -844,7 +844,7 @@
#
"Print FAN"
"Went. wydruku"
"Went.wydr"
#MSG_PRUSA3D
"prusa3d.com"
@ -972,19 +972,19 @@
#MSG_SORT_NONE c=17 r=1
"Sort [none]"
"Sortuj [brak]"
"Sortowanie [brak]"
#MSG_SORT_TIME c=17 r=1
"Sort [time]"
"Sortuj [czas]"
"Sortowanie [czas]"
#
"Severe skew"
"Znaczny skos"
"ZnacznySkos"
#MSG_SORT_ALPHA c=17 r=1
"Sort [alphabet]"
"Sortuj [alfabet]"
"Sortowan[alfabet]"
#MSG_SORTING c=20 r=1
"Sorting files"
@ -1032,7 +1032,7 @@
#MSG_STOP_PRINT
"Stop print"
"Zatrzymac druk"
"Przerwanie druku"
#MSG_STOPPED
"STOPPED. "
@ -1052,7 +1052,7 @@
#MSG_TEMP_CALIBRATION_ON c=20 r=1
"Temp. cal. [on]"
"Kalibr. temp.[wl]"
"Kalibr.temp. [wl]"
#MSG_TEMP_CALIBRATION_OFF c=20 r=1
"Temp. cal. [off]"
@ -1200,7 +1200,7 @@
#
"X-correct:"
"Korekcja X:"
"Korekcja-X:"
#MSG_BED_SKEW_OFFSET_DETECTION_PERFECT c=20 r=8
"XYZ calibration ok. X/Y axes are perpendicular. Congratulations!"
@ -1236,8 +1236,200 @@
#
"Y-correct:"
"Korekcja Y:"
"Korekcja-Y:"
#MSG_OFF
" [off]"
" [wyl]"
#
"Back"
"Wstecz"
#
"Checks"
"Testy"
#
"False triggering"
"Falszywy alarm"
#
"FINDA:"
"\x00"
#
"Firmware [none]"
"Firmware [brak]"
#
"Firmware [strict]"
"Firmware [restr.]"
#
"Firmware [warn]"
"Firmware[ostrzez]"
#
"HW Setup"
"Ustawienia HW"
#
"IR:"
"\x00"
#
"Magnets comp.[N/A]"
"Kor. magnesow [nd]"
#
"Magnets comp.[Off]"
"Kor. magnesow[wyl]"
#
"Magnets comp. [On]"
"Kor. magnesow [wl]"
#
"Mesh [3x3]"
"Siatka [3x3]"
#
"Mesh [7x7]"
"Siatka [7x7]"
#
"Mesh bed leveling"
"Poziomowanie wg siatki"
#
"MK3S firmware detected on MK3 printer"
"Wykryto firmware MK3S w drukarce MK3"
#
"MMU Mode [Normal]"
"Tryb MMU[Normaln]"
#
"MMU Mode[Stealth]"
"Tryb MMU[Stealth]"
#
"Mode change in progress ..."
"Trwa zmiana trybu..."
#
"Model [none]"
"Model [brak]"
#
"Model [strict]"
"Model [restrykc.]"
#
"Model [warn]"
"Model [ostrzez.]"
#
"Nozzle d. [0.25]"
"Sr. dyszy [0,25]"
#
"Nozzle d. [0.40]"
"Sr. dyszy [0,40]"
#
"Nozzle d. [0.60]"
"Sr. dyszy [0,60]"
#
"Nozzle [none]"
"Dysza [brak]"
#
"Nozzle [strict]"
"Dysza [restrykc.]"
#
"Nozzle [warn]"
"Dysza [ostrzez.]"
#
"G-code sliced for a different level. Continue?"
"\x00"
#
"G-code sliced for a different level. Please re-slice the model again. Print cancelled."
"G-code pociety na innym poziomie. Potnij model ponownie. Druk anulowany."
#
"G-code sliced for a different printer type. Continue?"
"G-code pociety dla innej drukarki. Kontynuowac?"
#
"G-code sliced for a different printer type. Please re-slice the model again. Print cancelled."
"G-code pociety dla drukarki innego typu. Potnij model ponownie. Druk anulowany."
#
"G-code sliced for a newer firmware. Continue?"
"G-code pociety dla nowszego firmware. Kontynuowac?"
#
"G-code sliced for a newer firmware. Please update the firmware. Print cancelled."
"G-code pociety dla nowszego firmware. Zaktualizuj firmware. Druk anulowany."
#
"PINDA:"
"\x00"
#
"Preheating to cut"
"Nagrzewanie do obciecia"
#
"Preheating to eject"
"Nagrzewanie do wysuniecia"
#
"Printer nozzle diameter differs from the G-code. Continue?"
"Srednica dyszy drukarki rozni sie od tej w G-code. Kontynuowac?"
#
"Printer nozzle diameter differs from the G-code. Please check the value in settings. Print cancelled."
"Srednica dyszy rozni sie od tej w G-code. Sprawdz ustawienia. Druk anulowany."
#
"Rename"
"Zmien nazwe"
#
"Select"
"Wybierz"
#
"Sensor info"
"Info o sensorach"
#
"Sheet"
"Plyta"
#
"Sound [assist]"
"Dzwiek [asyst.]"
#
"Steel sheets"
"Plyty stalowe"
#
"Z-correct:"
"Korekcja-Z:"
#
"Z-probe nr. [1]"
"Pomiar-Z [1]"
#
"Z-probe nr. [3]"
"Pomiar-Z [3]"

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,4 +1,4 @@
#!/bin/sh
#!/bin/bash
#
# progmem.sh - multi-language support script
# Examine content of progmem sections (default is progmem1).
@ -104,6 +104,7 @@ cat $PROGMEM.chr | \
sed 's/\\x1b/\\\\\\x1b/g;' | \
sed 's/\\x01/\\\\\\x01/g;' | \
sed 's/\\xf8/\\\\\\xf8/g;' | \
sed 's/\\x0a/\\\\\\x0a/g;' | \
sed 's/\\x00$/\n/;s/^/\"/;s/$/\"\\/'; \
) | sh > $PROGMEM.var