Added Hyperfine Bed Levleing and PINDAv2 Fix to MK25 3.1.3 firmware

This commit is contained in:
3d-gussner 2018-04-04 10:25:14 +02:00
parent 425450b381
commit d216983804
9 changed files with 13976 additions and 15071 deletions

View File

@ -11,8 +11,8 @@
#define FW_COMMIT_NR 309
// 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
#define FW_REPOSITORY "Unknown"
#define FW_DEV_VERSION FW_VERSION_GOLD
#define FW_REPOSITORY "Prusa3D/MK25"
#define FW_VERSION_FULL FW_VERSION "-" STR(FW_COMMIT_NR)
// Debug version has debugging enabled (the symbol DEBUG_BUILD is set).
@ -135,6 +135,13 @@
#define EEPROM_PRINTER_TYPE (EEPROM_POWER_COUNT_TOT - 2) // uint16
#define EEPROM_BOARD_TYPE (EEPROM_PRINTER_TYPE - 2) // uint16
// Hyperfine Bed Tuning
#define EEPROM_BED_CORRECTION_FRONT_LEFT (EEPROM_BOARD_TYPE - 1)
#define EEPROM_BED_CORRECTION_FRONT_RIGHT (EEPROM_BED_CORRECTION_FRONT_LEFT - 1)
#define EEPROM_BED_CORRECTION_REAR_RIGHT (EEPROM_BED_CORRECTION_FRONT_RIGHT - 1)
#define EEPROM_BED_CORRECTION_REAR_LEFT (EEPROM_BED_CORRECTION_REAR_RIGHT - 1)
// End Hyperfine Bed Tuning
//TMC2130 configuration
#define EEPROM_TMC_AXIS_SIZE //axis configuration block size
@ -182,7 +189,8 @@
//#define STRING_VERSION "1.0.2"
#define STRING_VERSION_CONFIG_H __DATE__ " " __TIME__ // build date and time
#define STRING_CONFIG_H_AUTHOR "(none, default config)" // Who made the changes.
#define STRING_CONFIG_H_AUTHOR "(3d-gussner,H)" // Who made the changes.
// H = Hyperfine
// SERIAL_PORT selects which serial port should be used for communication with the host.
// This allows the connection of wireless adapters (for instance) to non-default port pins.

View File

