Browse Source

MK2.5 port - compilable version

Robert Pelnar 6 years ago
parent
commit
8562235440

+ 0 - 9
Firmware/Configuration.h

@@ -380,12 +380,6 @@ const bool Z_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of
 #define DISABLE_E false // For all extruders
 #define DISABLE_INACTIVE_EXTRUDER true //disable only inactive extruders and keep active extruder enabled
 
-#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
 
 // ENDSTOP SETTINGS:
 // Sets direction of endstops when homing; 1=MAX, -1=MIN
@@ -849,8 +843,5 @@ enum CalibrationStatus
 #include "Configuration_adv.h"
 #include "thermistortables.h"
 
-#define PINDA_THERMISTOR
-
-#define AMBIENT_THERMISTOR
 
 #endif //__CONFIGURATION_H

+ 8 - 0
Firmware/Configuration_prusa.h

@@ -40,6 +40,14 @@ const bool X_MIN_ENDSTOP_INVERTING = false; // set to true to invert the logic o
 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

+ 43 - 8
Firmware/Marlin_main.cpp

@@ -589,6 +589,9 @@ void restore_print_from_ram_and_continue(float e_move);
 bool fans_check_enabled = true;
 bool filament_autoload_enabled = true;
 
+
+#ifdef TMC2130
+
 extern int8_t CrashDetectMenu;
 
 void crashdet_enable()
@@ -698,6 +701,8 @@ void failstats_reset_print()
 	eeprom_update_byte((uint8_t *)EEPROM_POWER_COUNT, 0);
 }
 
+#endif //TMC2130
+
 
 #ifdef MESH_BED_LEVELING
    enum MeshLevelingState { MeshReport, MeshStart, MeshNext, MeshSet };
@@ -1063,6 +1068,8 @@ void setup()
 #endif
 	setup_homepin();
 
+#ifdef TMC2130
+
   if (1) {
 ///    SERIAL_ECHOPGM("initial zsteps on power up: "); MYSERIAL.println(tmc2130_rd_MSCNT(Z_TMC2130_CS));
     // try to run to zero phase before powering the Z motor.    
@@ -1078,6 +1085,7 @@ void setup()
     }
 //    SERIAL_ECHOPGM("initial zsteps after reset: "); MYSERIAL.println(tmc2130_rd_MSCNT(Z_TMC2130_CS));
   }
+#endif //TMC2130
 
 #if defined(Z_AXIS_ALWAYS_ON)
 	enable_z();
@@ -1093,7 +1101,7 @@ void setup()
 
 	// Enable Toshiba FlashAir SD card / WiFi enahanced card.
 	card.ToshibaFlashAir_enable(eeprom_read_byte((unsigned char*)EEPROM_TOSHIBA_FLASH_AIR_COMPATIBLITY) == 1);
-	
+
 	if (eeprom_read_dword((uint32_t*)(EEPROM_TOP - 4)) == 0x0ffffffff &&
 		eeprom_read_dword((uint32_t*)(EEPROM_TOP - 8)) == 0x0ffffffff) {
 		// Maiden startup. The firmware has been loaded and first started on a virgin RAMBo board,
@@ -1101,10 +1109,11 @@ void setup()
 		// Once a firmware boots up, it forces at least a language selection, which changes
 		// EEPROM_LANG to number lower than 0x0ff.
 		// 1) Set a high power mode.
+#ifdef TMC2130
 		eeprom_write_byte((uint8_t*)EEPROM_SILENT, 0);
 		tmc2130_mode = TMC2130_MODE_NORMAL;
+#endif //TMC2130
 		eeprom_write_byte((uint8_t*)EEPROM_WIZARD_ACTIVE, 1); //run wizard
-
 	}
 
 	// Force SD card update. Otherwise the SD card update is done from loop() on card.checkautostart(false), 
@@ -1158,7 +1167,11 @@ void setup()
 	}
 
 	check_babystep(); //checking if Z babystep is in allowed range
+
+#ifdef UVLO_SUPPORT
 	setup_uvlo_interrupt();
+#endif //UVLO_SUPPORT
+
 #ifndef DEBUG_DISABLE_FANCHECK
 	setup_fan_interrupt();
 #endif //DEBUG_DISABLE_FANCHECK
@@ -1207,7 +1220,8 @@ void setup()
   // Store the currently running firmware into an eeprom,
   // so the next time the firmware gets updated, it will know from which version it has been updated.
   update_current_firmware_version_to_eeprom();
