#ifndef CONFIGURATION_ADV_H #define CONFIGURATION_ADV_H //=========================================================================== //=============================Thermal Settings ============================ //=========================================================================== #ifdef BED_LIMIT_SWITCHING #define BED_HYSTERESIS 2 //only disable heating if T>target+BED_HYSTERESIS and enable heating if T>target-BED_HYSTERESIS #endif #define BED_CHECK_INTERVAL 5000 //ms between checks in bang-bang control #ifdef PIDTEMP // this adds an experimental additional term to the heating power, proportional to the extrusion speed. // if Kc is chosen well, the additional required power due to increased melting should be compensated. #define PID_ADD_EXTRUSION_RATE #ifdef PID_ADD_EXTRUSION_RATE #define DEFAULT_Kc (1) //heating power=Kc*(e_speed) #endif #endif //automatic temperature: The hot end target temperature is calculated by all the buffered lines of gcode. //The maximum buffered steps/sec of the extruder motor are called "se". //You enter the autotemp mode by a M109 S B F // the target temperature is set to mintemp+factor*se[steps/sec] and limited by mintemp and maxtemp // you exit the value by any M109 without F* // Also, if the temperature is set to a value C[bitmask] with single timer * * bit 0 = Auto-report temperatures * bit 1 = Auto-report fans * bit 2 = Auto-report position * bit 3 = free * bit 4 = free * bit 5 = free * bit 6 = free * bit 7 = free */ #define AUTO_REPORT //=========================================================================== //=============================Mechanical Settings=========================== //=========================================================================== #define ENDSTOPS_ONLY_FOR_HOMING // If defined the endstops will only be used for homing //// AUTOSET LOCATIONS OF LIMIT SWITCHES //// Added by ZetaPhoenix 09-15-2012 #ifdef MANUAL_HOME_POSITIONS // Use manual limit switch locations #define X_HOME_POS MANUAL_X_HOME_POS #define Y_HOME_POS MANUAL_Y_HOME_POS #define Z_HOME_POS MANUAL_Z_HOME_POS #else //Set min/max homing switch positions based upon homing direction and min/max travel limits //X axis #if X_HOME_DIR == -1 #ifdef BED_CENTER_AT_0_0 #define X_HOME_POS X_MAX_LENGTH * -0.5 #else #define X_HOME_POS X_MIN_POS #endif //BED_CENTER_AT_0_0 #else #ifdef BED_CENTER_AT_0_0 #define X_HOME_POS X_MAX_LENGTH * 0.5 #else #define X_HOME_POS X_MAX_POS #endif //BED_CENTER_AT_0_0 #endif //X_HOME_DIR == -1 //Y axis #if Y_HOME_DIR == -1 #ifdef BED_CENTER_AT_0_0 #define Y_HOME_POS Y_MAX_LENGTH * -0.5 #else #define Y_HOME_POS Y_MIN_POS #endif //BED_CENTER_AT_0_0 #else #ifdef BED_CENTER_AT_0_0 #define Y_HOME_POS Y_MAX_LENGTH * 0.5 #else #define Y_HOME_POS Y_MAX_POS #endif //BED_CENTER_AT_0_0 #endif //Y_HOME_DIR == -1 // Z axis #if Z_HOME_DIR == -1 //BED_CENTER_AT_0_0 not used #define Z_HOME_POS Z_MIN_POS #else #define Z_HOME_POS Z_MAX_POS #endif //Z_HOME_DIR == -1 #endif //End auto min/max positions //END AUTOSET LOCATIONS OF LIMIT SWITCHES -ZP // A single Z stepper driver is usually used to drive 2 stepper motors. // Uncomment this define to utilize a separate stepper driver for each Z axis motor. // Only a few motherboards support this, like RAMPS, which have dual extruder support (the 2nd, often unused, extruder driver is used // to control the 2nd Z axis stepper motor). The pins are currently only defined for a RAMPS motherboards. // On a RAMPS (or other 5 driver) motherboard, using this feature will limit you to using 1 extruder. //#define Z_DUAL_STEPPER_DRIVERS #ifdef Z_DUAL_STEPPER_DRIVERS #undef EXTRUDERS #define EXTRUDERS 1 #endif // Same again but for Y Axis. //#define Y_DUAL_STEPPER_DRIVERS // Define if the two Y drives need to rotate in opposite directions #define INVERT_Y2_VS_Y_DIR 1 #ifdef Y_DUAL_STEPPER_DRIVERS #undef EXTRUDERS #define EXTRUDERS 1 #endif #if defined (Z_DUAL_STEPPER_DRIVERS) && defined (Y_DUAL_STEPPER_DRIVERS) #error "You cannot have dual drivers for both Y and Z" #endif //homing hits the endstop, then retracts by this distance, before it tries to slowly bump again: #define X_HOME_RETRACT_MM 5 #define Y_HOME_RETRACT_MM 5 #define Z_HOME_RETRACT_MM 2 //#define QUICK_HOME //if this is defined, if both x and y are to be homed, a diagonal move will be performed initially. #define MAX_STEP_FREQUENCY 40000 // Max step frequency for Ultimaker (5000 pps / half step). Toshiba steppers are 4x slower, but Prusa3D does not use those. //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 0 #define INVERT_Y_STEP_PIN 0 #define INVERT_Z_STEP_PIN 0 #define INVERT_E_STEP_PIN 0 //default stepper release if idle #define DEFAULT_STEPPER_DEACTIVE_TIME 60 #define DEFAULT_MINIMUMFEEDRATE 0.0 // minimum feedrate #define DEFAULT_MINTRAVELFEEDRATE 0.0 // Feedrates for manual moves along X, Y, Z, E from panel //Comment to disable setting feedrate multiplier via encoder #define ULTIPANEL_FEEDMULTIPLY // minimum time in microseconds that a movement needs to take if the buffer is emptied. #define DEFAULT_MINSEGMENTTIME 20000 // If defined the movements slow down when the look ahead buffer is only half full #define SLOWDOWN // MS1 MS2 Stepper Driver Microstepping mode table #define MICROSTEP1 LOW,LOW #define MICROSTEP2 HIGH,LOW #define MICROSTEP4 LOW,HIGH #define MICROSTEP8 HIGH,HIGH #define MICROSTEP16 HIGH,HIGH // Microstep setting (Only functional when stepper driver microstep pins are connected to MCU. #define MICROSTEP_MODES {16,16,16,16,16} // [1,2,4,8,16] //=========================================================================== //=============================Additional Features=========================== //=========================================================================== //#define CHDK 4 //Pin for triggering CHDK to take a picture see how to use it here http://captain-slow.dk/2014/03/09/3d-printing-timelapses/ #define CHDK_DELAY 50 //How long in ms the pin should stay HIGH before going LOW again #define SD_FINISHED_STEPPERRELEASE 1 //if sd support and the file is finished: disable steppers? #define SD_FINISHED_RELEASECOMMAND "M84 X Y Z E" // You might want to keep the z enabled so your bed stays in place. #define SDCARD_RATHERRECENTFIRST //reverse file order of sd card menu display. Its sorted practically after the file system block order. // if a file is deleted, it frees a block. hence, the order is not purely chronological. To still have auto0.g accessible, there is again the option to do that. // using: //#define MENU_ADDAUTOSTART /** * Sort SD file listings in alphabetical order. * * With this option enabled, items on SD cards will be sorted * by name for easier navigation. * * By default... * * - Use the slowest -but safest- method for sorting. * - Folders are sorted to the top. * - The sort key is statically allocated. * - No added G-code (M34) support. * - 40 item sorting limit. (Items after the first 40 are unsorted.) * * SD sorting uses static allocation (as set by SDSORT_LIMIT), allowing the * compiler to calculate the worst-case usage and throw an error if the SRAM * limit is exceeded. */ #define SDCARD_SORT_ALPHA //Alphabetical sorting of SD files menu // SD Card Sorting options #ifdef SDCARD_SORT_ALPHA #define SD_SORT_TIME 0 #define SD_SORT_ALPHA 1 #define SD_SORT_NONE 2 // #define SHELLSORT // #define SORTING_DUMP #define SDSORT_LIMIT 100 // Maximum number of sorted items (10-256). #define FOLDER_SORTING -1 // -1=above 0=none 1=below #endif #if defined(SDCARD_SORT_ALPHA) #define HAS_FOLDER_SORTING (FOLDER_SORTING) #endif // Enable the option to stop SD printing when hitting and endstops, needs to be enabled from the LCD menu when this option is enabled. //#define ABORT_ON_ENDSTOP_HIT_FEATURE_ENABLED // Babystepping enables the user to control the axis in tiny amounts, independently from the normal printing process // it can e.g. be used to change z-positions in the print startup phase in real-time // does not respect endstops! #define BABYSTEPPING #ifdef BABYSTEPPING #define BABYSTEP_XY //not only z, but also XY in the menu. more clutter, more functions #define BABYSTEP_INVERT_Z 0 //1 for inverse movements in Z #define BABYSTEP_Z_MULTIPLICATOR 2 //faster z movements #ifdef COREXY #error BABYSTEPPING not implemented for COREXY yet. #endif #endif /** * Linear Pressure Control v1.5 * * Assumption: advance [steps] = k * (delta velocity [steps/s]) * K=0 means advance disabled. * * NOTE: K values for LIN_ADVANCE 1.5 differs from earlier versions! * * Set K around 0.22 for 3mm PLA Direct Drive with ~6.5cm between the drive gear and heatbreak. * Larger K values will be needed for flexible filament and greater distances. * If this algorithm produces a higher speed offset than the extruder can handle (compared to E jerk) * print acceleration will be reduced during the affected moves to keep within the limit. * * See http://marlinfw.org/docs/features/lin_advance.html for full instructions. * Mention @Sebastianv650 on GitHub to alert the author of any issues. */ #define LIN_ADVANCE #ifdef LIN_ADVANCE #define LA_K_DEF 0 // Default K factor (Unit: mm compression per 1mm/s extruder speed) #define LA_K_MAX 10 // Maximum acceptable K factor (exclusive, see notes in planner.cpp:plan_buffer_line) #define LA_LA10_MIN LA_K_MAX // Lin. Advance 1.0 threshold value (inclusive) //#define LA_FLOWADJ // Adjust LA along with flow/M221 for uniform width //#define LA_NOCOMPAT // Disable Linear Advance 1.0 compatibility //#define LA_LIVE_K // Allow adjusting K in the Tune menu //#define LA_DEBUG // If enabled, this will generate debug information output over USB. //#define LA_DEBUG_LOGIC // @wavexx: setup logic channels for isr debugging #endif // Arc interpretation settings: #define MM_PER_ARC_SEGMENT 1 #define N_ARC_CORRECTION 25 const unsigned int dropsegments=5; //everything with less than this number of steps will be ignored as move and joined with the next movement // If you are using a RAMPS board or cheap E-bay purchased boards that do not detect when an SD card is inserted // You can get round this by connecting a push button or single throw switch to the pin defined as SDCARDCARDDETECT // in the pins.h file. When using a push button pulling the pin to ground this will need inverted. This setting should // be commented out otherwise #define SDCARDDETECTINVERTED #undef SDCARDDETECTINVERTED // Power Signal Control Definitions // By default use ATX definition #ifndef POWER_SUPPLY #define POWER_SUPPLY 1 #endif // 1 = ATX #if (POWER_SUPPLY == 1) #define PS_ON_AWAKE LOW #define PS_ON_ASLEEP HIGH #endif // 2 = X-Box 360 203W #if (POWER_SUPPLY == 2) #define PS_ON_AWAKE HIGH #define PS_ON_ASLEEP LOW #endif // Control heater 0 and heater 1 in parallel. //#define HEATERS_PARALLEL //LCD status clock interval timer to switch between // remaining print time // and time to change/pause/interaction #define CLOCK_INTERVAL_TIME 5 //=========================================================================== //=============================Buffers ============================ //=========================================================================== // The number of linear motions that can be in the plan at any give time. // THE BLOCK_BUFFER_SIZE NEEDS TO BE A POWER OF 2, i.g. 8,16,32 because shifts and ors are used to do the ring-buffering. #if defined SDSUPPORT #define BLOCK_BUFFER_SIZE 16 // SD,LCD,Buttons take more memory, block buffer needs to be smaller #else #define BLOCK_BUFFER_SIZE 16 // maximize block buffer #endif //The ASCII buffer for receiving from the serial: #define MAX_CMD_SIZE 96 #define BUFSIZE 4 // The command header contains the following values: // 1st byte: the command source (CMDBUFFER_CURRENT_TYPE_USB, CMDBUFFER_CURRENT_TYPE_SDCARD, CMDBUFFER_CURRENT_TYPE_UI or CMDBUFFER_CURRENT_TYPE_CHAINED) // 2nd and 3rd byte (LSB first) contains a 16bit length of a command including its preceding comments. #define CMDHDRSIZE 3 // Firmware based and LCD controlled retract // M207 and M208 can be used to define parameters for the retraction. // The retraction can be called by the slicer using G10 and G11 // until then, intended retractions can be detected by moves that only extrude and the direction. // the moves are than replaced by the firmware controlled ones. #define FWRETRACT //ONLY PARTIALLY TESTED #ifdef FWRETRACT #define MIN_RETRACT 0.1 //minimum extruded mm to accept a automatic gcode retraction attempt #define RETRACT_LENGTH 3 //default retract length (positive mm) #define RETRACT_LENGTH_SWAP 13 //default swap retract length (positive mm), for extruder change #define RETRACT_FEEDRATE 45 //default feedrate for retracting (mm/s) #define RETRACT_ZLIFT 0 //default retract Z-lift #define RETRACT_RECOVER_LENGTH 0 //default additional recover length (mm, added to retract length when recovering) #define RETRACT_RECOVER_LENGTH_SWAP 0 //default additional swap recover length (mm, added to retract length when recovering from extruder change) #define RETRACT_RECOVER_FEEDRATE 8 //default feedrate for recovering from retraction (mm/s) #endif //adds support for experimental filament exchange support M600; requires display #ifdef FILAMENTCHANGEENABLE #ifdef EXTRUDER_RUNOUT_PREVENT #error EXTRUDER_RUNOUT_PREVENT currently incompatible with FILAMENTCHANGE #endif #endif /** * Include capabilities in M115 output */ #define EXTENDED_CAPABILITIES_REPORT /** * Enable M120/M121 G-code commands * */ //#define M120_M121_ENABLED //Be careful enabling and using these G-code commands. //=========================================================================== //============================= Define Defines ============================ //=========================================================================== #if EXTRUDERS > 1 && defined HEATERS_PARALLEL #error "You cannot use HEATERS_PARALLEL if EXTRUDERS > 1" #endif #if TEMP_SENSOR_0 > 0 #define THERMISTORHEATER_0 TEMP_SENSOR_0 #define HEATER_0_USES_THERMISTOR #endif #if TEMP_SENSOR_1 > 0 #define THERMISTORHEATER_1 TEMP_SENSOR_1 #define HEATER_1_USES_THERMISTOR #endif #if TEMP_SENSOR_2 > 0 #define THERMISTORHEATER_2 TEMP_SENSOR_2 #define HEATER_2_USES_THERMISTOR #endif #if TEMP_SENSOR_BED > 0 #define THERMISTORBED TEMP_SENSOR_BED #define BED_USES_THERMISTOR #endif #if TEMP_SENSOR_PINDA > 0 #define THERMISTORPINDA TEMP_SENSOR_PINDA #endif #if TEMP_SENSOR_AMBIENT > 0 #define THERMISTORAMBIENT TEMP_SENSOR_AMBIENT #endif #if TEMP_SENSOR_0 == -1 #define HEATER_0_USES_AD595 #endif #if TEMP_SENSOR_1 == -1 #define HEATER_1_USES_AD595 #endif #if TEMP_SENSOR_2 == -1 #define HEATER_2_USES_AD595 #endif #if TEMP_SENSOR_BED == -1 #define BED_USES_AD595 #endif #if TEMP_SENSOR_0 == -2 #define HEATER_0_USES_MAX6675 #endif #if TEMP_SENSOR_0 == -4 #define HEATER_0_USES_AD8495 #endif #if TEMP_SENSOR_1 == -4 #define HEATER_1_USES_AD8495 #endif #if TEMP_SENSOR_2 == -4 #define HEATER_2_USES_AD8495 #endif #if TEMP_SENSOR_0 == 0 #undef HEATER_0_MINTEMP #undef HEATER_0_MAXTEMP #endif #if TEMP_SENSOR_1 == 0 #undef HEATER_1_MINTEMP #undef HEATER_1_MAXTEMP #endif #if TEMP_SENSOR_2 == 0 #undef HEATER_2_MINTEMP #undef HEATER_2_MAXTEMP #endif #if TEMP_SENSOR_BED == 0 #undef BED_MINTEMP #undef BED_MAXTEMP #endif #if TEMP_SENSOR_AMBIENT == 0 #undef AMBIENT_MINTEMP #undef AMBIENT_MAXTEMP #endif #endif //__CONFIGURATION_ADV_H