From 1df91e56565dd66857a4843dc1966c8537708c52 Mon Sep 17 00:00:00 2001 From: Christoph Stahl Date: Fri, 9 Mar 2018 20:46:07 +0100 Subject: [PATCH 01/13] MK3 Add Gcode to wait for minimum PINDA temp The PINDA temperature compensation is defined for values above 35C. To achieve an optimal first layer consistently it is vital to start the print with a temperature of >= 35C on the pinda probe. When doing a manual pinda temperature calibration it is necessary to begin homing and mesh bed leveling at an exact temperature. This gcode is perfect for this. Example startup code: G28 W ; home all without mesh bed level G0 Z50 ; raise Z to not heat PINDA before bed is warm M104 S215 ; set extruder temp M140 S60 ; set bed temp M190 S60 ; wait for bed temp M109 S215 ; wait for extruder temp G0 X50 Y50 Z0.15 ; this is a good PINDA heating position M666 S35 ; the new code - wait until PINDA is >= 35C G28 W ; home all without mesh bed level G80 ; mesh bed leveling See my forum post later for more explaination on my manual temperature calibration procedure. I will link it then. --- Firmware/Marlin_main.cpp | 43 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/Firmware/Marlin_main.cpp b/Firmware/Marlin_main.cpp index 7360ab9af..1d6a47e64 100644 --- a/Firmware/Marlin_main.cpp +++ b/Firmware/Marlin_main.cpp @@ -226,6 +226,7 @@ // M540 - Use S[0|1] to enable or disable the stop SD card print on endstop hit (requires ABORT_ON_ENDSTOP_HIT_FEATURE_ENABLED) // M600 - Pause for filament change X[pos] Y[pos] Z[relative lift] E[initial retract] L[later retract distance for removal] // M605 - Set dual x-carriage movement mode: S [ X R ] +// M666 - Wait for PINDA thermistor to reach target temperature. // M900 - Set LIN_ADVANCE options, if enabled. See Configuration_adv.h for details. // M907 - Set digital trimpot motor current using axis codes. // M908 - Control digital trimpot directly. @@ -4806,6 +4807,48 @@ Sigma_Exit: #endif break; +#ifdef PINDA_THERMISTOR +case 666: // M666 - Wait for PINDA thermistor to reach target temperature. + { + int setTargetPinda = 0; + + if (code_seen('S')) { + setTargetPinda = code_value(); + } else { + break; + } + + LCD_MESSAGERPGM(MSG_PLEASE_WAIT); + + SERIAL_PROTOCOLPGM("Wait for PINDA target temperature:"); + SERIAL_PROTOCOL(setTargetPinda); + SERIAL_PROTOCOLLN(""); + + codenum = millis(); + cancel_heatup = false; + + KEEPALIVE_STATE(NOT_BUSY); + + while ( (!cancel_heatup) && current_temperature_pinda < setTargetPinda) { + if(( millis() - codenum) > 1000 ) //Print Temp Reading every 1 second while waiting. + { + SERIAL_PROTOCOLPGM("P:"); + SERIAL_PROTOCOL_F(current_temperature_pinda,1); + SERIAL_PROTOCOLPGM("/"); + SERIAL_PROTOCOL(setTargetPinda); + SERIAL_PROTOCOLLN(""); + codenum = millis(); + } + manage_heater(); + manage_inactivity(); + lcd_update(); + } + LCD_MESSAGERPGM(MSG_OK); + + break; + } +#endif //PINDA_THERMISTOR + #if defined(FAN_PIN) && FAN_PIN > -1 case 106: //M106 Fan On if (code_seen('S')){ From c7ffb4b2dcc87e5a6b1e0a13bc6167281f8a50e9 Mon Sep 17 00:00:00 2001 From: MRprusa3d <38257799+MRprusa3d@users.noreply.github.com> Date: Tue, 10 Apr 2018 18:02:16 +0000 Subject: [PATCH 02/13] Add files via upload --- README.md | 93 ++++++++++++++++++++++++++++++------------------------- 1 file changed, 50 insertions(+), 43 deletions(-) diff --git a/README.md b/README.md index 99d17c3e2..0e2dea392 100644 --- a/README.md +++ b/README.md @@ -1,43 +1,50 @@ -# Original Prusa i3 MK2 Firmware - -## General instructions - -Pre-compiled hex output on PRUSA RESEARCH site: http://prusa3d.com/downloads/firmware/ - -Just download and flash it to the electronics - - -## Build instructions - -### Step 1 - -Install arduino - -### Step 2 - -Remove Liquid Crystal library from your arduino or rename it - -### Step 3 - -Install the arduino addon located in the root of this repo. Don't forget to install correct version! - -### Step 4 - -Copy the configuration file matching your printer from variants folder to the the Firmware folder - -### Step 5 - -Rename it to "Configuration_prusa.h" - -### Step 6 - -Compile the firmware - -### Step 7 - -Upload the firmware to board - - - - - +# 1. Developement environment preparing + + 1. install `"Arduino Software IDE"` for your preferred operating system +`https://www.arduino.cc -> Software->Downloads` +it is strongly recommended to use older version `"1.6.8"`, by which we can assure correct compilation results +_note: in versions `1.7.x` and `1.8.x` there are known some C/C++ compilator disasters, which disallow correct source code compilation (you can obtain `"... internal compiler error: in extract_insn, at ..."` error message, for example); we are not able to affect this situation afraid_ +_note: name collision for `"LiquidCrystal"` library known from previous versions is now obsolete (so there is no need to delete or rename original file/-s)_ + + 2. add (`UltiMachine`) `RAMBo` board into the list of Arduino target boards +`File->Preferences->Settings` +into text field `"Additional Boards Manager URLs"` +type location +`"https://raw.githubusercontent.com/ultimachine/ArduinoAddons/master/package_ultimachine_index.json"` +or you can 'manually' modify the item +`"boardsmanager.additional.urls=....."` +at the file `"preferences.txt"` (this parameter allows you to write a comma-separated list of addresses) +_note: you can find location of this file on your disk by following way: +`File->Preferences->Settings` (`"More preferences can be edited in file ..."`)_ +than do it +`Tools->Board->BoardsManager` +from viewed list select an item `"RAMBo"` (will probably be labeled as `"RepRap Arduino-compatible Mother Board (RAMBo) by UltiMachine"` +_note: select this item for any variant of board used in printers `'Prusa i3 MKx'`, that is for `RAMBo-mini x.y` and `EINSy x.y` to_ +'clicking' the item will display the installation button; select choice `"1.0.1"` from the list(last known version as of the date of issue of this document) +_(after installation, the item is labeled as `"INSTALLED"` and can then be used for target board selection)_ + + +# 2. Source code compilation + +place the source codes corresponding to your printer model obtained from the repository into the selected directory on your disk +`https://github.com/prusa3d/Prusa-Firmware/` +in the subdirectory `"Firmware/variants/"` select the configuration file (`.h`) corresponding to your printer model, make copy named `"Configuration_prusa.h"` (or make simple renaming) and copy them into `"Firmware/"` directory + +run `"Arduino IDE"`; select the file `"Firmware.ino"` from the subdirectory `"Firmware/"` at the location, where you placed the source codes +`File->Open` +make the desired code customizations; **all changes are on your own risk!** + +select the target board `"RAMBo"` +`Tools->Board->RAMBo` +_note: it is not possible to use any of the variants `"Arduino Mega …"`, even though it is the same MCU_ + +run the compilation +`Sketch->Verify/Compile` + +upload the result code into the connected printer +`Sketch->Upload` + +or you can also save the output code to the file (in so called `HEX`-format) `"Firmware.ino.rambo.hex"`: +`Sketch->ExportCompiledBinary` +and then upload it to the printer using the program `"FirmwareUpdater"` +_note: this file is created in the directory `"Firmware/"`_ From 6b77e689244c833dab1cb15d7ebab9e49a0f1b37 Mon Sep 17 00:00:00 2001 From: MRprusa3d <38257799+MRprusa3d@users.noreply.github.com> Date: Tue, 10 Apr 2018 18:07:08 +0000 Subject: [PATCH 03/13] Add files via upload --- Firmware/variants/1_75mm_MK3-EINSy10a-E3Dv6full.h | 1 + 1 file changed, 1 insertion(+) diff --git a/Firmware/variants/1_75mm_MK3-EINSy10a-E3Dv6full.h b/Firmware/variants/1_75mm_MK3-EINSy10a-E3Dv6full.h index 652a23af2..3f12358fc 100644 --- a/Firmware/variants/1_75mm_MK3-EINSy10a-E3Dv6full.h +++ b/Firmware/variants/1_75mm_MK3-EINSy10a-E3Dv6full.h @@ -18,6 +18,7 @@ // Electronics #define MOTHERBOARD BOARD_EINSY_1_0a +#define STEEL_SHEET #define HAS_SECOND_SERIAL_PORT From 716f1c63bfceb393ae7c67a1bed316fbe8e7796c Mon Sep 17 00:00:00 2001 From: MRprusa3d <38257799+MRprusa3d@users.noreply.github.com> Date: Tue, 10 Apr 2018 18:08:57 +0000 Subject: [PATCH 04/13] Add files via upload --- Firmware/Configuration_prusa.h | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/Firmware/Configuration_prusa.h b/Firmware/Configuration_prusa.h index 9279dbf4e..3f12358fc 100644 --- a/Firmware/Configuration_prusa.h +++ b/Firmware/Configuration_prusa.h @@ -18,6 +18,7 @@ // Electronics #define MOTHERBOARD BOARD_EINSY_1_0a +#define STEEL_SHEET #define HAS_SECOND_SERIAL_PORT @@ -169,7 +170,7 @@ const bool Z_MIN_ENDSTOP_INVERTING = false; // set to true to invert the logic o #endif /* DEBUG_BUILD */ //#define EXPERIMENTAL_FEATURES -//#define TMC2130_LINEARITY_CORRECTION +#define TMC2130_LINEARITY_CORRECTION //#define TMC2130_VARIABLE_RESOLUTION @@ -245,6 +246,8 @@ const bool Z_MIN_ENDSTOP_INVERTING = false; // set to true to invert the logic o #define TMC2130_CURRENTS_R {16, 20, 28, 36} // default running currents for all axes #define TMC2130_UNLOAD_CURRENT_R 12 // lowe current for M600 to protect filament sensor +#define TMC2130_STEALTH_Z + //#define TMC2130_DEBUG //#define TMC2130_DEBUG_WR //#define TMC2130_DEBUG_RD From 8da2330b935aeddd4276f13472d1ef59e2acb06d Mon Sep 17 00:00:00 2001 From: Robert Pelnar Date: Wed, 11 Apr 2018 16:03:54 +0200 Subject: [PATCH 05/13] FSensor PAT9125 - i2c ACK check + two attempts in init function (PFW). ultralcd_implementation_hitachi - fixed link --- Firmware/fsensor.cpp | 26 ++++++++++++---- Firmware/pat9125.cpp | 31 ++++++++++++++++++- .../ultralcd_implementation_hitachi_HD44780.h | 2 +- 3 files changed, 51 insertions(+), 8 deletions(-) diff --git a/Firmware/fsensor.cpp b/Firmware/fsensor.cpp index 359d2e10e..bebcf8109 100644 --- a/Firmware/fsensor.cpp +++ b/Firmware/fsensor.cpp @@ -63,7 +63,7 @@ bool fsensor_enable() { // puts_P(PSTR("fsensor_enable\n")); int pat9125 = pat9125_init(); -// printf_P(PSTR("PAT9125_init:%d\n"), pat9125); + printf_P(PSTR("PAT9125_init:%d\n"), pat9125); if (pat9125) fsensor_not_responding = false; else @@ -74,6 +74,7 @@ bool fsensor_enable() fsensor_err_cnt = 0; eeprom_update_byte((uint8_t*)EEPROM_FSENSOR, fsensor_enabled?0x01:0x00); FSensorStateMenu = fsensor_enabled?1:0; +// printf_P(PSTR("fsensor_enable - end %d\n"), fsensor_enabled?1:0); return fsensor_enabled; } @@ -108,7 +109,14 @@ void fsensor_setup_interrupt() void fsensor_autoload_check_start(void) { // puts_P(PSTR("fsensor_autoload_check_start\n")); - pat9125_update_y(); //update sensor + if (!pat9125_update_y()) //update sensor + { + puts_P(PSTR("pat9125 not responding (3).\n")); + fsensor_disable(); + fsensor_not_responding = true; + fsensor_autoload_enabled = false; + return; + } fsensor_autoload_y = pat9125_y; //save current y value fsensor_autoload_c = 0; //reset number of changes counter fsensor_autoload_sum = 0; @@ -130,7 +138,13 @@ bool fsensor_check_autoload(void) uint8_t fsensor_autoload_c_old = fsensor_autoload_c; if ((millis() - fsensor_autoload_last_millis) < 25) return false; fsensor_autoload_last_millis = millis(); - pat9125_update_y(); //update sensor + if (!pat9125_update_y()) + { + puts_P(PSTR("pat9125 not responding (2).\n")); + fsensor_disable(); + fsensor_not_responding = true; + return false; //update sensor + } int16_t dy = fsensor_autoload_y - pat9125_y; if (dy) //? y value is different { @@ -170,9 +184,9 @@ ISR(PCINT2_vect) *digitalPinToPCMSK(fsensor_int_pin) |= bit(digitalPinToPCMSKbit(fsensor_int_pin));*/ if (!pat9125_update_y()) { -#ifdef DEBUG_FSENSOR_LOG - puts_P(PSTR("pat9125 not responding.\n")); -#endif //DEBUG_FSENSOR_LOG +//#ifdef DEBUG_FSENSOR_LOG + puts_P(PSTR("pat9125 not responding (1).\n")); +//#endif //DEBUG_FSENSOR_LOG fsensor_disable(); fsensor_not_responding = true; } diff --git a/Firmware/pat9125.cpp b/Firmware/pat9125.cpp index 9af8e03a7..4894c85f9 100755 --- a/Firmware/pat9125.cpp +++ b/Firmware/pat9125.cpp @@ -92,7 +92,10 @@ int pat9125_init() // pat9125_PID2 = 0x91; if ((pat9125_PID1 != 0x31) || (pat9125_PID2 != 0x91)) { - return 0; + pat9125_PID1 = pat9125_rd_reg(PAT9125_PID1); + pat9125_PID2 = pat9125_rd_reg(PAT9125_PID2); + if ((pat9125_PID1 != 0x31) || (pat9125_PID2 != 0x91)) + return 0; } // Switch to bank0, not allowed to perform OTS_RegWriteRead. pat9125_wr_reg(PAT9125_BANK_SELECTION, 0); @@ -132,6 +135,9 @@ int pat9125_init() pat9125_wr_reg(PAT9125_BANK_SELECTION, 0x00); // Enable write protect. pat9125_wr_reg(PAT9125_WP, 0x00); + + pat9125_PID1 = pat9125_rd_reg(PAT9125_PID1); + pat9125_PID2 = pat9125_rd_reg(PAT9125_PID2); return 1; } @@ -142,11 +148,13 @@ int pat9125_update() unsigned char ucMotion = pat9125_rd_reg(PAT9125_MOTION); pat9125_b = pat9125_rd_reg(PAT9125_FRAME); pat9125_s = pat9125_rd_reg(PAT9125_SHUTTER); + if (pat9125_PID1 == 0xff) return 0; if (ucMotion & 0x80) { unsigned char ucXL = pat9125_rd_reg(PAT9125_DELTA_XL); unsigned char ucYL = pat9125_rd_reg(PAT9125_DELTA_YL); unsigned char ucXYH = pat9125_rd_reg(PAT9125_DELTA_XYH); + if (pat9125_PID1 == 0xff) return 0; int iDX = ucXL | ((ucXYH << 4) & 0xf00); int iDY = ucYL | ((ucXYH << 8) & 0xf00); if (iDX & 0x800) iDX -= 4096; @@ -164,10 +172,12 @@ int pat9125_update_y() if ((pat9125_PID1 == 0x31) && (pat9125_PID2 == 0x91)) { unsigned char ucMotion = pat9125_rd_reg(PAT9125_MOTION); + if (pat9125_PID1 == 0xff) return 0; if (ucMotion & 0x80) { unsigned char ucYL = pat9125_rd_reg(PAT9125_DELTA_YL); unsigned char ucXYH = pat9125_rd_reg(PAT9125_DELTA_XYH); + if (pat9125_PID1 == 0xff) return 0; int iDY = ucYL | ((ucXYH << 8) & 0xf00); if (iDY & 0x800) iDY -= 4096; pat9125_y -= iDY; //negative number, because direction switching does not work @@ -179,6 +189,7 @@ int pat9125_update_y() unsigned char pat9125_rd_reg(unsigned char addr) { +// printf_P(PSTR("pat9125_rd_reg 0x%hhx "), addr); unsigned char data = 0; #ifdef PAT9125_SWSPI swspi_start(); @@ -188,6 +199,14 @@ unsigned char pat9125_rd_reg(unsigned char addr) #endif //PAT9125_SWSPI #ifdef PAT9125_SWI2C int iret = swi2c_readByte_A8(PAT9125_I2C_ADDR, addr, &data); + if (!iret) //NO ACK error + { + pat9125_PID1 = 0xff; + pat9125_PID2 = 0xff; +// printf_P(PSTR("ERR\n")); + return 0; + } +// printf_P(PSTR("0x%hhx OK\n"), data); #endif //PAT9125_SWI2C #ifdef PAT9125_HWI2C Wire.beginTransmission(PAT9125_I2C_ADDR); @@ -202,6 +221,7 @@ unsigned char pat9125_rd_reg(unsigned char addr) void pat9125_wr_reg(unsigned char addr, unsigned char data) { +// printf_P(PSTR("pat9125_wr_reg 0x%hhx 0x%hhx "), addr, data); #ifdef PAT9125_SWSPI swspi_start(); swspi_tx(addr | 0x80); @@ -210,6 +230,15 @@ void pat9125_wr_reg(unsigned char addr, unsigned char data) #endif //PAT9125_SWSPI #ifdef PAT9125_SWI2C int iret = swi2c_writeByte_A8(PAT9125_I2C_ADDR, addr, &data); + if (!iret) //NO ACK error + { + pat9125_PID1 = 0xff; + pat9125_PID2 = 0xff; +// printf_P(PSTR("ERR\n")); + return; + } +// printf_P(PSTR("OK\n")); + #endif //PAT9125_SWI2C #ifdef PAT9125_HWI2C Wire.beginTransmission(PAT9125_I2C_ADDR); diff --git a/Firmware/ultralcd_implementation_hitachi_HD44780.h b/Firmware/ultralcd_implementation_hitachi_HD44780.h index 60e6ed079..cfffeb364 100644 --- a/Firmware/ultralcd_implementation_hitachi_HD44780.h +++ b/Firmware/ultralcd_implementation_hitachi_HD44780.h @@ -194,7 +194,7 @@ extern volatile uint16_t buttons; //an extended version of the last checked but LCD_CLASS lcd(LCD_I2C_ADDRESS, LCD_WIDTH, LCD_HEIGHT); // 2 wire Non-latching LCD SR from: -// https://bitbucket.org/fmalpartida/new-LiquidCrystal_Prusa/wiki/schematics#!shiftregister-connection +// https://bitbucket.org/fmalpartida/new-LiquidCrystal/wiki/schematics#!shiftregister-connection #elif defined(SR_LCD_2W_NL) extern "C" void __cxa_pure_virtual() { while (1); } From c8f1c55ec0b38c23b2df71d76249a09b50b011e3 Mon Sep 17 00:00:00 2001 From: MRprusa3d <38257799+MRprusa3d@users.noreply.github.com> Date: Wed, 11 Apr 2018 14:41:41 +0000 Subject: [PATCH 06/13] Add files via upload --- Firmware/ultralcd.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index 7e4a742e1..909d9ef04 100644 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -3505,8 +3505,12 @@ static void lcd_fsensor_fail() static void lcd_silent_mode_set() { switch (SilentModeMenu) { case 0: SilentModeMenu = 1; break; +#ifdef TMC2130 + case 1: SilentModeMenu = 0; break; +#else case 1: SilentModeMenu = 2; break; case 2: SilentModeMenu = 0; break; +#endif //TMC2130 default: SilentModeMenu = 0; break; } eeprom_update_byte((unsigned char *)EEPROM_SILENT, SilentModeMenu); From 919fba531a6d8d347c2a28e977010ce8aba63106 Mon Sep 17 00:00:00 2001 From: PavelSindler Date: Wed, 11 Apr 2018 16:48:47 +0200 Subject: [PATCH 07/13] wait for PINDA gcode changed --- Firmware/Marlin_main.cpp | 87 ++++++++++++++++++++-------------------- 1 file changed, 44 insertions(+), 43 deletions(-) diff --git a/Firmware/Marlin_main.cpp b/Firmware/Marlin_main.cpp index dbbca14dd..f1c175885 100644 --- a/Firmware/Marlin_main.cpp +++ b/Firmware/Marlin_main.cpp @@ -232,7 +232,7 @@ // M540 - Use S[0|1] to enable or disable the stop SD card print on endstop hit (requires ABORT_ON_ENDSTOP_HIT_FEATURE_ENABLED) // M600 - Pause for filament change X[pos] Y[pos] Z[relative lift] E[initial retract] L[later retract distance for removal] // M605 - Set dual x-carriage movement mode: S [ X R ] -// M666 - Wait for PINDA thermistor to reach target temperature. +// M860 - Wait for PINDA thermistor to reach target temperature. // M900 - Set LIN_ADVANCE options, if enabled. See Configuration_adv.h for details. // M907 - Set digital trimpot motor current using axis codes. // M908 - Control digital trimpot directly. @@ -4968,48 +4968,6 @@ Sigma_Exit: #endif break; -#ifdef PINDA_THERMISTOR -case 666: // M666 - Wait for PINDA thermistor to reach target temperature. - { - int setTargetPinda = 0; - - if (code_seen('S')) { - setTargetPinda = code_value(); - } else { - break; - } - - LCD_MESSAGERPGM(MSG_PLEASE_WAIT); - - SERIAL_PROTOCOLPGM("Wait for PINDA target temperature:"); - SERIAL_PROTOCOL(setTargetPinda); - SERIAL_PROTOCOLLN(""); - - codenum = millis(); - cancel_heatup = false; - - KEEPALIVE_STATE(NOT_BUSY); - - while ( (!cancel_heatup) && current_temperature_pinda < setTargetPinda) { - if(( millis() - codenum) > 1000 ) //Print Temp Reading every 1 second while waiting. - { - SERIAL_PROTOCOLPGM("P:"); - SERIAL_PROTOCOL_F(current_temperature_pinda,1); - SERIAL_PROTOCOLPGM("/"); - SERIAL_PROTOCOL(setTargetPinda); - SERIAL_PROTOCOLLN(""); - codenum = millis(); - } - manage_heater(); - manage_inactivity(); - lcd_update(); - } - LCD_MESSAGERPGM(MSG_OK); - - break; - } -#endif //PINDA_THERMISTOR - #if defined(FAN_PIN) && FAN_PIN > -1 case 106: //M106 Fan On if (code_seen('S')){ @@ -6264,6 +6222,49 @@ case 666: // M666 - Wait for PINDA thermistor to reach target temperature. } break; +#ifdef PINDA_THERMISTOR + case 860: // M860 - Wait for PINDA thermistor to reach target temperature. + { + int setTargetPinda = 0; + + if (code_seen('S')) { + setTargetPinda = code_value(); + } + else { + break; + } + + LCD_MESSAGERPGM(MSG_PLEASE_WAIT); + + SERIAL_PROTOCOLPGM("Wait for PINDA target temperature:"); + SERIAL_PROTOCOL(setTargetPinda); + SERIAL_PROTOCOLLN(""); + + codenum = millis(); + cancel_heatup = false; + + KEEPALIVE_STATE(NOT_BUSY); + + while ((!cancel_heatup) && current_temperature_pinda < setTargetPinda) { + if ((millis() - codenum) > 1000) //Print Temp Reading every 1 second while waiting. + { + SERIAL_PROTOCOLPGM("P:"); + SERIAL_PROTOCOL_F(current_temperature_pinda, 1); + SERIAL_PROTOCOLPGM("/"); + SERIAL_PROTOCOL(setTargetPinda); + SERIAL_PROTOCOLLN(""); + codenum = millis(); + } + manage_heater(); + manage_inactivity(); + lcd_update(); + } + LCD_MESSAGERPGM(MSG_OK); + + break; + } +#endif //PINDA_THERMISTOR + #ifdef LIN_ADVANCE case 900: // M900: Set LIN_ADVANCE options. gcode_M900(); From 89efcb84b1ee8600261641c89fabf1e12cc74b3d Mon Sep 17 00:00:00 2001 From: Robert Pelnar Date: Wed, 11 Apr 2018 17:32:31 +0200 Subject: [PATCH 08/13] removed Configuration_prusa.h fixed - compilation for MK25 --- Firmware/Configuration_prusa.h | 616 --------------------------------- Firmware/Marlin_main.cpp | 4 +- 2 files changed, 2 insertions(+), 618 deletions(-) delete mode 100644 Firmware/Configuration_prusa.h diff --git a/Firmware/Configuration_prusa.h b/Firmware/Configuration_prusa.h deleted file mode 100644 index 3f12358fc..000000000 --- a/Firmware/Configuration_prusa.h +++ /dev/null @@ -1,616 +0,0 @@ -#ifndef CONFIGURATION_PRUSA_H -#define CONFIGURATION_PRUSA_H - -/*------------------------------------ - GENERAL SETTINGS - *------------------------------------*/ - -// Printer revision -#define PRINTER_TYPE PRINTER_MK3 -#define FILAMENT_SIZE "1_75mm_MK3" -#define NOZZLE_TYPE "E3Dv6full" - -// Developer flag -#define DEVELOPER - -// Printer name -#define CUSTOM_MENDEL_NAME "Prusa i3 MK3" - -// Electronics -#define MOTHERBOARD BOARD_EINSY_1_0a -#define STEEL_SHEET -#define HAS_SECOND_SERIAL_PORT - - -// Uncomment the below for the E3D PT100 temperature sensor (with or without PT100 Amplifier) -//#define E3D_PT100_EXTRUDER_WITH_AMP -//#define E3D_PT100_EXTRUDER_NO_AMP -//#define E3D_PT100_BED_WITH_AMP -//#define E3D_PT100_BED_NO_AMP - - -/*------------------------------------ - AXIS SETTINGS - *------------------------------------*/ - -// Steps per unit {X,Y,Z,E} -//#define DEFAULT_AXIS_STEPS_PER_UNIT {100,100,3200/8,140} -#define DEFAULT_AXIS_STEPS_PER_UNIT {100,100,3200/8,280} -//#define DEFAULT_AXIS_STEPS_PER_UNIT {100,100,3200/8,560} - -// Endstop inverting -const bool X_MIN_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop. -const bool Y_MIN_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop. -const bool Z_MIN_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop. - -// Direction inverting -#define INVERT_X_DIR true // for Mendel set to false, for Orca set to true -#define INVERT_Y_DIR false // for Mendel set to true, for Orca set to false -#define INVERT_Z_DIR true // for Mendel set to false, for Orca set to true -#define INVERT_E0_DIR false // for direct drive extruder v9 set to true, for geared extruder set to false -#define INVERT_E1_DIR false // for direct drive extruder v9 set to true, for geared extruder set to false -#define INVERT_E2_DIR false // for direct drive extruder v9 set to true, for geared extruder set to false - -// Home position -#define MANUAL_X_HOME_POS 0 -#define MANUAL_Y_HOME_POS -2.2 -#define MANUAL_Z_HOME_POS 0.2 - -// Travel limits after homing -#define X_MAX_POS 255 -#define X_MIN_POS 0 -#define Y_MAX_POS 210 -#define Y_MIN_POS -4 //orig -4 -#define Z_MAX_POS 210 -#define Z_MIN_POS 0.15 - -// Canceled home position -#define X_CANCEL_POS 50 -#define Y_CANCEL_POS 190 - -//Pause print position -#define X_PAUSE_POS 50 -#define Y_PAUSE_POS 190 -#define Z_PAUSE_LIFT 20 - -#define NUM_AXIS 4 // The axis order in all axis related arrays is X, Y, Z, E -#define HOMING_FEEDRATE {3000, 3000, 800, 0} // set the homing speeds (mm/min) // 3000 is also valid for stallGuard homing. Valid range: 2200 - 3000 - -#define DEFAULT_MAX_FEEDRATE {200, 200, 12, 120} // (mm/sec) max feedrate (M203) -#define DEFAULT_MAX_ACCELERATION {1000, 1000, 200, 5000} // (mm/sec^2) max acceleration (M201) - - -#define DEFAULT_ACCELERATION 1250 // X, Y, Z and E max acceleration in mm/s^2 for printing moves (M204S) -#define DEFAULT_RETRACT_ACCELERATION 1250 // X, Y, Z and E max acceleration in mm/s^2 for retracts (M204T) - -#define MANUAL_FEEDRATE {2700, 2700, 1000, 100} // set the speeds for manual moves (mm/min) - -//Silent mode limits -#define SILENT_MAX_ACCEL 960 // max axxeleration in silent mode in mm/s^2 -#define SILENT_MAX_ACCEL_ST (100*SILENT_MAX_ACCEL) // max accel in steps/s^2 -#define SILENT_MAX_FEEDRATE 172 //max feedrate in mm/s, because mode switched to normal for homming , this value limits also homing, it should be greater (172mm/s=9600mm/min>2700mm/min) - -//Normal mode limits -#define NORMAL_MAX_ACCEL 2500 // Y-axis max axxeleration in normal mode in mm/s^2 -#define NORMAL_MAX_ACCEL_ST (100*NORMAL_MAX_ACCEL) // max accel in steps/s^2 -#define NORMAL_MAX_FEEDRATE 200 //max feedrate in mm/s, because mode switched to normal for homming , this value limits also homing, it should be greater (172mm/s=9600mm/min>2700mm/min) - -//#define SIMPLE_ACCEL_LIMIT //new limitation method for normal/silent - -//number of bytes from end of the file to start check -#define END_FILE_SECTION 10000 - -#define Z_AXIS_ALWAYS_ON 1 - -// Automatic recovery after crash is detected -#define AUTOMATIC_RECOVERY_AFTER_CRASH - -// New XYZ calibration -#define NEW_XYZCAL - -// Do not use Arduino SPI -#define NEW_SPI - -// Watchdog support -#define WATCHDOG - -// Power panic -#define UVLO_SUPPORT - -// Fan check -#define FANCHECK - -// Safety timer -#define SAFETYTIMER - -// Filament sensor -#define PAT9125 - - -// Disable some commands -#define _DISABLE_M42_M226 - -// Minimum ambient temperature limit to start triggering MINTEMP errors [C] -// this value is litlebit higher that real limit, because ambient termistor is on the board and is temperated from it, -// temperature inside the case is around 31C for ambient temperature 25C, when the printer is powered on long time and idle -// the real limit is 15C (same as MINTEMP limit), this is because 15C is end of scale for both used thermistors (bed, heater) -#define MINTEMP_MINAMBIENT 25 -#define MINTEMP_MINAMBIENT_RAW 978 - -//#define DEBUG_BUILD -#ifdef DEBUG_BUILD -//#define _NO_ASM -#define DEBUG_DCODES //D codes -#define DEBUG_STACK_MONITOR //Stack monitor in stepper ISR -//#define DEBUG_FSENSOR_LOG //Reports fsensor status to serial -//#define DEBUG_CRASHDET_COUNTERS //Display crash-detection counters on LCD -//#define DEBUG_RESUME_PRINT //Resume/save print debug enable -//#define DEBUG_UVLO_AUTOMATIC_RECOVER // Power panic automatic recovery debug output -//#define DEBUG_DISABLE_XMINLIMIT //x min limit ignored -//#define DEBUG_DISABLE_XMAXLIMIT //x max limit ignored -//#define DEBUG_DISABLE_YMINLIMIT //y min limit ignored -//#define DEBUG_DISABLE_YMAXLIMIT //y max limit ignored -//#define DEBUG_DISABLE_ZMINLIMIT //z min limit ignored -//#define DEBUG_DISABLE_ZMAXLIMIT //z max limit ignored -#define DEBUG_DISABLE_STARTMSGS //no startup messages -//#define DEBUG_DISABLE_MINTEMP //mintemp error ignored -//#define DEBUG_DISABLE_SWLIMITS //sw limits ignored -//#define DEBUG_DISABLE_LCD_STATUS_LINE //empty four lcd line -//#define DEBUG_DISABLE_PREVENT_EXTRUDER //cold extrusion and long extrusion allowed -//#define DEBUG_DISABLE_PRUSA_STATISTICS //disable prusa_statistics() mesages -//#define DEBUG_DISABLE_FORCE_SELFTEST //disable force selftest -//#define DEBUG_XSTEP_DUP_PIN 21 //duplicate x-step output to pin 21 (SCL on P3) -//#define DEBUG_YSTEP_DUP_PIN 21 //duplicate y-step output to pin 21 (SCL on P3) -//#define DEBUG_BLINK_ACTIVE -//#define DEBUG_DISABLE_FANCHECK //disable fan check (no ISR INT7, check disabled) -//#define DEBUG_DISABLE_FSENSORCHECK //disable fsensor check (no ISR INT7, check disabled) -#define DEBUG_DUMP_TO_2ND_SERIAL //dump received characters to 2nd serial line -#define DEBUG_STEPPER_TIMER_MISSED // Stop on stepper timer overflow, beep and display a message. -#define PLANNER_DIAGNOSTICS // Show the planner queue status on printer display. -#endif /* DEBUG_BUILD */ - -//#define EXPERIMENTAL_FEATURES -#define TMC2130_LINEARITY_CORRECTION -//#define TMC2130_VARIABLE_RESOLUTION - - - -/*------------------------------------ - TMC2130 default settings - *------------------------------------*/ - -#define TMC2130_FCLK 12000000 // fclk = 12MHz - -#define TMC2130_USTEPS_XY 16 // microstep resolution for XY axes -#define TMC2130_USTEPS_Z 16 // microstep resolution for Z axis -#define TMC2130_USTEPS_E 32 // microstep resolution for E axis -#define TMC2130_INTPOL_XY 1 // extrapolate 256 for XY axes -#define TMC2130_INTPOL_Z 1 // extrapolate 256 for Z axis -#define TMC2130_INTPOL_E 1 // extrapolate 256 for E axis - -#define TMC2130_PWM_GRAD_X 2 // PWMCONF -#define TMC2130_PWM_AMPL_X 230 // PWMCONF -#define TMC2130_PWM_AUTO_X 1 // PWMCONF -#define TMC2130_PWM_FREQ_X 2 // PWMCONF - -#define TMC2130_PWM_GRAD_Y 2 // PWMCONF -#define TMC2130_PWM_AMPL_Y 235 // PWMCONF -#define TMC2130_PWM_AUTO_Y 1 // PWMCONF -#define TMC2130_PWM_FREQ_Y 2 // PWMCONF - -#define TMC2130_PWM_GRAD_E 2 // PWMCONF -#define TMC2130_PWM_AMPL_E 235 // PWMCONF -#define TMC2130_PWM_AUTO_E 1 // PWMCONF -#define TMC2130_PWM_FREQ_E 2 // PWMCONF - -#define TMC2130_PWM_GRAD_Z 4 // PWMCONF -#define TMC2130_PWM_AMPL_Z 200 // PWMCONF -#define TMC2130_PWM_AUTO_Z 1 // PWMCONF -#define TMC2130_PWM_FREQ_Z 2 // PWMCONF - -#define TMC2130_PWM_GRAD_E 4 // PWMCONF -#define TMC2130_PWM_AMPL_E 240 // PWMCONF -#define TMC2130_PWM_AUTO_E 1 // PWMCONF -#define TMC2130_PWM_FREQ_E 2 // PWMCONF - -#define TMC2130_TOFF_XYZ 3 // CHOPCONF // fchop = 27.778kHz -#define TMC2130_TOFF_E 3 // CHOPCONF // fchop = 27.778kHz -//#define TMC2130_TOFF_E 4 // CHOPCONF // fchop = 21.429kHz -//#define TMC2130_TOFF_E 5 // CHOPCONF // fchop = 17.442kHz - -//#define TMC2130_STEALTH_E // Extruder stealthChop mode -//#define TMC2130_CNSTOFF_E // Extruder constant-off-time mode (similar to MK2) - -//#define TMC2130_PWM_DIV 683 // PWM frequency divider (1024, 683, 512, 410) -#define TMC2130_PWM_DIV 512 // PWM frequency divider (1024, 683, 512, 410) -#define TMC2130_PWM_CLK (2 * TMC2130_FCLK / TMC2130_PWM_DIV) // PWM frequency (23.4kHz, 35.1kHz, 46.9kHz, 58.5kHz for 12MHz fclk) - -#define TMC2130_TPWMTHRS 0 // TPWMTHRS - Sets the switching speed threshold based on TSTEP from stealthChop to spreadCycle mode -#define TMC2130_THIGH 0 // THIGH - unused - -//#define TMC2130_TCOOLTHRS_X 450 // TCOOLTHRS - coolstep treshold -//#define TMC2130_TCOOLTHRS_Y 450 // TCOOLTHRS - coolstep treshold -#define TMC2130_TCOOLTHRS_X 430 // TCOOLTHRS - coolstep treshold -#define TMC2130_TCOOLTHRS_Y 430 // TCOOLTHRS - coolstep treshold -#define TMC2130_TCOOLTHRS_Z 500 // TCOOLTHRS - coolstep treshold -#define TMC2130_TCOOLTHRS_E 500 // TCOOLTHRS - coolstep treshold - -#define TMC2130_SG_HOMING 1 // stallguard homing -#define TMC2130_SG_THRS_X 3 // stallguard sensitivity for X axis -#define TMC2130_SG_THRS_Y 3 // stallguard sensitivity for Y axis -#define TMC2130_SG_THRS_Z 3 // stallguard sensitivity for Z axis -#define TMC2130_SG_THRS_E 3 // stallguard sensitivity for E axis - -//new settings is possible for vsense = 1, running current value > 31 set vsense to zero and shift both currents by 1 bit right (Z axis only) -#define TMC2130_CURRENTS_H {16, 20, 28, 36} // default holding currents for all axes -#define TMC2130_CURRENTS_R {16, 20, 28, 36} // default running currents for all axes -#define TMC2130_UNLOAD_CURRENT_R 12 // lowe current for M600 to protect filament sensor - -#define TMC2130_STEALTH_Z - -//#define TMC2130_DEBUG -//#define TMC2130_DEBUG_WR -//#define TMC2130_DEBUG_RD - - -/*------------------------------------ - EXTRUDER SETTINGS - *------------------------------------*/ - -// Mintemps -#define HEATER_0_MINTEMP 15 -#define HEATER_1_MINTEMP 5 -#define HEATER_2_MINTEMP 5 -#define BED_MINTEMP 15 - -// Maxtemps -#if defined(E3D_PT100_EXTRUDER_WITH_AMP) || defined(E3D_PT100_EXTRUDER_NO_AMP) -#define HEATER_0_MAXTEMP 410 -#else -#define HEATER_0_MAXTEMP 305 -#endif -#define HEATER_1_MAXTEMP 305 -#define HEATER_2_MAXTEMP 305 -#define BED_MAXTEMP 125 - -#if defined(E3D_PT100_EXTRUDER_WITH_AMP) || defined(E3D_PT100_EXTRUDER_NO_AMP) -// Define PID constants for extruder with PT100 -#define DEFAULT_Kp 21.70 -#define DEFAULT_Ki 1.60 -#define DEFAULT_Kd 73.76 -#else -// Define PID constants for extruder -//#define DEFAULT_Kp 40.925 -//#define DEFAULT_Ki 4.875 -//#define DEFAULT_Kd 86.085 -#define DEFAULT_Kp 16.13 -#define DEFAULT_Ki 1.1625 -#define DEFAULT_Kd 56.23 -#endif - -// Extrude mintemp -#define EXTRUDE_MINTEMP 190 - -// Extruder cooling fans -#define EXTRUDER_0_AUTO_FAN_PIN 8 -#define EXTRUDER_1_AUTO_FAN_PIN -1 -#define EXTRUDER_2_AUTO_FAN_PIN -1 -#define EXTRUDER_AUTO_FAN_TEMPERATURE 50 -#define EXTRUDER_AUTO_FAN_SPEED 255 // == full speed - - - -/*------------------------------------ - LOAD/UNLOAD FILAMENT SETTINGS - *------------------------------------*/ - -// Load filament commands -#define LOAD_FILAMENT_0 "M83" -#define LOAD_FILAMENT_1 "G1 E70 F400" -#define LOAD_FILAMENT_2 "G1 E40 F100" - -// Unload filament commands -#define UNLOAD_FILAMENT_0 "M83" -#define UNLOAD_FILAMENT_1 "G1 E-80 F7000" - -/*------------------------------------ - CHANGE FILAMENT SETTINGS - *------------------------------------*/ - -// Filament change configuration -#define FILAMENTCHANGEENABLE -#ifdef FILAMENTCHANGEENABLE -#define FILAMENTCHANGE_XPOS 211 -#define FILAMENTCHANGE_YPOS 0 -#define FILAMENTCHANGE_ZADD 2 -#define FILAMENTCHANGE_FIRSTRETRACT -2 -#define FILAMENTCHANGE_FINALRETRACT -80 - -#define FILAMENTCHANGE_FIRSTFEED 70 -#define FILAMENTCHANGE_FINALFEED 50 -#define FILAMENTCHANGE_RECFEED 5 - -#define FILAMENTCHANGE_XYFEED 50 -#define FILAMENTCHANGE_EFEED 20 -//#define FILAMENTCHANGE_RFEED 400 -#define FILAMENTCHANGE_RFEED 7000 / 60 -#define FILAMENTCHANGE_EXFEED 2 -#define FILAMENTCHANGE_ZFEED 15 - -#endif - -/*------------------------------------ - ADDITIONAL FEATURES SETTINGS - *------------------------------------*/ - -// Define Prusa filament runout sensor -//#define FILAMENT_RUNOUT_SUPPORT - -#ifdef FILAMENT_RUNOUT_SUPPORT -#define FILAMENT_RUNOUT_SENSOR 1 -#endif - -// temperature runaway -#define TEMP_RUNAWAY_BED_HYSTERESIS 5 -#define TEMP_RUNAWAY_BED_TIMEOUT 360 - -#define TEMP_RUNAWAY_EXTRUDER_HYSTERESIS 15 -#define TEMP_RUNAWAY_EXTRUDER_TIMEOUT 45 - -/*------------------------------------ - MOTOR CURRENT SETTINGS - *------------------------------------*/ - -// Motor Current setting for BIG RAMBo -#define DIGIPOT_MOTOR_CURRENT {135,135,135,135,135} // Values 0-255 (RAMBO 135 = ~0.75A, 185 = ~1A) -#define DIGIPOT_MOTOR_CURRENT_LOUD {135,135,135,135,135} - -// Motor Current settings for RAMBo mini PWM value = MotorCurrentSetting * 255 / range -#if MOTHERBOARD == 200 || MOTHERBOARD == 203 -#define MOTOR_CURRENT_PWM_RANGE 2000 -#define DEFAULT_PWM_MOTOR_CURRENT {400, 750, 750} // {XY,Z,E} -#define DEFAULT_PWM_MOTOR_CURRENT_LOUD {400, 750, 750} // {XY,Z,E} -#endif - -/*------------------------------------ - PAT9125 SETTINGS - *------------------------------------*/ - -#define PAT9125_XRES 0 -#define PAT9125_YRES 255 - -/*------------------------------------ - BED SETTINGS - *------------------------------------*/ - -// Define Mesh Bed Leveling system to enable it -#define MESH_BED_LEVELING -#ifdef MESH_BED_LEVELING - -#define MBL_Z_STEP 0.01 - -// Mesh definitions -#define MESH_MIN_X 35 -#define MESH_MAX_X 238 -#define MESH_MIN_Y 6 -#define MESH_MAX_Y 202 - -// Mesh upsample definition -#define MESH_NUM_X_POINTS 7 -#define MESH_NUM_Y_POINTS 7 -// Mesh measure definition -#define MESH_MEAS_NUM_X_POINTS 3 -#define MESH_MEAS_NUM_Y_POINTS 3 - -#define MESH_HOME_Z_CALIB 0.2 -#define MESH_HOME_Z_SEARCH 5 //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 -#define Z_PROBE_OFFSET_FROM_EXTRUDER -0.4 // Z probe to nozzle Z offset: -below (always!) -#endif - -// Bed Temperature Control -// Select PID or bang-bang with PIDTEMPBED. If bang-bang, BED_LIMIT_SWITCHING will enable hysteresis -// -// Uncomment this to enable PID on the bed. It uses the same frequency PWM as the extruder. -// If your PID_dT above is the default, and correct for your hardware/configuration, that means 7.689Hz, -// which is fine for driving a square wave into a resistive load and does not significantly impact you FET heating. -// This also works fine on a Fotek SSR-10DA Solid State Relay into a 250W heater. -// If your configuration is significantly different than this and you don't understand the issues involved, you probably -// shouldn't use bed PID until someone else verifies your hardware works. -// If this is enabled, find your own PID constants below. -#define PIDTEMPBED -// -//#define BED_LIMIT_SWITCHING - -// This sets the max power delivered to the bed, and replaces the HEATER_BED_DUTY_CYCLE_DIVIDER option. -// all forms of bed control obey this (PID, bang-bang, bang-bang with hysteresis) -// setting this to anything other than 255 enables a form of PWM to the bed just like HEATER_BED_DUTY_CYCLE_DIVIDER did, -// so you shouldn't use it unless you are OK with PWM on your bed. (see the comment on enabling PIDTEMPBED) -#define MAX_BED_POWER 255 // limits duty cycle to bed; 255=full current - -// Bed temperature compensation settings -#define BED_OFFSET 10 -#define BED_OFFSET_START 40 -#define BED_OFFSET_CENTER 50 - - -#ifdef PIDTEMPBED -//120v 250W silicone heater into 4mm borosilicate (MendelMax 1.5+) -//from FOPDT model - kp=.39 Tp=405 Tdead=66, Tc set to 79.2, aggressive factor of .15 (vs .1, 1, 10) -#if defined(E3D_PT100_BED_WITH_AMP) || defined(E3D_PT100_BED_NO_AMP) -// Define PID constants for extruder with PT100 -#define DEFAULT_bedKp 21.70 -#define DEFAULT_bedKi 1.60 -#define DEFAULT_bedKd 73.76 -#else -#define DEFAULT_bedKp 126.13 -#define DEFAULT_bedKi 4.30 -#define DEFAULT_bedKd 924.76 -#endif - -//120v 250W silicone heater into 4mm borosilicate (MendelMax 1.5+) -//from pidautotune -// #define DEFAULT_bedKp 97.1 -// #define DEFAULT_bedKi 1.41 -// #define DEFAULT_bedKd 1675.16 - -// FIND YOUR OWN: "M303 E-1 C8 S90" to run autotune on the bed at 90 degreesC for 8 cycles. -#endif // PIDTEMPBED - - -/*----------------------------------- - PREHEAT SETTINGS - *------------------------------------*/ - -#define FARM_PREHEAT_HOTEND_TEMP 250 -#define FARM_PREHEAT_HPB_TEMP 40 -#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 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 - *------------------------------------*/ - -// -//--NORMAL IS 4.7kohm PULLUP!-- 1kohm pullup can be used on hotend sensor, using correct resistor and table -// -//// Temperature sensor settings: -// -2 is thermocouple with MAX6675 (only for sensor 0) -// -1 is thermocouple with AD595 -// 0 is not used -// 1 is 100k thermistor - best choice for EPCOS 100k (4.7k pullup) -// 2 is 200k thermistor - ATC Semitec 204GT-2 (4.7k pullup) -// 3 is Mendel-parts thermistor (4.7k pullup) -// 4 is 10k thermistor !! do not use it for a hotend. It gives bad resolution at high temp. !! -// 5 is 100K thermistor - ATC Semitec 104GT-2 (Used in ParCan & J-Head) (4.7k pullup) -// 6 is 100k EPCOS - Not as accurate as table 1 (created using a fluke thermocouple) (4.7k pullup) -// 7 is 100k Honeywell thermistor 135-104LAG-J01 (4.7k pullup) -// 71 is 100k Honeywell thermistor 135-104LAF-J01 (4.7k pullup) -// 8 is 100k 0603 SMD Vishay NTCS0603E3104FXT (4.7k pullup) -// 9 is 100k GE Sensing AL03006-58.2K-97-G1 (4.7k pullup) -// 10 is 100k RS thermistor 198-961 (4.7k pullup) -// 11 is 100k beta 3950 1% thermistor (4.7k pullup) -// 12 is 100k 0603 SMD Vishay NTCS0603E3104FXT (4.7k pullup) (calibrated for Makibox hot bed) -// 13 is 100k Hisens 3950 1% up to 300°C for hotend "Simple ONE " & "Hotend "All In ONE" -// 20 is the PT100 circuit found in the Ultimainboard V2.x -// 60 is 100k Maker's Tool Works Kapton Bed Thermistor beta=3950 -// -// 1k ohm pullup tables - This is not normal, you would have to have changed out your 4.7k for 1k -// (but gives greater accuracy and more stable PID) -// 51 is 100k thermistor - EPCOS (1k pullup) -// 52 is 200k thermistor - ATC Semitec 204GT-2 (1k pullup) -// 55 is 100k thermistor - ATC Semitec 104GT-2 (Used in ParCan & J-Head) (1k pullup) -// -// 1047 is Pt1000 with 4k7 pullup -// 1010 is Pt1000 with 1k pullup (non standard) -// 147 is Pt100 with 4k7 pullup -// 148 is E3D Pt100 with 4k7 pullup and no PT100 Amplifier on a MiniRambo 1.3a -// 247 is Pt100 with 4k7 pullup and PT100 Amplifier -// 110 is Pt100 with 1k pullup (non standard) - -#if defined(E3D_PT100_EXTRUDER_WITH_AMP) -#define TEMP_SENSOR_0 247 -#elif defined(E3D_PT100_EXTRUDER_NO_AMP) -#define TEMP_SENSOR_0 148 -#else -#define TEMP_SENSOR_0 5 -#endif -#define TEMP_SENSOR_1 0 -#define TEMP_SENSOR_2 0 -#if defined(E3D_PT100_BED_WITH_AMP) -#define TEMP_SENSOR_BED 247 -#elif defined(E3D_PT100_BED_NO_AMP) -#define TEMP_SENSOR_BED 148 -#else -#define TEMP_SENSOR_BED 1 -#endif -#define TEMP_SENSOR_PINDA 1 -#define TEMP_SENSOR_AMBIENT 2000 - -#define STACK_GUARD_TEST_VALUE 0xA2A2 - -#define MAX_BED_TEMP_CALIBRATION 50 -#define MAX_HOTEND_TEMP_CALIBRATION 50 - -#define MAX_E_STEPS_PER_UNIT 250 -#define MIN_E_STEPS_PER_UNIT 100 - -#define Z_BABYSTEP_MIN -3999 -#define Z_BABYSTEP_MAX 0 - -#define PINDA_PREHEAT_X 20 -#define PINDA_PREHEAT_Y 60 -#define PINDA_PREHEAT_Z 0.15 -/* -#define PINDA_PREHEAT_X 70 -#define PINDA_PREHEAT_Y -3 -#define PINDA_PREHEAT_Z 1*/ -#define PINDA_HEAT_T 120 //time in s - -#define PINDA_MIN_T 50 -#define PINDA_STEP_T 10 -#define PINDA_MAX_T 100 - -#define PING_TIME 60 //time in s -#define PING_TIME_LONG 600 //10 min; used when length of commands buffer > 0 to avoid false triggering when dealing with long gcodes -#define PING_ALLERT_PERIOD 60 //time in s - -#define NC_TIME 10 //time in s for periodic important status messages sending which needs reponse from monitoring -#define NC_BUTTON_LONG_PRESS 15 //time in s - -#define LONG_PRESS_TIME 1000 //time in ms for button long press -#define BUTTON_BLANKING_TIME 200 //time in ms for blanking after button release - -#define DEFAULT_PID_TEMP 210 - -#define MIN_PRINT_FAN_SPEED 75 - -#ifdef SNMM -#define DEFAULT_RETRACTION 4 //used for PINDA temp calibration and pause print -#else -#define DEFAULT_RETRACTION 1 //used for PINDA temp calibration and pause print -#endif - -// How much shall the print head be lifted on power panic? -// Ideally the Z axis will reach a zero phase of the stepper driver on power outage. To simplify this, -// UVLO_Z_AXIS_SHIFT shall be an integer multiply of the stepper driver cycle, that is 4x full step. -// For example, the Prusa i3 MK2 with 16 microsteps per full step has Z stepping of 400 microsteps per mm. -// At 400 microsteps per mm, a full step lifts the Z axis by 0.04mm, and a stepper driver cycle is 0.16mm. -// The following example, 12 * (4 * 16 / 400) = 12 * 0.16mm = 1.92mm. -//#define UVLO_Z_AXIS_SHIFT 1.92 -#define UVLO_Z_AXIS_SHIFT 0.64 -// If power panic occured, and the current temperature is higher then target temperature before interrupt minus this offset, print will be recovered automatically. -#define AUTOMATIC_UVLO_BED_TEMP_OFFSET 5 - -#define HEATBED_V2 - -#define M600_TIMEOUT 600 //seconds - -//#define SUPPORT_VERBOSITY - -#endif //__CONFIGURATION_PRUSA_H diff --git a/Firmware/Marlin_main.cpp b/Firmware/Marlin_main.cpp index dbbd54348..1c3f3be50 100644 --- a/Firmware/Marlin_main.cpp +++ b/Firmware/Marlin_main.cpp @@ -2544,7 +2544,7 @@ void process_commands() lcd_setstatus(strchr_pointer + 5); } -//#ifdef TMC2130 +#ifdef TMC2130 else if (strncmp_P(CMDBUFFER_CURRENT_STRING, PSTR("CRASH_"), 6) == 0) { if(code_seen("CRASH_DETECTED")) @@ -2573,7 +2573,7 @@ void process_commands() tmc2130_goto_step(E_AXIS, step & (4*res - 1), 2, 1000, res); } } -//#endif //TMC2130 +#endif //TMC2130 else if(code_seen("PRUSA")){ if (code_seen("Ping")) { //PRUSA Ping From 0ba7850146df98e576b33b16f26facb0e224530c Mon Sep 17 00:00:00 2001 From: PavelSindler Date: Wed, 11 Apr 2018 17:40:04 +0200 Subject: [PATCH 09/13] pinda temp table changed back --- Firmware/Marlin_main.cpp | 69 ++++++++++++++++++++++++++++++++++++++++ Firmware/temperature.cpp | 2 +- 2 files changed, 70 insertions(+), 1 deletion(-) diff --git a/Firmware/Marlin_main.cpp b/Firmware/Marlin_main.cpp index f1c175885..0c3736ba7 100644 --- a/Firmware/Marlin_main.cpp +++ b/Firmware/Marlin_main.cpp @@ -233,6 +233,7 @@ // M600 - Pause for filament change X[pos] Y[pos] Z[relative lift] E[initial retract] L[later retract distance for removal] // M605 - Set dual x-carriage movement mode: S [ X R ] // M860 - Wait for PINDA thermistor to reach target temperature. +// M861 - Set / Read PINDA temperature compensation offsets // M900 - Set LIN_ADVANCE options, if enabled. See Configuration_adv.h for details. // M907 - Set digital trimpot motor current using axis codes. // M908 - Control digital trimpot directly. @@ -6263,6 +6264,74 @@ Sigma_Exit: break; } + case 861: // M861 - Set/Read PINDA temperature compensation offsets + if (code_seen('?')) { // ? - Print out current EEPRO offset values + uint8_t cal_status = calibration_status_pinda(); + cal_status ? SERIAL_PROTOCOLLN("PINDA cal status: 1") : SERIAL_PROTOCOLLN("PINDA cal status: 0"); + SERIAL_PROTOCOLLN("index, temp, ustep, um"); + for (uint8_t i = 0; i < 6; i++) + { + uint16_t usteps = 0; + if (i > 0) usteps = eeprom_read_word(((uint16_t*)EEPROM_PROBE_TEMP_SHIFT) + (i - 1)); + float mm = ((float)usteps) / axis_steps_per_unit[Z_AXIS]; + i == 0 ? SERIAL_PROTOCOLPGM("n/a") : SERIAL_PROTOCOL(i - 1); + SERIAL_PROTOCOLPGM(", "); + SERIAL_PROTOCOL(35 + (i * 5)); + SERIAL_PROTOCOLPGM(", "); + SERIAL_PROTOCOL(usteps); + SERIAL_PROTOCOLPGM(", "); + SERIAL_PROTOCOL(mm * 1000); + SERIAL_PROTOCOLLN(""); + } + } + else if (code_seen('!')) { // ! - Set factory default values + eeprom_write_byte((uint8_t*)EEPROM_CALIBRATION_STATUS_PINDA, 1); + 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 + SERIAL_PROTOCOLLN("factory restored"); + } + else if (code_seen('Z')) { // Z - Set all values to 0 (effectively disabling PINDA temperature compensation) + eeprom_write_byte((uint8_t*)EEPROM_CALIBRATION_STATUS_PINDA, 1); + eeprom_write_word(((uint16_t*)EEPROM_PROBE_TEMP_SHIFT) + 0, 0); + eeprom_write_word(((uint16_t*)EEPROM_PROBE_TEMP_SHIFT) + 1, 0); + eeprom_write_word(((uint16_t*)EEPROM_PROBE_TEMP_SHIFT) + 2, 0); + eeprom_write_word(((uint16_t*)EEPROM_PROBE_TEMP_SHIFT) + 3, 0); + eeprom_write_word(((uint16_t*)EEPROM_PROBE_TEMP_SHIFT) + 4, 0); + SERIAL_PROTOCOLLN("zerorized"); + } + else if (code_seen('S')) { // Sxxx Iyyy - Set compensation ustep value S for compensation table index I + uint16_t usteps = code_value(); + if (code_seen('I')) { + byte index = code_value(); + if ((index >= 0) && (index < 5)) { + eeprom_write_word(((uint16_t*)EEPROM_PROBE_TEMP_SHIFT) + index, usteps); + SERIAL_PROTOCOLLN("OK"); + SERIAL_PROTOCOLLN("index, temp, ustep, um"); + for (uint8_t i = 0; i < 6; i++) + { + uint16_t usteps = 0; + if (i > 0) usteps = eeprom_read_word(((uint16_t*)EEPROM_PROBE_TEMP_SHIFT) + (i - 1)); + float mm = ((float)usteps) / axis_steps_per_unit[Z_AXIS]; + i == 0 ? SERIAL_PROTOCOLPGM("n/a") : SERIAL_PROTOCOL(i - 1); + SERIAL_PROTOCOLPGM(", "); + SERIAL_PROTOCOL(35 + (i * 5)); + SERIAL_PROTOCOLPGM(", "); + SERIAL_PROTOCOL(usteps); + SERIAL_PROTOCOLPGM(", "); + SERIAL_PROTOCOL(mm * 1000); + SERIAL_PROTOCOLLN(""); + } + } + } + } + else { + SERIAL_PROTOCOLPGM("no valid command"); + } + break; + #endif //PINDA_THERMISTOR #ifdef LIN_ADVANCE diff --git a/Firmware/temperature.cpp b/Firmware/temperature.cpp index aff973039..50d47db17 100644 --- a/Firmware/temperature.cpp +++ b/Firmware/temperature.cpp @@ -985,7 +985,7 @@ static void updateTemperaturesFromRawValues() } #ifdef PINDA_THERMISTOR - current_temperature_pinda = analog2tempPINDA(current_temperature_raw_pinda); + current_temperature_pinda = analog2tempBed(current_temperature_raw_pinda); #endif #ifdef AMBIENT_THERMISTOR From 47eab97d2da08e41a562c4913a436a9759ede6e0 Mon Sep 17 00:00:00 2001 From: PavelSindler Date: Wed, 11 Apr 2018 18:16:16 +0200 Subject: [PATCH 10/13] temp. calibration is automaticly activated after calibration process --- Firmware/Marlin_main.cpp | 5 +++++ Firmware/language_all.cpp | 4 ++-- Firmware/language_cz.h | 2 +- Firmware/language_en.h | 2 +- 4 files changed, 9 insertions(+), 4 deletions(-) diff --git a/Firmware/Marlin_main.cpp b/Firmware/Marlin_main.cpp index 0c3736ba7..715b9b4ec 100644 --- a/Firmware/Marlin_main.cpp +++ b/Firmware/Marlin_main.cpp @@ -3556,6 +3556,9 @@ void process_commands() setTargetBed(0); //set bed target temperature back to 0 // setTargetHotend(0,0); //set hotend target temperature back to 0 lcd_show_fullscreen_message_and_wait_P(MSG_TEMP_CALIBRATION_DONE); + temp_cal_active = true; + eeprom_update_byte((unsigned char *)EEPROM_TEMP_CAL_ACTIVE, 1); + lcd_update_enable(true); lcd_update(2); break; @@ -3669,6 +3672,8 @@ void process_commands() disable_e2(); setTargetBed(0); //set bed target temperature back to 0 lcd_show_fullscreen_message_and_wait_P(MSG_TEMP_CALIBRATION_DONE); + temp_cal_active = true; + eeprom_update_byte((unsigned char *)EEPROM_TEMP_CAL_ACTIVE, 1); lcd_update_enable(true); lcd_update(2); diff --git a/Firmware/language_all.cpp b/Firmware/language_all.cpp index ea499cf50..713a81d2c 100644 --- a/Firmware/language_all.cpp +++ b/Firmware/language_all.cpp @@ -2197,8 +2197,8 @@ const char * const MSG_TEMP_CALIBRATION_LANG_TABLE[LANG_NUM] PROGMEM = { MSG_TEMP_CALIBRATION_CZ }; -const char MSG_TEMP_CALIBRATION_DONE_EN[] PROGMEM = "Temperature calibration is finished. Click to continue."; -const char MSG_TEMP_CALIBRATION_DONE_CZ[] PROGMEM = "Teplotni kalibrace dokoncena. Pokracujte stiskem tlacitka."; +const char MSG_TEMP_CALIBRATION_DONE_EN[] PROGMEM = "Temperature calibration is finished and active. Temp. calibration can be disabled in menu Settings->Temp. cal."; +const char MSG_TEMP_CALIBRATION_DONE_CZ[] PROGMEM = "Teplotni kalibrace dokoncena a je nyni aktivni. Teplotni kalibraci je mozno deaktivovat v menu Nastaveni->Tepl. kal."; const char * const MSG_TEMP_CALIBRATION_DONE_LANG_TABLE[LANG_NUM] PROGMEM = { MSG_TEMP_CALIBRATION_DONE_EN, MSG_TEMP_CALIBRATION_DONE_CZ diff --git a/Firmware/language_cz.h b/Firmware/language_cz.h index a332770a7..0ce9233d6 100644 --- a/Firmware/language_cz.h +++ b/Firmware/language_cz.h @@ -303,7 +303,7 @@ #define MSG_PINDA_NOT_CALIBRATED "Tiskarna nebyla teplotne zkalibrovana" #define MSG_PINDA_PREHEAT "Nahrivani PINDA" #define MSG_TEMP_CALIBRATION "Tepl. kal. " -#define MSG_TEMP_CALIBRATION_DONE "Teplotni kalibrace dokoncena. Pokracujte stiskem tlacitka." +#define MSG_TEMP_CALIBRATION_DONE "Teplotni kalibrace dokoncena a je nyni aktivni. Teplotni kalibraci je mozno deaktivovat v menu Nastaveni->Tepl. kal." #define MSG_TEMP_CALIBRATION_ON "Tepl. kal. [zap]" #define MSG_TEMP_CALIBRATION_OFF "Tepl. kal. [vyp]" #define MSG_PREPARE_FILAMENT "Pripravte filament" diff --git a/Firmware/language_en.h b/Firmware/language_en.h index 661aaf8c5..88510854e 100644 --- a/Firmware/language_en.h +++ b/Firmware/language_en.h @@ -303,7 +303,7 @@ #define(length=20, lines=4) MSG_PINDA_NOT_CALIBRATED "Temperature calibration has not been run yet" #define(length=20, lines=1) MSG_PINDA_PREHEAT "PINDA Heating" #define(length=20, lines=1) MSG_TEMP_CALIBRATION "Temp. cal. " -#define(length=20, lines=4) MSG_TEMP_CALIBRATION_DONE "Temperature calibration is finished. Click to continue." +#define(length=20, lines=12) MSG_TEMP_CALIBRATION_DONE "Temperature calibration is finished and active. Temp. calibration can be disabled in menu Settings->Temp. cal." #define(length=20, lines=1) MSG_TEMP_CALIBRATION_ON "Temp. cal. [on]" #define(length=20, lines=1) MSG_TEMP_CALIBRATION_OFF "Temp. cal. [off]" #define(length=20, lines=1) MSG_PREPARE_FILAMENT "Prepare new filament" From 52de4891fe775ba2f94b84801a8ca4f18c39bdf6 Mon Sep 17 00:00:00 2001 From: PavelSindler Date: Wed, 11 Apr 2018 18:32:27 +0200 Subject: [PATCH 11/13] typo fixed --- Firmware/ultralcd.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index 7e4a742e1..4b4cb7ccd 100644 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -1834,9 +1834,9 @@ static void lcd_support_menu() MENU_ITEM(submenu, MSG_MENU_TEMPERATURES, lcd_menu_temperatures); -#if defined (VOLT_BED_PIN) || defined (VOLT_BED_PIN) +#if defined (VOLT_BED_PIN) || defined (VOLT_PWR_PIN) MENU_ITEM(submenu, MSG_MENU_VOLTAGES, lcd_menu_voltages); -#endif //defined VOLT_BED_PIN || defined VOLT_BED_PIN +#endif //defined VOLT_BED_PIN || defined VOLT_PWR_PIN #ifdef DEBUG_BUILD MENU_ITEM(submenu, PSTR("Debug"), lcd_menu_debug); From ce666993401b14370577648e1ac7511da40432e0 Mon Sep 17 00:00:00 2001 From: PavelSindler Date: Wed, 11 Apr 2018 18:36:38 +0200 Subject: [PATCH 12/13] dont use default temp table for new printers and dont automaticly activate temp. cal. (new pinda probes have different characteristics) --- Firmware/Marlin_main.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Firmware/Marlin_main.cpp b/Firmware/Marlin_main.cpp index 715b9b4ec..c254dcbbf 100644 --- a/Firmware/Marlin_main.cpp +++ b/Firmware/Marlin_main.cpp @@ -1270,13 +1270,13 @@ void setup() if (eeprom_read_byte((uint8_t*)EEPROM_CALIBRATION_STATUS_PINDA) == 255) { //eeprom_write_byte((uint8_t*)EEPROM_CALIBRATION_STATUS_PINDA, 0); eeprom_write_byte((uint8_t*)EEPROM_CALIBRATION_STATUS_PINDA, 1); - 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, 0); //40C + eeprom_write_word(((uint16_t*)EEPROM_PROBE_TEMP_SHIFT) + 1, 0); //45C + eeprom_write_word(((uint16_t*)EEPROM_PROBE_TEMP_SHIFT) + 2, 0); //50C + eeprom_write_word(((uint16_t*)EEPROM_PROBE_TEMP_SHIFT) + 3, 0); //55C + eeprom_write_word(((uint16_t*)EEPROM_PROBE_TEMP_SHIFT) + 4, 0); //60C - eeprom_write_byte((uint8_t*)EEPROM_TEMP_CAL_ACTIVE, 1); + eeprom_write_byte((uint8_t*)EEPROM_TEMP_CAL_ACTIVE, 0); temp_cal_active = true; } if (eeprom_read_byte((uint8_t*)EEPROM_UVLO) == 255) { From 45d1dbbfe0a0c10ce999e6a95eb8567abf6e142d Mon Sep 17 00:00:00 2001 From: PavelSindler Date: Wed, 11 Apr 2018 18:37:07 +0200 Subject: [PATCH 13/13] temp cal. active set to false --- Firmware/Marlin_main.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Firmware/Marlin_main.cpp b/Firmware/Marlin_main.cpp index c254dcbbf..d1c145ed8 100644 --- a/Firmware/Marlin_main.cpp +++ b/Firmware/Marlin_main.cpp @@ -1277,7 +1277,7 @@ void setup() eeprom_write_word(((uint16_t*)EEPROM_PROBE_TEMP_SHIFT) + 4, 0); //60C eeprom_write_byte((uint8_t*)EEPROM_TEMP_CAL_ACTIVE, 0); - temp_cal_active = true; + temp_cal_active = false; } if (eeprom_read_byte((uint8_t*)EEPROM_UVLO) == 255) { eeprom_write_byte((uint8_t*)EEPROM_UVLO, 0);