-  
+
+#ifdef UVLO_SUPPORT
   if (eeprom_read_byte((uint8_t*)EEPROM_UVLO) == 1) { //previous print was terminated by UVLO
 /*
 	  if (lcd_show_fullscreen_message_yes_no_and_wait_P(MSG_RECOVER_PRINT, false))	recover_print();
@@ -1247,6 +1261,8 @@ void setup()
       } 
 	   
   }
+#endif //UVLO_SUPPORT
+
   KEEPALIVE_STATE(NOT_BUSY);
   wdt_enable(WDTO_4S);
 }
@@ -2119,20 +2135,21 @@ bool gcode_M45(bool onlyZ)
 		current_position[Z_AXIS] = MESH_HOME_Z_SEARCH;
 
 		bool endstops_enabled  = enable_endstops(true);
+#ifdef TMC2130
 		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);
 
 		st_synchronize();
+#ifdef TMC2130
 		tmc2130_home_exit();
+#endif //TMC2130
 		enable_endstops(endstops_enabled);
 
 		if (st_get_position_mm(Z_AXIS) == MESH_HOME_Z_SEARCH)
 		{
 
-			//#ifdef TMC2130
-			//		tmc2130_home_enter(X_AXIS_MASK | Y_AXIS_MASK);
-			//#endif
-
 			int8_t verbosity_level = 0;
 			if (code_seen('V'))
 			{
@@ -2304,6 +2321,7 @@ void process_commands()
 	  lcd_setstatus(strchr_pointer + 5);
   }
 
+#ifdef TMC2130
   else if(code_seen("CRASH_DETECTED"))
   {
 	  uint8_t mask = 0;
@@ -2315,6 +2333,7 @@ void process_commands()
 	  crashdet_recover();
   else if(code_seen("CRASH_CANCEL"))
 	  crashdet_cancel();
+#endif //TMC2130
 
   else if(code_seen("PRUSA")){
 		if (code_seen("Ping")) {  //PRUSA Ping
@@ -3995,8 +4014,10 @@ void process_commands()
       card.openFile(strchr_pointer + 4,true);
       break;
     case 24: //M24 - Start SD print
+#ifdef TMC2130
 	  if (!card.paused)
 		failstats_reset_print();
+#endif //TMC2130
       card.startFileprint();
       starttime=millis();
 	  break;
@@ -6025,6 +6046,8 @@ case 404:  //M404 Enter the nominal filament width (3mm, 1.75mm ) N<3.0> or disp
     }
     break;
 
+#ifdef TMC2130
+
 	case 910: // M910 TMC2130 init
     {
 		tmc2130_init();
@@ -6104,6 +6127,8 @@ case 404:  //M404 Enter the nominal filament width (3mm, 1.75mm ) N<3.0> or disp
     }
     break;
 
+#endif //TMC2130
+
     case 350: // M350 Set microstepping mode. Warning: Steps per unit remains unchanged. S code sets stepping mode for all drivers.
     {
       #if defined(X_MS1_PIN) && X_MS1_PIN > -1
@@ -7449,6 +7474,8 @@ void serialecho_temperatures() {
 
 extern uint32_t sdpos_atomic;
 
+#ifdef UVLO_SUPPORT
+
 void uvlo_() 
 {
 	unsigned long time_start = millis();
@@ -7458,10 +7485,12 @@ void uvlo_()
     disable_y();
     disable_e0();
     
+#ifdef TMC2130
 	tmc2130_set_current_h(Z_AXIS, 20);
 	tmc2130_set_current_r(Z_AXIS, 20);
 	tmc2130_set_current_h(E_AXIS, 20);
 	tmc2130_set_current_r(E_AXIS, 20);
+#endif //TMC2130
 
 
     // Indicate that the interrupt has been triggered.
@@ -7469,7 +7498,10 @@ void uvlo_()
 
     // Read out the current Z motor microstep counter. This will be later used
     // for reaching the zero full step before powering off.
-    uint16_t z_microsteps = tmc2130_rd_MSCNT(Z_TMC2130_CS);
+    uint16_t z_microsteps = 0;
+#ifdef TMC2130
+	z_microsteps = tmc2130_rd_MSCNT(Z_TMC2130_CS);
+#endif //TMC2130
 
     // Calculate the file position, from which to resume this print.
     long sd_position = sdpos_atomic; //atomic sd position of last command added in queue
@@ -7598,6 +7630,7 @@ void uvlo_()
         
     };
 }
+#endif //UVLO_SUPPORT
 
 void setup_fan_interrupt() {
 //INT7
@@ -7629,6 +7662,7 @@ ISR(INT7_vect) {
 	EICRB ^= (1 << 6); //change edge
 }
 
+#ifdef UVLO_SUPPORT
 void setup_uvlo_interrupt() {
 	DDRE &= ~(1 << 4); //input pin
 	PORTE &= ~(1 << 4); //no internal pull-up
@@ -7838,6 +7872,7 @@ void restore_print_from_eeprom() {
   // Start SD print.
   enquecommand_P(PSTR("M24")); 
 }
+#endif //UVLO_SUPPORT
 
 
 ////////////////////////////////////////////////////////////////////////////////

+ 6 - 0
Firmware/pins_Einsy_1_0.h

@@ -11,6 +11,12 @@
 
 #define TMC2130
 #define PAT9125
+#define UVLO_SUPPORT
+#define UVLO_SUPPORT
+
+#define AMBIENT_THERMISTOR
+#define PINDA_THERMISTOR
+
 
 #define SWI2C                    // enable software i2c
 #define SWI2C_A8                 // 8bit address functions

+ 136 - 0
Firmware/pins_Rambo_1_3.h

@@ -0,0 +1,136 @@
+/*****************************************************************
+* Rambo mini 1.3 Pin Assignments
+******************************************************************/
+
+#define ELECTRONICS "RAMBo13a"
+
+#define KNOWN_BOARD
+#ifndef __AVR_ATmega2560__
+  #error Oops!  Make sure you have 'Arduino Mega 2560 or Rambo' selected from the 'Tools -> Boards' menu.
+#endif
+
+#define PAT9125
+
+#define PINDA_THERMISTOR
+
+#define SWI2C                    // enable software i2c
+#define SWI2C_A8                 // 8bit address functions
+
+#define PAT9125_SWI2C
+#define PAT9125_SWI2C_SDA      20 //SDA on P3
+#define PAT9125_SWI2C_SCL      21 //SCL on P3
+#define PAT9125_SWI2C_CFG    0xb1 //2us clock delay, 2048 cycles timeout
+
+//#define PAT9125_HWI2C
+
+#define X_STEP_PIN             37
+#define X_DIR_PIN              48
+#define X_MIN_PIN              12
+#define X_MAX_PIN              30
+#define X_ENABLE_PIN           29
+#define X_MS1_PIN              40
+#define X_MS2_PIN              41
+
+#define Y_STEP_PIN             36
+#define Y_DIR_PIN              49
+#define Y_MIN_PIN              11
+#define Y_MAX_PIN              24
+#define Y_ENABLE_PIN           28
+#define Y_MS1_PIN              69
+#define Y_MS2_PIN              39
+
+#define Z_STEP_PIN             35
+#define Z_DIR_PIN              47
+#define Z_MIN_PIN              10
+#define Z_MAX_PIN              23
+#define Z_ENABLE_PIN           27
+#define Z_MS1_PIN              68
+#define Z_MS2_PIN              67
+
+#define HEATER_BED_PIN          4 //PG5
+#define TEMP_BED_PIN            2 //A2
+
+#define HEATER_0_PIN            3 //PE5
+#define TEMP_0_PIN              0 //A0
+
+#define HEATER_1_PIN           -1
+#define TEMP_1_PIN              1 //A1
+
+#define HEATER_2_PIN           -1
+#define TEMP_2_PIN             -1
+
+#define TEMP_AMBIENT_PIN        6 //A6
+
+#define TEMP_PINDA_PIN          3 //A3
+
+#define VOLT_PWR_PIN            4 //A4
+#define VOLT_BED_PIN            9 //A9
+
+
+#define E0_STEP_PIN            34
+#define E0_DIR_PIN             43
+#define E0_ENABLE_PIN          26
+#define E0_MS1_PIN             65
+#define E0_MS2_PIN             66
+
+
+#define MOTOR_CURRENT_PWM_XY_PIN 46
+#define MOTOR_CURRENT_PWM_Z_PIN  45
+#define MOTOR_CURRENT_PWM_E_PIN  44
+#define SDPOWER             -1
+#define SDSS                53
+#define LED_PIN             13
+#define FAN_PIN              6
+#define FAN_1_PIN           -1
+#define PS_ON_PIN           -1
+#define KILL_PIN            -1  // 80 with Smart Controller LCD
+#define SUICIDE_PIN         -1  // PIN that has to be turned on right after start, to keep power flowing.
+
+#ifdef ULTRA_LCD
+
+//#define KILL_PIN            32
+
+#ifdef NEWPANEL
+
+#define BEEPER              84  // Beeper on AUX-4
+#define LCD_PINS_RS         82
+#define LCD_PINS_ENABLE     18
+#define LCD_PINS_D4	        19
+#define LCD_PINS_D5         70
+#define LCD_PINS_D6         85
+#define LCD_PINS_D7         71
+
+//buttons are directly attached using AUX-2
+#define BTN_EN1                72
+#define BTN_EN2                14
+#define BTN_ENC                 9  // the click
+
+#define SDCARDDETECT           15
+
+
+#endif //NEWPANEL
+#endif //ULTRA_LCD
+
+// Support for an 8 bit logic analyzer, for example the Saleae.
+// Channels 0-2 are fast, they could generate 2.667Mhz waveform with a software loop.
+#define LOGIC_ANALYZER_CH0		X_MIN_PIN		// PB6
+#define LOGIC_ANALYZER_CH1		Y_MIN_PIN		// PB5
+#define LOGIC_ANALYZER_CH2		53				// PB0 (PROC_nCS)
+// Channels 3-7 are slow, they could generate
+// 0.889Mhz waveform with a software loop and interrupt locking,
+// 1.333MHz waveform without interrupt locking.
+#define LOGIC_ANALYZER_CH3 		73				// PJ3
+// PK0 has no Arduino digital pin assigned, so we set it directly.
+#define WRITE_LOGIC_ANALYZER_CH4(value) if (value) PORTK |= (1 << 0); else PORTK &= ~(1 << 0) // PK0
+#define LOGIC_ANALYZER_CH5		16				// PH0 (RXD2)
+#define LOGIC_ANALYZER_CH6		17				// PH1 (TXD2)
+#define LOGIC_ANALYZER_CH7 		76				// PJ5
+
+#define LOGIC_ANALYZER_CH0_ENABLE SET_OUTPUT(LOGIC_ANALYZER_CH0)
+#define LOGIC_ANALYZER_CH1_ENABLE SET_OUTPUT(LOGIC_ANALYZER_CH1)
+#define LOGIC_ANALYZER_CH2_ENABLE SET_OUTPUT(LOGIC_ANALYZER_CH2)
+#define LOGIC_ANALYZER_CH3_ENABLE SET_OUTPUT(LOGIC_ANALYZER_CH3)
+#define LOGIC_ANALYZER_CH4_ENABLE do { DDRK |= 1 << 0; } while (0)
+#define LOGIC_ANALYZER_CH5_ENABLE do { cbi(UCSR2B, TXEN2); cbi(UCSR2B, RXEN2); cbi(UCSR2B, RXCIE2); SET_OUTPUT(LOGIC_ANALYZER_CH5); } while (0)
+#define LOGIC_ANALYZER_CH6_ENABLE do { cbi(UCSR2B, TXEN2); cbi(UCSR2B, RXEN2); cbi(UCSR2B, RXCIE2); SET_OUTPUT(LOGIC_ANALYZER_CH6); } while (0)
+#define LOGIC_ANALYZER_CH7_ENABLE SET_OUTPUT(LOGIC_ANALYZER_CH7)

+ 25 - 1
Firmware/temperature.cpp

@@ -454,6 +454,8 @@ void setExtruderAutoFanState(int pin, bool state)
   analogWrite(pin, newFanSpeed);
 }
 
