Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

DUAL_NOZZLE_DUPLICATION_MODE #4362

Merged
merged 4 commits into from
Jul 23, 2016
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion Marlin/Configuration_adv.h
Original file line number Diff line number Diff line change
Expand Up @@ -329,7 +329,10 @@

#define AXIS_RELATIVE_MODES {false, false, false, false}

//By default pololu step drivers require an active high signal. However, some high power drivers require an active low signal as step.
// Allow duplication mode with a basic dual-nozzle extruder
//#define DUAL_NOZZLE_DUPLICATION_MODE

// By default pololu step drivers require an active high signal. However, some high power drivers require an active low signal as step.
#define INVERT_X_STEP_PIN false
#define INVERT_Y_STEP_PIN false
#define INVERT_Z_STEP_PIN false
Expand Down
2 changes: 1 addition & 1 deletion Marlin/Marlin.h
Original file line number Diff line number Diff line change
Expand Up @@ -134,7 +134,7 @@ void idle(

void manage_inactivity(bool ignore_stepper_queue = false);

#if ENABLED(DUAL_X_CARRIAGE)
#if ENABLED(DUAL_X_CARRIAGE) || ENABLED(DUAL_NOZZLE_DUPLICATION_MODE)
extern bool extruder_duplication_enabled;
#endif

Expand Down
35 changes: 26 additions & 9 deletions Marlin/Marlin_main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1392,6 +1392,10 @@ XYZ_CONSTS_FROM_CONFIG(float, max_length, MAX_LENGTH);
XYZ_CONSTS_FROM_CONFIG(float, home_bump_mm, HOME_BUMP_MM);
XYZ_CONSTS_FROM_CONFIG(signed char, home_dir, HOME_DIR);

#if ENABLED(DUAL_X_CARRIAGE) || ENABLED(DUAL_NOZZLE_DUPLICATION_MODE)
bool extruder_duplication_enabled = false; // Used in Dual X mode 2
#endif

#if ENABLED(DUAL_X_CARRIAGE)

#define DXC_FULL_CONTROL_MODE 0
Expand Down Expand Up @@ -1423,7 +1427,6 @@ XYZ_CONSTS_FROM_CONFIG(signed char, home_dir, HOME_DIR);
static millis_t delayed_move_time = 0; // used in mode 1
static float duplicate_extruder_x_offset = DEFAULT_DUPLICATION_X_OFFSET; // used in mode 2
static float duplicate_extruder_temp_offset = 0; // used in mode 2
bool extruder_duplication_enabled = false; // used in mode 2

#endif //DUAL_X_CARRIAGE

Expand Down Expand Up @@ -2820,12 +2823,13 @@ inline void gcode_G4() {
current_position[X_AXIS] = current_position[Y_AXIS] = 0.0;
sync_plan_position();

#if ENABLED(DUAL_X_CARRIAGE)
int x_axis_home_dir = x_home_dir(active_extruder);
extruder_duplication_enabled = false;
#else
int x_axis_home_dir = home_dir(X_AXIS);
#endif
int x_axis_home_dir =
#if ENABLED(DUAL_X_CARRIAGE)
x_home_dir(active_extruder)
#else
home_dir(X_AXIS)
#endif
;

float mlx = max_length(X_AXIS),
mly = max_length(Y_AXIS),
Expand Down Expand Up @@ -2878,6 +2882,10 @@ inline void gcode_G28() {
tool_change(0, 0, true);
#endif

#if ENABLED(DUAL_X_CARRIAGE) || ENABLED(DUAL_NOZZLE_DUPLICATION_MODE)
extruder_duplication_enabled = false;
#endif

/**
* For mesh bed leveling deactivate the mesh calculations, will be turned
* on again when homing all axis
Expand Down Expand Up @@ -2996,7 +3004,6 @@ inline void gcode_G28() {
if (home_all_axis || homeX) {
#if ENABLED(DUAL_X_CARRIAGE)
int tmp_extruder = active_extruder;
extruder_duplication_enabled = false;
active_extruder = !active_extruder;
HOMEAXIS(X);
inactive_extruder_x_pos = current_position[X_AXIS];
Expand Down Expand Up @@ -6473,7 +6480,17 @@ inline void gcode_M503() {
delayed_move_time = 0;
}

#endif // DUAL_X_CARRIAGE
#elif ENABLED(DUAL_NOZZLE_DUPLICATION_MODE)

inline void gcode_M605() {
stepper.synchronize();
extruder_duplication_enabled = code_seen('S') && code_value_int() == 2;
SERIAL_ECHO_START;
SERIAL_ECHOPAIR(MSG_DUPLICATION_MODE, extruder_duplication_enabled ? MSG_ON : MSG_OFF);
SERIAL_EOL;
}

#endif // M605

#if ENABLED(LIN_ADVANCE)
/**
Expand Down
19 changes: 18 additions & 1 deletion Marlin/SanityCheck.h
Original file line number Diff line number Diff line change
Expand Up @@ -175,7 +175,7 @@
*/
#if ENABLED(SWITCHING_EXTRUDER)
#if ENABLED(DUAL_X_CARRIAGE)
#error "SINGLENOZZLE and DUAL_X_CARRIAGE are incompatible."
#error "SWITCHING_EXTRUDER and DUAL_X_CARRIAGE are incompatible."
#elif EXTRUDERS != 2
#error "SWITCHING_EXTRUDER requires exactly 2 EXTRUDERS."
#elif NUM_SERVOS < 1
Expand Down Expand Up @@ -572,6 +572,23 @@
#error "TEMP_SENSOR_1 is required with TEMP_SENSOR_1_AS_REDUNDANT."
#endif

/**
* Basic 2-nozzle duplication mode
*/
#if ENABLED(DUAL_NOZZLE_DUPLICATION_MODE)
#if HOTENDS != 2
#error "DUAL_NOZZLE_DUPLICATION_MODE requires exactly 2 hotends."
#elif ENABLED(DUAL_X_CARRIAGE)
#error "DUAL_NOZZLE_DUPLICATION_MODE is incompatible with DUAL_X_CARRIAGE."
#elif ENABLED(SINGLENOZZLE)
#error "DUAL_NOZZLE_DUPLICATION_MODE is incompatible with SINGLENOZZLE."
#elif ENABLED(MIXING_EXTRUDER)
#error "DUAL_NOZZLE_DUPLICATION_MODE is incompatible with MIXING_EXTRUDER."
#elif ENABLED(SWITCHING_EXTRUDER)
#error "DUAL_NOZZLE_DUPLICATION_MODE is incompatible with SWITCHING_EXTRUDER."
#endif
#endif

/**
* Test Extruder Pins
*/
Expand Down
5 changes: 4 additions & 1 deletion Marlin/example_configurations/Cartesio/Configuration_adv.h
Original file line number Diff line number Diff line change
Expand Up @@ -329,7 +329,10 @@

#define AXIS_RELATIVE_MODES {false, false, false, false}

//By default pololu step drivers require an active high signal. However, some high power drivers require an active low signal as step.
// Allow duplication mode with a basic dual-nozzle extruder
//#define DUAL_NOZZLE_DUPLICATION_MODE

// By default pololu step drivers require an active high signal. However, some high power drivers require an active low signal as step.
#define INVERT_X_STEP_PIN false
#define INVERT_Y_STEP_PIN false
#define INVERT_Z_STEP_PIN false
Expand Down
5 changes: 4 additions & 1 deletion Marlin/example_configurations/Felix/Configuration_adv.h
Original file line number Diff line number Diff line change
Expand Up @@ -329,7 +329,10 @@

#define AXIS_RELATIVE_MODES {false, false, false, false}

//By default pololu step drivers require an active high signal. However, some high power drivers require an active low signal as step.
// Allow duplication mode with a basic dual-nozzle extruder
//#define DUAL_NOZZLE_DUPLICATION_MODE

// By default pololu step drivers require an active high signal. However, some high power drivers require an active low signal as step.
#define INVERT_X_STEP_PIN false
#define INVERT_Y_STEP_PIN false
#define INVERT_Z_STEP_PIN false
Expand Down
5 changes: 4 additions & 1 deletion Marlin/example_configurations/Hephestos/Configuration_adv.h
Original file line number Diff line number Diff line change
Expand Up @@ -329,7 +329,10 @@

#define AXIS_RELATIVE_MODES {false, false, false, false}

//By default pololu step drivers require an active high signal. However, some high power drivers require an active low signal as step.
// Allow duplication mode with a basic dual-nozzle extruder
//#define DUAL_NOZZLE_DUPLICATION_MODE

// By default pololu step drivers require an active high signal. However, some high power drivers require an active low signal as step.
#define INVERT_X_STEP_PIN false
#define INVERT_Y_STEP_PIN false
#define INVERT_Z_STEP_PIN false
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -329,7 +329,10 @@

#define AXIS_RELATIVE_MODES {false, false, false, false}

//By default pololu step drivers require an active high signal. However, some high power drivers require an active low signal as step.
// Allow duplication mode with a basic dual-nozzle extruder
//#define DUAL_NOZZLE_DUPLICATION_MODE

// By default pololu step drivers require an active high signal. However, some high power drivers require an active low signal as step.
#define INVERT_X_STEP_PIN false
#define INVERT_Y_STEP_PIN false
#define INVERT_Z_STEP_PIN false
Expand Down
5 changes: 4 additions & 1 deletion Marlin/example_configurations/K8200/Configuration_adv.h
Original file line number Diff line number Diff line change
Expand Up @@ -335,7 +335,10 @@

#define AXIS_RELATIVE_MODES {false, false, false, false}

//By default pololu step drivers require an active high signal. However, some high power drivers require an active low signal as step.
// Allow duplication mode with a basic dual-nozzle extruder
//#define DUAL_NOZZLE_DUPLICATION_MODE

// By default pololu step drivers require an active high signal. However, some high power drivers require an active low signal as step.
#define INVERT_X_STEP_PIN false
#define INVERT_Y_STEP_PIN false
#define INVERT_Z_STEP_PIN false
Expand Down
5 changes: 4 additions & 1 deletion Marlin/example_configurations/K8400/Configuration_adv.h
Original file line number Diff line number Diff line change
Expand Up @@ -329,7 +329,10 @@

#define AXIS_RELATIVE_MODES {false, false, false, false}

//By default pololu step drivers require an active high signal. However, some high power drivers require an active low signal as step.
// Allow duplication mode with a basic dual-nozzle extruder
//#define DUAL_NOZZLE_DUPLICATION_MODE

// By default pololu step drivers require an active high signal. However, some high power drivers require an active low signal as step.
#define INVERT_X_STEP_PIN false
#define INVERT_Y_STEP_PIN false
#define INVERT_Z_STEP_PIN false
Expand Down
5 changes: 4 additions & 1 deletion Marlin/example_configurations/RigidBot/Configuration_adv.h
Original file line number Diff line number Diff line change
Expand Up @@ -329,7 +329,10 @@

#define AXIS_RELATIVE_MODES {false, false, false, false}

//By default pololu step drivers require an active high signal. However, some high power drivers require an active low signal as step.
// Allow duplication mode with a basic dual-nozzle extruder
//#define DUAL_NOZZLE_DUPLICATION_MODE

// By default pololu step drivers require an active high signal. However, some high power drivers require an active low signal as step.
#define INVERT_X_STEP_PIN false
#define INVERT_Y_STEP_PIN false
#define INVERT_Z_STEP_PIN false
Expand Down
5 changes: 4 additions & 1 deletion Marlin/example_configurations/SCARA/Configuration_adv.h
Original file line number Diff line number Diff line change
Expand Up @@ -329,7 +329,10 @@

#define AXIS_RELATIVE_MODES {false, false, false, false}

//By default pololu step drivers require an active high signal. However, some high power drivers require an active low signal as step.
// Allow duplication mode with a basic dual-nozzle extruder
//#define DUAL_NOZZLE_DUPLICATION_MODE

// By default pololu step drivers require an active high signal. However, some high power drivers require an active low signal as step.
#define INVERT_X_STEP_PIN false
#define INVERT_Y_STEP_PIN false
#define INVERT_Z_STEP_PIN false
Expand Down
5 changes: 4 additions & 1 deletion Marlin/example_configurations/TAZ4/Configuration_adv.h
Original file line number Diff line number Diff line change
Expand Up @@ -337,7 +337,10 @@

#define AXIS_RELATIVE_MODES {false, false, false, false}

//By default pololu step drivers require an active high signal. However, some high power drivers require an active low signal as step.
// Allow duplication mode with a basic dual-nozzle extruder
//#define DUAL_NOZZLE_DUPLICATION_MODE

// By default pololu step drivers require an active high signal. However, some high power drivers require an active low signal as step.
#define INVERT_X_STEP_PIN false
#define INVERT_Y_STEP_PIN false
#define INVERT_Z_STEP_PIN false
Expand Down
5 changes: 4 additions & 1 deletion Marlin/example_configurations/WITBOX/Configuration_adv.h
Original file line number Diff line number Diff line change
Expand Up @@ -329,7 +329,10 @@

#define AXIS_RELATIVE_MODES {false, false, false, false}

//By default pololu step drivers require an active high signal. However, some high power drivers require an active low signal as step.
// Allow duplication mode with a basic dual-nozzle extruder
//#define DUAL_NOZZLE_DUPLICATION_MODE

// By default pololu step drivers require an active high signal. However, some high power drivers require an active low signal as step.
#define INVERT_X_STEP_PIN false
#define INVERT_Y_STEP_PIN false
#define INVERT_Z_STEP_PIN false
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -329,7 +329,10 @@

#define AXIS_RELATIVE_MODES {false, false, false, false}

//By default pololu step drivers require an active high signal. However, some high power drivers require an active low signal as step.
// Allow duplication mode with a basic dual-nozzle extruder
//#define DUAL_NOZZLE_DUPLICATION_MODE

// By default pololu step drivers require an active high signal. However, some high power drivers require an active low signal as step.
#define INVERT_X_STEP_PIN false
#define INVERT_Y_STEP_PIN false
#define INVERT_Z_STEP_PIN false
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -329,7 +329,10 @@

#define AXIS_RELATIVE_MODES {false, false, false, false}

//By default pololu step drivers require an active high signal. However, some high power drivers require an active low signal as step.
// Allow duplication mode with a basic dual-nozzle extruder
//#define DUAL_NOZZLE_DUPLICATION_MODE

// By default pololu step drivers require an active high signal. However, some high power drivers require an active low signal as step.
#define INVERT_X_STEP_PIN false
#define INVERT_Y_STEP_PIN false
#define INVERT_Z_STEP_PIN false
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -329,7 +329,10 @@

#define AXIS_RELATIVE_MODES {false, false, false, false}

//By default pololu step drivers require an active high signal. However, some high power drivers require an active low signal as step.
// Allow duplication mode with a basic dual-nozzle extruder
//#define DUAL_NOZZLE_DUPLICATION_MODE

// By default pololu step drivers require an active high signal. However, some high power drivers require an active low signal as step.
#define INVERT_X_STEP_PIN false
#define INVERT_Y_STEP_PIN false
#define INVERT_Z_STEP_PIN false
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -334,7 +334,10 @@

#define AXIS_RELATIVE_MODES {false, false, false, false}

//By default pololu step drivers require an active high signal. However, some high power drivers require an active low signal as step.
// Allow duplication mode with a basic dual-nozzle extruder
//#define DUAL_NOZZLE_DUPLICATION_MODE

// By default pololu step drivers require an active high signal. However, some high power drivers require an active low signal as step.
#define INVERT_X_STEP_PIN false
#define INVERT_Y_STEP_PIN false
#define INVERT_Z_STEP_PIN false
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -329,7 +329,10 @@

#define AXIS_RELATIVE_MODES {false, false, false, false}

//By default pololu step drivers require an active high signal. However, some high power drivers require an active low signal as step.
// Allow duplication mode with a basic dual-nozzle extruder
//#define DUAL_NOZZLE_DUPLICATION_MODE

// By default pololu step drivers require an active high signal. However, some high power drivers require an active low signal as step.
#define INVERT_X_STEP_PIN false
#define INVERT_Y_STEP_PIN false
#define INVERT_Z_STEP_PIN false
Expand Down
5 changes: 4 additions & 1 deletion Marlin/example_configurations/makibox/Configuration_adv.h
Original file line number Diff line number Diff line change
Expand Up @@ -329,7 +329,10 @@

#define AXIS_RELATIVE_MODES {false, false, false, false}

//By default pololu step drivers require an active high signal. However, some high power drivers require an active low signal as step.
// Allow duplication mode with a basic dual-nozzle extruder
//#define DUAL_NOZZLE_DUPLICATION_MODE

// By default pololu step drivers require an active high signal. However, some high power drivers require an active low signal as step.
#define INVERT_X_STEP_PIN false
#define INVERT_Y_STEP_PIN false
#define INVERT_Z_STEP_PIN false
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -329,7 +329,10 @@

#define AXIS_RELATIVE_MODES {false, false, false, false}

//By default pololu step drivers require an active high signal. However, some high power drivers require an active low signal as step.
// Allow duplication mode with a basic dual-nozzle extruder
//#define DUAL_NOZZLE_DUPLICATION_MODE

// By default pololu step drivers require an active high signal. However, some high power drivers require an active low signal as step.
#define INVERT_X_STEP_PIN false
#define INVERT_Y_STEP_PIN false
#define INVERT_Z_STEP_PIN false
Expand Down
1 change: 1 addition & 0 deletions Marlin/language.h
Original file line number Diff line number Diff line change
Expand Up @@ -159,6 +159,7 @@
#define MSG_ENDSTOP_HIT "TRIGGERED"
#define MSG_ENDSTOP_OPEN "open"
#define MSG_HOTEND_OFFSET "Hotend offsets:"
#define MSG_DUPLICATION_MODE "Duplication mode: "

#define MSG_SD_CANT_OPEN_SUBDIR "Cannot open subdir "
#define MSG_SD_INIT_FAIL "SD init fail"
Expand Down
12 changes: 6 additions & 6 deletions Marlin/stepper_indirection.h
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@
#define X2_ENABLE_INIT SET_OUTPUT(X2_ENABLE_PIN)
#define X2_ENABLE_WRITE(STATE) WRITE(X2_ENABLE_PIN,STATE)
#define X2_ENABLE_READ READ(X_ENABLE_PIN)
#endif // DUAL_X_CARRIAGE
#endif

// Y motor
#define Y_STEP_INIT SET_OUTPUT(Y_STEP_PIN)
Expand Down Expand Up @@ -195,14 +195,14 @@
#define NORM_E_DIR() { switch (current_block->active_extruder) { case 0: E0_DIR_WRITE(!INVERT_E0_DIR); break; case 1: E1_DIR_WRITE(!INVERT_E1_DIR); break; case 2: E2_DIR_WRITE(!INVERT_E2_DIR); } }
#define REV_E_DIR() { switch (current_block->active_extruder) { case 0: E0_DIR_WRITE(INVERT_E0_DIR); break; case 1: E1_DIR_WRITE(INVERT_E1_DIR); break; case 2: E2_DIR_WRITE(INVERT_E2_DIR); } }
#elif EXTRUDERS > 1
#if DISABLED(DUAL_X_CARRIAGE)
#define E_STEP_WRITE(v) { if (current_block->active_extruder == 0) { E0_STEP_WRITE(v); } else { E1_STEP_WRITE(v); } }
#define NORM_E_DIR() { if (current_block->active_extruder == 0) { E0_DIR_WRITE(!INVERT_E0_DIR); } else { E1_DIR_WRITE(!INVERT_E1_DIR); } }
#define REV_E_DIR() { if (current_block->active_extruder == 0) { E0_DIR_WRITE(INVERT_E0_DIR); } else { E1_DIR_WRITE(INVERT_E1_DIR); } }
#else
#if ENABLED(DUAL_X_CARRIAGE) || ENABLED(DUAL_NOZZLE_DUPLICATION_MODE)
#define E_STEP_WRITE(v) { if (extruder_duplication_enabled) { E0_STEP_WRITE(v); E1_STEP_WRITE(v); } else if (current_block->active_extruder == 0) { E0_STEP_WRITE(v); } else { E1_STEP_WRITE(v); } }
#define NORM_E_DIR() { if (extruder_duplication_enabled) { E0_DIR_WRITE(!INVERT_E0_DIR); E1_DIR_WRITE(!INVERT_E1_DIR); } else if (current_block->active_extruder == 0) { E0_DIR_WRITE(!INVERT_E0_DIR); } else { E1_DIR_WRITE(!INVERT_E1_DIR); } }
#define REV_E_DIR() { if (extruder_duplication_enabled) { E0_DIR_WRITE(INVERT_E0_DIR); E1_DIR_WRITE(INVERT_E1_DIR); } else if (current_block->active_extruder == 0) { E0_DIR_WRITE(INVERT_E0_DIR); } else { E1_DIR_WRITE(INVERT_E1_DIR); } }
#else
#define E_STEP_WRITE(v) { if (current_block->active_extruder == 0) { E0_STEP_WRITE(v); } else { E1_STEP_WRITE(v); } }
#define NORM_E_DIR() { if (current_block->active_extruder == 0) { E0_DIR_WRITE(!INVERT_E0_DIR); } else { E1_DIR_WRITE(!INVERT_E1_DIR); } }
#define REV_E_DIR() { if (current_block->active_extruder == 0) { E0_DIR_WRITE(INVERT_E0_DIR); } else { E1_DIR_WRITE(INVERT_E1_DIR); } }
#endif
#elif ENABLED(MIXING_EXTRUDER)
#define E_STEP_WRITE(v) NOOP /* not used for mixing extruders! */
Expand Down