@ -353,18 +353,18 @@ void dcode_8()
if (i > 0) offs = eeprom_read_word(((uint16_t*)EEPROM_PROBE_TEMP_SHIFT) + (i - 1));
float foffs = ((float)offs) / axis_steps_per_unit[Z_AXIS];
offs = 1000 * foffs;
printf_P(PSTR("temp_pinda=%dC temp_shift=%dum\n"), 35 + i * 5, offs);
printf_P(PSTR("temp_pinda=%dC temp_shift=%dum\n"), 35 + i * 7, offs);
}
}
else if (strchr_pointer[1+1] == '!')
{
cal_status = 1;
eeprom_write_byte((uint8_t*)EEPROM_CALIBRATION_STATUS_PINDA, cal_status);
eeprom_write_word(((uint16_t*)EEPROM_PROBE_TEMP_SHIFT) + 0, 8); //40C - 20um - 8usteps
eeprom_write_word(((uint16_t*)EEPROM_PROBE_TEMP_SHIFT) + 1, 24); //45C - 60um - 24usteps
eeprom_write_word(((uint16_t*)EEPROM_PROBE_TEMP_SHIFT) + 2, 48); //50C - 120um - 48usteps
eeprom_write_word(((uint16_t*)EEPROM_PROBE_TEMP_SHIFT) + 3, 80); //55C - 200um - 80usteps
eeprom_write_word(((uint16_t*)EEPROM_PROBE_TEMP_SHIFT) + 4, 120); //60C - 300um - 120usteps
eeprom_write_word(((uint16_t*)EEPROM_PROBE_TEMP_SHIFT) + 0, 8); //42C - 20um - 8usteps
eeprom_write_word(((uint16_t*)EEPROM_PROBE_TEMP_SHIFT) + 1, 24); //49C - 60um - 24usteps
eeprom_write_word(((uint16_t*)EEPROM_PROBE_TEMP_SHIFT) + 2, 48); //56C - 120um - 48usteps
eeprom_write_word(((uint16_t*)EEPROM_PROBE_TEMP_SHIFT) + 3, 80); //63C - 200um - 80usteps
eeprom_write_word(((uint16_t*)EEPROM_PROBE_TEMP_SHIFT) + 4, 120); //70C - 300um - 120usteps
}
else
{

File diff suppressed because it is too large Load Diff

View File

@ -3216,10 +3216,11 @@ void process_commands()
case 75:
{
for (int i = 40; i <= 110; i++) {
for (int i = 35; i <= 80; i++) {
MYSERIAL.print(i);
MYSERIAL.print(" ");
MYSERIAL.println(temp_comp_interpolation(i));// / axis_steps_per_unit[Z_AXIS]);
MYSERIAL.print(" -");
MYSERIAL.println(int(temp_compensation_pinda_thermistor_offset(i) * 1000));
MYSERIAL.println("um");
}
}
break;
@ -3256,8 +3257,8 @@ void process_commands()
int z_shift = 0; //unit: steps
float start_temp = 5 * (int)(current_temperature_pinda / 5);
if (start_temp < 35) start_temp = 35;
if (start_temp < current_temperature_pinda) start_temp += 5;
SERIAL_ECHOPGM("start temperature: ");
if (start_temp < current_temperature_pinda) start_temp = (int)(current_temperature_pinda);
SERIAL_ECHOPGM("Start temperature: ");
MYSERIAL.println(start_temp);
// setTargetHotend(200, 0);
@ -3300,28 +3301,35 @@ void process_commands()
int i = -1; for (; i < 5; i++)
{
float temp = (40 + i * 5);
float temp = (42 + i * 7);
if (start_temp <= temp) break;
SERIAL_ECHOPGM("Step: ");
MYSERIAL.print(i + 2);
SERIAL_ECHOLNPGM("/6 (skipped)");
if (i > -1) {
SERIAL_ECHOLNPGM("/6 (skipped)");
} else {
SERIAL_ECHOLNPGM("/6");
}
SERIAL_ECHOPGM("PINDA temperature: ");
MYSERIAL.print((40 + i*5));
MYSERIAL.print((42 + i * 7));
SERIAL_ECHOPGM(" Z shift (mm):");
MYSERIAL.print(0);
SERIAL_ECHOLNPGM("");
if (i >= 0) EEPROM_save_B(EEPROM_PROBE_TEMP_SHIFT + i * 2, &z_shift);
if (start_temp <= temp) break;
//if (start_temp <= temp) break;
}
for (i++; i < 5; i++)
{
float temp = (40 + i * 5);
float temp = (42 + i * 7);
SERIAL_ECHOPGM("Step: ");
MYSERIAL.print(i + 2);
SERIAL_ECHOLNPGM("/6");
custom_message_state = i + 2;
setTargetBed(50 + 10 * (temp - 30) / 5);
// setTargetHotend(255, 0);
if ((50 + 10 * (temp - 30) / 5) > 115) {
setTargetBed(115);
} else setTargetBed(50 + 10 * (temp - 30) / 5);
if (i>2) setTargetHotend(255, 0); //Boost to get to the end game (last couple probings)
current_position[X_AXIS] = PINDA_PREHEAT_X;
current_position[Y_AXIS] = PINDA_PREHEAT_Y;
current_position[Z_AXIS] = PINDA_PREHEAT_Z;
@ -3347,9 +3355,8 @@ void process_commands()
SERIAL_ECHOPGM(" Z shift (mm):");
MYSERIAL.print(current_position[Z_AXIS] - zero_z);
SERIAL_ECHOLNPGM("");
EEPROM_save_B(EEPROM_PROBE_TEMP_SHIFT + i * 2, &z_shift);
if (z_shift < 0) z_shift = 0; //Ensure that a small negative value doesn't throw out EEPROM word/float
EEPROM_save_B(EEPROM_PROBE_TEMP_SHIFT + i * 2, &z_shift);
}
custom_message_type = 0;
custom_message = false;
@ -3363,7 +3370,13 @@ void process_commands()
disable_e1();
disable_e2();
setTargetBed(0); //set bed target temperature back to 0
// setTargetHotend(0,0); //set hotend target temperature back to 0
setTargetHotend(0,0); //set hotend target temperature back to 0
//Move head back out of the way
current_position[X_AXIS] = pgm_read_float(bed_ref_points);
current_position[Y_AXIS] = pgm_read_float(bed_ref_points + 1);
current_position[Z_AXIS] = 5; //Lift head up a little
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 3000 / 60, active_extruder);
st_synchronize();
lcd_show_fullscreen_message_and_wait_P(MSG_TEMP_CALIBRATION_DONE);
lcd_update_enable(true);
lcd_update(2);
@ -3769,55 +3782,135 @@ void process_commands()
}
#endif // SUPPORT_VERBOSITY
for (uint8_t i = 0; i < 4; ++i) {
unsigned char codes[4] = { 'L', 'R', 'F', 'B' };
// Hyperfine Bed Tuning
for (uint8_t i = 0; i < 8; ++i) {
unsigned char codes[8] = { 'a', 'b', 'c', 'd' , 'e' , 'f', 'g', 'h'};
long correction = 0;
if (code_seen(codes[i]))
correction = code_value_long();
else if (eeprom_bed_correction_valid) {
unsigned char *addr = (i < 2) ?
((i == 0) ? (unsigned char*)EEPROM_BED_CORRECTION_LEFT : (unsigned char*)EEPROM_BED_CORRECTION_RIGHT) :
((i == 2) ? (unsigned char*)EEPROM_BED_CORRECTION_FRONT : (unsigned char*)EEPROM_BED_CORRECTION_REAR);
correction = eeprom_read_int8(addr);
switch (i) {
case 0:
{unsigned char *addr = (unsigned char*)EEPROM_BED_CORRECTION_FRONT_LEFT;
correction = eeprom_read_int8(addr);
}
break;
case 1:
{unsigned char *addr = (unsigned char*)EEPROM_BED_CORRECTION_FRONT;
correction = eeprom_read_int8(addr);
}
break;
case 2:
{unsigned char *addr = (unsigned char*)EEPROM_BED_CORRECTION_FRONT_RIGHT;
correction = eeprom_read_int8(addr);
}
break;
case 3:
{unsigned char *addr = (unsigned char*)EEPROM_BED_CORRECTION_RIGHT;
correction = eeprom_read_int8(addr);
}
break;
case 4:
{unsigned char *addr = (unsigned char*)EEPROM_BED_CORRECTION_REAR_RIGHT;
correction = eeprom_read_int8(addr);
}
break;
case 5:
{unsigned char *addr = (unsigned char*)EEPROM_BED_CORRECTION_REAR;
correction = eeprom_read_int8(addr);
}
break;
case 6:
{unsigned char *addr = (unsigned char*)EEPROM_BED_CORRECTION_REAR_LEFT;
correction = eeprom_read_int8(addr);
}
break;
case 7:
{unsigned char *addr = (unsigned char*)EEPROM_BED_CORRECTION_LEFT;
correction = eeprom_read_int8(addr);
}
break;
}
if (correction == 0)
continue;
}
if (correction == 0)
continue;
float offset = float(correction) * 0.001f;
if (fabs(offset) > 0.101f) {
if (fabs(offset) > 0.201f) {
SERIAL_ERROR_START;
SERIAL_ECHOPGM("Excessive bed leveling correction: ");
SERIAL_ECHO(offset);
SERIAL_ECHOLNPGM(" microns");
}
else {
switch (i) {
case 0:
for (uint8_t row = 0; row < 3; ++row) {
mbl.z_values[row][1] += 0.5f * offset;
mbl.z_values[row][0] += offset;
}
break;
case 1:
for (uint8_t row = 0; row < 3; ++row) {
mbl.z_values[row][1] += 0.5f * offset;
mbl.z_values[row][2] += offset;
}
break;
case 2:
for (uint8_t col = 0; col < 3; ++col) {
mbl.z_values[1][col] += 0.5f * offset;
mbl.z_values[0][col] += offset;
}
break;
case 3:
for (uint8_t col = 0; col < 3; ++col) {
mbl.z_values[1][col] += 0.5f * offset;
mbl.z_values[2][col] += offset;
}
break;
switch (i) {
case 0:
{
mbl.z_values[0][0] += offset;
SERIAL_ECHOPGM("FrontLeft a =");
SERIAL_ECHO(correction+0);
SERIAL_ECHOLNPGM(" microns.");
}
break;
case 1:
{
mbl.z_values[0][1] += offset;
SERIAL_ECHOPGM("FrontCentr b =");
SERIAL_ECHO(correction+0);
SERIAL_ECHOLNPGM(" microns.");
}
break;
case 2:
{
mbl.z_values[0][2] += offset;
SERIAL_ECHOPGM("FrontRight c =");
SERIAL_ECHO(correction+0);
SERIAL_ECHOLNPGM(" microns.");
}
break;
case 3:
{
mbl.z_values[1][2] += offset;
SERIAL_ECHOPGM("MidRight d =");
SERIAL_ECHO(correction+0);
SERIAL_ECHOLNPGM(" microns.");
}
break;
case 4:
{
mbl.z_values[2][2] += offset;
SERIAL_ECHOPGM("RearRight e =");
SERIAL_ECHO(correction+0);
SERIAL_ECHOLNPGM(" microns.");
}
break;
case 5:
{
mbl.z_values[2][1] += offset;
SERIAL_ECHOPGM("RearCentr f =");
SERIAL_ECHO(correction+0);
SERIAL_ECHOLNPGM(" microns.");
}
break;
case 6:
{
mbl.z_values[2][0] += offset;
SERIAL_ECHOPGM("RearLeft g =");
SERIAL_ECHO(correction+0);
SERIAL_ECHOLNPGM(" microns.");
}
break;
case 7:
{
mbl.z_values[1][0] += offset;
SERIAL_ECHOPGM("MidLeft h =");
SERIAL_ECHO(correction+0);
SERIAL_ECHOLNPGM(" microns.");
}
break;
}
}
}
// End Hyperfine Bed Tuning
// SERIAL_ECHOLNPGM("Bed leveling correction finished");
mbl.upsample_3x3(); //bilinear interpolation from 3x3 to 7x7 points while using the same array z_values[iy][ix] for storing (just coppying measured data to new destination and interpolating between them)
// SERIAL_ECHOLNPGM("Upsample finished");
@ -7478,7 +7571,7 @@ float temp_comp_interpolation(float inp_temperature) {
if (i>0) EEPROM_read_B(EEPROM_PROBE_TEMP_SHIFT + (i-1) * 2, &shift[i]); //read shift in steps from EEPROM
temp_C[i] = 50 + i * 10; //temperature in C
#ifdef PINDA_THERMISTOR
temp_C[i] = 35 + i * 5; //temperature in C
temp_C[i] = 35 + i * 7; //temperature in C
#else
temp_C[i] = 50 + i * 10; //temperature in C
#endif
@ -7523,9 +7616,11 @@ float temp_comp_interpolation(float inp_temperature) {
d = f[i];
sum = a*pow((inp_temperature - x[i]), 3) + b*pow((inp_temperature - x[i]), 2) + c*(inp_temperature - x[i]) + d;
}
return sum;
// Create hard limits to prevent machine damage from error result
if (sum < 0) {
return 0;
} else if ((sum / axis_steps_per_unit[Z_AXIS]) > 1.5) return (1.5 * axis_steps_per_unit[Z_AXIS]);
return sum;
}
#ifdef PINDA_THERMISTOR

View File

@ -199,7 +199,7 @@ print $fh <<END
#define LANG_ID_UNDEFINED 255
// Default language ID, if no language is selected.
#define LANG_ID_DEFAULT LANG_ID_CZ
#define LANG_ID_DEFAULT LANG_ID_EN
// Number of languages available in the language table.
#define LANG_NUM ${num_languages}

View File

@ -123,6 +123,21 @@ const char * const MSG_BED_CORRECTION_FRONT_LANG_TABLE[LANG_NUM] PROGMEM = {
MSG_BED_CORRECTION_FRONT_CZ
};
const char MSG_BED_CORRECTION_FRONT_CENTR_EN[] PROGMEM = "Fr.Centr b[um]";
const char * const MSG_BED_CORRECTION_FRONT_CENTR_LANG_TABLE[1] PROGMEM = {
MSG_BED_CORRECTION_FRONT_CENTR_EN
};
const char MSG_BED_CORRECTION_FRONT_LEFT_EN[] PROGMEM = "Fr.Left a[um]";
const char * const MSG_BED_CORRECTION_FRONT_LEFT_LANG_TABLE[1] PROGMEM = {
MSG_BED_CORRECTION_FRONT_LEFT_EN
};
const char MSG_BED_CORRECTION_FRONT_RIGHT_EN[] PROGMEM = "Fr.Right c[um]";
const char * const MSG_BED_CORRECTION_FRONT_RIGHT_LANG_TABLE[1] PROGMEM = {
MSG_BED_CORRECTION_FRONT_RIGHT_EN
};
const char MSG_BED_CORRECTION_LEFT_EN[] PROGMEM = "Left side [um]";
const char MSG_BED_CORRECTION_LEFT_CZ[] PROGMEM = "Vlevo [um]";
const char * const MSG_BED_CORRECTION_LEFT_LANG_TABLE[LANG_NUM] PROGMEM = {
@ -137,6 +152,16 @@ const char * const MSG_BED_CORRECTION_MENU_LANG_TABLE[LANG_NUM] PROGMEM = {
MSG_BED_CORRECTION_MENU_CZ
};
const char MSG_BED_CORRECTION_MID_LEFT_EN[] PROGMEM = "Mi.Left h[um]";
const char * const MSG_BED_CORRECTION_MID_LEFT_LANG_TABLE[1] PROGMEM = {
MSG_BED_CORRECTION_MID_LEFT_EN
};
const char MSG_BED_CORRECTION_MID_RIGHT_EN[] PROGMEM = "Mi.Right d[um]";
const char * const MSG_BED_CORRECTION_MID_RIGHT_LANG_TABLE[1] PROGMEM = {
MSG_BED_CORRECTION_MID_RIGHT_EN
};
const char MSG_BED_CORRECTION_REAR_EN[] PROGMEM = "Rear side [um]";
const char MSG_BED_CORRECTION_REAR_CZ[] PROGMEM = "Vzadu [um]";
const char * const MSG_BED_CORRECTION_REAR_LANG_TABLE[LANG_NUM] PROGMEM = {
@ -144,6 +169,21 @@ const char * const MSG_BED_CORRECTION_REAR_LANG_TABLE[LANG_NUM] PROGMEM = {
MSG_BED_CORRECTION_REAR_CZ
};
const char MSG_BED_CORRECTION_REAR_CENTR_EN[] PROGMEM = "Re.Centr f[um]";
const char * const MSG_BED_CORRECTION_REAR_CENTR_LANG_TABLE[1] PROGMEM = {
MSG_BED_CORRECTION_REAR_CENTR_EN
};
const char MSG_BED_CORRECTION_REAR_LEFT_EN[] PROGMEM = "Re.Left g[um]";
const char * const MSG_BED_CORRECTION_REAR_LEFT_LANG_TABLE[1] PROGMEM = {
MSG_BED_CORRECTION_REAR_LEFT_EN
};
const char MSG_BED_CORRECTION_REAR_RIGHT_EN[] PROGMEM = "Re.Right e[um]";
const char * const MSG_BED_CORRECTION_REAR_RIGHT_LANG_TABLE[1] PROGMEM = {
MSG_BED_CORRECTION_REAR_RIGHT_EN
};
const char MSG_BED_CORRECTION_RESET_EN[] PROGMEM = "Reset";
const char * const MSG_BED_CORRECTION_RESET_LANG_TABLE[1] PROGMEM = {
MSG_BED_CORRECTION_RESET_EN

View File

@ -11,7 +11,7 @@
#define LANG_ID_UNDEFINED 255
// Default language ID, if no language is selected.
#define LANG_ID_DEFAULT LANG_ID_CZ
#define LANG_ID_DEFAULT LANG_ID_EN
// Number of languages available in the language table.
#define LANG_NUM 2
@ -62,12 +62,28 @@ extern const char* const MSG_BED_LANG_TABLE[1];
#define MSG_BED LANG_TABLE_SELECT_EXPLICIT(MSG_BED_LANG_TABLE, 0)
extern const char* const MSG_BED_CORRECTION_FRONT_LANG_TABLE[LANG_NUM];
#define MSG_BED_CORRECTION_FRONT LANG_TABLE_SELECT(MSG_BED_CORRECTION_FRONT_LANG_TABLE)
extern const char* const MSG_BED_CORRECTION_FRONT_CENTR_LANG_TABLE[1];
#define MSG_BED_CORRECTION_FRONT_CENTR LANG_TABLE_SELECT_EXPLICIT(MSG_BED_CORRECTION_FRONT_CENTR_LANG_TABLE, 0)
extern const char* const MSG_BED_CORRECTION_FRONT_LEFT_LANG_TABLE[1];
#define MSG_BED_CORRECTION_FRONT_LEFT LANG_TABLE_SELECT_EXPLICIT(MSG_BED_CORRECTION_FRONT_LEFT_LANG_TABLE, 0)
extern const char* const MSG_BED_CORRECTION_FRONT_RIGHT_LANG_TABLE[1];
#define MSG_BED_CORRECTION_FRONT_RIGHT LANG_TABLE_SELECT_EXPLICIT(MSG_BED_CORRECTION_FRONT_RIGHT_LANG_TABLE, 0)
extern const char* const MSG_BED_CORRECTION_LEFT_LANG_TABLE[LANG_NUM];
#define MSG_BED_CORRECTION_LEFT LANG_TABLE_SELECT(MSG_BED_CORRECTION_LEFT_LANG_TABLE)
extern const char* const MSG_BED_CORRECTION_MENU_LANG_TABLE[LANG_NUM];
#define MSG_BED_CORRECTION_MENU LANG_TABLE_SELECT(MSG_BED_CORRECTION_MENU_LANG_TABLE)
extern const char* const MSG_BED_CORRECTION_MID_LEFT_LANG_TABLE[1];
#define MSG_BED_CORRECTION_MID_LEFT LANG_TABLE_SELECT_EXPLICIT(MSG_BED_CORRECTION_MID_LEFT_LANG_TABLE, 0)
extern const char* const MSG_BED_CORRECTION_MID_RIGHT_LANG_TABLE[1];
#define MSG_BED_CORRECTION_MID_RIGHT LANG_TABLE_SELECT_EXPLICIT(MSG_BED_CORRECTION_MID_RIGHT_LANG_TABLE, 0)
extern const char* const MSG_BED_CORRECTION_REAR_LANG_TABLE[LANG_NUM];
#define MSG_BED_CORRECTION_REAR LANG_TABLE_SELECT(MSG_BED_CORRECTION_REAR_LANG_TABLE)
extern const char* const MSG_BED_CORRECTION_REAR_CENTR_LANG_TABLE[1];
#define MSG_BED_CORRECTION_REAR_CENTR LANG_TABLE_SELECT_EXPLICIT(MSG_BED_CORRECTION_REAR_CENTR_LANG_TABLE, 0)
extern const char* const MSG_BED_CORRECTION_REAR_LEFT_LANG_TABLE[1];
#define MSG_BED_CORRECTION_REAR_LEFT LANG_TABLE_SELECT_EXPLICIT(MSG_BED_CORRECTION_REAR_LEFT_LANG_TABLE, 0)
extern const char* const MSG_BED_CORRECTION_REAR_RIGHT_LANG_TABLE[1];
#define MSG_BED_CORRECTION_REAR_RIGHT LANG_TABLE_SELECT_EXPLICIT(MSG_BED_CORRECTION_REAR_RIGHT_LANG_TABLE, 0)
extern const char* const MSG_BED_CORRECTION_RESET_LANG_TABLE[1];
#define MSG_BED_CORRECTION_RESET LANG_TABLE_SELECT_EXPLICIT(MSG_BED_CORRECTION_RESET_LANG_TABLE, 0)
extern const char* const MSG_BED_CORRECTION_RIGHT_LANG_TABLE[LANG_NUM];

View File

@ -276,10 +276,23 @@
#define(length=20, lines=8) MSG_PAPER "Place a sheet of paper under the nozzle during the calibration of first 4 points. If the nozzle catches the paper, power off the printer immediately."
#define MSG_BED_CORRECTION_MENU "Bed level correct"
/* Stock Bed correction
#define(length=14,lines=1) MSG_BED_CORRECTION_LEFT "Left side [um]"
#define(length=14,lines=1) MSG_BED_CORRECTION_RIGHT "Right side[um]"
#define(length=14,lines=1) MSG_BED_CORRECTION_FRONT "Front side[um]"
#define(length=14,lines=1) MSG_BED_CORRECTION_REAR "Rear side [um]"
*/
// Hyperfine Bed Tuning
#define(length=14,lines=1) MSG_BED_CORRECTION_FRONT_LEFT "Fr.Left a[um]"
#define(length=14,lines=1) MSG_BED_CORRECTION_FRONT_CENTR "Fr.Centr b[um]"
#define(length=14,lines=1) MSG_BED_CORRECTION_FRONT_RIGHT "Fr.Right c[um]"
#define(length=14,lines=1) MSG_BED_CORRECTION_MID_RIGHT "Mi.Right d[um]"
#define(length=14,lines=1) MSG_BED_CORRECTION_REAR_RIGHT "Re.Right e[um]"
#define(length=14,lines=1) MSG_BED_CORRECTION_REAR_CENTR "Re.Centr f[um]"
#define(length=14,lines=1) MSG_BED_CORRECTION_REAR_LEFT "Re.Left g[um]"
#define(length=14,lines=1) MSG_BED_CORRECTION_MID_LEFT "Mi.Left h[um]"
// end Hyperfine Bed Tuning
#define MSG_BED_CORRECTION_RESET "Reset"
#define MSG_MESH_BED_LEVELING "Mesh Bed Leveling"

View File

@ -75,6 +75,7 @@ union MenuData
char ip_str[3*4+3+1];
} supportMenu;
// Hyperfine Bed Tuning
struct AdjustBed
{
// 6+13+16=35B
@ -82,15 +83,24 @@ union MenuData
// the return menu and encoder state.
struct EditMenuParentState editMenuParentState;
int8_t status;
int8_t left;
int8_t right;
int8_t front;
int8_t rear;
int left2;
int right2;
int front2;
int rear2;
int8_t front_left;
int8_t front_centr;
int8_t front_right;
int8_t mid_right;
int8_t rear_right;
int8_t rear_centr;
int8_t rear_left;
int8_t mid_left;
int front_left2;
int front_centr2;
int front_right2;
int mid_right2;
int rear_right2;
int rear_centr2;
int rear_left2;
int mid_left2;
} adjustBed;
// End Hyperfine bed Tuning
struct TuneMenu
{
@ -1799,7 +1809,10 @@ static void lcd_support_menu()
MENU_ITEM(back, PSTR("------------"), lcd_main_menu);
MENU_ITEM(back, MSG_DATE, lcd_main_menu);
MENU_ITEM(back, PSTR(__DATE__), lcd_main_menu);
MENU_ITEM(back, PSTR(__TIME__), lcd_main_menu);
MENU_ITEM(back, PSTR(STRING_CONFIG_H_AUTHOR), lcd_main_menu);
// Show the FlashAir IP address, if the card is available.
if (menuData.supportMenu.is_flash_air) {
MENU_ITEM(back, PSTR("------------"), lcd_main_menu);
@ -2411,29 +2424,43 @@ static void lcd_adjust_bed();
* Because we did not leave the menu, the menuData did not reset.
* Force refresh of the bed leveling data.
*/
// Hyperfine Bed Tuning
static void lcd_adjust_bed_reset()
{
eeprom_update_byte((unsigned char*)EEPROM_BED_CORRECTION_VALID, 1);
eeprom_update_byte((unsigned char*)EEPROM_BED_CORRECTION_LEFT , 0);
eeprom_update_byte((unsigned char*)EEPROM_BED_CORRECTION_RIGHT, 0);
eeprom_update_byte((unsigned char*)EEPROM_BED_CORRECTION_FRONT, 0);
eeprom_update_byte((unsigned char*)EEPROM_BED_CORRECTION_FRONT_LEFT , 0);
eeprom_update_byte((unsigned char*)EEPROM_BED_CORRECTION_FRONT , 0);
eeprom_update_byte((unsigned char*)EEPROM_BED_CORRECTION_FRONT_RIGHT , 0);
eeprom_update_byte((unsigned char*)EEPROM_BED_CORRECTION_RIGHT , 0);
eeprom_update_byte((unsigned char*)EEPROM_BED_CORRECTION_REAR_RIGHT , 0);
eeprom_update_byte((unsigned char*)EEPROM_BED_CORRECTION_REAR , 0);
lcd_goto_menu(lcd_adjust_bed, 0, false); //doesn't break menuStack
eeprom_update_byte((unsigned char*)EEPROM_BED_CORRECTION_REAR_LEFT , 0);
eeprom_update_byte((unsigned char*)EEPROM_BED_CORRECTION_LEFT , 0);
lcd_goto_menu(lcd_adjust_bed, 0, false);
// Because we did not leave the menu, the menuData did not reset.
// Force refresh of the bed leveling data.
menuData.adjustBed.status = 0;
}
void adjust_bed_reset() {
eeprom_update_byte((unsigned char*)EEPROM_BED_CORRECTION_VALID, 1);
eeprom_update_byte((unsigned char*)EEPROM_BED_CORRECTION_LEFT, 0);
eeprom_update_byte((unsigned char*)EEPROM_BED_CORRECTION_RIGHT, 0);
eeprom_update_byte((unsigned char*)EEPROM_BED_CORRECTION_FRONT, 0);
eeprom_update_byte((unsigned char*)EEPROM_BED_CORRECTION_REAR, 0);
menuData.adjustBed.left = menuData.adjustBed.left2 = 0;
menuData.adjustBed.right = menuData.adjustBed.right2 = 0;
menuData.adjustBed.front = menuData.adjustBed.front2 = 0;
menuData.adjustBed.rear = menuData.adjustBed.rear2 = 0;
}
#define BED_ADJUSTMENT_UM_MAX 50
eeprom_update_byte((unsigned char*)EEPROM_BED_CORRECTION_FRONT_LEFT , 0);
eeprom_update_byte((unsigned char*)EEPROM_BED_CORRECTION_FRONT , 0);
eeprom_update_byte((unsigned char*)EEPROM_BED_CORRECTION_FRONT_RIGHT , 0);
eeprom_update_byte((unsigned char*)EEPROM_BED_CORRECTION_RIGHT , 0);
eeprom_update_byte((unsigned char*)EEPROM_BED_CORRECTION_REAR_RIGHT , 0);
eeprom_update_byte((unsigned char*)EEPROM_BED_CORRECTION_REAR , 0);
eeprom_update_byte((unsigned char*)EEPROM_BED_CORRECTION_REAR_LEFT , 0);
eeprom_update_byte((unsigned char*)EEPROM_BED_CORRECTION_LEFT , 0);
menuData.adjustBed.front_left = menuData.adjustBed.front_left2 = 0;
menuData.adjustBed.front_centr = menuData.adjustBed.front_centr2 = 0;
menuData.adjustBed.front_right = menuData.adjustBed.front_right2 = 0;
menuData.adjustBed.mid_right = menuData.adjustBed.mid_right2 = 0;
menuData.adjustBed.rear_right = menuData.adjustBed.rear_right2 = 0;
menuData.adjustBed.rear_centr = menuData.adjustBed.rear_centr2 = 0;
menuData.adjustBed.rear_left = menuData.adjustBed.rear_left2 = 0;
menuData.adjustBed.mid_left = menuData.adjustBed.mid_left2 = 0;}
#define BED_ADJUSTMENT_UM_MAX 99
static void lcd_adjust_bed()
{
@ -2442,45 +2469,69 @@ static void lcd_adjust_bed()
// Initialize its status.
menuData.adjustBed.status = 1;
bool valid = false;
menuData.adjustBed.left = menuData.adjustBed.left2 = eeprom_read_int8((unsigned char*)EEPROM_BED_CORRECTION_LEFT);
menuData.adjustBed.right = menuData.adjustBed.right2 = eeprom_read_int8((unsigned char*)EEPROM_BED_CORRECTION_RIGHT);
menuData.adjustBed.front = menuData.adjustBed.front2 = eeprom_read_int8((unsigned char*)EEPROM_BED_CORRECTION_FRONT);
menuData.adjustBed.rear = menuData.adjustBed.rear2 = eeprom_read_int8((unsigned char*)EEPROM_BED_CORRECTION_REAR);
menuData.adjustBed.front_left = menuData.adjustBed.front_left2 = eeprom_read_int8((unsigned char*)EEPROM_BED_CORRECTION_FRONT_LEFT);
menuData.adjustBed.front_centr = menuData.adjustBed.front_centr2 = eeprom_read_int8((unsigned char*)EEPROM_BED_CORRECTION_FRONT);
menuData.adjustBed.front_right = menuData.adjustBed.front_right2 = eeprom_read_int8((unsigned char*)EEPROM_BED_CORRECTION_FRONT_RIGHT);
menuData.adjustBed.mid_right = menuData.adjustBed.mid_right2 = eeprom_read_int8((unsigned char*)EEPROM_BED_CORRECTION_RIGHT);
menuData.adjustBed.rear_right = menuData.adjustBed.rear_right2 = eeprom_read_int8((unsigned char*)EEPROM_BED_CORRECTION_REAR_RIGHT);
menuData.adjustBed.rear_centr = menuData.adjustBed.rear_centr2 = eeprom_read_int8((unsigned char*)EEPROM_BED_CORRECTION_REAR);
menuData.adjustBed.rear_left = menuData.adjustBed.rear_left2 = eeprom_read_int8((unsigned char*)EEPROM_BED_CORRECTION_REAR_LEFT);
menuData.adjustBed.mid_left = menuData.adjustBed.mid_left2 = eeprom_read_int8((unsigned char*)EEPROM_BED_CORRECTION_LEFT);
if (eeprom_read_byte((unsigned char*)EEPROM_BED_CORRECTION_VALID) == 1 &&
menuData.adjustBed.left >= -BED_ADJUSTMENT_UM_MAX && menuData.adjustBed.left <= BED_ADJUSTMENT_UM_MAX &&
menuData.adjustBed.right >= -BED_ADJUSTMENT_UM_MAX && menuData.adjustBed.right <= BED_ADJUSTMENT_UM_MAX &&
menuData.adjustBed.front >= -BED_ADJUSTMENT_UM_MAX && menuData.adjustBed.front <= BED_ADJUSTMENT_UM_MAX &&
menuData.adjustBed.rear >= -BED_ADJUSTMENT_UM_MAX && menuData.adjustBed.rear <= BED_ADJUSTMENT_UM_MAX)
menuData.adjustBed.front_left >= -BED_ADJUSTMENT_UM_MAX && menuData.adjustBed.front_left <= BED_ADJUSTMENT_UM_MAX &&
menuData.adjustBed.front_centr >= -BED_ADJUSTMENT_UM_MAX && menuData.adjustBed.front_centr <= BED_ADJUSTMENT_UM_MAX &&
menuData.adjustBed.front_right >= -BED_ADJUSTMENT_UM_MAX && menuData.adjustBed.front_right <= BED_ADJUSTMENT_UM_MAX &&
menuData.adjustBed.mid_right >= -BED_ADJUSTMENT_UM_MAX && menuData.adjustBed.mid_right <= BED_ADJUSTMENT_UM_MAX &&
menuData.adjustBed.rear_right >= -BED_ADJUSTMENT_UM_MAX && menuData.adjustBed.rear_right <= BED_ADJUSTMENT_UM_MAX &&
menuData.adjustBed.rear_centr >= -BED_ADJUSTMENT_UM_MAX && menuData.adjustBed.rear_centr <= BED_ADJUSTMENT_UM_MAX &&
menuData.adjustBed.rear_left >= -BED_ADJUSTMENT_UM_MAX && menuData.adjustBed.rear_left <= BED_ADJUSTMENT_UM_MAX &&
menuData.adjustBed.mid_left >= -BED_ADJUSTMENT_UM_MAX && menuData.adjustBed.mid_left <= BED_ADJUSTMENT_UM_MAX)
valid = true;
if (! valid) {
// Reset the values: simulate an edit.
menuData.adjustBed.left2 = 0;
menuData.adjustBed.right2 = 0;
menuData.adjustBed.front2 = 0;
menuData.adjustBed.rear2 = 0;
menuData.adjustBed.front_left2 = 0;
menuData.adjustBed.front_centr2 = 0;
menuData.adjustBed.front_right2 = 0;
menuData.adjustBed.mid_right2 = 0;
menuData.adjustBed.rear_right2 = 0;
menuData.adjustBed.rear_centr2 = 0;
menuData.adjustBed.rear_left2 = 0;
menuData.adjustBed.mid_left2 = 0;
}
lcdDrawUpdate = 1;
eeprom_update_byte((unsigned char*)EEPROM_BED_CORRECTION_VALID, 1);
}
if (menuData.adjustBed.left != menuData.adjustBed.left2)
eeprom_update_int8((unsigned char*)EEPROM_BED_CORRECTION_LEFT, menuData.adjustBed.left = menuData.adjustBed.left2);
if (menuData.adjustBed.right != menuData.adjustBed.right2)
eeprom_update_int8((unsigned char*)EEPROM_BED_CORRECTION_RIGHT, menuData.adjustBed.right = menuData.adjustBed.right2);
if (menuData.adjustBed.front != menuData.adjustBed.front2)
eeprom_update_int8((unsigned char*)EEPROM_BED_CORRECTION_FRONT, menuData.adjustBed.front = menuData.adjustBed.front2);
if (menuData.adjustBed.rear != menuData.adjustBed.rear2)
eeprom_update_int8((unsigned char*)EEPROM_BED_CORRECTION_REAR, menuData.adjustBed.rear = menuData.adjustBed.rear2);
if (menuData.adjustBed.front_left != menuData.adjustBed.front_left2)
eeprom_update_int8((unsigned char*)EEPROM_BED_CORRECTION_FRONT_LEFT, menuData.adjustBed.front_left = menuData.adjustBed.front_left2);
if (menuData.adjustBed.front_centr != menuData.adjustBed.front_centr2)
eeprom_update_int8((unsigned char*)EEPROM_BED_CORRECTION_FRONT, menuData.adjustBed.front_centr = menuData.adjustBed.front_centr2);
if (menuData.adjustBed.front_right != menuData.adjustBed.front_right2)
eeprom_update_int8((unsigned char*)EEPROM_BED_CORRECTION_FRONT_RIGHT, menuData.adjustBed.front_right = menuData.adjustBed.front_right2);
if (menuData.adjustBed.mid_right != menuData.adjustBed.mid_right2)
eeprom_update_int8((unsigned char*)EEPROM_BED_CORRECTION_RIGHT, menuData.adjustBed.mid_right = menuData.adjustBed.mid_right2);
if (menuData.adjustBed.rear_right != menuData.adjustBed.rear_right2)
eeprom_update_int8((unsigned char*)EEPROM_BED_CORRECTION_REAR_RIGHT, menuData.adjustBed.rear_right = menuData.adjustBed.rear_right2);
if (menuData.adjustBed.rear_centr != menuData.adjustBed.rear_centr2)
eeprom_update_int8((unsigned char*)EEPROM_BED_CORRECTION_REAR, menuData.adjustBed.rear_centr = menuData.adjustBed.rear_centr2);
if (menuData.adjustBed.rear_left != menuData.adjustBed.rear_left2)
eeprom_update_int8((unsigned char*)EEPROM_BED_CORRECTION_REAR_LEFT, menuData.adjustBed.rear_left = menuData.adjustBed.rear_left2);
if (menuData.adjustBed.mid_left != menuData.adjustBed.mid_left2)
eeprom_update_int8((unsigned char*)EEPROM_BED_CORRECTION_LEFT, menuData.adjustBed.mid_left = menuData.adjustBed.mid_left2);
START_MENU();
MENU_ITEM(back, MSG_SETTINGS, lcd_calibration_menu);
MENU_ITEM_EDIT(int3, MSG_BED_CORRECTION_LEFT, &menuData.adjustBed.left2, -BED_ADJUSTMENT_UM_MAX, BED_ADJUSTMENT_UM_MAX);
MENU_ITEM_EDIT(int3, MSG_BED_CORRECTION_RIGHT, &menuData.adjustBed.right2, -BED_ADJUSTMENT_UM_MAX, BED_ADJUSTMENT_UM_MAX);
MENU_ITEM_EDIT(int3, MSG_BED_CORRECTION_FRONT, &menuData.adjustBed.front2, -BED_ADJUSTMENT_UM_MAX, BED_ADJUSTMENT_UM_MAX);
MENU_ITEM_EDIT(int3, MSG_BED_CORRECTION_REAR, &menuData.adjustBed.rear2, -BED_ADJUSTMENT_UM_MAX, BED_ADJUSTMENT_UM_MAX);
MENU_ITEM(function, MSG_BED_CORRECTION_RESET, lcd_adjust_bed_reset);
MENU_ITEM(back, MSG_SETTINGS, lcd_calibration_menu);
MENU_ITEM_EDIT(int3, MSG_BED_CORRECTION_FRONT_LEFT, &menuData.adjustBed.front_left2, -BED_ADJUSTMENT_UM_MAX, BED_ADJUSTMENT_UM_MAX);
MENU_ITEM_EDIT(int3, MSG_BED_CORRECTION_FRONT_CENTR, &menuData.adjustBed.front_centr2, -BED_ADJUSTMENT_UM_MAX, BED_ADJUSTMENT_UM_MAX);
MENU_ITEM_EDIT(int3, MSG_BED_CORRECTION_FRONT_RIGHT, &menuData.adjustBed.front_right2, -BED_ADJUSTMENT_UM_MAX, BED_ADJUSTMENT_UM_MAX);
MENU_ITEM_EDIT(int3, MSG_BED_CORRECTION_MID_RIGHT, &menuData.adjustBed.mid_right2, -BED_ADJUSTMENT_UM_MAX, BED_ADJUSTMENT_UM_MAX);
MENU_ITEM_EDIT(int3, MSG_BED_CORRECTION_REAR_RIGHT, &menuData.adjustBed.rear_right2, -BED_ADJUSTMENT_UM_MAX, BED_ADJUSTMENT_UM_MAX);
MENU_ITEM_EDIT(int3, MSG_BED_CORRECTION_REAR_CENTR, &menuData.adjustBed.rear_centr2, -BED_ADJUSTMENT_UM_MAX, BED_ADJUSTMENT_UM_MAX);
MENU_ITEM_EDIT(int3, MSG_BED_CORRECTION_REAR_LEFT, &menuData.adjustBed.rear_left2, -BED_ADJUSTMENT_UM_MAX, BED_ADJUSTMENT_UM_MAX);
MENU_ITEM_EDIT(int3, MSG_BED_CORRECTION_MID_LEFT, &menuData.adjustBed.mid_left2, -BED_ADJUSTMENT_UM_MAX, BED_ADJUSTMENT_UM_MAX);
END_MENU();
}
// End Hyperfine Bed Tuning
void pid_extruder() {
@ -2705,7 +2756,7 @@ calibrated:
lcd_implementation_print_at(0, 3, 1);
lcd_printPGM(MSG_MEASURE_BED_REFERENCE_HEIGHT_LINE2);
}else{
//lcd_show_fullscreen_message_and_wait_P(MSG_PAPER);
lcd_show_fullscreen_message_and_wait_P(MSG_PAPER);
lcd_display_message_fullscreen_P(MSG_FIND_BED_OFFSET_AND_SKEW_LINE1);
lcd_implementation_print_at(0, 2, 1);
lcd_printPGM(MSG_FIND_BED_OFFSET_AND_SKEW_LINE2);