+#if (defined(TACH_0))
+
 void countFanSpeed()
 {
 	//SERIAL_ECHOPGM("edge counter 1:"); MYSERIAL.println(fan_edge_counter[1]);
@@ -526,6 +528,7 @@ void fanSpeedError(unsigned char _fan) {
 		break;
 	}
 }
+#endif //(defined(TACH_0))
 
 
 void checkExtruderAutoFans()
@@ -660,11 +663,16 @@ void manage_heater()
   #endif
 
     // Check if temperature is within the correct range
+#ifdef AMBIENT_THERMISTOR
     if(((current_temperature_ambient < MINTEMP_MINAMBIENT) || (current_temperature[e] > minttemp[e])) && (current_temperature[e] < maxttemp[e])) 
+#else //AMBIENT_THERMISTOR
+    if((current_temperature[e] > minttemp[e]) && (current_temperature[e] < maxttemp[e])) 
+#endif //AMBIENT_THERMISTOR
     {
       soft_pwm[e] = (int)pid_output >> 1;
     }
-    else {
+    else
+	{
       soft_pwm[e] = 0;
     }
 
@@ -703,8 +711,10 @@ void manage_heater()
       (defined(EXTRUDER_2_AUTO_FAN_PIN) && EXTRUDER_2_AUTO_FAN_PIN > -1)
   if(millis() - extruder_autofan_last_check > 1000)  // only need to check fan state very infrequently
   {
+#if (defined(TACH_0))
 	countFanSpeed();
 	checkFanSpeed();
+#endif //(defined(TACH_0))
     checkExtruderAutoFans();
     extruder_autofan_last_check = millis();
   }  
@@ -747,7 +757,11 @@ void manage_heater()
       pid_output = constrain(target_temperature_bed, 0, MAX_BED_POWER);
     #endif //PID_OPENLOOP
 
+#ifdef AMBIENT_THERMISTOR
 	  if(((current_temperature_bed > BED_MINTEMP) || (current_temperature_ambient < MINTEMP_MINAMBIENT)) && (current_temperature_bed < BED_MAXTEMP)) 
+#else //AMBIENT_THERMISTOR
+	  if((current_temperature_bed > BED_MINTEMP) && (current_temperature_bed < BED_MAXTEMP)) 
+#endif //AMBIENT_THERMISTOR
 	  {
 	    soft_pwm_bed = (int)pid_output >> 1;
 	  }
@@ -924,6 +938,7 @@ static float analog2tempBed(int raw) {
   #endif
 }
 
+#ifdef AMBIENT_THERMISTOR
 static float analog2tempAmbient(int raw)
 {
     float celsius = 0;
@@ -944,6 +959,7 @@ static float analog2tempAmbient(int raw)
     if (i == AMBIENTTEMPTABLE_LEN) celsius = PGM_RD_W(AMBIENTTEMPTABLE[i-1][1]);
     return celsius;
 }
+#endif //AMBIENT_THERMISTOR
 
 /* Called to get the raw values into the the actual temperatures. The raw values are created in interrupt context,
     and this function is called from normal context as it is too slow to run in interrupts and will block the stepper routine otherwise */
@@ -1537,7 +1553,9 @@ void adc_ready(void) //callback from adc when sampling finished
 	current_temperature_bed_raw = adc_values[2];
 	current_temperature_raw_pinda = adc_values[3];
 	current_voltage_raw_pwr = adc_values[4];
+#ifdef AMBIENT_THERMISTOR
 	current_temperature_raw_ambient = adc_values[5];
+#endif //AMBIENT_THERMISTOR
 	current_voltage_raw_bed = adc_values[6];
 	temp_meas_ready = true;
 }
