diff --git a/Marlin/Configuration.h b/Marlin/Configuration.h index 4f7ab5a6b..cab9085ff 100644 --- a/Marlin/Configuration.h +++ b/Marlin/Configuration.h @@ -1,143 +1,88 @@ #ifndef __CONFIGURATION_H #define __CONFIGURATION_H +// This configurtion file contains the basic settings. +// Advanced settings can be found in Configuration_adv.h +// BASIC SETTINGS: select your board type, temperature sensor type, axis scaling, and endstop configuration +//User specified version info of THIS file to display in [Pronterface, etc] terminal window during startup. +//Implementation of an idea by Prof Braino to inform user that any changes made +//to THIS file by the user have been successfully uploaded into firmware. +#define STRING_VERSION_CONFIG_H "2012-02-08j" //Personal revision number for changes to THIS file. +#define STRING_CONFIG_H_AUTHOR "username" //Who made the changes. // This determines the communication speed of the printer //#define BAUDRATE 250000 #define BAUDRATE 115200 -//#define BAUDRATE 230400 - -#define EXTRUDERS 1 - -// Frequency limit -// See nophead's blog for more info -// Not working O -//#define XY_FREQUENCY_LIMIT 15 - -// Minimum planner junction speed. Sets the default minimum speed the planner plans for at the end -// of the buffer and all stops. This should not be much greater than zero and should only be changed -// if unwanted behavior is observed on a user's machine when running at very slow speeds. -#define MINIMUM_PLANNER_SPEED 2.0 // (mm/sec) - -// BASIC SETTINGS: select your board type, thermistor type, axis scaling, and endstop configuration //// The following define selects which electronics board you have. Please choose the one that matches your setup // MEGA/RAMPS up to 1.2 = 3, // RAMPS 1.3 = 33 // Gen6 = 5, // Sanguinololu 1.2 and above = 62 -// Gen7 = 77, // Ultimaker = 7, -// Teensylu = 8 +// Gen7 = 77, +// Teensylu = 8, +// Gen3+ =9 #define MOTHERBOARD 77 //=========================================================================== //=============================Thermal Settings ============================ //=========================================================================== -//// Thermistor settings: +//// 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 // 2 is 200k thermistor // 3 is mendel-parts thermistor -// 4 is 10k thermistor +// 4 is 10k thermistor !! do not use it for a hotend. It gives bad resolution at high temp. !! // 5 is ParCan supplied 104GT-2 100K // 6 is EPCOS 100k // 7 is 100k Honeywell thermistor 135-104LAG-J01 -#define THERMISTORHEATER_0 1 -//#define THERMISTORHEATER_1 1 -//#define THERMISTORHEATER_2 1 - -#define HEATER_0_USES_THERMISTOR -//#define HEATER_1_USES_THERMISTOR -//#define HEATER_2_USES_THERMISTOR -//#define HEATER_0_USES_AD595 -//#define HEATER_1_USES_AD595 -//#define HEATER_2_USES_AD595 - -// Select one of these only to define how the bed temp is read. -#define THERMISTORBED 1 -#define BED_USES_THERMISTOR -//#define BED_LIMIT_SWITCHING -#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_USES_AD595 - -#define BED_CHECK_INTERVAL 5000 //ms - -//// Heating sanity check: -// This waits for the watchperiod in milliseconds whenever an M104 or M109 increases the target temperature -// If the temperature has not increased at the end of that period, the target temperature is set to zero. -// It can be reset with another M104/M109 -//#define WATCHPERIOD 20000 //20 seconds +#define TEMP_SENSOR_0 6 +#define TEMP_SENSOR_1 0 +#define TEMP_SENSOR_2 0 +#define TEMP_SENSOR_BED 1 // Actual temperature must be close to target for this long before M109 returns success #define TEMP_RESIDENCY_TIME 30 // (seconds) -#define TEMP_HYSTERESIS 3 // (C°) range of +/- temperatures considered "close" to the target one - -//// The minimal temperature defines the temperature below which the heater will not be enabled -//#define HEATER_0_MINTEMP 5 -//#define HEATER_1_MINTEMP 5 -//#define HEATER_2_MINTEMP 5 -//#define BED_MINTEMP 5 +#define TEMP_HYSTERESIS 3 // (C°) range of +/- temperatures considered "close" to the target one +// The minimal temperature defines the temperature below which the heater will not be enabled It is used +// to check that the wiring to the thermistor is not broken. +// Otherwise this would lead to the heater being powered on all the time. +#define HEATER_0_MINTEMP 5 +#define HEATER_1_MINTEMP 5 +#define HEATER_2_MINTEMP 5 +#define BED_MINTEMP 5 // When temperature exceeds max temp, your heater will be switched off. // This feature exists to protect your hotend from overheating accidentally, but *NOT* from thermistor short/failure! // You should use MINTEMP for thermistor short/failure protection. #define HEATER_0_MAXTEMP 275 -//#define HEATER_1_MAXTEMP 275 -//#define HEATER_2_MAXTEMP 275 -//#define BED_MAXTEMP 150 - - -// Wait for Cooldown -// This defines if the M109 call should not block if it is cooling down. -// example: From a current temp of 220, you set M109 S200. -// if CooldownNoWait is defined M109 will not wait for the cooldown to finish -#define CooldownNoWait true - -// Heating is finished if a temperature close to this degree shift is reached -#define HEATING_EARLY_FINISH_DEG_OFFSET 1 //Degree +#define HEATER_1_MAXTEMP 275 +#define HEATER_2_MAXTEMP 275 +#define BED_MAXTEMP 150 // PID settings: -// Uncomment the following line to enable PID support. +// Comment the following line to disable PID and enable bang-bang. #define PIDTEMP #define PID_MAX 255 // limits current to nozzle; 255=full current #ifdef PIDTEMP -//#define PID_DEBUG // Sends debug data to the serial port. -//#define PID_OPENLOOP 1 // Puts PID in open loop. M104 sets the output power in % -#define PID_INTEGRAL_DRIVE_MAX 255 //limit for the integral term -#define K1 0.95 //smoothing factor withing the PID -#define PID_dT 0.128 //sampling period of the PID - -//To develop some PID settings for your machine, you can initiall follow -// the Ziegler-Nichols method. -// set Ki and Kd to zero. -// heat with a defined Kp and see if the temperature stabilizes -// ideally you do this graphically with repg. -// the PID_CRITIAL_GAIN should be the Kp at which temperature oscillatins are not dampned out/decreas in amplitutde -// PID_SWING_AT_CRITIAL is the time for a full period of the oscillations at the critical Gain -// usually further manual tunine is necessary. - -#define PID_CRITIAL_GAIN 50 -#define PID_SWING_AT_CRITIAL 47 //seconds - -//#define PID_PI //no differentail term -#define PID_PID //normal PID - -#ifdef PID_PID -//PID according to Ziegler-Nichols method -// #define DEFAULT_Kp (0.6*PID_CRITIAL_GAIN) -// #define DEFAULT_Ki (2*Kp/PID_SWING_AT_CRITIAL*PID_dT) -// #define DEFAULT_Kd (PID_SWING_AT_CRITIAL/8./PID_dT) - -// Ultitmaker -#define DEFAULT_Kp 22.2 -#define DEFAULT_Ki (1.25*PID_dT) -#define DEFAULT_Kd (99/PID_dT) + //#define PID_DEBUG // Sends debug data to the serial port. + //#define PID_OPENLOOP 1 // Puts PID in open loop. M104 sets the output power in % + #define PID_INTEGRAL_DRIVE_MAX 255 //limit for the integral term + #define K1 0.95 //smoothing factor withing the PID + #define PID_dT 0.128 //sampling period of the PID + +// If you are using a preconfigured hotend then you can use one of the value sets by uncommenting it +// Ultimaker + #define DEFAULT_Kp 22.2 + #define DEFAULT_Ki (1.25*PID_dT) + #define DEFAULT_Kd (99/PID_dT) // Makergear // #define DEFAULT_Kp 7.0 @@ -147,39 +92,19 @@ // Mendel Parts V9 on 12V // #define DEFAULT_Kp 63.0 // #define DEFAULT_Ki (2.25*PID_dT) -// #define DEFAULT_Kd (440/PID_dT) -#endif - -#ifdef PID_PI -//PI according to Ziegler-Nichols method -#define DEFAULT_Kp (PID_CRITIAL_GAIN/2.2) -#define DEFAULT_Ki (1.2*Kp/PID_SWING_AT_CRITIAL*PID_dT) -#define DEFAULT_Kd (0) -#endif - -// this adds an experimental additional term to the heatingpower, proportional to the extrusion speed. -// if Kc is choosen 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) //heatingpower=Kc*(e_speed) -#endif +// #define DEFAULT_Kd (440/PID_dT) #endif // PIDTEMP -// extruder run-out prevention. -//if the machine is idle, and the temperature over MINTEMP, every couple of SECONDS some filament is extruded -//#define EXTRUDER_RUNOUT_PREVENT -#define EXTRUDER_RUNOUT_MINTEMP 190 -#define EXTRUDER_RUNOUT_SECONDS 30. -#define EXTRUDER_RUNOUT_ESTEPS 14. //mm filament -#define EXTRUDER_RUNOUT_SPEED 1500. //extrusion speed -#define EXTRUDER_RUNOUT_EXTRUDE 100 - +//this prevents dangerous Extruder moves, i.e. if the temperature is under the limit +//can be software-disabled for whatever purposes by +#define PREVENT_DANGEROUS_EXTRUDE +#define EXTRUDE_MINTEMP 170 +#define EXTRUDE_MAXLENGTH (X_MAX_LENGTH+Y_MAX_LENGTH) //prevent extrusion of very large distances. //=========================================================================== //=============================Mechanical Settings=========================== //=========================================================================== - // Endstop Settings #define ENDSTOPPULLUPS // Comment this out (using // at the start of the line) to disable the endstop pullup resistors @@ -187,9 +112,6 @@ const bool X_ENDSTOPS_INVERTING = false; // set to true to invert the logic of the endstops. const bool Y_ENDSTOPS_INVERTING = false; // set to true to invert the logic of the endstops. const bool Z_ENDSTOPS_INVERTING = false; // set to true to invert the logic of the endstops. -// For optos H21LOB set to true, for Mendel-Parts newer optos TCST2103 set to false - -#define ENDSTOPS_ONLY_FOR_HOMING // If defined the endstops will only be used for homing // For Inverting Stepper Enable Pins (Active Low) use 0, Non Inverting (Active High) use 1 #define X_ENABLE_ON 0 @@ -203,20 +125,14 @@ const bool Z_ENDSTOPS_INVERTING = false; // set to true to invert the logic of t #define DISABLE_Z false #define DISABLE_E false // For all extruders -// Inverting axis direction -//#define INVERT_X_DIR false // for Mendel set to false, for Orca set to true -//#define INVERT_Y_DIR true // 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_E*_DIR true // for direct drive extruder v9 set to true, for geared extruder set to false, used for all extruders - #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_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: +// ENDSTOP SETTINGS: // Sets direction of endstops when homing; 1=MAX, -1=MIN #define X_HOME_DIR -1 #define Y_HOME_DIR -1 @@ -232,44 +148,19 @@ const bool Z_ENDSTOPS_INVERTING = false; // set to true to invert the logic of t #define NUM_AXIS 4 // The axis order in all axis related arrays is X, Y, Z, E #define HOMING_FEEDRATE {50*60, 50*60, 4*60, 0} // set the homing speeds (mm/min) -//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 1 -#define QUICK_HOME //if this is defined, if both x and y are to be homed, a diagonal move will be performed initially. - -#define AXIS_RELATIVE_MODES {false, false, false, false} - -#define MAX_STEP_FREQUENCY 40000 // Max step frequency for Ultimaker (5000 pps / half step) - // default settings -#define DEFAULT_AXIS_STEPS_PER_UNIT {78.7402,78.7402,200*8/3,760*1.1} // default steps per unit for ultimaker -//#define DEFAULT_AXIS_STEPS_PER_UNIT {40, 40, 3333.92, 360} //sells mendel with v9 extruder -//#define DEFAULT_AXIS_STEPS_PER_UNIT {80.3232, 80.8900, 2284.7651, 757.2218} // SAE Prusa w/ Wade extruder +#define DEFAULT_AXIS_STEPS_PER_UNIT {80,80,2560,760*1.1} // default steps per unit for ultimaker #define DEFAULT_MAX_FEEDRATE {500, 500, 5, 45} // (mm/sec) #define DEFAULT_MAX_ACCELERATION {9000,9000,100,10000} // X, Y, Z, E maximum start speed for accelerated moves. E default values are good for skeinforge 40+, for older versions raise them a lot. #define DEFAULT_ACCELERATION 3000 // X, Y, Z and E max acceleration in mm/s^2 for printing moves #define DEFAULT_RETRACT_ACCELERATION 3000 // X, Y, Z and E max acceleration in mm/s^2 for r retracts -#define DEFAULT_MINIMUMFEEDRATE 0.0 // minimum feedrate -#define DEFAULT_MINTRAVELFEEDRATE 0.0 - -// minimum time in microseconds that a movement needs to take if the buffer is emptied. Increase this number if you see blobs while -//printing high speed & high detail. It will slowdown on the detailed stuff. -#define DEFAULT_MINSEGMENTTIME 20000 // Obsolete delete this +// #define DEFAULT_XYJERK 20.0 // (mm/sec) #define DEFAULT_ZJERK 0.4 // (mm/sec) -// If defined the movements slow down when the look ahead buffer is only half full -#define SLOWDOWN - -//default stepper release if idle -#define DEFAULT_STEPPER_DEACTIVE_TIME 60 -#define DEFAULT_STEPPER_DEACTIVE_COMMAND "M84 X Y E" //z stays powered - - //=========================================================================== //=============================Additional Features=========================== //=========================================================================== @@ -285,113 +176,29 @@ const bool Z_ENDSTOPS_INVERTING = false; // set to true to invert the logic of t // please keep turned on if you can. #define EEPROM_CHITCHAT - -// The hardware watchdog should halt the Microcontroller, in case the firmware gets stuck somewhere. However: -// the Watchdog is not working well, so please only enable this for testing -// this enables the watchdog interrupt. -//#define USE_WATCHDOG -//#ifdef USE_WATCHDOG -// you cannot reboot on a mega2560 due to a bug in he bootloader. Hence, you have to reset manually, and this is done hereby: -//#define RESET_MANUAL -//#define WATCHDOG_TIMEOUT 4 //seconds -//#endif - -// extruder advance constant (s2/mm3) -// -// advance (steps) = STEPS_PER_CUBIC_MM_E * EXTUDER_ADVANCE_K * cubic mm per second ^ 2 -// -// hooke's law says: force = k * distance -// bernoulli's priniciple says: v ^ 2 / 2 + g . h + pressure / density = constant -// so: v ^ 2 is proportional to number of steps we advance the extruder -//#define ADVANCE - -#ifdef ADVANCE -#define EXTRUDER_ADVANCE_K .0 - -#define D_FILAMENT 2.85 -#define STEPS_MM_E 836 -#define EXTRUTION_AREA (0.25 * D_FILAMENT * D_FILAMENT * 3.14159) -#define STEPS_PER_CUBIC_MM_E (axis_steps_per_unit[E_AXIS]/ EXTRUTION_AREA) - -#endif // ADVANCE - - //LCD and SD support //#define ULTRA_LCD //general lcd support, also 16x2 -//#define SDSUPPORT // Enable SD Card Support in Hardware Console -#define SD_FINISHED_STEPPERRELEASE true //if sd support and the file is finished: disable steppers? -#define SD_FINISHED_RELEASECOMMAND "M84 X Y E" // no z because of layer shift. +#define SDSUPPORT // Enable SD Card Support in Hardware Console #define ULTIPANEL #ifdef ULTIPANEL -#define NEWPANEL //enable this if you have a click-encoder panel -#define SDSUPPORT -#define ULTRA_LCD -#define LCD_WIDTH 20 -#define LCD_HEIGHT 4 + #define NEWPANEL //enable this if you have a click-encoder panel + #define SDSUPPORT + #define ULTRA_LCD + #define LCD_WIDTH 20 + #define LCD_HEIGHT 4 #else //no panel but just lcd -#ifdef ULTRA_LCD -#define LCD_WIDTH 16 -#define LCD_HEIGHT 2 + #ifdef ULTRA_LCD + #define LCD_WIDTH 16 + #define LCD_HEIGHT 2 + #endif #endif -#endif - -// A debugging feature to compare calculated vs performed steps, to see if steps are lost by the software. -//#define DEBUG_STEPS - - -// Arc interpretation settings: -#define MM_PER_ARC_SEGMENT 1 -#define N_ARC_CORRECTION 25 - - -//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 T 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 target+BED_HYSTERESIS and enable heating if T>target-BED_HYSTERESIS -#endif -//#define BED_USES_AD595 - -#define BED_CHECK_INTERVAL 5000 //ms - -//// Heating sanity check: -// This waits for the watchperiod in milliseconds whenever an M104 or M109 increases the target temperature -// If the temperature has not increased at the end of that period, the target temperature is set to zero. -// It can be reset with another M104/M109 -//#define WATCHPERIOD 20000 //20 seconds - -// Actual temperature must be close to target for this long before M109 returns success -#define TEMP_RESIDENCY_TIME 30 // (seconds) -#define TEMP_HYSTERESIS 3 // (C°) range of +/- temperatures considered "close" to the target one - -//// The minimal temperature defines the temperature below which the heater will not be enabled -//#define HEATER_0_MINTEMP 5 -//#define HEATER_1_MINTEMP 5 -//#define HEATER_2_MINTEMP 5 -//#define BED_MINTEMP 5 - - -// When temperature exceeds max temp, your heater will be switched off. -// This feature exists to protect your hotend from overheating accidentally, but *NOT* from thermistor short/failure! -// You should use MINTEMP for thermistor short/failure protection. -#define HEATER_0_MAXTEMP 275 -//#define HEATER_1_MAXTEMP 275 -//#define HEATER_2_MAXTEMP 275 -//#define BED_MAXTEMP 150 - - -// Wait for Cooldown -// This defines if the M109 call should not block if it is cooling down. -// example: From a current temp of 220, you set M109 S200. -// if CooldownNoWait is defined M109 will not wait for the cooldown to finish -#define CooldownNoWait true - -// Heating is finished if a temperature close to this degree shift is reached -#define HEATING_EARLY_FINISH_DEG_OFFSET 1 //Degree - -// PID settings: -// Uncomment the following line to enable PID support. -#define PIDTEMP -#define PID_MAX 255 // limits current to nozzle; 255=full current -#ifdef PIDTEMP -//#define PID_DEBUG // Sends debug data to the serial port. -//#define PID_OPENLOOP 1 // Puts PID in open loop. M104 sets the output power in % -#define PID_INTEGRAL_DRIVE_MAX 255 //limit for the integral term -#define K1 0.95 //smoothing factor withing the PID -#define PID_dT 0.128 //sampling period of the PID - -//To develop some PID settings for your machine, you can initiall follow -// the Ziegler-Nichols method. -// set Ki and Kd to zero. -// heat with a defined Kp and see if the temperature stabilizes -// ideally you do this graphically with repg. -// the PID_CRITIAL_GAIN should be the Kp at which temperature oscillatins are not dampned out/decreas in amplitutde -// PID_SWING_AT_CRITIAL is the time for a full period of the oscillations at the critical Gain -// usually further manual tunine is necessary. - -#define PID_CRITIAL_GAIN 50 -#define PID_SWING_AT_CRITIAL 47 //seconds - -//#define PID_PI //no differentail term -#define PID_PID //normal PID - -#ifdef PID_PID -//PID according to Ziegler-Nichols method -// #define DEFAULT_Kp (0.6*PID_CRITIAL_GAIN) -// #define DEFAULT_Ki (2*Kp/PID_SWING_AT_CRITIAL*PID_dT) -// #define DEFAULT_Kd (PID_SWING_AT_CRITIAL/8./PID_dT) - -// Ultitmaker -#define DEFAULT_Kp 22.2 -#define DEFAULT_Ki (1.25*PID_dT) -#define DEFAULT_Kd (99/PID_dT) - -// Makergear -// #define DEFAULT_Kp 7.0 -// #define DEFAULT_Ki 0.1 -// #define DEFAULT_Kd 12 - -// Mendel Parts V9 on 12V -// #define DEFAULT_Kp 63.0 -// #define DEFAULT_Ki (2.25*PID_dT) -// #define DEFAULT_Kd (440/PID_dT) -#endif - -#ifdef PID_PI -//PI according to Ziegler-Nichols method -#define DEFAULT_Kp (PID_CRITIAL_GAIN/2.2) -#define DEFAULT_Ki (1.2*Kp/PID_SWING_AT_CRITIAL*PID_dT) -#define DEFAULT_Kd (0) -#endif - -// this adds an experimental additional term to the heatingpower, proportional to the extrusion speed. -// if Kc is choosen 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) //heatingpower=Kc*(e_speed) -#endif -#endif // PIDTEMP - -// extruder run-out prevention. -//if the machine is idle, and the temperature over MINTEMP, every couple of SECONDS some filament is extruded -//#define EXTRUDER_RUNOUT_PREVENT -#define EXTRUDER_RUNOUT_MINTEMP 190 -#define EXTRUDER_RUNOUT_SECONDS 30. -#define EXTRUDER_RUNOUT_ESTEPS 14. //mm filament -#define EXTRUDER_RUNOUT_SPEED 1500. //extrusion speed -#define EXTRUDER_RUNOUT_EXTRUDE 100 - - -//=========================================================================== -//=============================Mechanical Settings=========================== -//=========================================================================== - - -// Endstop Settings -#define ENDSTOPPULLUPS // Comment this out (using // at the start of the line) to disable the endstop pullup resistors - -// The pullups are needed if you directly connect a mechanical endswitch between the signal and ground pins. -const bool X_ENDSTOPS_INVERTING = false; // set to true to invert the logic of the endstops. -const bool Y_ENDSTOPS_INVERTING = false; // set to true to invert the logic of the endstops. -const bool Z_ENDSTOPS_INVERTING = false; // set to true to invert the logic of the endstops. -// For optos H21LOB set to true, for Mendel-Parts newer optos TCST2103 set to false - -#define ENDSTOPS_ONLY_FOR_HOMING // If defined the endstops will only be used for homing - -// For Inverting Stepper Enable Pins (Active Low) use 0, Non Inverting (Active High) use 1 -#define X_ENABLE_ON 0 -#define Y_ENABLE_ON 0 -#define Z_ENABLE_ON 0 -#define E_ENABLE_ON 0 // For all extruders - -// Disables axis when it's not being used. -#define DISABLE_X false -#define DISABLE_Y false -#define DISABLE_Z false -#define DISABLE_E false // For all extruders - -// Inverting axis direction -//#define INVERT_X_DIR false // for Mendel set to false, for Orca set to true -//#define INVERT_Y_DIR true // 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_E*_DIR true // for direct drive extruder v9 set to true, for geared extruder set to false, used for all extruders - -#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 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 -#define X_HOME_DIR -1 -#define Y_HOME_DIR -1 -#define Z_HOME_DIR -1 - -#define min_software_endstops true //If true, axis won't move to coordinates less than zero. -#define max_software_endstops true //If true, axis won't move to coordinates greater than the defined lengths below. -#define X_MAX_LENGTH 205 -#define Y_MAX_LENGTH 205 -#define Z_MAX_LENGTH 200 - -//// MOVEMENT SETTINGS -#define NUM_AXIS 4 // The axis order in all axis related arrays is X, Y, Z, E -#define HOMING_FEEDRATE {50*60, 50*60, 4*60, 0} // set the homing speeds (mm/min) - -//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 1 -#define QUICK_HOME //if this is defined, if both x and y are to be homed, a diagonal move will be performed initially. - -#define AXIS_RELATIVE_MODES {false, false, false, false} - -#define MAX_STEP_FREQUENCY 40000 // Max step frequency for Ultimaker (5000 pps / half step) - -// default settings - -#define DEFAULT_AXIS_STEPS_PER_UNIT {78.7402,78.7402,200*8/3,760*1.1} // default steps per unit for ultimaker -//#define DEFAULT_AXIS_STEPS_PER_UNIT {40, 40, 3333.92, 360} //sells mendel with v9 extruder -//#define DEFAULT_AXIS_STEPS_PER_UNIT {80.3232, 80.8900, 2284.7651, 757.2218} // SAE Prusa w/ Wade extruder -#define DEFAULT_MAX_FEEDRATE {500, 500, 5, 45} // (mm/sec) -#define DEFAULT_MAX_ACCELERATION {9000,9000,100,10000} // X, Y, Z, E maximum start speed for accelerated moves. E default values are good for skeinforge 40+, for older versions raise them a lot. - -#define DEFAULT_ACCELERATION 3000 // X, Y, Z and E max acceleration in mm/s^2 for printing moves -#define DEFAULT_RETRACT_ACCELERATION 3000 // X, Y, Z and E max acceleration in mm/s^2 for r retracts - -#define DEFAULT_MINIMUMFEEDRATE 0.0 // minimum feedrate -#define DEFAULT_MINTRAVELFEEDRATE 0.0 - -// minimum time in microseconds that a movement needs to take if the buffer is emptied. Increase this number if you see blobs while -//printing high speed & high detail. It will slowdown on the detailed stuff. -#define DEFAULT_MINSEGMENTTIME 20000 // Obsolete delete this -#define DEFAULT_XYJERK 20.0 // (mm/sec) -#define DEFAULT_ZJERK 0.4 // (mm/sec) - -// If defined the movements slow down when the look ahead buffer is only half full -#define SLOWDOWN - -//default stepper release if idle -#define DEFAULT_STEPPER_DEACTIVE_TIME 60 -#define DEFAULT_STEPPER_DEACTIVE_COMMAND "M84 X Y E" //z stays powered - - -//=========================================================================== -//=============================Additional Features=========================== -//=========================================================================== - -// EEPROM -// the microcontroller can store settings in the EEPROM, e.g. max velocity... -// M500 - stores paramters in EEPROM -// M501 - reads parameters from EEPROM (if you need reset them after you changed them temporarily). -// M502 - reverts to the default "factory settings". You still need to store them in EEPROM afterwards if you want to. -//define this to enable eeprom support -#define EEPROM_SETTINGS -//to disable EEPROM Serial responses and decrease program space by ~1700 byte: comment this out: -// please keep turned on if you can. -#define EEPROM_CHITCHAT - - -// The hardware watchdog should halt the Microcontroller, in case the firmware gets stuck somewhere. However: -// the Watchdog is not working well, so please only enable this for testing -// this enables the watchdog interrupt. -//#define USE_WATCHDOG -//#ifdef USE_WATCHDOG -// you cannot reboot on a mega2560 due to a bug in he bootloader. Hence, you have to reset manually, and this is done hereby: -//#define RESET_MANUAL -//#define WATCHDOG_TIMEOUT 4 //seconds -//#endif - -// extruder advance constant (s2/mm3) -// -// advance (steps) = STEPS_PER_CUBIC_MM_E * EXTUDER_ADVANCE_K * cubic mm per second ^ 2 -// -// hooke's law says: force = k * distance -// bernoulli's priniciple says: v ^ 2 / 2 + g . h + pressure / density = constant -// so: v ^ 2 is proportional to number of steps we advance the extruder -//#define ADVANCE - -#ifdef ADVANCE -#define EXTRUDER_ADVANCE_K .0 - -#define D_FILAMENT 2.85 -#define STEPS_MM_E 836 -#define EXTRUTION_AREA (0.25 * D_FILAMENT * D_FILAMENT * 3.14159) -#define STEPS_PER_CUBIC_MM_E (axis_steps_per_unit[E_AXIS]/ EXTRUTION_AREA) - -#endif // ADVANCE - - -//LCD and SD support -//#define ULTRA_LCD //general lcd support, also 16x2 -//#define SDSUPPORT // Enable SD Card Support in Hardware Console -#define SD_FINISHED_STEPPERRELEASE true //if sd support and the file is finished: disable steppers? -#define SD_FINISHED_RELEASECOMMAND "M84 X Y E" // no z because of layer shift. - -#define ULTIPANEL -#ifdef ULTIPANEL -#define NEWPANEL //enable this if you have a click-encoder panel -#define SDSUPPORT -#define ULTRA_LCD -#define LCD_WIDTH 20 -#define LCD_HEIGHT 4 -#else //no panel but just lcd -#ifdef ULTRA_LCD -#define LCD_WIDTH 16 -#define LCD_HEIGHT 2 -#endif -#endif - -// A debugging feature to compare calculated vs performed steps, to see if steps are lost by the software. -//#define DEBUG_STEPS - - -// Arc interpretation settings: -#define MM_PER_ARC_SEGMENT 1 -#define N_ARC_CORRECTION 25 - - -//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 T 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 target+BED_HYSTERESIS and enable heating if T>target-BED_HYSTERESIS +#endif +#define BED_CHECK_INTERVAL 5000 //ms + +//// Heating sanity check: +// This waits for the watchperiod in milliseconds whenever an M104 or M109 increases the target temperature +// If the temperature has not increased at the end of that period, the target temperature is set to zero. +// It can be reset with another M104/M109 +//#define WATCHPERIOD 20000 //20 seconds + +// Wait for Cooldown +// This defines if the M109 call should not block if it is cooling down. +// example: From a current temp of 220, you set M109 S200. +// if CooldownNoWait is defined M109 will not wait for the cooldown to finish +#define CooldownNoWait true + +//Do not wait for M109 to finish when printing from SD card +//#define STOP_HEATING_WAIT_WHEN_SD_PRINTING + +#ifdef PIDTEMP + // this adds an experimental additional term to the heatingpower, proportional to the extrusion speed. + // if Kc is choosen 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) //heatingpower=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 T 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 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_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 == 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 + + +#endif //__CONFIGURATION_ADV_H diff --git a/Marlin/Makefile b/Marlin/Makefile index 84e540568..71ee74748 100644 --- a/Marlin/Makefile +++ b/Marlin/Makefile @@ -1,76 +1,70 @@ +# Sprinter Arduino Project Makefile +# +# Makefile Based on: +# Arduino 0011 Makefile +# Arduino adaptation by mellis, eighthave, oli.keller +# +# This has been tested with Arduino 0022. +# +# This makefile allows you to build sketches from the command line +# without the Arduino environment (or Java). +# +# Detailed instructions for using the makefile: +# +# 1. Modify the line containg "INSTALL_DIR" to point to the directory that +# contains the Arduino installation (for example, under Mac OS X, this +# might be /Applications/arduino-0012). +# +# 2. Modify the line containing "PORT" to refer to the filename +# representing the USB or serial connection to your Arduino board +# (e.g. PORT = /dev/tty.USB0). If the exact name of this file +# changes, you can use * as a wildcard (e.g. PORT = /dev/tty.usb*). +# +# 3. Set the line containing "MCU" to match your board's processor. +# Older one's are atmega8 based, newer ones like Arduino Mini, Bluetooth +# or Diecimila have the atmega168. If you're using a LilyPad Arduino, +# change F_CPU to 8000000. +# +# 4. Type "make" and press enter to compile/verify your program. +# +# 5. Type "make upload", reset your Arduino board, and press enter to +# upload your program to the Arduino board. +# +# $Id$ + +#For "old" Arduino Mega +MCU = atmega1280 +#For Arduino Mega2560 +#MCU = atmega2560 +#For Sanguinololu +#MCU = atmega644p + +#Arduino install directory +INSTALL_DIR = ../../arduino-0022/ + +F_CPU = 16000000 + +UPLOAD_RATE = 115200 +AVRDUDE_PROGRAMMER = arduino +PORT = /dev/arduino + TARGET = $(notdir $(CURDIR)) -# CHANGE BELOW: -#~ INSTALL_DIR = /Applications/Arduino.app/Contents/Resources/Java -INSTALL_DIR = /home/bkubicek/software/arduino-0023 -#~ PORT = /dev/cu.usbserial* -PORT = /dev/ttyACM0 - -# Get these values from: -# $(INSTALL_DIR)/hardware/boards.txt -# (arduino-0022/hardware/arduino/boards.txt) -# The values below are for the "Arduino Duemilanove or Nano w/ ATmega328" -# now for "Arduino Mega 2560" -UPLOAD_SPEED = 115200 -UPLOAD_PROTOCOL = stk500v2 -BUILD_MCU = atmega2560 -BUILD_F_CPU = 16000000L -TERM=bash - -# getting undefined reference to `__cxa_pure_virtual' -#~ [http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1254180518 Arduino Forum - Makefile] -#~ http://www.arduino.cc/playground/OpenBSD/CLI -#~ [http://arduino.cc/forum/index.php?topic=52041.0 A "simple" makefile for Arduino] -#~ [http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1275488191 Arduino Forum - Configuring avr-gcc options in arduino IDE] -# found in /usr/lib/gcc/avr/4.3.5/cc1plus; fixed with -Wl,--gc-section + ############################################################################ # Below here nothing should be changed... -LINKORDER=\ -applet/Marlin.cpp.o \ -applet/EEPROM.o \ -applet/main.o \ -applet/MarlinSerial.o \ -applet/motion_control.o\ -applet/pins_arduino.o\ -applet/planner.o\ -applet/Print.o\ -applet/Sd2Card.o\ -applet/SdBaseFile.o\ -applet/SdFatUtil.o\ -applet/SdFile.o\ -applet/SdVolume.o\ -applet/stepper.o\ -applet/temperature.o\ -applet/WInterrupts.o\ -applet/wiring_analog.o\ -applet/wiring_digital.o\ -applet/wiring.o\ -applet/wiring_pulse.o\ -applet/wiring_shift.o\ -applet/WMath.o - -PDES=Marlin.pde ultralcd.pde watchdog.pde cardreader.pde ARDUINO = $(INSTALL_DIR)/hardware/arduino/cores/arduino -# -#~ AVR_TOOLS_PATH = $(INSTALL_DIR)/hardware/tools/avr/bin -# in Ubuntu, avr-gcc is installed separate; -# only avrdude comes with the IDE -AVR_TOOLS_PATH = /usr/bin -AVR_DUDE_PATH = $(INSTALL_DIR)/hardware/tools -# -SRC = $(ARDUINO)/pins_arduino.c $(ARDUINO)/wiring.c \ - $(ARDUINO)/wiring_analog.c $(ARDUINO)/wiring_digital.c \ - $(ARDUINO)/wiring_pulse.c \ - $(ARDUINO)/wiring_shift.c $(ARDUINO)/WInterrupts.c -# added applet/$(TARGET).cpp as in IDE 0022 -CXXSRC = $(ARDUINO)/HardwareSerial.cpp $(ARDUINO)/WMath.cpp \ - $(ARDUINO)/Print.cpp \ - $(ARDUINO)/main.cpp -# applet/$(TARGET).cpp # no need, having a rule now for applet/$(TARGET).cpp.o -# added main.cpp, as in 0022 +AVR_TOOLS_PATH = +SRC = $(ARDUINO)/pins_arduino.c $(ARDUINO)/wiring.c \ + $(ARDUINO)/wiring_analog.c $(ARDUINO)/wiring_digital.c \ + $(ARDUINO)/wiring_pulse.c \ + $(ARDUINO)/wiring_shift.c $(ARDUINO)/WInterrupts.c +CXXSRC = $(ARDUINO)/WMath.cpp $(ARDUINO)/WString.cpp\ + $(ARDUINO)/Print.cpp Marlin.cpp MarlinSerial.cpp Sd2Card.cpp SdBaseFile.cpp SdFatUtil.cpp SdFile.cpp SdVolume.cpp motion_control.cpp planner.cpp stepper.cpp temperature.cpp cardreader.cpp FORMAT = ihex + # Name of this Makefile (used for "make depend"). MAKEFILE = Makefile @@ -79,192 +73,133 @@ MAKEFILE = Makefile # AVR (extended) COFF requires stabs, plus an avr-objcopy run. DEBUG = stabs -OPT = 2 +OPT = s # Place -D or -U options here -#~ CDEFS = -DBUILD_F_CPU=$(BUILD_F_CPU) -#~ CXXDEFS = -DBUILD_F_CPU=$(BUILD_F_CPU) -# now called DF_CPU -CDEFS = -DF_CPU=$(BUILD_F_CPU) -DARDUINO=23 -CXXDEFS = -DF_CPU=$(BUILD_F_CPU) -DARDUINO=23 +CDEFS = -DF_CPU=$(F_CPU) +CXXDEFS = -DF_CPU=$(F_CPU) # Place -I options here -CINCS = -I$(ARDUINO) -I$(INSTALL_DIR)/libraries/LiquidCrystal/ -I$(INSTALL_DIR)/libraries/EEPROM/ +CINCS = -I$(ARDUINO) CXXINCS = -I$(ARDUINO) # Compiler flag to set the C Standard level. -# c89 - "ANSI" C +# c89 - "ANSI" C # gnu89 - c89 plus GCC extensions -# c99 - ISO C99 standard (not yet fully implemented) +# c99 - ISO C99 standard (not yet fully implemented) # gnu99 - c99 plus GCC extensions -CSTANDARD = -std=gnu99 +#CSTANDARD = -std=gnu99 CDEBUG = -g$(DEBUG) -# note that typically, IDE 0022 uses -w to suppress warnings (both in cpp and c)! -CWARN = -Wall -#~ CWARN = -w -# "-Wstrict-prototypes" is valid for Ada/C/ObjC but not for C++: -CCWARN = -Wstrict-prototypes -CTUNING = -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums +CWARN = -Wall -Wstrict-prototypes +CTUNING = -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -w -ffunction-sections -fdata-sections -DARDUINO=22 #CEXTRA = -Wa,-adhlns=$(<:.c=.lst) -# to eliminate pins_ardiuno warnings: -# http://arduino.cc/pipermail/developers_arduino.cc/2010-December/004005.html - -# [http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1254180518 Arduino Forum - Makefile] -#~ For building the objects files "-ffunction-sections -fdata-sections" was missing -#~ and the final avr-gcc call needs "-Wl,--gc-section". -CXSECTF = -fno-exceptions -ffunction-sections -fdata-sections -CFINALF = -Wl,--gc-section - -CFLAGS = $(CDEBUG) $(CDEFS) $(CINCS) -O$(OPT) $(CWARN) $(CCWARN) $(CSTANDARD) $(CEXTRA) -# added CWARN also to .cpp -CXXFLAGS = $(CDEFS) $(CINCS) -O$(OPT) $(CWARN) $(CXSECTF) -#ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs +CFLAGS = $(CDEBUG) $(CDEFS) $(CINCS) -O$(OPT) $(CWARN) $(CEXTRA) $(CTUNING) +CXXFLAGS = $(CDEFS) $(CINCS) -O$(OPT) -Wall $(CEXTRA) $(CTUNING) +#ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs LDFLAGS = -lm + # Programming support using avrdude. Settings and variables. AVRDUDE_PORT = $(PORT) -AVRDUDE_WRITE_FLASH = -U flash:w:applet/$(TARGET).hex -AVRDUDE_FLAGS = -V -F \ - -p $(BUILD_MCU) -P $(AVRDUDE_PORT) -c $(UPLOAD_PROTOCOL) \ - -b $(UPLOAD_SPEED) -C $(INSTALL_DIR)/hardware/tools/avrdude.conf -# -b $(UPLOAD_SPEED) -C $(INSTALL_DIR)/hardware/tools/avr/etc/avrdude.conf +AVRDUDE_WRITE_FLASH = -U flash:w:applet/$(TARGET).hex:i +AVRDUDE_FLAGS = -D -C $(INSTALL_DIR)/hardware/tools/avrdude.conf \ + -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER) \ + -b $(UPLOAD_RATE) # Program settings -CC = $(AVR_TOOLS_PATH)/avr-gcc -CXX = $(AVR_TOOLS_PATH)/avr-g++ -OBJCOPY = $(AVR_TOOLS_PATH)/avr-objcopy -OBJDUMP = $(AVR_TOOLS_PATH)/avr-objdump -AR = $(AVR_TOOLS_PATH)/avr-ar -SIZE = $(AVR_TOOLS_PATH)/avr-size -NM = $(AVR_TOOLS_PATH)/avr-nm -#~ AVRDUDE = $(AVR_TOOLS_PATH)/avrdude -AVRDUDE = $(AVR_DUDE_PATH)/avrdude +CC = $(AVR_TOOLS_PATH)avr-gcc +CXX = $(AVR_TOOLS_PATH)avr-g++ +OBJCOPY = $(AVR_TOOLS_PATH)avr-objcopy +OBJDUMP = $(AVR_TOOLS_PATH)avr-objdump +AR = $(AVR_TOOLS_PATH)avr-ar +SIZE = $(AVR_TOOLS_PATH)avr-size +NM = $(AVR_TOOLS_PATH)avr-nm +AVRDUDE = avrdude REMOVE = rm -f MV = mv -f # Define all object files. -# NOTE: obj files will be created in respective src directories (libraries or $(INSTALL_DIR)); -# make clean deletes them fine -# note that srcs are in libraries or other directories; -# $(CXXSRC:.cpp=.o) will cause obj files to be in same loc as src files -#~ OBJ = $(SRC:.c=.o) $(CXXSRC:.cpp=.o) $(ASRC:.S=.o) -# to change the output directory for object files; -# must change the obj list here! -# and then, match to corresponding rule somehow? -# or leave this - and parse in rule (auth automatic variable $(@F))? -# "Suffix Replacement" -CXXSRC+=MarlinSerial.cpp SdBaseFile.cpp stepper.cpp motion_control.cpp SdFatUtil.cpp temperature.cpp planner.cpp SdFile.cpp Sd2Card.cpp SdVolume.cpp -OBJ = $(SRC:.c=.o) $(CXXSRC:.cpp=.o) $(ASRC:.S=.o) - -# added - OBJ list, transformed into applet/ -OBJT = $(addprefix applet/,$(notdir $(OBJ))) -ALLSRC = $(SRC) $(CXXSRC) $(ASRC) +OBJ = $(SRC:.c=.o) $(CXXSRC:.cpp=.o) $(ASRC:.S=.o) # Define all listing files. LST = $(ASRC:.S=.lst) $(CXXSRC:.cpp=.lst) $(SRC:.c=.lst) # Combine all necessary flags and optional flags. # Add target processor to flags. -ALL_CFLAGS = -mmcu=$(BUILD_MCU) -I. $(CFLAGS) -ALL_CXXFLAGS = -mmcu=$(BUILD_MCU) -I. $(CXXFLAGS) -ALL_ASFLAGS = -mmcu=$(BUILD_MCU) -I. -x assembler-with-cpp $(ASFLAGS) - -# depended libraries of .pde need to be added from -# $(INSTALL_DIR)/libraries (TODO: and/or ~/sketchbook/libraries) -# grep for 'include', test if exists, add... -# note: prefix "a real tab character" http://www.delorie.com/djgpp/doc/ug/larger/makefiles.html -# $$ to escape $ for shell; -# note: must NOT put comments # inside bash execution; -# those would get removed by make; making shell see "EOF in backquote substitution" -# echo $$ix ; \ -# 'shell' twice - for each subprocess! Backtick doesn't get expanded? -GREPRES:=$(shell for ix in $(shell grep include $(TARGET).pde | sed 's/.*[<"]\(.*\).h[>"].*/\1/'); do \ - if [ -d $(INSTALL_DIR)/libraries/$$ix ] ; then \ - LINCS="$$LINCS -I$(INSTALL_DIR)/libraries/$$ix" ;\ - fi; \ - done; \ - echo $$LINCS) -# append includes: -CINCS += $(GREPRES) -CXXINCS += $(GREPRES) -# append library source .cpp files too (CXXSRC) -GREPRESB:=$(shell for ix in $(shell grep include $(TARGET).pde | sed 's/.*[<"]\(.*\).h[>"].*/\1/'); do \ - if [ -d $(INSTALL_DIR)/libraries/$$ix ] ; then \ - CPPSRCS="$$CPPSRCS $(INSTALL_DIR)/libraries/$$ix/*.cpp" ;\ - fi; \ - done; \ - echo $$CPPSRCS) -CXXSRC += $(GREPRESB) -# added - only CXX obj from libraries: -CXXLIBOBJ = $(GREPRESB:.cpp=.o) +ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) +ALL_CXXFLAGS = -mmcu=$(MCU) -I. $(CXXFLAGS) +ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS) -# Default target. -all: applet_files build sizeafter - -build: elf hex - -applet_files: $(TARGET).pde - # Here is the "preprocessing". - # It creates a .cpp file based with the same name as the .pde file. - # On top of the new .cpp file comes the WProgram.h header. - # At the end there is a generic main() function attached. - # Then the .cpp file will be compiled. Errors during compile will - # refer to this new, automatically generated, file. - # Not the original .pde file you actually edit... - test -d applet || mkdir applet - # @ supresses printout of the cmdline itself; so only the out of echo is printed - @echo ALL OBJT: $(OBJT) - @echo ALL CXXLIBOBJ: $(CXXLIBOBJ) -# echo '#include "WProgram.h"' > applet/$(TARGET).cpp - @echo "#include \"WProgram.h\"\nvoid setup();\nvoid loop();\n" > applet/$(TARGET).cpp - ##cat $(TARGET).pde >> applet/$(TARGET).cpp - cat ${PDES}>> applet/$(TARGET).cpp - cp *.cpp applet/ - # no more need to cat main.cpp (v0022) - now it is compiled in -# cat $(ARDUINO)/main.cpp >> applet/$(TARGET).cpp +# Default target. +all: build sizeafter + +build: elf hex + +applet/$(TARGET).cpp: $(TARGET).pde $(MAKEFILE) +# Here is the "preprocessing". +# It creates a .cpp file based with the same name as the .pde file. +# On top of the new .cpp file comes the WProgram.h header. +# At the end there is a generic main() function attached. +# Then the .cpp file will be compiled. Errors during compile will +# refer to this new, automatically generated, file. +# Not the original .pde file you actually edit... + @echo " WR applet/$(TARGET).cpp" + @test -d applet || mkdir applet + @echo '#include "WProgram.h"' > applet/$(TARGET).cpp + @cat $(TARGET).pde >> applet/$(TARGET).cpp + @cat $(ARDUINO)/main.cpp >> applet/$(TARGET).cpp elf: applet/$(TARGET).elf hex: applet/$(TARGET).hex eep: applet/$(TARGET).eep -lss: applet/$(TARGET).lss +lss: applet/$(TARGET).lss sym: applet/$(TARGET).sym -# Program the device. +# Program the device. upload: applet/$(TARGET).hex + stty hup < $(PORT); true $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) + stty -hup < $(PORT); true -# Display size of file. + + # Display size of file. HEXSIZE = $(SIZE) --target=$(FORMAT) applet/$(TARGET).hex -ELFSIZE = $(SIZE) applet/$(TARGET).elf +ELFSIZE = $(SIZE) applet/$(TARGET).elf sizebefore: @if [ -f applet/$(TARGET).elf ]; then echo; echo $(MSG_SIZE_BEFORE); $(HEXSIZE); echo; fi sizeafter: - @if [ -f applet/$(TARGET).elf ]; then echo; echo $(MSG_SIZE_AFTER); $(HEXSIZE); echo; fi + @if [ -f applet/$(TARGET).elf ]; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); echo; fi + # Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB. COFFCONVERT=$(OBJCOPY) --debugging \ - --change-section-address .data-0x800000 \ - --change-section-address .bss-0x800000 \ - --change-section-address .noinit-0x800000 \ - --change-section-address .eeprom-0x810000 + --change-section-address .data-0x800000 \ + --change-section-address .bss-0x800000 \ + --change-section-address .noinit-0x800000 \ + --change-section-address .eeprom-0x810000 + coff: applet/$(TARGET).elf $(COFFCONVERT) -O coff-avr applet/$(TARGET).elf $(TARGET).cof + extcoff: $(TARGET).elf $(COFFCONVERT) -O coff-ext-avr applet/$(TARGET).elf $(TARGET).cof + .SUFFIXES: .elf .hex .eep .lss .sym +.PRECIOUS: .o .elf.hex: - $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@ + @echo " COPY $@" + @$(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@ .elf.eep: - -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \ - --change-section-lma .eeprom=0 -O $(FORMAT) $< $@ + -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \ + --change-section-lma .eeprom=0 -O $(FORMAT) $< $@ # Create extended listing file from ELF output file. .elf.lss: @@ -274,79 +209,40 @@ extcoff: $(TARGET).elf .elf.sym: $(NM) -n $< > $@ -# Link: create ELF output file from library. -# NOTE: applet/$(TARGET).cpp.o MUST BE BEFORE applet/core.a -# in the dependency list, so its rule runs first! -applet/$(TARGET).elf: $(TARGET).pde applet/$(TARGET).cpp.o applet/core.a -# $(CC) $(ALL_CFLAGS) -o $@ applet/$(TARGET).cpp -L. applet/core.a $(LDFLAGS) -# changed as in IDE v0022: link cpp obj files - @echo $$(tput bold)$$(tput setaf 2) $(CC) $$(tput sgr0) $(ALL_CFLAGS) $(CFINALF) -o $@ applet/$(TARGET).cpp.o $(CXXOBJ) -L. applet/core.a $(LDFLAGS) - echo ${OBJT} - #$(CC) $(ALL_CFLAGS) $(CFINALF) -o $@ applet/$(TARGET).cpp.o -L. applet/core.a $(LDFLAGS) - $(CC) $(ALL_CFLAGS) $(CFINALF) -o $@ ${LINKORDER} $(LDFLAGS) - #@$(CC) $(ALL_CFLAGS) $(CFINALF) -o $@ applet/*.o applet/$(TARGET).cpp.o $(CXXOBJ) -L. applet/core.a $(LDFLAGS) - -# added: cpp.o depends on cpp (and .pde which generates it) -# $< "first item in the dependencies list"; $@ "left side of the :"; $^ "right side of the :" -# http://www.cs.colby.edu/maxwell/courses/tutorials/maketutor/ -applet/$(TARGET).cpp.o: applet/$(TARGET).cpp - @echo $$(tput bold) $(CXX) $$(tput sgr0) -c $(ALL_CXXFLAGS) $< -o $@ - @$(CXX) -c $(ALL_CXXFLAGS) $< -o $@ + # Link: create ELF output file from library. +applet/$(TARGET).elf: applet/$(TARGET).cpp applet/core.a Configuration.h + @echo " CXX $@" + @$(CC) $(ALL_CXXFLAGS) -Wl,--gc-sections -o $@ applet/$(TARGET).cpp -L. applet/core.a $(LDFLAGS) -#~ applet/core.a: $(OBJ) -#~ @for i in $(OBJ); do echo $(AR) rcs applet/core.a $$i; $(AR) rcs applet/core.a $$i; done - -applet/core.a: $(OBJT) - @for i in $(OBJT); do echo $(AR) rcs applet/core.a $$i; $(AR) rcs applet/core.a $$i; done - -# iterate through OBJ to find the original location; then build depending on source extension -# TODO: add handling of assembler files -applet/%.o: - @for iob in $(OBJ); do \ - if [ "`basename $$iob`" = "`basename $@`" ]; then \ - for ios in $(ALLSRC); do \ - if [ "$${iob%%.*}" = "$${ios%%.*}" ]; then \ - case $${ios##*.} in \ - "cpp") \ - echo "$$(tput bold)$$(tput setaf 1) $(CXX) $$(tput sgr0) -c $(ALL_CXXFLAGS) $$ios -o $@"; \ - $(CXX) -c $(ALL_CXXFLAGS) $$ios -o $@;; \ - "c") \ - echo "$$(tput bold)$$(tput setaf 1) $(CC) $$(tput sgr0) -c $(ALL_CFLAGS) $$ios -o $@"; \ - $(CC) -c $(ALL_CFLAGS) $$ios -o $@;; \ - esac; \ - fi; \ - done; \ - fi; \ - done; - -#~ # Compile: create object files from C++ source files. -#~ .cpp.o: -#~ $(CXX) -c $(ALL_CXXFLAGS) $< -o $@ - -#~ # Compile: create object files from C source files. -#~ .c.o: -#~ $(CC) -c $(ALL_CFLAGS) $< -o $@ - -#~ # Compile: create assembler files from C source files. -#~ .c.s: -#~ $(CC) -S $(ALL_CFLAGS) $< -o $@ - -#~ # Assemble: create object files from assembler source files. -#~ .S.o: -#~ $(CC) -c $(ALL_ASFLAGS) $< -o $@ - -#~ # Automatic dependencies -#~ %.d: %.c -#~ $(CC) -M $(ALL_CFLAGS) $< | sed "s;$(notdir $*).o:;$*.o $*.d:;" > $@ - -#~ %.d: %.cpp -#~ $(CXX) -M $(ALL_CXXFLAGS) $< | sed "s;$(notdir $*).o:;$*.o $*.d:;" > $@ +applet/core.a: $(OBJ) Configuration.h + @for i in $(OBJ); do echo " AR $$i"; $(AR) rcs applet/core.a $$i; done + +%.o: %.c Configuration.h $(MAKEFILE) + @echo " CC $@" + @$(CC) -c $(ALL_CFLAGS) $< -o $@ + +%.o: %.cpp Configuration.h $(MAKEFILE) + @echo " CXX $@" + @$(CXX) -c $(ALL_CXXFLAGS) $< -o $@ # Target: clean project. clean: - $(REMOVE) applet/$(TARGET).hex applet/$(TARGET).eep applet/$(TARGET).cof applet/$(TARGET).elf \ - applet/$(TARGET).map applet/$(TARGET).sym applet/$(TARGET).lss applet/core.a \ - $(OBJT) applet/$(TARGET).cpp.o \ - $(OBJ) $(LST) $(SRC:.c=.s) $(SRC:.c=.d) $(CXXSRC:.cpp=.s) $(CXXSRC:.cpp=.d) - -.PHONY: all build elf hex eep lss sym program coff extcoff clean applet_files sizebefore sizeafter + @echo " RM applet/*" + @$(REMOVE) applet/$(TARGET).hex applet/$(TARGET).eep applet/$(TARGET).cof applet/$(TARGET).elf \ + applet/$(TARGET).map applet/$(TARGET).sym applet/$(TARGET).lss applet/$(TARGET).cpp applet/core.a \ + $(OBJ) $(LST) $(SRC:.c=.s) $(SRC:.c=.d) $(CXXSRC:.cpp=.s) $(CXXSRC:.cpp=.d) + @echo " RMDIR applet/" + @rmdir applet + +depend: + if grep '^# DO NOT DELETE' $(MAKEFILE) >/dev/null; \ + then \ + sed -e '/^# DO NOT DELETE/,$$d' $(MAKEFILE) > \ + $(MAKEFILE).$$$$ && \ + $(MV) $(MAKEFILE).$$$$ $(MAKEFILE); \ + fi + echo '# DO NOT DELETE THIS LINE -- make depend depends on it.' \ + >> $(MAKEFILE); \ + $(CC) -M -mmcu=$(MCU) $(CDEFS) $(CINCS) $(SRC) $(ASRC) >> $(MAKEFILE) + +.PHONY: all build elf hex eep lss sym program coff extcoff clean depend applet_files sizebefore sizeafter diff --git a/Marlin/Marlin.h b/Marlin/Marlin.h index 78739af24..ffa3839a7 100644 --- a/Marlin/Marlin.h +++ b/Marlin/Marlin.h @@ -14,7 +14,7 @@ #include #include -#include +#include #include #include #include @@ -46,7 +46,11 @@ #include "WString.h" - +#if MOTHERBOARD == 8 // Teensylu + #define MYSERIAL Serial +#else + #define MYSERIAL MSerial +#endif //this is a unfinsihed attemp to removes a lot of warning messages, see: // http://www.avrfreaks.net/index.php?name=PNphpBB2&file=printview&t=57011 @@ -54,19 +58,19 @@ // //#define PSTR (s ) ((const PROGMEM char *)(s)) // //# define MYPGM(s) (__extension__({static prog_char __c[] = (s); &__c[0];})) // //#define MYPGM(s) ((const prog_char *g PROGMEM=s)) -// //#define MYPGM(s) PSTR(s) -#define MYPGM(s) (__extension__({static char __c[] __attribute__((__progmem__)) = (s); &__c[0];})) //This is the normal behaviour +#define MYPGM(s) PSTR(s) +//#define MYPGM(s) (__extension__({static char __c[] __attribute__((__progmem__)) = (s); &__c[0];})) //This is the normal behaviour //#define MYPGM(s) (__extension__({static prog_char __c[] = (s); &__c[0];})) //this does not work but hides the warnings -#define SERIAL_PROTOCOL(x) MSerial.print(x); +#define SERIAL_PROTOCOL(x) MYSERIAL.print(x); #define SERIAL_PROTOCOLPGM(x) serialprintPGM(MYPGM(x)); -#define SERIAL_PROTOCOLLN(x) {MSerial.print(x);MSerial.write('\n');} -#define SERIAL_PROTOCOLLNPGM(x) {serialprintPGM(MYPGM(x));MSerial.write('\n');} +#define SERIAL_PROTOCOLLN(x) {MYSERIAL.print(x);MYSERIAL.write('\n');} +#define SERIAL_PROTOCOLLNPGM(x) {serialprintPGM(MYPGM(x));MYSERIAL.write('\n');} -const prog_char errormagic[] PROGMEM ="Error:"; -const prog_char echomagic[] PROGMEM ="echo:"; +const char errormagic[] PROGMEM ="Error:"; +const char echomagic[] PROGMEM ="echo:"; #define SERIAL_ERROR_START serialprintPGM(errormagic); #define SERIAL_ERROR(x) SERIAL_PROTOCOL(x) #define SERIAL_ERRORPGM(x) SERIAL_PROTOCOLPGM(x) @@ -89,7 +93,7 @@ FORCE_INLINE void serialprintPGM(const char *str) char ch=pgm_read_byte(str); while(ch) { - MSerial.write(ch); + MYSERIAL.write(ch); ch=pgm_read_byte(++str); } } diff --git a/Marlin/Marlin.pde b/Marlin/Marlin.pde index fc5cdf087..7ee076221 100644 --- a/Marlin/Marlin.pde +++ b/Marlin/Marlin.pde @@ -27,8 +27,6 @@ #include "Marlin.h" - - #include "ultralcd.h" #include "planner.h" #include "stepper.h" @@ -38,12 +36,7 @@ #include "watchdog.h" #include "EEPROMwrite.h" - - -#define VERSION_STRING "1.0.0 Beta 1" - - - +#define VERSION_STRING "1.0.0 RC1" // look here for descriptions of gcodes: http://linuxcnc.org/handbook/gcode/g-code.html // http://objects.reprap.org/wiki/Mendel_User_Manual:_RepRapGCodes @@ -147,15 +140,11 @@ static bool home_all_axis = true; static float feedrate = 1500.0, next_feedrate, saved_feedrate; static long gcode_N, gcode_LastN; - - static bool relative_mode = false; //Determines Absolute or Relative Coordinates static bool relative_mode_e = false; //Determines Absolute or Relative E Codes while in Absolute Coordinates mode. E is always relative in Relative Coordinates mode. static uint8_t fanpwm=0; - - static char cmdbuffer[BUFSIZE][MAX_CMD_SIZE]; static bool fromsd[BUFSIZE]; static int bufindr = 0; @@ -175,8 +164,7 @@ const int sensitive_pins[] = SENSITIVE_PINS; // Sensitive pin list for M42 //Inactivity shutdown variables static unsigned long previous_millis_cmd = 0; static unsigned long max_inactive_time = 0; -static unsigned long stepper_inactive_time = DEFAULT_STEPPER_DEACTIVE_TIME*1000; -static unsigned long last_stepperdisabled_time=30*1000; //first release check after 30 seconds +static unsigned long stepper_inactive_time = DEFAULT_STEPPER_DEACTIVE_TIME*1000l; static unsigned long starttime=0; static unsigned long stoptime=0; @@ -224,6 +212,7 @@ void enquecommand(const char *cmd) buflen += 1; } } + void setup_photpin() { #ifdef PHOTOGRAPH_PIN @@ -257,10 +246,20 @@ void suicide() void setup() { setup_powerhold(); - MSerial.begin(BAUDRATE); + MYSERIAL.begin(BAUDRATE); + SERIAL_PROTOCOLLNPGM("start"); SERIAL_ECHO_START; + SERIAL_ECHOPGM("Marlin: "); SERIAL_ECHOLNPGM(VERSION_STRING); - SERIAL_PROTOCOLLNPGM("start"); + #ifdef STRING_VERSION_CONFIG_H + #ifdef STRING_CONFIG_H_AUTHOR + SERIAL_ECHO_START; + SERIAL_ECHOPGM("Configuration.h: "); + SERIAL_ECHOPGM(STRING_VERSION_CONFIG_H); + SERIAL_ECHOPGM(" | Author: "); + SERIAL_ECHOLNPGM(STRING_CONFIG_H_AUTHOR); + #endif + #endif SERIAL_ECHO_START; SERIAL_ECHOPGM("Free Memory:"); SERIAL_ECHO(freeMemory()); @@ -326,11 +325,10 @@ void loop() LCD_STATUS; } - -FORCE_INLINE void get_command() +void get_command() { - while( MSerial.available() > 0 && buflen < BUFSIZE) { - serial_char = MSerial.read(); + while( MYSERIAL.available() > 0 && buflen < BUFSIZE) { + serial_char = MYSERIAL.read(); if(serial_char == '\n' || serial_char == '\r' || serial_char == ':' || serial_count >= (MAX_CMD_SIZE - 1) ) { if(!serial_count) return; //if empty line @@ -474,20 +472,20 @@ FORCE_INLINE void get_command() } -FORCE_INLINE float code_value() +float code_value() { return (strtod(&cmdbuffer[bufindr][strchr_pointer - cmdbuffer[bufindr] + 1], NULL)); } -FORCE_INLINE long code_value_long() +long code_value_long() { return (strtol(&cmdbuffer[bufindr][strchr_pointer - cmdbuffer[bufindr] + 1], NULL, 10)); } -FORCE_INLINE bool code_seen(char code_string[]) //Return True if the string was found +bool code_seen(char code_string[]) //Return True if the string was found { return (strstr(cmdbuffer[bufindr], code_string) != NULL); } -FORCE_INLINE bool code_seen(char code) +bool code_seen(char code) { strchr_pointer = strchr(cmdbuffer[bufindr], code); return (strchr_pointer != NULL); //Return True if a character was found @@ -519,7 +517,7 @@ FORCE_INLINE bool code_seen(char code) endstops_hit_on_purpose();\ } -FORCE_INLINE void process_commands() +void process_commands() { unsigned long codenum; //throw away variable char *starpos = NULL; @@ -789,7 +787,7 @@ FORCE_INLINE void process_commands() #if (TEMP_0_PIN > -1) SERIAL_PROTOCOLPGM("ok T:"); SERIAL_PROTOCOL(degHotend(tmp_extruder)); - #if TEMP_BED_PIN > -1 + #if TEMP_BED_PIN > -1 SERIAL_PROTOCOLPGM(" B:"); SERIAL_PROTOCOL(degBed()); #endif //TEMP_BED_PIN @@ -843,11 +841,11 @@ FORCE_INLINE void process_commands() /* continue to loop until we have reached the target temp _and_ until TEMP_RESIDENCY_TIME hasn't passed since we reached it */ while((residencyStart == -1) || - (residencyStart > -1 && (millis() - residencyStart) < TEMP_RESIDENCY_TIME*1000) ) { + (residencyStart >= 0 && (((unsigned int) (millis() - residencyStart)) < (TEMP_RESIDENCY_TIME * 1000UL))) ) { #else while ( target_direction ? (isHeatingHotend(tmp_extruder)) : (isCoolingHotend(tmp_extruder)&&(CooldownNoWait==false)) ) { #endif //TEMP_RESIDENCY_TIME - if( (millis() - codenum) > 1000 ) + if( (millis() - codenum) > 1000UL ) { //Print Temp Reading and remaining time every 1 second while heating up/cooling down SERIAL_PROTOCOLPGM("T:"); SERIAL_PROTOCOL( degHotend(tmp_extruder) ); @@ -857,13 +855,15 @@ FORCE_INLINE void process_commands() SERIAL_PROTOCOLPGM(" W:"); if(residencyStart > -1) { - codenum = TEMP_RESIDENCY_TIME - ((millis() - residencyStart) / 1000); + codenum = ((TEMP_RESIDENCY_TIME * 1000UL) - (millis() - residencyStart)) / 1000UL; SERIAL_PROTOCOLLN( codenum ); } else { SERIAL_PROTOCOLLN( "?" ); } + #else + SERIAL_PROTOCOLLN(""); #endif codenum = millis(); } @@ -893,7 +893,7 @@ FORCE_INLINE void process_commands() codenum = millis(); while(isHeatingBed()) { - if( (millis()-codenum) > 1000 ) //Print Temp Reading every 1 second while heating up. + if(( millis() - codenum) > 1000 ) //Print Temp Reading every 1 second while heating up. { float tt=degHotend(active_extruder); SERIAL_PROTOCOLPGM("T:"); @@ -909,7 +909,7 @@ FORCE_INLINE void process_commands() LCD_MESSAGEPGM("Bed done."); previous_millis_cmd = millis(); #endif - break; + break; #if FAN_PIN > -1 case 106: //M106 Fan On @@ -938,14 +938,13 @@ FORCE_INLINE void process_commands() case 81: // M81 - ATX Power Off - #if (SUICIDE_PIN >-1) + #if defined SUICIDE_PIN && SUICIDE_PIN > -1 st_synchronize(); suicide(); - #else - #if (PS_ON_PIN > -1) - SET_INPUT(PS_ON_PIN); //Floating - #endif + #elif (PS_ON_PIN > -1) + SET_INPUT(PS_ON_PIN); //Floating #endif + break; case 82: axis_relative_modes[3] = false; @@ -963,6 +962,7 @@ FORCE_INLINE void process_commands() bool all_axis = !((code_seen(axis_codes[0])) || (code_seen(axis_codes[1])) || (code_seen(axis_codes[2]))|| (code_seen(axis_codes[3]))); if(all_axis) { + st_synchronize(); disable_e0(); disable_e1(); disable_e2(); @@ -1217,7 +1217,7 @@ FORCE_INLINE void process_commands() void FlushSerialRequestResend() { //char cmdbuffer[bufindr][100]="Resend:"; - MSerial.flush(); + MYSERIAL.flush(); SERIAL_PROTOCOLPGM("Resend:"); SERIAL_PROTOCOLLN(gcode_LastN + 1); ClearToSend(); @@ -1233,7 +1233,7 @@ void ClearToSend() SERIAL_PROTOCOLLNPGM("ok"); } -FORCE_INLINE void get_coordinates() +void get_coordinates() { for(int8_t i=0; i < NUM_AXIS; i++) { if(code_seen(axis_codes[i])) destination[i] = (float)code_value() + (axis_relative_modes[i] || relative_mode)*current_position[i]; @@ -1245,7 +1245,7 @@ FORCE_INLINE void get_coordinates() } } -FORCE_INLINE void get_arc_coordinates() +void get_arc_coordinates() { get_coordinates(); if(code_seen('I')) offset[0] = code_value(); @@ -1291,23 +1291,22 @@ void prepare_arc_move(char isclockwise) { void manage_inactivity(byte debug) { - if( (millis()-previous_millis_cmd) > max_inactive_time ) + if( (millis() - previous_millis_cmd) > max_inactive_time ) if(max_inactive_time) kill(); - if(stepper_inactive_time) - if( (millis()-last_stepperdisabled_time) > stepper_inactive_time ) - { - if(previous_millis_cmd>last_stepperdisabled_time) - last_stepperdisabled_time=previous_millis_cmd; - else + if(stepper_inactive_time) { + if( (millis() - previous_millis_cmd) > stepper_inactive_time ) { - if( (X_ENABLE_ON && (READ(X_ENABLE_PIN)!=0)) || (!X_ENABLE_ON && READ(X_ENABLE_PIN)==0) ) - enquecommand(DEFAULT_STEPPER_DEACTIVE_COMMAND); - last_stepperdisabled_time=millis(); + disable_x(); + disable_y(); + disable_z(); + disable_e0(); + disable_e1(); + disable_e2(); } } #ifdef EXTRUDER_RUNOUT_PREVENT - if( (millis()-previous_millis_cmd) > EXTRUDER_RUNOUT_SECONDS*1000 ) + if( (millis() - previous_millis_cmd) > EXTRUDER_RUNOUT_SECONDS*1000 ) if(degHotend(active_extruder)>EXTRUDER_RUNOUT_MINTEMP) { bool oldstatus=READ(E0_ENABLE_PIN); @@ -1321,7 +1320,6 @@ void manage_inactivity(byte debug) destination[E_AXIS]=oldedes; plan_set_e_position(oldepos); previous_millis_cmd=millis(); - //enquecommand(DEFAULT_STEPPER_DEACTIVE_COMMAND); st_synchronize(); WRITE(E0_ENABLE_PIN,oldstatus); } diff --git a/Marlin/MarlinSerial.cpp b/Marlin/MarlinSerial.cpp index 7175561e2..e369800b8 100644 --- a/Marlin/MarlinSerial.cpp +++ b/Marlin/MarlinSerial.cpp @@ -23,20 +23,15 @@ #include "Marlin.h" #include "MarlinSerial.h" +#if MOTHERBOARD != 8 // !teensylu // this next line disables the entire HardwareSerial.cpp, // this is so I can support Attiny series and any other chip without a uart #if defined(UBRRH) || defined(UBRR0H) || defined(UBRR1H) || defined(UBRR2H) || defined(UBRR3H) - - - - - #if defined(UBRRH) || defined(UBRR0H) ring_buffer rx_buffer = { { 0 }, 0, 0 }; #endif - FORCE_INLINE void store_char(unsigned char c) { int i = (unsigned int)(rx_buffer.head + 1) % RX_BUFFER_SIZE; @@ -324,11 +319,11 @@ void MarlinSerial::printFloat(double number, uint8_t digits) remainder -= toPrint; } } - // Preinstantiate Objects ////////////////////////////////////////////////////// -MarlinSerial MSerial; +MarlinSerial MSerial; #endif // whole file +#endif //teensylu diff --git a/Marlin/MarlinSerial.h b/Marlin/MarlinSerial.h index 71823de8f..8525cba28 100644 --- a/Marlin/MarlinSerial.h +++ b/Marlin/MarlinSerial.h @@ -31,7 +31,7 @@ #define BYTE 0 - +#if MOTHERBOARD != 8 // ! teensylu // Define constants and variables for buffering incoming serial data. We're // using a ring buffer (I think), in which rx_buffer_head is the index of the // location to which to write the next incoming character and rx_buffer_tail @@ -144,8 +144,7 @@ class MarlinSerial //: public Stream void println(void); }; -#if defined(UBRRH) || defined(UBRR0H) - extern MarlinSerial MSerial; -#endif +extern MarlinSerial MSerial; +#endif // ! teensylu #endif diff --git a/Marlin/SdBaseFile.cpp b/Marlin/SdBaseFile.cpp index f8dc83ade..b84efc8ea 100644 --- a/Marlin/SdBaseFile.cpp +++ b/Marlin/SdBaseFile.cpp @@ -18,8 +18,6 @@ * . */ -#define SERIAL MSerial - #include "Marlin.h" #ifdef SDSUPPORT @@ -345,38 +343,38 @@ int8_t SdBaseFile::lsPrintNext( uint8_t flags, uint8_t indent) { && DIR_IS_FILE_OR_SUBDIR(&dir)) break; } // indent for dir level - for (uint8_t i = 0; i < indent; i++) MSerial.write(' '); + for (uint8_t i = 0; i < indent; i++) MYSERIAL.write(' '); // print name for (uint8_t i = 0; i < 11; i++) { if (dir.name[i] == ' ')continue; if (i == 8) { - MSerial.write('.'); + MYSERIAL.write('.'); w++; } - MSerial.write(dir.name[i]); + MYSERIAL.write(dir.name[i]); w++; } if (DIR_IS_SUBDIR(&dir)) { - MSerial.write('/'); + MYSERIAL.write('/'); w++; } if (flags & (LS_DATE | LS_SIZE)) { - while (w++ < 14) MSerial.write(' '); + while (w++ < 14) MYSERIAL.write(' '); } // print modify date/time if requested if (flags & LS_DATE) { - MSerial.write(' '); + MYSERIAL.write(' '); printFatDate( dir.lastWriteDate); - MSerial.write(' '); + MYSERIAL.write(' '); printFatTime( dir.lastWriteTime); } // print size if requested if (!DIR_IS_SUBDIR(&dir) && (flags & LS_SIZE)) { - MSerial.write(' '); - MSerial.print(dir.fileSize); + MYSERIAL.write(' '); + MYSERIAL.print(dir.fileSize); } - MSerial.println(); + MYSERIAL.println(); return DIR_IS_FILE(&dir) ? 1 : 2; } //------------------------------------------------------------------------------ @@ -947,26 +945,26 @@ void SdBaseFile::printDirName(const dir_t& dir, for (uint8_t i = 0; i < 11; i++) { if (dir.name[i] == ' ')continue; if (i == 8) { - MSerial.write('.'); + MYSERIAL.write('.'); w++; } - MSerial.write(dir.name[i]); + MYSERIAL.write(dir.name[i]); w++; } if (DIR_IS_SUBDIR(&dir) && printSlash) { - MSerial.write('/'); + MYSERIAL.write('/'); w++; } while (w < width) { - MSerial.write(' '); + MYSERIAL.write(' '); w++; } } //------------------------------------------------------------------------------ // print uint8_t with width 2 static void print2u( uint8_t v) { - if (v < 10) MSerial.write('0'); - MSerial.print(v, DEC); + if (v < 10) MYSERIAL.write('0'); + MYSERIAL.print(v, DEC); } //------------------------------------------------------------------------------ /** %Print a directory date field to Serial. @@ -985,10 +983,10 @@ static void print2u( uint8_t v) { * \param[in] fatDate The date field from a directory entry. */ void SdBaseFile::printFatDate(uint16_t fatDate) { - MSerial.print(FAT_YEAR(fatDate)); - MSerial.write('-'); + MYSERIAL.print(FAT_YEAR(fatDate)); + MYSERIAL.write('-'); print2u( FAT_MONTH(fatDate)); - MSerial.write('-'); + MYSERIAL.write('-'); print2u( FAT_DAY(fatDate)); } @@ -1002,9 +1000,9 @@ void SdBaseFile::printFatDate(uint16_t fatDate) { */ void SdBaseFile::printFatTime( uint16_t fatTime) { print2u( FAT_HOUR(fatTime)); - MSerial.write(':'); + MYSERIAL.write(':'); print2u( FAT_MINUTE(fatTime)); - MSerial.write(':'); + MYSERIAL.write(':'); print2u( FAT_SECOND(fatTime)); } //------------------------------------------------------------------------------ @@ -1016,7 +1014,7 @@ void SdBaseFile::printFatTime( uint16_t fatTime) { bool SdBaseFile::printName() { char name[13]; if (!getFilename(name)) return false; - MSerial.print(name); + MYSERIAL.print(name); return true; } //------------------------------------------------------------------------------ @@ -1790,4 +1788,4 @@ void (*SdBaseFile::oldDateTime_)(uint16_t& date, uint16_t& time) = 0; // NOLINT #endif // ALLOW_DEPRECATED_FUNCTIONS -#endif \ No newline at end of file +#endif diff --git a/Marlin/SdFatUtil.cpp b/Marlin/SdFatUtil.cpp index ffbcba0c6..1187ec539 100644 --- a/Marlin/SdFatUtil.cpp +++ b/Marlin/SdFatUtil.cpp @@ -48,7 +48,7 @@ int SdFatUtil::FreeRam() { * \param[in] str Pointer to string stored in flash memory. */ void SdFatUtil::print_P( PGM_P str) { - for (uint8_t c; (c = pgm_read_byte(str)); str++) MSerial.write(c); + for (uint8_t c; (c = pgm_read_byte(str)); str++) MYSERIAL.write(c); } //------------------------------------------------------------------------------ /** %Print a string in flash memory followed by a CR/LF. @@ -58,7 +58,7 @@ void SdFatUtil::print_P( PGM_P str) { */ void SdFatUtil::println_P( PGM_P str) { print_P( str); - MSerial.println(); + MYSERIAL.println(); } //------------------------------------------------------------------------------ /** %Print a string in flash memory to Serial. diff --git a/Marlin/cardreader.pde b/Marlin/cardreader.cpp similarity index 98% rename from Marlin/cardreader.pde rename to Marlin/cardreader.cpp index a1f23ce06..ecf0c4712 100644 --- a/Marlin/cardreader.pde +++ b/Marlin/cardreader.cpp @@ -1,5 +1,8 @@ #include "Marlin.h" #include "cardreader.h" +#include "ultralcd.h" +#include "stepper.h" +#include "temperature.h" #ifdef SDSUPPORT @@ -444,7 +447,9 @@ void CardReader::printingHasFinished() st_synchronize(); quickStop(); sdprinting = false; + #ifdef STOP_HEATING_WAIT_FOR_SD_PRINTING stop_heating_wait=true; + #endif if(SD_FINISHED_STEPPERRELEASE) { //finishAndDisableSteppers(); diff --git a/Marlin/fastio.h b/Marlin/fastio.h index cc3393e96..cb4399a95 100644 --- a/Marlin/fastio.h +++ b/Marlin/fastio.h @@ -1928,7 +1928,7 @@ pins #endif -#if defined (__AVR_AT90USB1287__) +#if defined (__AVR_AT90USB1287__) || defined (__AVR_AT90USB1286__) // SPI #define SCK DIO9 #define MISO DIO11 diff --git a/Marlin/motion_control.cpp b/Marlin/motion_control.cpp index ab403e981..a24b2b782 100644 --- a/Marlin/motion_control.cpp +++ b/Marlin/motion_control.cpp @@ -45,7 +45,7 @@ void mc_arc(float *position, float *target, float *offset, uint8_t axis_0, uint8 if (isclockwise) { angular_travel -= 2*M_PI; } float millimeters_of_travel = hypot(angular_travel*radius, fabs(linear_travel)); - if (millimeters_of_travel == 0.0) { return; } + if (millimeters_of_travel < 0.001) { return; } uint16_t segments = floor(millimeters_of_travel/MM_PER_ARC_SEGMENT); /* // Multiply inverse feed_rate to compensate for the fact that this movement is approximated diff --git a/Marlin/pins.h b/Marlin/pins.h index f4c71fdf8..a07e0832f 100644 --- a/Marlin/pins.h +++ b/Marlin/pins.h @@ -1,6 +1,49 @@ #ifndef PINS_H #define PINS_H +#if MOTHERBOARD == 99 +#define KNOWN_BOARD 1 + +#define X_STEP_PIN 2 +#define X_DIR_PIN 3 +#define X_ENABLE_PIN -1 +#define X_MIN_PIN -1 +#define X_MAX_PIN 16 + +#define Y_STEP_PIN 5 +#define Y_DIR_PIN 6 +#define Y_ENABLE_PIN -1 +#define Y_MIN_PIN 67 +#define Y_MAX_PIN -1 + +#define Z_STEP_PIN 62 +#define Z_DIR_PIN 63 +#define Z_ENABLE_PIN -1 +#define Z_MIN_PIN 59 +#define Z_MAX_PIN -1 + +#define E0_STEP_PIN 65 +#define E0_DIR_PIN 66 +#define E0_ENABLE_PIN -1 + +#define SDPOWER -1 +#define SDSS 53 +#define LED_PIN -1 +#define FAN_PIN -1 +#define PS_ON_PIN 9 +#define KILL_PIN -1 + +#define HEATER_0_PIN 13 +#define HEATER_1_PIN -1 +#define HEATER_2_PIN -1 +#define TEMP_0_PIN 6 // MUST USE ANALOG INPUT NUMBERING NOT DIGITAL OUTPUT NUMBERING!!!!!!!!! +#define TEMP_1_PIN -1 // MUST USE ANALOG INPUT NUMBERING NOT DIGITAL OUTPUT NUMBERING!!!!!!!!! +#define TEMP_2_PIN -1 // MUST USE ANALOG INPUT NUMBERING NOT DIGITAL OUTPUT NUMBERING!!!!!!!!! +#define HEATER_BED_PIN 4 +#define TEMP_BED_PIN 10 + +#endif /* 99 */ + /**************************************************************************************** * Arduino pin assignment * @@ -331,16 +374,17 @@ // SPI for Max6675 Thermocouple #ifndef SDSUPPORT -// these pins are defined in the SD library if building with SD support #define SCK_PIN 52 - #define MISO_PIN 50 - #define MOSI_PIN 51 +// these pins are defined in the SD library if building with SD support + #define MAX_SCK_PIN 52 + #define MAX_MISO_PIN 50 + #define MAX_MOSI_PIN 51 #define MAX6675_SS 53 #else #define MAX6675_SS 49 #endif - #endif + /**************************************************************************************** * Duemilanove w/ ATMega328P pin assignment * @@ -470,7 +514,7 @@ #define X_STEP_PIN 15 #define X_DIR_PIN 21 #define X_MIN_PIN 18 -#define X_MAX_PIN -2 +#define X_MAX_PIN -1 #define Y_STEP_PIN 22 #define Y_DIR_PIN 23 @@ -658,10 +702,8 @@ #define HEATER_0_PIN 2 #define TEMP_0_PIN 8 -#define EXTRUDER_1_HEATER_PIN 3 -#define EXTRUDER_1_TEMPERATURE_PIN 10 -#define HEATER_1_PIN 51 -#define TEMP_1_PIN 3 +#define HEATER_1_PIN 3 +#define TEMP_1_PIN 9 #define HEATER_2_PIN -1 #define TEMP_2_PIN -1 @@ -751,6 +793,73 @@ #endif +#if MOTHERBOARD == 71 +#define KNOWN_BOARD +/***************************************************************** +* Ultimaker pin assignment (Old electronics) +******************************************************************/ + +#ifndef __AVR_ATmega1280__ + #ifndef __AVR_ATmega2560__ + #error Oops! Make sure you have 'Arduino Mega' selected from the 'Tools -> Boards' menu. + #endif +#endif + +#define X_STEP_PIN 25 +#define X_DIR_PIN 23 +#define X_MIN_PIN 15 +#define X_MAX_PIN 14 +#define X_ENABLE_PIN 27 + +#define Y_STEP_PIN 31 +#define Y_DIR_PIN 33 +#define Y_MIN_PIN 17 +#define Y_MAX_PIN 16 +#define Y_ENABLE_PIN 29 + +#define Z_STEP_PIN 37 +#define Z_DIR_PIN 39 +#define Z_MIN_PIN 19 +#define Z_MAX_PIN 18 +#define Z_ENABLE_PIN 35 + +#define HEATER_BED_PIN -1 +#define TEMP_BED_PIN -1 + +#define HEATER_0_PIN 2 +#define TEMP_0_PIN 8 + +#define HEATER_1_PIN 1 +#define TEMP_1_PIN 1 + +#define HEATER_2_PIN -1 +#define TEMP_2_PIN -1 + +#define E0_STEP_PIN 43 +#define E0_DIR_PIN 45 +#define E0_ENABLE_PIN 41 + +#define E1_STEP_PIN -1 +#define E1_DIR_PIN -1 +#define E1_ENABLE_PIN -1 + +#define SDPOWER -1 +#define SDSS -1 +#define LED_PIN -1 +#define FAN_PIN -1 +#define PS_ON_PIN -1 +#define KILL_PIN -1 +#define SUICIDE_PIN -1 //PIN that has to be turned on right after start, to keep power flowing. + +#define LCD_PINS_RS 24 +#define LCD_PINS_ENABLE 22 +#define LCD_PINS_D4 36 +#define LCD_PINS_D5 34 +#define LCD_PINS_D6 32 +#define LCD_PINS_D7 30 + +#endif + /**************************************************************************************** * Teensylu 0.7 pin assingments (ATMEGA90USB) * Requires the Teensyduino software with Teensy2.0++ selected in arduino IDE! @@ -810,6 +919,62 @@ #endif #endif +/**************************************************************************************** +* Gen3+ pin assignment +* +****************************************************************************************/ +#if MOTHERBOARD == 9 +#define MOTHERBOARD 6 +#define KNOWN_BOARD 1 +#ifndef __AVR_ATmega644P__ +#error Oops! Make sure you have 'Sanguino' selected from the 'Tools -> Boards' menu. +#endif + +#define X_STEP_PIN 15 +#define X_DIR_PIN 18 +#define X_MIN_PIN 20 +#define X_MAX_PIN -1 + +#define Y_STEP_PIN 23 +#define Y_DIR_PIN 22 +#define Y_MIN_PIN 25 +#define Y_MAX_PIN -1 + +#define Z_STEP_PIN 27 +#define Z_DIR_PIN 28 +#define Z_MIN_PIN 30 +#define Z_MAX_PIN -1 + +#define E_STEP_PIN 17 +#define E_DIR_PIN 21 + +#define LED_PIN -1 + +#define FAN_PIN -1 + +#define PS_ON_PIN 14 +#define KILL_PIN -1 + +#define HEATER_0_PIN 12 // (extruder) + +#define HEATER_1_PIN 16 // (bed) +#define X_ENABLE_PIN 19 +#define Y_ENABLE_PIN 24 +#define Z_ENABLE_PIN 29 +#define E_ENABLE_PIN 13 + +#define TEMP_0_PIN 0 // MUST USE ANALOG INPUT NUMBERING NOT DIGITAL OUTPUT NUMBERING!!!!!!!!! (pin 33 extruder) +#define TEMP_1_PIN 5 // MUST USE ANALOG INPUT NUMBERING NOT DIGITAL OUTPUT NUMBERING!!!!!!!!! (pin 34 bed) +#define TEMP_2_PIN -1 +#define SDPOWER -1 +#define SDSS 4 +#define HEATER_2_PIN -1 + +#endif + + + + #ifndef KNOWN_BOARD #error Unknown MOTHERBOARD value in configuration.h #endif diff --git a/Marlin/planner.cpp b/Marlin/planner.cpp index f3007af53..b895b95e5 100644 --- a/Marlin/planner.cpp +++ b/Marlin/planner.cpp @@ -505,7 +505,9 @@ void plan_buffer_line(const float &x, const float &y, const float &z, const floa //enable active axes if(block->steps_x != 0) enable_x(); if(block->steps_y != 0) enable_y(); - if(block->steps_z != 0) enable_z(); + #ifndef Z_LATE_ENABLE + if(block->steps_z != 0) enable_z(); + #endif // Enable all if(block->steps_e != 0) { enable_e0();enable_e1();enable_e2(); } @@ -515,8 +517,11 @@ void plan_buffer_line(const float &x, const float &y, const float &z, const floa delta_mm[Y_AXIS] = (target[Y_AXIS]-position[Y_AXIS])/axis_steps_per_unit[Y_AXIS]; delta_mm[Z_AXIS] = (target[Z_AXIS]-position[Z_AXIS])/axis_steps_per_unit[Z_AXIS]; delta_mm[E_AXIS] = (target[E_AXIS]-position[E_AXIS])/axis_steps_per_unit[E_AXIS]; - block->millimeters = sqrt(square(delta_mm[X_AXIS]) + square(delta_mm[Y_AXIS]) + - square(delta_mm[Z_AXIS]) + square(delta_mm[E_AXIS])); + if ( block->steps_x == 0 && block->steps_y == 0 && block->steps_z == 0 ) { + block->millimeters = abs(delta_mm[E_AXIS]); + } else { + block->millimeters = sqrt(square(delta_mm[X_AXIS]) + square(delta_mm[Y_AXIS]) + square(delta_mm[Z_AXIS])); + } float inverse_millimeters = 1.0/block->millimeters; // Inverse millimeters to remove multiple divides // Calculate speed in mm/second for each axis. No divide by zero due to previous checks. @@ -525,9 +530,6 @@ void plan_buffer_line(const float &x, const float &y, const float &z, const floa block->nominal_speed = block->millimeters * inverse_second; // (mm/sec) Always > 0 block->nominal_rate = ceil(block->step_event_count * inverse_second); // (step/sec) Always > 0 - - - if (block->steps_e == 0) { if(feed_rate 1) feed_rate = feed_rate*moves_queued / (BLOCK_BUFFER_SIZE * 0.5); #endif @@ -686,7 +687,7 @@ void plan_buffer_line(const float &x, const float &y, const float &z, const floa vmax_junction = max_z_jerk/2; vmax_junction = min(vmax_junction, block->nominal_speed); - if ((block_buffer_head != block_buffer_tail) && (previous_nominal_speed > 0.0)) { + if ((moves_queued > 1) && (previous_nominal_speed > 0.0)) { float jerk = sqrt(pow((current_speed[X_AXIS]-previous_speed[X_AXIS]), 2)+pow((current_speed[Y_AXIS]-previous_speed[Y_AXIS]), 2)); if((previous_speed[X_AXIS] != 0.0) || (previous_speed[Y_AXIS] != 0.0)) { vmax_junction = block->nominal_speed; diff --git a/Marlin/speed_lookuptable.h b/Marlin/speed_lookuptable.h index ab3a076f1..77f766188 100644 --- a/Marlin/speed_lookuptable.h +++ b/Marlin/speed_lookuptable.h @@ -1,76 +1,76 @@ -#ifndef SPEED_LOOKUPTABLE_H -#define SPEED_LOOKUPTABLE_H - -#include "Marlin.h" - -uint16_t speed_lookuptable_fast[256][2] PROGMEM = {\ -{ 62500, 55556}, { 6944, 3268}, { 3676, 1176}, { 2500, 607}, { 1893, 369}, { 1524, 249}, { 1275, 179}, { 1096, 135}, -{ 961, 105}, { 856, 85}, { 771, 69}, { 702, 58}, { 644, 49}, { 595, 42}, { 553, 37}, { 516, 32}, -{ 484, 28}, { 456, 25}, { 431, 23}, { 408, 20}, { 388, 19}, { 369, 16}, { 353, 16}, { 337, 14}, -{ 323, 13}, { 310, 11}, { 299, 11}, { 288, 11}, { 277, 9}, { 268, 9}, { 259, 8}, { 251, 8}, -{ 243, 8}, { 235, 7}, { 228, 6}, { 222, 6}, { 216, 6}, { 210, 6}, { 204, 5}, { 199, 5}, -{ 194, 5}, { 189, 4}, { 185, 4}, { 181, 4}, { 177, 4}, { 173, 4}, { 169, 4}, { 165, 3}, -{ 162, 3}, { 159, 4}, { 155, 3}, { 152, 3}, { 149, 2}, { 147, 3}, { 144, 3}, { 141, 2}, -{ 139, 3}, { 136, 2}, { 134, 2}, { 132, 3}, { 129, 2}, { 127, 2}, { 125, 2}, { 123, 2}, -{ 121, 2}, { 119, 1}, { 118, 2}, { 116, 2}, { 114, 1}, { 113, 2}, { 111, 2}, { 109, 1}, -{ 108, 2}, { 106, 1}, { 105, 2}, { 103, 1}, { 102, 1}, { 101, 1}, { 100, 2}, { 98, 1}, -{ 97, 1}, { 96, 1}, { 95, 2}, { 93, 1}, { 92, 1}, { 91, 1}, { 90, 1}, { 89, 1}, -{ 88, 1}, { 87, 1}, { 86, 1}, { 85, 1}, { 84, 1}, { 83, 0}, { 83, 1}, { 82, 1}, -{ 81, 1}, { 80, 1}, { 79, 1}, { 78, 0}, { 78, 1}, { 77, 1}, { 76, 1}, { 75, 0}, -{ 75, 1}, { 74, 1}, { 73, 1}, { 72, 0}, { 72, 1}, { 71, 1}, { 70, 0}, { 70, 1}, -{ 69, 0}, { 69, 1}, { 68, 1}, { 67, 0}, { 67, 1}, { 66, 0}, { 66, 1}, { 65, 0}, -{ 65, 1}, { 64, 1}, { 63, 0}, { 63, 1}, { 62, 0}, { 62, 1}, { 61, 0}, { 61, 1}, -{ 60, 0}, { 60, 0}, { 60, 1}, { 59, 0}, { 59, 1}, { 58, 0}, { 58, 1}, { 57, 0}, -{ 57, 1}, { 56, 0}, { 56, 0}, { 56, 1}, { 55, 0}, { 55, 1}, { 54, 0}, { 54, 0}, -{ 54, 1}, { 53, 0}, { 53, 0}, { 53, 1}, { 52, 0}, { 52, 0}, { 52, 1}, { 51, 0}, -{ 51, 0}, { 51, 1}, { 50, 0}, { 50, 0}, { 50, 1}, { 49, 0}, { 49, 0}, { 49, 1}, -{ 48, 0}, { 48, 0}, { 48, 1}, { 47, 0}, { 47, 0}, { 47, 0}, { 47, 1}, { 46, 0}, -{ 46, 0}, { 46, 1}, { 45, 0}, { 45, 0}, { 45, 0}, { 45, 1}, { 44, 0}, { 44, 0}, -{ 44, 0}, { 44, 1}, { 43, 0}, { 43, 0}, { 43, 0}, { 43, 1}, { 42, 0}, { 42, 0}, -{ 42, 0}, { 42, 1}, { 41, 0}, { 41, 0}, { 41, 0}, { 41, 0}, { 41, 1}, { 40, 0}, -{ 40, 0}, { 40, 0}, { 40, 0}, { 40, 1}, { 39, 0}, { 39, 0}, { 39, 0}, { 39, 0}, -{ 39, 1}, { 38, 0}, { 38, 0}, { 38, 0}, { 38, 0}, { 38, 1}, { 37, 0}, { 37, 0}, -{ 37, 0}, { 37, 0}, { 37, 0}, { 37, 1}, { 36, 0}, { 36, 0}, { 36, 0}, { 36, 0}, -{ 36, 1}, { 35, 0}, { 35, 0}, { 35, 0}, { 35, 0}, { 35, 0}, { 35, 0}, { 35, 1}, -{ 34, 0}, { 34, 0}, { 34, 0}, { 34, 0}, { 34, 0}, { 34, 1}, { 33, 0}, { 33, 0}, -{ 33, 0}, { 33, 0}, { 33, 0}, { 33, 0}, { 33, 1}, { 32, 0}, { 32, 0}, { 32, 0}, -{ 32, 0}, { 32, 0}, { 32, 0}, { 32, 0}, { 32, 1}, { 31, 0}, { 31, 0}, { 31, 0}, -{ 31, 0}, { 31, 0}, { 31, 0}, { 31, 1}, { 30, 0}, { 30, 0}, { 30, 0}, { 30, 0} -}; - -uint16_t speed_lookuptable_slow[256][2] PROGMEM = {\ -{ 62500, 12500}, { 50000, 8334}, { 41666, 5952}, { 35714, 4464}, { 31250, 3473}, { 27777, 2777}, { 25000, 2273}, { 22727, 1894}, -{ 20833, 1603}, { 19230, 1373}, { 17857, 1191}, { 16666, 1041}, { 15625, 920}, { 14705, 817}, { 13888, 731}, { 13157, 657}, -{ 12500, 596}, { 11904, 541}, { 11363, 494}, { 10869, 453}, { 10416, 416}, { 10000, 385}, { 9615, 356}, { 9259, 331}, -{ 8928, 308}, { 8620, 287}, { 8333, 269}, { 8064, 252}, { 7812, 237}, { 7575, 223}, { 7352, 210}, { 7142, 198}, -{ 6944, 188}, { 6756, 178}, { 6578, 168}, { 6410, 160}, { 6250, 153}, { 6097, 145}, { 5952, 139}, { 5813, 132}, -{ 5681, 126}, { 5555, 121}, { 5434, 115}, { 5319, 111}, { 5208, 106}, { 5102, 102}, { 5000, 99}, { 4901, 94}, -{ 4807, 91}, { 4716, 87}, { 4629, 84}, { 4545, 81}, { 4464, 79}, { 4385, 75}, { 4310, 73}, { 4237, 71}, -{ 4166, 68}, { 4098, 66}, { 4032, 64}, { 3968, 62}, { 3906, 60}, { 3846, 59}, { 3787, 56}, { 3731, 55}, -{ 3676, 53}, { 3623, 52}, { 3571, 50}, { 3521, 49}, { 3472, 48}, { 3424, 46}, { 3378, 45}, { 3333, 44}, -{ 3289, 43}, { 3246, 41}, { 3205, 41}, { 3164, 39}, { 3125, 39}, { 3086, 38}, { 3048, 36}, { 3012, 36}, -{ 2976, 35}, { 2941, 35}, { 2906, 33}, { 2873, 33}, { 2840, 32}, { 2808, 31}, { 2777, 30}, { 2747, 30}, -{ 2717, 29}, { 2688, 29}, { 2659, 28}, { 2631, 27}, { 2604, 27}, { 2577, 26}, { 2551, 26}, { 2525, 25}, -{ 2500, 25}, { 2475, 25}, { 2450, 23}, { 2427, 24}, { 2403, 23}, { 2380, 22}, { 2358, 22}, { 2336, 22}, -{ 2314, 21}, { 2293, 21}, { 2272, 20}, { 2252, 20}, { 2232, 20}, { 2212, 20}, { 2192, 19}, { 2173, 18}, -{ 2155, 19}, { 2136, 18}, { 2118, 18}, { 2100, 17}, { 2083, 17}, { 2066, 17}, { 2049, 17}, { 2032, 16}, -{ 2016, 16}, { 2000, 16}, { 1984, 16}, { 1968, 15}, { 1953, 16}, { 1937, 14}, { 1923, 15}, { 1908, 15}, -{ 1893, 14}, { 1879, 14}, { 1865, 14}, { 1851, 13}, { 1838, 14}, { 1824, 13}, { 1811, 13}, { 1798, 13}, -{ 1785, 12}, { 1773, 13}, { 1760, 12}, { 1748, 12}, { 1736, 12}, { 1724, 12}, { 1712, 12}, { 1700, 11}, -{ 1689, 12}, { 1677, 11}, { 1666, 11}, { 1655, 11}, { 1644, 11}, { 1633, 10}, { 1623, 11}, { 1612, 10}, -{ 1602, 10}, { 1592, 10}, { 1582, 10}, { 1572, 10}, { 1562, 10}, { 1552, 9}, { 1543, 10}, { 1533, 9}, -{ 1524, 9}, { 1515, 9}, { 1506, 9}, { 1497, 9}, { 1488, 9}, { 1479, 9}, { 1470, 9}, { 1461, 8}, -{ 1453, 8}, { 1445, 9}, { 1436, 8}, { 1428, 8}, { 1420, 8}, { 1412, 8}, { 1404, 8}, { 1396, 8}, -{ 1388, 7}, { 1381, 8}, { 1373, 7}, { 1366, 8}, { 1358, 7}, { 1351, 7}, { 1344, 8}, { 1336, 7}, -{ 1329, 7}, { 1322, 7}, { 1315, 7}, { 1308, 6}, { 1302, 7}, { 1295, 7}, { 1288, 6}, { 1282, 7}, -{ 1275, 6}, { 1269, 7}, { 1262, 6}, { 1256, 6}, { 1250, 7}, { 1243, 6}, { 1237, 6}, { 1231, 6}, -{ 1225, 6}, { 1219, 6}, { 1213, 6}, { 1207, 6}, { 1201, 5}, { 1196, 6}, { 1190, 6}, { 1184, 5}, -{ 1179, 6}, { 1173, 5}, { 1168, 6}, { 1162, 5}, { 1157, 5}, { 1152, 6}, { 1146, 5}, { 1141, 5}, -{ 1136, 5}, { 1131, 5}, { 1126, 5}, { 1121, 5}, { 1116, 5}, { 1111, 5}, { 1106, 5}, { 1101, 5}, -{ 1096, 5}, { 1091, 5}, { 1086, 4}, { 1082, 5}, { 1077, 5}, { 1072, 4}, { 1068, 5}, { 1063, 4}, -{ 1059, 5}, { 1054, 4}, { 1050, 4}, { 1046, 5}, { 1041, 4}, { 1037, 4}, { 1033, 5}, { 1028, 4}, -{ 1024, 4}, { 1020, 4}, { 1016, 4}, { 1012, 4}, { 1008, 4}, { 1004, 4}, { 1000, 4}, { 996, 4}, -{ 992, 4}, { 988, 4}, { 984, 4}, { 980, 4}, { 976, 4}, { 972, 4}, { 968, 3}, { 965, 3} -}; - -#endif +#ifndef SPEED_LOOKUPTABLE_H +#define SPEED_LOOKUPTABLE_H + +#include "Marlin.h" + +const uint16_t speed_lookuptable_fast[256][2] PROGMEM = {\ +{ 62500, 55556}, { 6944, 3268}, { 3676, 1176}, { 2500, 607}, { 1893, 369}, { 1524, 249}, { 1275, 179}, { 1096, 135}, +{ 961, 105}, { 856, 85}, { 771, 69}, { 702, 58}, { 644, 49}, { 595, 42}, { 553, 37}, { 516, 32}, +{ 484, 28}, { 456, 25}, { 431, 23}, { 408, 20}, { 388, 19}, { 369, 16}, { 353, 16}, { 337, 14}, +{ 323, 13}, { 310, 11}, { 299, 11}, { 288, 11}, { 277, 9}, { 268, 9}, { 259, 8}, { 251, 8}, +{ 243, 8}, { 235, 7}, { 228, 6}, { 222, 6}, { 216, 6}, { 210, 6}, { 204, 5}, { 199, 5}, +{ 194, 5}, { 189, 4}, { 185, 4}, { 181, 4}, { 177, 4}, { 173, 4}, { 169, 4}, { 165, 3}, +{ 162, 3}, { 159, 4}, { 155, 3}, { 152, 3}, { 149, 2}, { 147, 3}, { 144, 3}, { 141, 2}, +{ 139, 3}, { 136, 2}, { 134, 2}, { 132, 3}, { 129, 2}, { 127, 2}, { 125, 2}, { 123, 2}, +{ 121, 2}, { 119, 1}, { 118, 2}, { 116, 2}, { 114, 1}, { 113, 2}, { 111, 2}, { 109, 1}, +{ 108, 2}, { 106, 1}, { 105, 2}, { 103, 1}, { 102, 1}, { 101, 1}, { 100, 2}, { 98, 1}, +{ 97, 1}, { 96, 1}, { 95, 2}, { 93, 1}, { 92, 1}, { 91, 1}, { 90, 1}, { 89, 1}, +{ 88, 1}, { 87, 1}, { 86, 1}, { 85, 1}, { 84, 1}, { 83, 0}, { 83, 1}, { 82, 1}, +{ 81, 1}, { 80, 1}, { 79, 1}, { 78, 0}, { 78, 1}, { 77, 1}, { 76, 1}, { 75, 0}, +{ 75, 1}, { 74, 1}, { 73, 1}, { 72, 0}, { 72, 1}, { 71, 1}, { 70, 0}, { 70, 1}, +{ 69, 0}, { 69, 1}, { 68, 1}, { 67, 0}, { 67, 1}, { 66, 0}, { 66, 1}, { 65, 0}, +{ 65, 1}, { 64, 1}, { 63, 0}, { 63, 1}, { 62, 0}, { 62, 1}, { 61, 0}, { 61, 1}, +{ 60, 0}, { 60, 0}, { 60, 1}, { 59, 0}, { 59, 1}, { 58, 0}, { 58, 1}, { 57, 0}, +{ 57, 1}, { 56, 0}, { 56, 0}, { 56, 1}, { 55, 0}, { 55, 1}, { 54, 0}, { 54, 0}, +{ 54, 1}, { 53, 0}, { 53, 0}, { 53, 1}, { 52, 0}, { 52, 0}, { 52, 1}, { 51, 0}, +{ 51, 0}, { 51, 1}, { 50, 0}, { 50, 0}, { 50, 1}, { 49, 0}, { 49, 0}, { 49, 1}, +{ 48, 0}, { 48, 0}, { 48, 1}, { 47, 0}, { 47, 0}, { 47, 0}, { 47, 1}, { 46, 0}, +{ 46, 0}, { 46, 1}, { 45, 0}, { 45, 0}, { 45, 0}, { 45, 1}, { 44, 0}, { 44, 0}, +{ 44, 0}, { 44, 1}, { 43, 0}, { 43, 0}, { 43, 0}, { 43, 1}, { 42, 0}, { 42, 0}, +{ 42, 0}, { 42, 1}, { 41, 0}, { 41, 0}, { 41, 0}, { 41, 0}, { 41, 1}, { 40, 0}, +{ 40, 0}, { 40, 0}, { 40, 0}, { 40, 1}, { 39, 0}, { 39, 0}, { 39, 0}, { 39, 0}, +{ 39, 1}, { 38, 0}, { 38, 0}, { 38, 0}, { 38, 0}, { 38, 1}, { 37, 0}, { 37, 0}, +{ 37, 0}, { 37, 0}, { 37, 0}, { 37, 1}, { 36, 0}, { 36, 0}, { 36, 0}, { 36, 0}, +{ 36, 1}, { 35, 0}, { 35, 0}, { 35, 0}, { 35, 0}, { 35, 0}, { 35, 0}, { 35, 1}, +{ 34, 0}, { 34, 0}, { 34, 0}, { 34, 0}, { 34, 0}, { 34, 1}, { 33, 0}, { 33, 0}, +{ 33, 0}, { 33, 0}, { 33, 0}, { 33, 0}, { 33, 1}, { 32, 0}, { 32, 0}, { 32, 0}, +{ 32, 0}, { 32, 0}, { 32, 0}, { 32, 0}, { 32, 1}, { 31, 0}, { 31, 0}, { 31, 0}, +{ 31, 0}, { 31, 0}, { 31, 0}, { 31, 1}, { 30, 0}, { 30, 0}, { 30, 0}, { 30, 0} +}; + +const uint16_t speed_lookuptable_slow[256][2] PROGMEM = {\ +{ 62500, 12500}, { 50000, 8334}, { 41666, 5952}, { 35714, 4464}, { 31250, 3473}, { 27777, 2777}, { 25000, 2273}, { 22727, 1894}, +{ 20833, 1603}, { 19230, 1373}, { 17857, 1191}, { 16666, 1041}, { 15625, 920}, { 14705, 817}, { 13888, 731}, { 13157, 657}, +{ 12500, 596}, { 11904, 541}, { 11363, 494}, { 10869, 453}, { 10416, 416}, { 10000, 385}, { 9615, 356}, { 9259, 331}, +{ 8928, 308}, { 8620, 287}, { 8333, 269}, { 8064, 252}, { 7812, 237}, { 7575, 223}, { 7352, 210}, { 7142, 198}, +{ 6944, 188}, { 6756, 178}, { 6578, 168}, { 6410, 160}, { 6250, 153}, { 6097, 145}, { 5952, 139}, { 5813, 132}, +{ 5681, 126}, { 5555, 121}, { 5434, 115}, { 5319, 111}, { 5208, 106}, { 5102, 102}, { 5000, 99}, { 4901, 94}, +{ 4807, 91}, { 4716, 87}, { 4629, 84}, { 4545, 81}, { 4464, 79}, { 4385, 75}, { 4310, 73}, { 4237, 71}, +{ 4166, 68}, { 4098, 66}, { 4032, 64}, { 3968, 62}, { 3906, 60}, { 3846, 59}, { 3787, 56}, { 3731, 55}, +{ 3676, 53}, { 3623, 52}, { 3571, 50}, { 3521, 49}, { 3472, 48}, { 3424, 46}, { 3378, 45}, { 3333, 44}, +{ 3289, 43}, { 3246, 41}, { 3205, 41}, { 3164, 39}, { 3125, 39}, { 3086, 38}, { 3048, 36}, { 3012, 36}, +{ 2976, 35}, { 2941, 35}, { 2906, 33}, { 2873, 33}, { 2840, 32}, { 2808, 31}, { 2777, 30}, { 2747, 30}, +{ 2717, 29}, { 2688, 29}, { 2659, 28}, { 2631, 27}, { 2604, 27}, { 2577, 26}, { 2551, 26}, { 2525, 25}, +{ 2500, 25}, { 2475, 25}, { 2450, 23}, { 2427, 24}, { 2403, 23}, { 2380, 22}, { 2358, 22}, { 2336, 22}, +{ 2314, 21}, { 2293, 21}, { 2272, 20}, { 2252, 20}, { 2232, 20}, { 2212, 20}, { 2192, 19}, { 2173, 18}, +{ 2155, 19}, { 2136, 18}, { 2118, 18}, { 2100, 17}, { 2083, 17}, { 2066, 17}, { 2049, 17}, { 2032, 16}, +{ 2016, 16}, { 2000, 16}, { 1984, 16}, { 1968, 15}, { 1953, 16}, { 1937, 14}, { 1923, 15}, { 1908, 15}, +{ 1893, 14}, { 1879, 14}, { 1865, 14}, { 1851, 13}, { 1838, 14}, { 1824, 13}, { 1811, 13}, { 1798, 13}, +{ 1785, 12}, { 1773, 13}, { 1760, 12}, { 1748, 12}, { 1736, 12}, { 1724, 12}, { 1712, 12}, { 1700, 11}, +{ 1689, 12}, { 1677, 11}, { 1666, 11}, { 1655, 11}, { 1644, 11}, { 1633, 10}, { 1623, 11}, { 1612, 10}, +{ 1602, 10}, { 1592, 10}, { 1582, 10}, { 1572, 10}, { 1562, 10}, { 1552, 9}, { 1543, 10}, { 1533, 9}, +{ 1524, 9}, { 1515, 9}, { 1506, 9}, { 1497, 9}, { 1488, 9}, { 1479, 9}, { 1470, 9}, { 1461, 8}, +{ 1453, 8}, { 1445, 9}, { 1436, 8}, { 1428, 8}, { 1420, 8}, { 1412, 8}, { 1404, 8}, { 1396, 8}, +{ 1388, 7}, { 1381, 8}, { 1373, 7}, { 1366, 8}, { 1358, 7}, { 1351, 7}, { 1344, 8}, { 1336, 7}, +{ 1329, 7}, { 1322, 7}, { 1315, 7}, { 1308, 6}, { 1302, 7}, { 1295, 7}, { 1288, 6}, { 1282, 7}, +{ 1275, 6}, { 1269, 7}, { 1262, 6}, { 1256, 6}, { 1250, 7}, { 1243, 6}, { 1237, 6}, { 1231, 6}, +{ 1225, 6}, { 1219, 6}, { 1213, 6}, { 1207, 6}, { 1201, 5}, { 1196, 6}, { 1190, 6}, { 1184, 5}, +{ 1179, 6}, { 1173, 5}, { 1168, 6}, { 1162, 5}, { 1157, 5}, { 1152, 6}, { 1146, 5}, { 1141, 5}, +{ 1136, 5}, { 1131, 5}, { 1126, 5}, { 1121, 5}, { 1116, 5}, { 1111, 5}, { 1106, 5}, { 1101, 5}, +{ 1096, 5}, { 1091, 5}, { 1086, 4}, { 1082, 5}, { 1077, 5}, { 1072, 4}, { 1068, 5}, { 1063, 4}, +{ 1059, 5}, { 1054, 4}, { 1050, 4}, { 1046, 5}, { 1041, 4}, { 1037, 4}, { 1033, 5}, { 1028, 4}, +{ 1024, 4}, { 1020, 4}, { 1016, 4}, { 1012, 4}, { 1008, 4}, { 1004, 4}, { 1000, 4}, { 996, 4}, +{ 992, 4}, { 988, 4}, { 984, 4}, { 980, 4}, { 976, 4}, { 972, 4}, { 968, 3}, { 965, 3} +}; + +#endif diff --git a/Marlin/stepper.cpp b/Marlin/stepper.cpp index 076fbeea1..6bd84b13f 100644 --- a/Marlin/stepper.cpp +++ b/Marlin/stepper.cpp @@ -254,7 +254,7 @@ FORCE_INLINE unsigned short calc_timer(unsigned short step_rate) { timer = (unsigned short)pgm_read_word_near(table_address); timer -= (((unsigned short)pgm_read_word_near(table_address+2) * (unsigned char)(step_rate & 0x0007))>>3); } - if(timer < 100) { timer = 100; MSerial.print("Steprate to high : "); MSerial.println(step_rate); }//(20kHz this should never happen) + if(timer < 100) { timer = 100; MYSERIAL.print("Steprate to high : "); MYSERIAL.println(step_rate); }//(20kHz this should never happen) return timer; } @@ -275,6 +275,8 @@ FORCE_INLINE void trapezoid_generator_reset() { OCR1A = acceleration_time; OCR1A_nominal = calc_timer(current_block->nominal_rate); + + // SERIAL_ECHO_START; // SERIAL_ECHOPGM("advance :"); // SERIAL_ECHO(current_block->advance/256.0); @@ -302,6 +304,14 @@ ISR(TIMER1_COMPA_vect) counter_z = counter_x; counter_e = counter_x; step_events_completed = 0; + #ifdef Z_LATE_ENABLE + if(current_block->steps_z > 0) { + enable_z(); + OCR1A = 2000; //1ms wait + return; + } + #endif + // #ifdef ADVANCE // e_steps[current_block->active_extruder] = 0; // #endif @@ -429,7 +439,9 @@ ISR(TIMER1_COMPA_vect) for(int8_t i=0; i < step_loops; i++) { // Take multiple steps per interrupt (For high speed moves) - MSerial.checkRx(); // Check for serial chars. + #if MOTHERBOARD != 8 // !teensylu + MSerial.checkRx(); // Check for serial chars. + #endif #ifdef ADVANCE counter_e += current_block->steps_e; diff --git a/Marlin/temperature.cpp b/Marlin/temperature.cpp index 0372a9b07..95f0f8674 100644 --- a/Marlin/temperature.cpp +++ b/Marlin/temperature.cpp @@ -85,9 +85,9 @@ static unsigned long previous_millis_bed_heater; static unsigned char soft_pwm[EXTRUDERS]; #ifdef WATCHPERIOD - static int watch_raw[EXTRUDERS] = { -1000 }; // the first value used for all - static int watch_oldtemp[3] = {0,0,0}; - static unsigned long watchmillis = 0; + int watch_raw[EXTRUDERS] = { -1000 }; // the first value used for all + int watch_oldtemp[3] = {0,0,0}; + unsigned long watchmillis = 0; #endif //WATCHPERIOD // Init min and max temp with extreme values to prevent false errors during startup @@ -218,7 +218,7 @@ void manage_heater() #ifdef WATCHPERIOD if(watchmillis && millis() - watchmillis > WATCHPERIOD){ - if(watch_oldtemp[TEMPSENSOR_HOTEND_0] >= degHotend(active_extruder)){ + if(watch_oldtemp[0] >= degHotend(active_extruder)){ setTargetHotend(0,active_extruder); LCD_MESSAGEPGM("Heating failed"); SERIAL_ECHO_START; @@ -283,6 +283,12 @@ int temp2analog(int celsius, uint8_t e) { SERIAL_ERRORLNPGM(" - Invalid extruder number!"); kill(); } + #ifdef HEATER_0_USES_MAX6675 + if (e == 0) + { + return celsius * 4; + } + #endif if(heater_ttbl_map[e] != 0) { int raw = 0; @@ -352,7 +358,14 @@ float analog2temp(int raw, uint8_t e) { SERIAL_ERROR((int)e); SERIAL_ERRORLNPGM(" - Invalid extruder number !"); kill(); - } + } + #ifdef HEATER_0_USES_MAX6675 + if (e == 0) + { + return 0.25 * raw; + } + #endif + if(heater_ttbl_map[e] != 0) { float celsius = 0; @@ -446,6 +459,22 @@ void tp_init() SET_OUTPUT(FAN_PIN); #endif + #ifdef HEATER_0_USES_MAX6675 + #ifndef SDSUPPORT + SET_OUTPUT(MAX_SCK_PIN); + WRITE(MAX_SCK_PIN,0); + + SET_OUTPUT(MAX_MOSI_PIN); + WRITE(MAX_MOSI_PIN,1); + + SET_INPUT(MAX_MISO_PIN); + WRITE(MAX_MISO_PIN,1); + #endif + + SET_OUTPUT(MAX6675_SS); + WRITE(MAX6675_SS,1); + #endif + // Set analog inputs ADCSRA = 1<> 3; + } + + return max6675_temp; +} +#endif + + // Timer 0 is shared with millies ISR(TIMER0_COMPB_vect) { @@ -653,6 +738,9 @@ ISR(TIMER0_COMPB_vect) #if (TEMP_0_PIN > -1) raw_temp_0_value += ADC; #endif + #ifdef HEATER_0_USES_MAX6675 // TODO remove the blocking + raw_temp_0_value = read_max6675(); + #endif temp_state = 2; break; case 2: // Prepare TEMP_BED @@ -732,7 +820,7 @@ ISR(TIMER0_COMPB_vect) #endif #if EXTRUDERS > 1 - #ifdef HEATER_1_USES_AD595 + #ifdef HEATER_1_USES_AD595 || defined HEATER_0_USES_MAX6675 current_raw[1] = raw_temp_1_value; #else current_raw[1] = 16383 - raw_temp_1_value; diff --git a/Marlin/ultralcd.pde b/Marlin/ultralcd.pde index 57186b9f1..ad7b752fc 100644 --- a/Marlin/ultralcd.pde +++ b/Marlin/ultralcd.pde @@ -59,7 +59,7 @@ void lcdProgMemprint(const char *str) //=============================functions ============================ //=========================================================================== -FORCE_INLINE int intround(const float &x){return int(0.5+x);} +int intround(const float &x){return int(0.5+x);} void lcd_status(const char* message) { diff --git a/README.md b/README.md index 0beb13fe5..6f04764c9 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,10 @@ WARNING: -------- -THIS IS THE BETA 1 FOR MARLIN 1.0.0 +THIS IS RELEASE CANDIDATE 1 FOR MARLIN 1.0.0 + +The configuration is now split in two files +Configuration.h for the normal settings +Configuration_adv.h for the advanced settings Quick Information ===================