@@ -1895,7 +1913,9 @@ ISR(TIMER0_COMPB_vect)
   }
 #endif //BABYSTEPPING
 
+#if (defined(TACH_0))
   check_fans();
+#endif //(defined(TACH_0))
 
 	_lock = false;
 }
@@ -1949,6 +1969,7 @@ void check_min_temp_bed()
 
 void check_min_temp()
 {
+#ifdef AMBIENT_THERMISTOR
 	static uint8_t heat_cycles = 0;
 	if (current_temperature_raw_ambient > OVERSAMPLENR*MINTEMP_MINAMBIENT_RAW)
 	{
@@ -1965,10 +1986,12 @@ void check_min_temp()
 			heat_cycles = 0;
 		return;
 	}
+#endif //AMBIENT_THERMISTOR
 	check_min_temp_heater0();
 	check_min_temp_bed();
 }
 
+#if (defined(TACH_0))
 void check_fans() {
 	if (READ(TACH_0) != fan_state[0]) {
 		fan_edge_counter[0] ++;
@@ -1979,6 +2002,7 @@ void check_fans() {
 	//	fan_state[1] = !fan_state[1];
 	//}
 }
+#endif //TACH_0
 
 #ifdef PIDTEMP
 // Apply the scale factors to the PID values

+ 7 - 0
Firmware/temperature.h

@@ -226,13 +226,20 @@ void PID_autotune(float temp, int extruder, int ncycles);
 void setExtruderAutoFanState(int pin, bool state);
 void checkExtruderAutoFans();
 
+
+#if (defined(TACH_0))
+
 void countFanSpeed();
 void checkFanSpeed();
 void fanSpeedError(unsigned char _fan);
 
 void check_fans();
+
+#endif //(defined(TACH_0))
+
 void check_min_temp();
 void check_max_temp();
 
+
 #endif
 

+ 25 - 6
Firmware/ultralcd.cpp

@@ -121,8 +121,10 @@ extern void fsensor_unblock();
 extern bool fsensor_enable();
 extern void fsensor_disable();
 
+#ifdef TMC2130
 extern void crashdet_enable();
 extern void crashdet_disable();
+#endif //TMC2130
 
 
 #ifdef SNMM
@@ -186,7 +188,6 @@ static void lcd_main_menu();
 static void lcd_tune_menu();
 static void lcd_prepare_menu();
 //static void lcd_move_menu();
-static void lcd_crash_menu();
 static void lcd_settings_menu();
 static void lcd_calibration_menu();
 static void lcd_language_menu();
@@ -202,7 +203,9 @@ static void prusa_stat_temperatures();
 static void prusa_stat_printinfo();
 static void lcd_farm_no();
 static void lcd_menu_extruder_info();
+#ifdef TMC2130
 static void lcd_menu_fails_stats();
+#endif //TMC2130
 
 void lcd_finishstatus();
 
@@ -1529,6 +1532,7 @@ static void lcd_menu_extruder_info()
     }
 }
 
+#ifdef TMC2130
 static void lcd_menu_fails_stats_total()
 {
 //01234567890123456789
@@ -1579,6 +1583,7 @@ static void lcd_menu_fails_stats()
 	MENU_ITEM(submenu, PSTR("Total"), lcd_menu_fails_stats_total);
 	END_MENU();
 }
+#endif //TMC2130
 
 
 #ifdef DEBUG_BUILD
@@ -1601,8 +1606,13 @@ static void lcd_menu_debug()
 static void lcd_menu_temperatures()
 {
 	fprintf_P(lcdout, PSTR(ESC_H(1,0)"Nozzle:   %d%c" ESC_H(1,1)"Bed:      %d%c"), (int)current_temperature[0], '\x01', (int)current_temperature_bed, '\x01');
+#ifdef AMBIENT_THERMISTOR
 	fprintf_P(lcdout, PSTR(ESC_H(1,2)"Ambient:  %d%c" ESC_H(1,3)"PINDA:    %d%c"), (int)current_temperature_ambient, '\x01', (int)current_temperature_pinda, '\x01');
-    if (lcd_clicked())
+#else //AMBIENT_THERMISTOR
+	fprintf_P(lcdout, PSTR(ESC_H(1,2)"PINDA:    %d%c"), (int)current_temperature_pinda, '\x01');
+#endif //AMBIENT_THERMISTOR
+
+	if (lcd_clicked())
     {
         lcd_quick_feedback();
         lcd_return_to_status();
@@ -3339,6 +3349,7 @@ static void lcd_sort_type_set() {
 }
 #endif //SDCARD_SORT_ALPHA
 
+#ifdef TMC2130
 static void lcd_crash_mode_info()
 {
 	lcd_update_enable(true);
@@ -3370,6 +3381,7 @@ static void lcd_crash_mode_info2()
 		else lcd_goto_menu(lcd_settings_menu, 14, true, true);
 	}
 }
+#endif //TMC2130
 
 static void lcd_filament_autoload_info()
 {
@@ -3401,10 +3413,13 @@ static void lcd_silent_mode_set() {
   sei();
 #endif //TMC2130
   digipot_init();
+#ifdef TMC2130
   if (CrashDetectMenu && SilentModeMenu)
 	  lcd_goto_menu(lcd_crash_mode_info2);
+#endif //TMC2130
 }
 
+#ifdef TMC2130
 static void lcd_crash_mode_set()
 {
 	CrashDetectMenu = !CrashDetectMenu; //set also from crashdet_enable() and crashdet_disable()
@@ -3417,6 +3432,8 @@ static void lcd_crash_mode_set()
 	else lcd_goto_menu(lcd_settings_menu, 9);
     
 }
+#endif //TMC2130
+
 
 static void lcd_set_lang(unsigned char lang) {
   lang_selected = lang;
@@ -3831,10 +3848,6 @@ void lcd_wizard(int state) {
 	lcd_update(2);
 }
 
-static void lcd_crash_menu()
-{
-}
-
 
 
 static void lcd_settings_menu()
@@ -3886,6 +3899,7 @@ static void lcd_settings_menu()
 	  MENU_ITEM(function, MSG_FANS_CHECK_OFF, lcd_set_fan_check);
   }
 
+#ifdef TMC2130
   if (SilentModeMenu == 0) MENU_ITEM(function, MSG_SILENT_MODE_OFF, lcd_silent_mode_set);
   else MENU_ITEM(function, MSG_SILENT_MODE_ON, lcd_silent_mode_set);
   if (SilentModeMenu == 0)
@@ -3894,6 +3908,7 @@ static void lcd_settings_menu()
     else MENU_ITEM(function, MSG_CRASHDETECT_ON, lcd_crash_mode_set);
   }
   else MENU_ITEM(submenu, MSG_CRASHDETECT_NA, lcd_crash_mode_info);
+#endif //TMC2130
 
   if (temp_cal_active == false) {
 	  MENU_ITEM(function, MSG_TEMP_CALIBRATION_OFF, lcd_temp_calibration_set);
@@ -5162,7 +5177,9 @@ static void lcd_main_menu()
 	  MENU_ITEM(submenu, MSG_STATISTICS, lcd_menu_statistics);
   }
     
+#ifdef TMC2130
   MENU_ITEM(submenu, PSTR("Fail stats"), lcd_menu_fails_stats);
+#endif //TMC2130
 
   MENU_ITEM(submenu, MSG_SUPPORT, lcd_support_menu);
 
@@ -5242,6 +5259,7 @@ static void lcd_tune_menu()
   }
 #endif //DEBUG_DISABLE_FSENSORCHECK
 
+#ifdef TMC2130
   if (SilentModeMenu == 0) MENU_ITEM(function, MSG_SILENT_MODE_OFF, lcd_silent_mode_set);
   else MENU_ITEM(function, MSG_SILENT_MODE_ON, lcd_silent_mode_set);
 
@@ -5251,6 +5269,7 @@ static void lcd_tune_menu()
     else MENU_ITEM(function, MSG_CRASHDETECT_ON, lcd_crash_mode_set);
   }
   else MENU_ITEM(submenu, MSG_CRASHDETECT_NA, lcd_crash_mode_info);
+#endif //TMC2130
 
   END_MENU();
 }

+ 466 - 0
Firmware/variants/1_75mm_MK25-RAMBo13a-E3Dv6full.h

@@ -0,0 +1,466 @@
+#ifndef CONFIGURATION_PRUSA_H
+#define CONFIGURATION_PRUSA_H
+
+/*------------------------------------
+ GENERAL SETTINGS
+ *------------------------------------*/
+
+// Printer revision
+#define FILAMENT_SIZE "1_75mm_MK25"
+#define NOZZLE_TYPE "E3Dv6full"
+
+// Developer flag
+#define DEVELOPER
+
+// Printer name
+#define CUSTOM_MENDEL_NAME "Prusa i3 MK2.5"
+
+// Electronics
+#define MOTHERBOARD BOARD_RAMBO_MINI_1_3
+
+
+// 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}
+
+// 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 false    // 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 false    // for Mendel set to false, for Orca set to true
+#define INVERT_E0_DIR true    // for direct drive extruder v9 set to true, for geared extruder set to false
+#define INVERT_E1_DIR true    // for direct drive extruder v9 set to true, for geared extruder set to false
+#define INVERT_E2_DIR true    // 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)
+
+//number of bytes from end of the file to start check
+#define END_FILE_SECTION 10000
+
+#define Z_AXIS_ALWAYS_ON 1
+
+
+//#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_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 */
+
+
+/*------------------------------------
+ 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 || MOTHERBOARD == 310
+#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 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 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
+
+#define HEATBED_V2
+
+#define M600_TIMEOUT 600  //seconds
+
+//#define SUPPORT_VERBOSITY
+
+#endif //__CONFIGURATION_PRUSA_H

+ 8 - 0
Firmware/variants/1_75mm_MK3-EINSy10a-E3Dv6full.h

@@ -40,6 +40,14 @@ const bool X_MIN_ENDSTOP_INVERTING = false; // set to true to invert the logic o
 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