Merge remote-tracking branch 'upstream/Marlin_v1' into Marlin_v1
Conflicts: Marlin/Configuration.h
This commit is contained in:
		| @@ -1,143 +1,88 @@ | |||||||
| #ifndef __CONFIGURATION_H | #ifndef __CONFIGURATION_H | ||||||
| #define __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 | // This determines the communication speed of the printer | ||||||
| //#define BAUDRATE 250000 | //#define BAUDRATE 250000 | ||||||
| #define BAUDRATE 115200 | #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 | //// The following define selects which electronics board you have. Please choose the one that matches your setup | ||||||
| // MEGA/RAMPS up to 1.2 = 3, | // MEGA/RAMPS up to 1.2 = 3, | ||||||
| // RAMPS 1.3 = 33 | // RAMPS 1.3 = 33 | ||||||
| // Gen6 = 5, | // Gen6 = 5, | ||||||
| // Sanguinololu 1.2 and above = 62 | // Sanguinololu 1.2 and above = 62 | ||||||
| // Gen7 = 77, |  | ||||||
| // Ultimaker = 7, | // Ultimaker = 7, | ||||||
| // Teensylu = 8 | // Gen7 = 77, | ||||||
|  | // Teensylu = 8, | ||||||
|  | // Gen3+ =9 | ||||||
| #define MOTHERBOARD 77 | #define MOTHERBOARD 77 | ||||||
|  |  | ||||||
| //=========================================================================== | //=========================================================================== | ||||||
| //=============================Thermal Settings  ============================ | //=============================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 | // 1 is 100k thermistor | ||||||
| // 2 is 200k thermistor | // 2 is 200k thermistor | ||||||
| // 3 is mendel-parts 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 | // 5 is ParCan supplied 104GT-2 100K | ||||||
| // 6 is EPCOS 100k | // 6 is EPCOS 100k | ||||||
| // 7 is 100k Honeywell thermistor 135-104LAG-J01 | // 7 is 100k Honeywell thermistor 135-104LAG-J01 | ||||||
|  |  | ||||||
| #define THERMISTORHEATER_0 1 | #define TEMP_SENSOR_0 6 | ||||||
| //#define THERMISTORHEATER_1 1 | #define TEMP_SENSOR_1 0 | ||||||
| //#define THERMISTORHEATER_2 1 | #define TEMP_SENSOR_2 0 | ||||||
|  | #define TEMP_SENSOR_BED 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 |  | ||||||
|  |  | ||||||
| // Actual temperature must be close to target for this long before M109 returns success | // Actual temperature must be close to target for this long before M109 returns success | ||||||
| #define TEMP_RESIDENCY_TIME 30  // (seconds) | #define TEMP_RESIDENCY_TIME 30  // (seconds) | ||||||
| #define TEMP_HYSTERESIS 3       // (C°) range of +/- temperatures considered "close" to the target one | #define TEMP_HYSTERESIS 3       // (C<EFBFBD>) 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 |  | ||||||
|  |  | ||||||
|  | // 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. | // 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! | // 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. | // You should use MINTEMP for thermistor short/failure protection. | ||||||
| #define HEATER_0_MAXTEMP 275 | #define HEATER_0_MAXTEMP 275 | ||||||
| //#define HEATER_1_MAXTEMP 275 | #define HEATER_1_MAXTEMP 275 | ||||||
| //#define HEATER_2_MAXTEMP 275 | #define HEATER_2_MAXTEMP 275 | ||||||
| //#define BED_MAXTEMP 150 | #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: | // PID settings: | ||||||
| // Uncomment the following line to enable PID support. | // Comment the following line to disable PID and enable bang-bang. | ||||||
| #define PIDTEMP | #define PIDTEMP | ||||||
| #define PID_MAX 255 // limits current to nozzle; 255=full current | #define PID_MAX 255 // limits current to nozzle; 255=full current | ||||||
| #ifdef PIDTEMP | #ifdef PIDTEMP | ||||||
| //#define PID_DEBUG // Sends debug data to the serial port.  |   //#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_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 PID_INTEGRAL_DRIVE_MAX 255  //limit for the integral term | ||||||
| #define K1 0.95 //smoothing factor withing the PID |   #define K1 0.95 //smoothing factor withing the PID | ||||||
| #define PID_dT 0.128 //sampling period of the PID |   #define PID_dT 0.128 //sampling period of the PID | ||||||
|  |  | ||||||
| //To develop some PID settings for your machine, you can initiall follow  | // If you are using a preconfigured hotend then you can use one of the value sets by uncommenting it | ||||||
| // the Ziegler-Nichols method. | // Ultimaker | ||||||
| // set Ki and Kd to zero.  |     #define  DEFAULT_Kp  22.2 | ||||||
| // heat with a defined Kp and see if the temperature stabilizes |     #define  DEFAULT_Ki (1.25*PID_dT)   | ||||||
| // ideally you do this graphically with repg. |     #define  DEFAULT_Kd (99/PID_dT)   | ||||||
| // 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 | // Makergear | ||||||
| //    #define  DEFAULT_Kp 7.0 | //    #define  DEFAULT_Kp 7.0 | ||||||
| @@ -147,39 +92,19 @@ | |||||||
| // Mendel Parts V9 on 12V     | // Mendel Parts V9 on 12V     | ||||||
| //    #define  DEFAULT_Kp  63.0 | //    #define  DEFAULT_Kp  63.0 | ||||||
| //    #define  DEFAULT_Ki (2.25*PID_dT)   | //    #define  DEFAULT_Ki (2.25*PID_dT)   | ||||||
| //    #define  DEFAULT_Kd (440/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 | #endif // PIDTEMP | ||||||
|  |  | ||||||
| //  extruder run-out prevention.  | //this prevents dangerous Extruder moves, i.e. if the temperature is under the limit | ||||||
| //if the machine is idle, and the temperature over MINTEMP, every couple of SECONDS some filament is extruded | //can be software-disabled for whatever purposes by | ||||||
| //#define EXTRUDER_RUNOUT_PREVENT   | #define PREVENT_DANGEROUS_EXTRUDE | ||||||
| #define EXTRUDER_RUNOUT_MINTEMP 190   | #define EXTRUDE_MINTEMP 170 | ||||||
| #define EXTRUDER_RUNOUT_SECONDS 30. | #define EXTRUDE_MAXLENGTH (X_MAX_LENGTH+Y_MAX_LENGTH) //prevent extrusion of very large distances. | ||||||
| #define EXTRUDER_RUNOUT_ESTEPS 14. //mm filament |  | ||||||
| #define EXTRUDER_RUNOUT_SPEED 1500.  //extrusion speed |  | ||||||
| #define EXTRUDER_RUNOUT_EXTRUDE 100 |  | ||||||
|  |  | ||||||
|  |  | ||||||
| //=========================================================================== | //=========================================================================== | ||||||
| //=============================Mechanical Settings=========================== | //=============================Mechanical Settings=========================== | ||||||
| //=========================================================================== | //=========================================================================== | ||||||
|  |  | ||||||
|  |  | ||||||
| // Endstop Settings | // Endstop Settings | ||||||
| #define ENDSTOPPULLUPS // Comment this out (using // at the start of the line) to disable the endstop pullup resistors | #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 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 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.  | 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 | // For Inverting Stepper Enable Pins (Active Low) use 0, Non Inverting (Active High) use 1 | ||||||
| #define X_ENABLE_ON 0 | #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_Z false | ||||||
| #define DISABLE_E false // For all extruders | #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_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_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_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_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 | #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 | // Sets direction of endstops when homing; 1=MAX, -1=MIN | ||||||
| #define X_HOME_DIR -1 | #define X_HOME_DIR -1 | ||||||
| #define Y_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 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) | #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  | // 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   {80,80,2560,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_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_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_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_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_XYJERK                20.0    // (mm/sec) | ||||||
| #define DEFAULT_ZJERK                 0.4     // (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=========================== | //=============================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. | // please keep turned on if you can. | ||||||
| #define EEPROM_CHITCHAT | #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 | //LCD and SD support | ||||||
| //#define ULTRA_LCD  //general lcd support, also 16x2 | //#define ULTRA_LCD  //general lcd support, also 16x2 | ||||||
| //#define SDSUPPORT // Enable SD Card Support in Hardware Console | #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 | #define ULTIPANEL | ||||||
| #ifdef ULTIPANEL | #ifdef ULTIPANEL | ||||||
| #define NEWPANEL  //enable this if you have a click-encoder panel |   #define NEWPANEL  //enable this if you have a click-encoder panel | ||||||
| #define SDSUPPORT |   #define SDSUPPORT | ||||||
| #define ULTRA_LCD |   #define ULTRA_LCD | ||||||
| #define LCD_WIDTH 20 |   #define LCD_WIDTH 20 | ||||||
| #define LCD_HEIGHT 4 |   #define LCD_HEIGHT 4 | ||||||
| #else //no panel but just lcd  | #else //no panel but just lcd  | ||||||
| #ifdef ULTRA_LCD |   #ifdef ULTRA_LCD | ||||||
| #define LCD_WIDTH 16 |     #define LCD_WIDTH 16 | ||||||
| #define LCD_HEIGHT 2 |     #define LCD_HEIGHT 2 | ||||||
|  |   #endif | ||||||
| #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<mintemp> T<maxtemp> F<factor> |  | ||||||
| // 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 <mintemp, it is not changed by autotemp. |  | ||||||
| // on an ultimaker, some initial testing worked with M109 S215 T260 F0.1 in the start.gcode |  | ||||||
| //#define AUTOTEMP |  | ||||||
| #ifdef AUTOTEMP |  | ||||||
| #define AUTOTEMP_OLDWEIGHT 0.98 |  | ||||||
| #endif |  | ||||||
|  |  | ||||||
| //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 0 |  | ||||||
| #define EXTRUDE_MAXLENGTH (X_MAX_LENGTH+Y_MAX_LENGTH) //prevent extrusion of very large distances. |  | ||||||
|  |  | ||||||
| const int dropsegments=5; //everything with less than this number of steps will be ignored as move and joined with the next movement |  | ||||||
|  |  | ||||||
|  |  | ||||||
| // M240  Triggers a camera by emulating a Canon RC-1 Remote | // M240  Triggers a camera by emulating a Canon RC-1 Remote | ||||||
| // Data from: http://www.doc-diy.net/photo/rc-1_hacked/ | // Data from: http://www.doc-diy.net/photo/rc-1_hacked/ | ||||||
| // #define PHOTOGRAPH_PIN     23 | // #define PHOTOGRAPH_PIN     23 | ||||||
|  |  | ||||||
| //=========================================================================== | #include "Configuration_adv.h" | ||||||
| //=============================Buffers           ============================ |  | ||||||
| //=========================================================================== |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| // The number of linear motions that can be in the plan at any give time.   |  | ||||||
| // THE BLOCK_BUFFER_SIZE NEEDS TO BE A POWER OF 2, i.g. 8,16,32 because shifts and ors are used to do the ringbuffering. |  | ||||||
| #if defined SDSUPPORT |  | ||||||
| #define BLOCK_BUFFER_SIZE 16   // SD,LCD,Buttons take more memory, block buffer needs to be smaller |  | ||||||
| #else |  | ||||||
| #define BLOCK_BUFFER_SIZE 16 // maximize block buffer |  | ||||||
| #endif |  | ||||||
|  |  | ||||||
|  |  | ||||||
| //The ASCII buffer for recieving from the serial: |  | ||||||
| #define MAX_CMD_SIZE 96 |  | ||||||
| #define BUFSIZE 4 |  | ||||||
|  |  | ||||||
|  |  | ||||||
| #include "thermistortables.h" | #include "thermistortables.h" | ||||||
|  |  | ||||||
| #endif //__CONFIGURATION_H | #endif //__CONFIGURATION_H | ||||||
|  |  | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,397 +0,0 @@ | |||||||
| #ifndef __CONFIGURATION_H |  | ||||||
| #define __CONFIGURATION_H |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| // 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 |  | ||||||
| #define MOTHERBOARD 77 |  | ||||||
|  |  | ||||||
| //=========================================================================== |  | ||||||
| //=============================Thermal Settings  ============================ |  | ||||||
| //=========================================================================== |  | ||||||
|  |  | ||||||
| //// Thermistor settings: |  | ||||||
| // 1 is 100k thermistor |  | ||||||
| // 2 is 200k thermistor |  | ||||||
| // 3 is mendel-parts thermistor |  | ||||||
| // 4 is 10k thermistor |  | ||||||
| // 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 |  | ||||||
|  |  | ||||||
| // 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<mintemp> T<maxtemp> F<factor> |  | ||||||
| // 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 <mintemp, it is not changed by autotemp. |  | ||||||
| // on an ultimaker, some initial testing worked with M109 S215 T260 F0.1 in the start.gcode |  | ||||||
| //#define AUTOTEMP |  | ||||||
| #ifdef AUTOTEMP |  | ||||||
| #define AUTOTEMP_OLDWEIGHT 0.98 |  | ||||||
| #endif |  | ||||||
|  |  | ||||||
| //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 0 |  | ||||||
| #define EXTRUDE_MAXLENGTH (X_MAX_LENGTH+Y_MAX_LENGTH) //prevent extrusion of very large distances. |  | ||||||
|  |  | ||||||
| const int dropsegments=5; //everything with less than this number of steps will be ignored as move and joined with the next movement |  | ||||||
|  |  | ||||||
|  |  | ||||||
| // M240  Triggers a camera by emulating a Canon RC-1 Remote |  | ||||||
| // Data from: http://www.doc-diy.net/photo/rc-1_hacked/ |  | ||||||
| // #define PHOTOGRAPH_PIN     23 |  | ||||||
|  |  | ||||||
| //=========================================================================== |  | ||||||
| //=============================Buffers           ============================ |  | ||||||
| //=========================================================================== |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| // The number of linear motions that can be in the plan at any give time.   |  | ||||||
| // THE BLOCK_BUFFER_SIZE NEEDS TO BE A POWER OF 2, i.g. 8,16,32 because shifts and ors are used to do the ringbuffering. |  | ||||||
| #if defined SDSUPPORT |  | ||||||
| #define BLOCK_BUFFER_SIZE 16   // SD,LCD,Buttons take more memory, block buffer needs to be smaller |  | ||||||
| #else |  | ||||||
| #define BLOCK_BUFFER_SIZE 16 // maximize block buffer |  | ||||||
| #endif |  | ||||||
|  |  | ||||||
|  |  | ||||||
| //The ASCII buffer for recieving from the serial: |  | ||||||
| #define MAX_CMD_SIZE 96 |  | ||||||
| #define BUFSIZE 4 |  | ||||||
|  |  | ||||||
|  |  | ||||||
| #include "thermistortables.h" |  | ||||||
|  |  | ||||||
| #endif //__CONFIGURATION_H |  | ||||||
|  |  | ||||||
|  |  | ||||||
							
								
								
									
										221
									
								
								Marlin/Configuration_adv.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										221
									
								
								Marlin/Configuration_adv.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,221 @@ | |||||||
|  | #ifndef __CONFIGURATION_ADV_H | ||||||
|  | #define __CONFIGURATION_ADV_H | ||||||
|  |  | ||||||
|  | //=========================================================================== | ||||||
|  | //=============================Thermal Settings  ============================ | ||||||
|  | //=========================================================================== | ||||||
|  |  | ||||||
|  | // Select one of these only to define how the bed temp is read. | ||||||
|  | // | ||||||
|  | //#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_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<mintemp> T<maxtemp> F<factor> | ||||||
|  | // 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 <mintemp, it is not changed by autotemp. | ||||||
|  | // on an ultimaker, some initial testing worked with M109 S215 T260 F0.1 in the start.gcode | ||||||
|  | //#define AUTOTEMP | ||||||
|  | #ifdef AUTOTEMP | ||||||
|  |   #define AUTOTEMP_OLDWEIGHT 0.98 | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | //  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=========================== | ||||||
|  | //=========================================================================== | ||||||
|  |  | ||||||
|  | // This defines the number of extruders | ||||||
|  | #define EXTRUDERS 1 | ||||||
|  |  | ||||||
|  | #define ENDSTOPS_ONLY_FOR_HOMING // If defined the endstops will only be used for homing | ||||||
|  |  | ||||||
|  | //#define Z_LATE_ENABLE // Enable Z the last moment. Needed if your Z driver overheats. | ||||||
|  |  | ||||||
|  | //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 stepper release if idle | ||||||
|  | #define DEFAULT_STEPPER_DEACTIVE_TIME 60 | ||||||
|  |  | ||||||
|  | #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 | ||||||
|  |  | ||||||
|  | // If defined the movements slow down when the look ahead buffer is only half full | ||||||
|  | #define SLOWDOWN | ||||||
|  |  | ||||||
|  | // 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) | ||||||
|  |  | ||||||
|  | //=========================================================================== | ||||||
|  | //=============================Additional Features=========================== | ||||||
|  | //=========================================================================== | ||||||
|  |  | ||||||
|  |  | ||||||
|  | #define SD_FINISHED_STEPPERRELEASE true  //if sd support and the file is finished: disable steppers? | ||||||
|  | #define SD_FINISHED_RELEASECOMMAND "M84 X Y Z E" // no z because of layer shift. | ||||||
|  |  | ||||||
|  | // 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 | ||||||
|  |  | ||||||
|  | // 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 | ||||||
|  |  | ||||||
|  | const int dropsegments=5; //everything with less than this number of steps will be ignored as move and joined with the next movement | ||||||
|  |  | ||||||
|  | //=========================================================================== | ||||||
|  | //=============================Buffers           ============================ | ||||||
|  | //=========================================================================== | ||||||
|  |  | ||||||
|  | // The number of linear motions that can be in the plan at any give time.   | ||||||
|  | // THE BLOCK_BUFFER_SIZE NEEDS TO BE A POWER OF 2, i.g. 8,16,32 because shifts and ors are used to do the ringbuffering. | ||||||
|  | #if defined SDSUPPORT | ||||||
|  |   #define BLOCK_BUFFER_SIZE 16   // SD,LCD,Buttons take more memory, block buffer needs to be smaller | ||||||
|  | #else | ||||||
|  |   #define BLOCK_BUFFER_SIZE 16 // maximize block buffer | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  |  | ||||||
|  | //The ASCII buffer for recieving from the serial: | ||||||
|  | #define MAX_CMD_SIZE 96 | ||||||
|  | #define BUFSIZE 4 | ||||||
|  |  | ||||||
|  | //=========================================================================== | ||||||
|  | //=============================  Define Defines  ============================ | ||||||
|  | //=========================================================================== | ||||||
|  |  | ||||||
|  | #if TEMP_SENSOR_0 > 0 | ||||||
|  |   #define THERMISTORHEATER_0 TEMP_SENSOR_0 | ||||||
|  |   #define HEATER_0_USES_THERMISTOR | ||||||
|  | #endif | ||||||
|  | #if TEMP_SENSOR_1 > 0 | ||||||
|  |   #define THERMISTORHEATER_1 TEMP_SENSOR_1 | ||||||
|  |   #define HEATER_1_USES_THERMISTOR | ||||||
|  | #endif | ||||||
|  | #if TEMP_SENSOR_2 > 0 | ||||||
|  |   #define THERMISTORHEATER_2 TEMP_SENSOR_2 | ||||||
|  |   #define HEATER_2_USES_THERMISTOR | ||||||
|  | #endif | ||||||
|  | #if TEMP_SENSOR_BED > 0 | ||||||
|  |   #define THERMISTORBED TEMP_SENSOR_BED | ||||||
|  |   #define BED_USES_THERMISTOR | ||||||
|  | #endif | ||||||
|  | #if TEMP_SENSOR_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 | ||||||
							
								
								
									
										412
									
								
								Marlin/Makefile
									
									
									
									
									
								
							
							
						
						
									
										412
									
								
								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)) | 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... | # 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 | ARDUINO = $(INSTALL_DIR)/hardware/arduino/cores/arduino | ||||||
| # | AVR_TOOLS_PATH =  | ||||||
| #~ AVR_TOOLS_PATH = $(INSTALL_DIR)/hardware/tools/avr/bin | SRC =  $(ARDUINO)/pins_arduino.c $(ARDUINO)/wiring.c \ | ||||||
| # in Ubuntu, avr-gcc is installed separate; | 	$(ARDUINO)/wiring_analog.c $(ARDUINO)/wiring_digital.c \ | ||||||
| # only avrdude comes with the IDE | 	$(ARDUINO)/wiring_pulse.c \ | ||||||
| AVR_TOOLS_PATH = /usr/bin | 	$(ARDUINO)/wiring_shift.c $(ARDUINO)/WInterrupts.c | ||||||
| AVR_DUDE_PATH = $(INSTALL_DIR)/hardware/tools | 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 | ||||||
| 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 |  | ||||||
| FORMAT = ihex | FORMAT = ihex | ||||||
|  |  | ||||||
|  |  | ||||||
| # Name of this Makefile (used for "make depend"). | # Name of this Makefile (used for "make depend"). | ||||||
| MAKEFILE = Makefile | MAKEFILE = Makefile | ||||||
|  |  | ||||||
| @@ -79,192 +73,133 @@ MAKEFILE = Makefile | |||||||
| # AVR (extended) COFF requires stabs, plus an avr-objcopy run. | # AVR (extended) COFF requires stabs, plus an avr-objcopy run. | ||||||
| DEBUG = stabs | DEBUG = stabs | ||||||
|  |  | ||||||
| OPT = 2 | OPT = s | ||||||
|  |  | ||||||
| # Place -D or -U options here | # Place -D or -U options here | ||||||
| #~ CDEFS = -DBUILD_F_CPU=$(BUILD_F_CPU) | CDEFS = -DF_CPU=$(F_CPU) | ||||||
| #~ CXXDEFS = -DBUILD_F_CPU=$(BUILD_F_CPU) | CXXDEFS = -DF_CPU=$(F_CPU) | ||||||
| # now called DF_CPU |  | ||||||
| CDEFS = -DF_CPU=$(BUILD_F_CPU) -DARDUINO=23 |  | ||||||
| CXXDEFS = -DF_CPU=$(BUILD_F_CPU) -DARDUINO=23 |  | ||||||
|  |  | ||||||
| # Place -I options here | # Place -I options here | ||||||
| CINCS = -I$(ARDUINO) -I$(INSTALL_DIR)/libraries/LiquidCrystal/ -I$(INSTALL_DIR)/libraries/EEPROM/ | CINCS = -I$(ARDUINO) | ||||||
| CXXINCS = -I$(ARDUINO) | CXXINCS = -I$(ARDUINO) | ||||||
|  |  | ||||||
| # Compiler flag to set the C Standard level. | # Compiler flag to set the C Standard level. | ||||||
| # c89 - "ANSI" C | # c89   - "ANSI" C | ||||||
| # gnu89 - c89 plus GCC extensions | # 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 | # gnu99 - c99 plus GCC extensions | ||||||
| CSTANDARD = -std=gnu99 | #CSTANDARD = -std=gnu99 | ||||||
| CDEBUG = -g$(DEBUG) | CDEBUG = -g$(DEBUG) | ||||||
| # note that typically, IDE 0022 uses -w to suppress warnings (both in cpp and c)! | CWARN = -Wall -Wstrict-prototypes | ||||||
| CWARN = -Wall | CTUNING = -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -w -ffunction-sections -fdata-sections -DARDUINO=22 | ||||||
| #~ 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 |  | ||||||
| #CEXTRA = -Wa,-adhlns=$(<:.c=.lst) | #CEXTRA = -Wa,-adhlns=$(<:.c=.lst) | ||||||
|  |  | ||||||
| # to eliminate pins_ardiuno warnings: | CFLAGS = $(CDEBUG) $(CDEFS) $(CINCS) -O$(OPT) $(CWARN) $(CEXTRA) $(CTUNING) | ||||||
| # http://arduino.cc/pipermail/developers_arduino.cc/2010-December/004005.html | CXXFLAGS =         $(CDEFS) $(CINCS) -O$(OPT) -Wall    $(CEXTRA) $(CTUNING) | ||||||
|  | #ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs  | ||||||
| # [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 |  | ||||||
| LDFLAGS = -lm | LDFLAGS = -lm | ||||||
|  |  | ||||||
|  |  | ||||||
| # Programming support using avrdude. Settings and variables. | # Programming support using avrdude. Settings and variables. | ||||||
| AVRDUDE_PORT = $(PORT) | AVRDUDE_PORT = $(PORT) | ||||||
| AVRDUDE_WRITE_FLASH = -U flash:w:applet/$(TARGET).hex | AVRDUDE_WRITE_FLASH = -U flash:w:applet/$(TARGET).hex:i | ||||||
| AVRDUDE_FLAGS = -V -F \ | AVRDUDE_FLAGS = -D -C $(INSTALL_DIR)/hardware/tools/avrdude.conf \ | ||||||
|     -p $(BUILD_MCU) -P $(AVRDUDE_PORT) -c $(UPLOAD_PROTOCOL) \ | 	-p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER) \ | ||||||
|     -b $(UPLOAD_SPEED) -C $(INSTALL_DIR)/hardware/tools/avrdude.conf | 	-b $(UPLOAD_RATE) | ||||||
| #    -b $(UPLOAD_SPEED) -C $(INSTALL_DIR)/hardware/tools/avr/etc/avrdude.conf |  | ||||||
|  |  | ||||||
| # Program settings | # Program settings | ||||||
| CC = $(AVR_TOOLS_PATH)/avr-gcc | CC = $(AVR_TOOLS_PATH)avr-gcc | ||||||
| CXX = $(AVR_TOOLS_PATH)/avr-g++ | CXX = $(AVR_TOOLS_PATH)avr-g++ | ||||||
| OBJCOPY = $(AVR_TOOLS_PATH)/avr-objcopy | OBJCOPY = $(AVR_TOOLS_PATH)avr-objcopy | ||||||
| OBJDUMP = $(AVR_TOOLS_PATH)/avr-objdump | OBJDUMP = $(AVR_TOOLS_PATH)avr-objdump | ||||||
| AR = $(AVR_TOOLS_PATH)/avr-ar | AR  = $(AVR_TOOLS_PATH)avr-ar | ||||||
| SIZE = $(AVR_TOOLS_PATH)/avr-size | SIZE = $(AVR_TOOLS_PATH)avr-size | ||||||
| NM = $(AVR_TOOLS_PATH)/avr-nm | NM = $(AVR_TOOLS_PATH)avr-nm | ||||||
| #~ AVRDUDE = $(AVR_TOOLS_PATH)/avrdude | AVRDUDE = avrdude | ||||||
| AVRDUDE = $(AVR_DUDE_PATH)/avrdude |  | ||||||
| REMOVE = rm -f | REMOVE = rm -f | ||||||
| MV = mv -f | MV = mv -f | ||||||
|  |  | ||||||
| # Define all object files. | # Define all object files. | ||||||
| # NOTE: obj files will be created in respective src directories (libraries or $(INSTALL_DIR)); | OBJ = $(SRC:.c=.o) $(CXXSRC:.cpp=.o) $(ASRC:.S=.o)  | ||||||
| #  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) |  | ||||||
|  |  | ||||||
| # Define all listing files. | # Define all listing files. | ||||||
| LST = $(ASRC:.S=.lst) $(CXXSRC:.cpp=.lst) $(SRC:.c=.lst) | LST = $(ASRC:.S=.lst) $(CXXSRC:.cpp=.lst) $(SRC:.c=.lst) | ||||||
|  |  | ||||||
| # Combine all necessary flags and optional flags. | # Combine all necessary flags and optional flags. | ||||||
| # Add target processor to flags. | # Add target processor to flags. | ||||||
| ALL_CFLAGS = -mmcu=$(BUILD_MCU) -I. $(CFLAGS) | ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) | ||||||
| ALL_CXXFLAGS = -mmcu=$(BUILD_MCU) -I. $(CXXFLAGS) | ALL_CXXFLAGS = -mmcu=$(MCU) -I. $(CXXFLAGS) | ||||||
| ALL_ASFLAGS = -mmcu=$(BUILD_MCU) -I. -x assembler-with-cpp $(ASFLAGS) | ALL_ASFLAGS = -mmcu=$(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) |  | ||||||
|  |  | ||||||
| # Default target. | # Default target. | ||||||
| all: applet_files build sizeafter | all: build sizeafter | ||||||
|  |  | ||||||
| build: elf hex | 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 |  | ||||||
|  |  | ||||||
|  | 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 | elf: applet/$(TARGET).elf | ||||||
| hex: applet/$(TARGET).hex | hex: applet/$(TARGET).hex | ||||||
| eep: applet/$(TARGET).eep | eep: applet/$(TARGET).eep | ||||||
| lss: applet/$(TARGET).lss | lss: applet/$(TARGET).lss  | ||||||
| sym: applet/$(TARGET).sym | sym: applet/$(TARGET).sym | ||||||
|  |  | ||||||
| # Program the device. | # Program the device.   | ||||||
| upload: applet/$(TARGET).hex | upload: applet/$(TARGET).hex | ||||||
|  | 	stty hup < $(PORT); true | ||||||
| 	$(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) | 	$(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 | HEXSIZE = $(SIZE) --target=$(FORMAT) applet/$(TARGET).hex | ||||||
| ELFSIZE = $(SIZE) applet/$(TARGET).elf | ELFSIZE = $(SIZE)  applet/$(TARGET).elf | ||||||
| sizebefore: | sizebefore: | ||||||
| 	@if [ -f applet/$(TARGET).elf ]; then echo; echo $(MSG_SIZE_BEFORE); $(HEXSIZE); echo; fi | 	@if [ -f applet/$(TARGET).elf ]; then echo; echo $(MSG_SIZE_BEFORE); $(HEXSIZE); echo; fi | ||||||
|  |  | ||||||
| sizeafter: | 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. | # Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB. | ||||||
| COFFCONVERT=$(OBJCOPY) --debugging \ | COFFCONVERT=$(OBJCOPY) --debugging \ | ||||||
|     --change-section-address .data-0x800000 \ | 	--change-section-address .data-0x800000 \ | ||||||
|     --change-section-address .bss-0x800000 \ | 	--change-section-address .bss-0x800000 \ | ||||||
|     --change-section-address .noinit-0x800000 \ | 	--change-section-address .noinit-0x800000 \ | ||||||
|     --change-section-address .eeprom-0x810000 | 	--change-section-address .eeprom-0x810000  | ||||||
|  |  | ||||||
|  |  | ||||||
| coff: applet/$(TARGET).elf | coff: applet/$(TARGET).elf | ||||||
| 	$(COFFCONVERT) -O coff-avr applet/$(TARGET).elf $(TARGET).cof | 	$(COFFCONVERT) -O coff-avr applet/$(TARGET).elf $(TARGET).cof | ||||||
|  |  | ||||||
|  |  | ||||||
| extcoff: $(TARGET).elf | extcoff: $(TARGET).elf | ||||||
| 	$(COFFCONVERT) -O coff-ext-avr applet/$(TARGET).elf $(TARGET).cof | 	$(COFFCONVERT) -O coff-ext-avr applet/$(TARGET).elf $(TARGET).cof | ||||||
|  |  | ||||||
|  |  | ||||||
| .SUFFIXES: .elf .hex .eep .lss .sym | .SUFFIXES: .elf .hex .eep .lss .sym | ||||||
|  | .PRECIOUS: .o | ||||||
|  |  | ||||||
| .elf.hex: | .elf.hex: | ||||||
| 	$(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@ | 	@echo "  COPY  $@" | ||||||
|  | 	@$(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@ | ||||||
|  |  | ||||||
| .elf.eep: | .elf.eep: | ||||||
|     -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \ | 	-$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \ | ||||||
|     --change-section-lma .eeprom=0 -O $(FORMAT) $< $@ | 		--change-section-lma .eeprom=0 -O $(FORMAT) $< $@ | ||||||
|  |  | ||||||
| # Create extended listing file from ELF output file. | # Create extended listing file from ELF output file. | ||||||
| .elf.lss: | .elf.lss: | ||||||
| @@ -274,79 +209,40 @@ extcoff: $(TARGET).elf | |||||||
| .elf.sym: | .elf.sym: | ||||||
| 	$(NM) -n $< > $@ | 	$(NM) -n $< > $@ | ||||||
|  |  | ||||||
| # Link: create ELF output file from library. | 	# Link: create ELF output file from library. | ||||||
| # NOTE: applet/$(TARGET).cpp.o MUST BE BEFORE applet/core.a | applet/$(TARGET).elf: applet/$(TARGET).cpp applet/core.a Configuration.h | ||||||
| #  in the dependency list, so its rule runs first! | 	@echo "  CXX   $@" | ||||||
| applet/$(TARGET).elf: $(TARGET).pde applet/$(TARGET).cpp.o applet/core.a | 	@$(CC) $(ALL_CXXFLAGS) -Wl,--gc-sections -o $@ applet/$(TARGET).cpp -L. applet/core.a $(LDFLAGS) | ||||||
| #	$(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) | applet/core.a: $(OBJ) Configuration.h | ||||||
| # $< "first item in the dependencies list"; $@ "left side of the :"; $^ "right side of the :" | 	@for i in $(OBJ); do echo "  AR    $$i"; $(AR) rcs applet/core.a $$i; done | ||||||
| # http://www.cs.colby.edu/maxwell/courses/tutorials/maketutor/ |  | ||||||
| applet/$(TARGET).cpp.o: applet/$(TARGET).cpp | %.o: %.c Configuration.h $(MAKEFILE) | ||||||
| 	@echo $$(tput bold) $(CXX) $$(tput sgr0) -c $(ALL_CXXFLAGS) $< -o $@ | 	@echo "  CC    $@" | ||||||
|  | 	@$(CC) -c $(ALL_CFLAGS) $< -o $@ | ||||||
|  |  | ||||||
|  | %.o: %.cpp Configuration.h $(MAKEFILE) | ||||||
|  | 	@echo "  CXX   $@" | ||||||
| 	@$(CXX) -c $(ALL_CXXFLAGS) $< -o $@ | 	@$(CXX) -c $(ALL_CXXFLAGS) $< -o $@ | ||||||
|  |  | ||||||
| #~ 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:;" > $@ |  | ||||||
|  |  | ||||||
| # Target: clean project. | # Target: clean project. | ||||||
| clean: | clean: | ||||||
| 	$(REMOVE) applet/$(TARGET).hex applet/$(TARGET).eep applet/$(TARGET).cof applet/$(TARGET).elf \ | 	@echo "  RM    applet/*" | ||||||
|         applet/$(TARGET).map applet/$(TARGET).sym applet/$(TARGET).lss applet/core.a \ | 	@$(REMOVE) applet/$(TARGET).hex applet/$(TARGET).eep applet/$(TARGET).cof applet/$(TARGET).elf \ | ||||||
|         $(OBJT) applet/$(TARGET).cpp.o \ | 		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) | 		$(OBJ) $(LST) $(SRC:.c=.s) $(SRC:.c=.d) $(CXXSRC:.cpp=.s) $(CXXSRC:.cpp=.d) | ||||||
|  | 	@echo "  RMDIR applet/" | ||||||
|  | 	@rmdir applet | ||||||
|  |  | ||||||
| .PHONY: all build elf hex eep lss sym program coff extcoff clean applet_files sizebefore sizeafter | 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 | ||||||
|   | |||||||
| @@ -14,7 +14,7 @@ | |||||||
| #include <string.h> | #include <string.h> | ||||||
| #include <inttypes.h> | #include <inttypes.h> | ||||||
|  |  | ||||||
| #include <avr/delay.h> | #include <util/delay.h> | ||||||
| #include <avr/pgmspace.h> | #include <avr/pgmspace.h> | ||||||
| #include <avr/eeprom.h> | #include <avr/eeprom.h> | ||||||
| #include  <avr/wdt.h> | #include  <avr/wdt.h> | ||||||
| @@ -46,7 +46,11 @@ | |||||||
|  |  | ||||||
| #include "WString.h" | #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: | //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 | // http://www.avrfreaks.net/index.php?name=PNphpBB2&file=printview&t=57011 | ||||||
| @@ -54,19 +58,19 @@ | |||||||
| // //#define PSTR    (s )        ((const PROGMEM char *)(s)) | // //#define PSTR    (s )        ((const PROGMEM char *)(s)) | ||||||
| // //# define MYPGM(s) (__extension__({static prog_char __c[] = (s); &__c[0];}))  | // //# define MYPGM(s) (__extension__({static prog_char __c[] = (s); &__c[0];}))  | ||||||
| // //#define MYPGM(s) ((const prog_char *g PROGMEM=s)) | // //#define MYPGM(s) ((const prog_char *g PROGMEM=s)) | ||||||
| // //#define MYPGM(s) PSTR(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)  (__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 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_PROTOCOLPGM(x) serialprintPGM(MYPGM(x)); | ||||||
| #define SERIAL_PROTOCOLLN(x) {MSerial.print(x);MSerial.write('\n');} | #define SERIAL_PROTOCOLLN(x) {MYSERIAL.print(x);MYSERIAL.write('\n');} | ||||||
| #define SERIAL_PROTOCOLLNPGM(x) {serialprintPGM(MYPGM(x));MSerial.write('\n');} | #define SERIAL_PROTOCOLLNPGM(x) {serialprintPGM(MYPGM(x));MYSERIAL.write('\n');} | ||||||
|  |  | ||||||
|  |  | ||||||
| const prog_char errormagic[] PROGMEM ="Error:"; | const char errormagic[] PROGMEM ="Error:"; | ||||||
| const prog_char echomagic[] PROGMEM ="echo:"; | const char echomagic[] PROGMEM ="echo:"; | ||||||
| #define SERIAL_ERROR_START serialprintPGM(errormagic); | #define SERIAL_ERROR_START serialprintPGM(errormagic); | ||||||
| #define SERIAL_ERROR(x) SERIAL_PROTOCOL(x) | #define SERIAL_ERROR(x) SERIAL_PROTOCOL(x) | ||||||
| #define SERIAL_ERRORPGM(x) SERIAL_PROTOCOLPGM(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); |   char ch=pgm_read_byte(str); | ||||||
|   while(ch) |   while(ch) | ||||||
|   { |   { | ||||||
|     MSerial.write(ch); |     MYSERIAL.write(ch); | ||||||
|     ch=pgm_read_byte(++str); |     ch=pgm_read_byte(++str); | ||||||
|   } |   } | ||||||
| } | } | ||||||
|   | |||||||
| @@ -27,8 +27,6 @@ | |||||||
|  |  | ||||||
| #include "Marlin.h" | #include "Marlin.h" | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| #include "ultralcd.h" | #include "ultralcd.h" | ||||||
| #include "planner.h" | #include "planner.h" | ||||||
| #include "stepper.h" | #include "stepper.h" | ||||||
| @@ -38,12 +36,7 @@ | |||||||
| #include "watchdog.h" | #include "watchdog.h" | ||||||
| #include "EEPROMwrite.h" | #include "EEPROMwrite.h" | ||||||
|  |  | ||||||
|  | #define VERSION_STRING  "1.0.0 RC1" | ||||||
|  |  | ||||||
| #define VERSION_STRING  "1.0.0 Beta 1" |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| // look here for descriptions of gcodes: http://linuxcnc.org/handbook/gcode/g-code.html | // look here for descriptions of gcodes: http://linuxcnc.org/handbook/gcode/g-code.html | ||||||
| // http://objects.reprap.org/wiki/Mendel_User_Manual:_RepRapGCodes | // 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 float feedrate = 1500.0, next_feedrate, saved_feedrate; | ||||||
| static long gcode_N, gcode_LastN; | static long gcode_N, gcode_LastN; | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| static bool relative_mode = false;  //Determines Absolute or Relative Coordinates | 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 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 uint8_t fanpwm=0; | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| static char cmdbuffer[BUFSIZE][MAX_CMD_SIZE]; | static char cmdbuffer[BUFSIZE][MAX_CMD_SIZE]; | ||||||
| static bool fromsd[BUFSIZE]; | static bool fromsd[BUFSIZE]; | ||||||
| static int bufindr = 0; | static int bufindr = 0; | ||||||
| @@ -175,8 +164,7 @@ const int sensitive_pins[] = SENSITIVE_PINS; // Sensitive pin list for M42 | |||||||
| //Inactivity shutdown variables | //Inactivity shutdown variables | ||||||
| static unsigned long previous_millis_cmd = 0; | static unsigned long previous_millis_cmd = 0; | ||||||
| static unsigned long max_inactive_time = 0; | static unsigned long max_inactive_time = 0; | ||||||
| static unsigned long stepper_inactive_time = DEFAULT_STEPPER_DEACTIVE_TIME*1000; | static unsigned long stepper_inactive_time = DEFAULT_STEPPER_DEACTIVE_TIME*1000l; | ||||||
| static unsigned long last_stepperdisabled_time=30*1000; //first release check after 30 seconds |  | ||||||
|  |  | ||||||
| static unsigned long starttime=0; | static unsigned long starttime=0; | ||||||
| static unsigned long stoptime=0; | static unsigned long stoptime=0; | ||||||
| @@ -224,6 +212,7 @@ void enquecommand(const char *cmd) | |||||||
|     buflen += 1; |     buflen += 1; | ||||||
|   } |   } | ||||||
| } | } | ||||||
|  |  | ||||||
| void setup_photpin() | void setup_photpin() | ||||||
| { | { | ||||||
|   #ifdef PHOTOGRAPH_PIN |   #ifdef PHOTOGRAPH_PIN | ||||||
| @@ -257,11 +246,21 @@ void suicide() | |||||||
| void setup() | void setup() | ||||||
| {  | {  | ||||||
|   setup_powerhold(); |   setup_powerhold(); | ||||||
|   MSerial.begin(BAUDRATE); |   MYSERIAL.begin(BAUDRATE); | ||||||
|   SERIAL_ECHO_START; |  | ||||||
|   SERIAL_ECHOLNPGM(VERSION_STRING); |  | ||||||
|   SERIAL_PROTOCOLLNPGM("start"); |   SERIAL_PROTOCOLLNPGM("start"); | ||||||
|   SERIAL_ECHO_START; |   SERIAL_ECHO_START; | ||||||
|  |   SERIAL_ECHOPGM("Marlin: "); | ||||||
|  |   SERIAL_ECHOLNPGM(VERSION_STRING); | ||||||
|  |   #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_ECHOPGM("Free Memory:"); | ||||||
|   SERIAL_ECHO(freeMemory()); |   SERIAL_ECHO(freeMemory()); | ||||||
|   SERIAL_ECHOPGM(" PlannerBufferBytes:"); |   SERIAL_ECHOPGM(" PlannerBufferBytes:"); | ||||||
| @@ -326,11 +325,10 @@ void loop() | |||||||
|   LCD_STATUS; |   LCD_STATUS; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | void get_command()  | ||||||
| FORCE_INLINE void get_command()  |  | ||||||
| {  | {  | ||||||
|   while( MSerial.available() > 0  && buflen < BUFSIZE) { |   while( MYSERIAL.available() > 0  && buflen < BUFSIZE) { | ||||||
|     serial_char = MSerial.read(); |     serial_char = MYSERIAL.read(); | ||||||
|     if(serial_char == '\n' || serial_char == '\r' || serial_char == ':' || serial_count >= (MAX_CMD_SIZE - 1) )  |     if(serial_char == '\n' || serial_char == '\r' || serial_char == ':' || serial_count >= (MAX_CMD_SIZE - 1) )  | ||||||
|     { |     { | ||||||
|       if(!serial_count) return; //if empty line |       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));  |   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));  |   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);  |   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); |   strchr_pointer = strchr(cmdbuffer[bufindr], code); | ||||||
|   return (strchr_pointer != NULL);  //Return True if a character was found |   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();\ |     endstops_hit_on_purpose();\ | ||||||
|   } |   } | ||||||
|  |  | ||||||
| FORCE_INLINE void process_commands() | void process_commands() | ||||||
| { | { | ||||||
|   unsigned long codenum; //throw away variable |   unsigned long codenum; //throw away variable | ||||||
|   char *starpos = NULL; |   char *starpos = NULL; | ||||||
| @@ -789,7 +787,7 @@ FORCE_INLINE void process_commands() | |||||||
|       #if (TEMP_0_PIN > -1) |       #if (TEMP_0_PIN > -1) | ||||||
|         SERIAL_PROTOCOLPGM("ok T:"); |         SERIAL_PROTOCOLPGM("ok T:"); | ||||||
|         SERIAL_PROTOCOL(degHotend(tmp_extruder));  |         SERIAL_PROTOCOL(degHotend(tmp_extruder));  | ||||||
|         #if TEMP_BED_PIN > -1  |         #if TEMP_BED_PIN > -1 | ||||||
|           SERIAL_PROTOCOLPGM(" B:");   |           SERIAL_PROTOCOLPGM(" B:");   | ||||||
|           SERIAL_PROTOCOL(degBed()); |           SERIAL_PROTOCOL(degBed()); | ||||||
|         #endif //TEMP_BED_PIN |         #endif //TEMP_BED_PIN | ||||||
| @@ -843,11 +841,11 @@ FORCE_INLINE void process_commands() | |||||||
|         /* continue to loop until we have reached the target temp    |         /* continue to loop until we have reached the target temp    | ||||||
|           _and_ until TEMP_RESIDENCY_TIME hasn't passed since we reached it */ |           _and_ until TEMP_RESIDENCY_TIME hasn't passed since we reached it */ | ||||||
|         while((residencyStart == -1) || |         while((residencyStart == -1) || | ||||||
|               (residencyStart > -1 && (millis() - residencyStart) < TEMP_RESIDENCY_TIME*1000) ) { |               (residencyStart >= 0 && (((unsigned int) (millis() - residencyStart)) < (TEMP_RESIDENCY_TIME * 1000UL))) ) { | ||||||
|       #else |       #else | ||||||
|         while ( target_direction ? (isHeatingHotend(tmp_extruder)) : (isCoolingHotend(tmp_extruder)&&(CooldownNoWait==false)) ) { |         while ( target_direction ? (isHeatingHotend(tmp_extruder)) : (isCoolingHotend(tmp_extruder)&&(CooldownNoWait==false)) ) { | ||||||
|       #endif //TEMP_RESIDENCY_TIME |       #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 |           { //Print Temp Reading and remaining time every 1 second while heating up/cooling down | ||||||
|             SERIAL_PROTOCOLPGM("T:"); |             SERIAL_PROTOCOLPGM("T:"); | ||||||
|             SERIAL_PROTOCOL( degHotend(tmp_extruder) );  |             SERIAL_PROTOCOL( degHotend(tmp_extruder) );  | ||||||
| @@ -857,13 +855,15 @@ FORCE_INLINE void process_commands() | |||||||
|               SERIAL_PROTOCOLPGM(" W:"); |               SERIAL_PROTOCOLPGM(" W:"); | ||||||
|               if(residencyStart > -1) |               if(residencyStart > -1) | ||||||
|               { |               { | ||||||
|                  codenum = TEMP_RESIDENCY_TIME - ((millis() - residencyStart) / 1000); |                  codenum = ((TEMP_RESIDENCY_TIME * 1000UL) - (millis() - residencyStart)) / 1000UL; | ||||||
|                  SERIAL_PROTOCOLLN( codenum ); |                  SERIAL_PROTOCOLLN( codenum ); | ||||||
|               } |               } | ||||||
|               else  |               else  | ||||||
|               { |               { | ||||||
|                  SERIAL_PROTOCOLLN( "?" ); |                  SERIAL_PROTOCOLLN( "?" ); | ||||||
|               } |               } | ||||||
|  |             #else | ||||||
|  |               SERIAL_PROTOCOLLN(""); | ||||||
|             #endif |             #endif | ||||||
|             codenum = millis(); |             codenum = millis(); | ||||||
|           } |           } | ||||||
| @@ -893,7 +893,7 @@ FORCE_INLINE void process_commands() | |||||||
|         codenum = millis();  |         codenum = millis();  | ||||||
|         while(isHeatingBed())  |         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); |             float tt=degHotend(active_extruder); | ||||||
|             SERIAL_PROTOCOLPGM("T:"); |             SERIAL_PROTOCOLPGM("T:"); | ||||||
| @@ -909,7 +909,7 @@ FORCE_INLINE void process_commands() | |||||||
|         LCD_MESSAGEPGM("Bed done."); |         LCD_MESSAGEPGM("Bed done."); | ||||||
|         previous_millis_cmd = millis(); |         previous_millis_cmd = millis(); | ||||||
|     #endif |     #endif | ||||||
|     break; |         break; | ||||||
|  |  | ||||||
|     #if FAN_PIN > -1 |     #if FAN_PIN > -1 | ||||||
|       case 106: //M106 Fan On |       case 106: //M106 Fan On | ||||||
| @@ -938,14 +938,13 @@ FORCE_INLINE void process_commands() | |||||||
|        |        | ||||||
|       case 81: // M81 - ATX Power Off |       case 81: // M81 - ATX Power Off | ||||||
|        |        | ||||||
|       #if (SUICIDE_PIN >-1) |       #if defined SUICIDE_PIN && SUICIDE_PIN > -1 | ||||||
|         st_synchronize(); |         st_synchronize(); | ||||||
|         suicide(); |         suicide(); | ||||||
|       #else |       #elif (PS_ON_PIN > -1) | ||||||
|         #if (PS_ON_PIN > -1)  |         SET_INPUT(PS_ON_PIN); //Floating | ||||||
|           SET_INPUT(PS_ON_PIN); //Floating |  | ||||||
|         #endif |  | ||||||
|       #endif |       #endif | ||||||
|  | 		break; | ||||||
|          |          | ||||||
|     case 82: |     case 82: | ||||||
|       axis_relative_modes[3] = false; |       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]))); |         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) |         if(all_axis) | ||||||
|         { |         { | ||||||
|  |           st_synchronize(); | ||||||
|           disable_e0(); |           disable_e0(); | ||||||
|           disable_e1(); |           disable_e1(); | ||||||
|           disable_e2(); |           disable_e2(); | ||||||
| @@ -1217,7 +1217,7 @@ FORCE_INLINE void process_commands() | |||||||
| void FlushSerialRequestResend() | void FlushSerialRequestResend() | ||||||
| { | { | ||||||
|   //char cmdbuffer[bufindr][100]="Resend:"; |   //char cmdbuffer[bufindr][100]="Resend:"; | ||||||
|   MSerial.flush(); |   MYSERIAL.flush(); | ||||||
|   SERIAL_PROTOCOLPGM("Resend:"); |   SERIAL_PROTOCOLPGM("Resend:"); | ||||||
|   SERIAL_PROTOCOLLN(gcode_LastN + 1); |   SERIAL_PROTOCOLLN(gcode_LastN + 1); | ||||||
|   ClearToSend(); |   ClearToSend(); | ||||||
| @@ -1233,7 +1233,7 @@ void ClearToSend() | |||||||
|   SERIAL_PROTOCOLLNPGM("ok");  |   SERIAL_PROTOCOLLNPGM("ok");  | ||||||
| } | } | ||||||
|  |  | ||||||
| FORCE_INLINE void get_coordinates() | void get_coordinates() | ||||||
| { | { | ||||||
|   for(int8_t i=0; i < NUM_AXIS; i++) { |   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]; |     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(); |    get_coordinates(); | ||||||
|    if(code_seen('I')) offset[0] = code_value(); |    if(code_seen('I')) offset[0] = code_value(); | ||||||
| @@ -1291,23 +1291,22 @@ void prepare_arc_move(char isclockwise) { | |||||||
|  |  | ||||||
| void manage_inactivity(byte debug)  | 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)  |     if(max_inactive_time)  | ||||||
|       kill();  |       kill();  | ||||||
|   if(stepper_inactive_time)   |   if(stepper_inactive_time)  { | ||||||
|   if( (millis()-last_stepperdisabled_time) >  stepper_inactive_time )  |     if( (millis() - previous_millis_cmd) >  stepper_inactive_time )  | ||||||
|   { |  | ||||||
|     if(previous_millis_cmd>last_stepperdisabled_time) |  | ||||||
|       last_stepperdisabled_time=previous_millis_cmd; |  | ||||||
|     else |  | ||||||
|     { |     { | ||||||
|       if(  (X_ENABLE_ON && (READ(X_ENABLE_PIN)!=0))  ||  (!X_ENABLE_ON && READ(X_ENABLE_PIN)==0)  ) |       disable_x(); | ||||||
|         enquecommand(DEFAULT_STEPPER_DEACTIVE_COMMAND);  |       disable_y(); | ||||||
|       last_stepperdisabled_time=millis(); |       disable_z(); | ||||||
|  |       disable_e0(); | ||||||
|  |       disable_e1(); | ||||||
|  |       disable_e2(); | ||||||
|     } |     } | ||||||
|   } |   } | ||||||
|   #ifdef EXTRUDER_RUNOUT_PREVENT |   #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) |     if(degHotend(active_extruder)>EXTRUDER_RUNOUT_MINTEMP) | ||||||
|     { |     { | ||||||
|      bool oldstatus=READ(E0_ENABLE_PIN); |      bool oldstatus=READ(E0_ENABLE_PIN); | ||||||
| @@ -1321,7 +1320,6 @@ void manage_inactivity(byte debug) | |||||||
|      destination[E_AXIS]=oldedes; |      destination[E_AXIS]=oldedes; | ||||||
|      plan_set_e_position(oldepos); |      plan_set_e_position(oldepos); | ||||||
|      previous_millis_cmd=millis(); |      previous_millis_cmd=millis(); | ||||||
|      //enquecommand(DEFAULT_STEPPER_DEACTIVE_COMMAND); |  | ||||||
|      st_synchronize(); |      st_synchronize(); | ||||||
|      WRITE(E0_ENABLE_PIN,oldstatus); |      WRITE(E0_ENABLE_PIN,oldstatus); | ||||||
|     } |     } | ||||||
|   | |||||||
| @@ -23,20 +23,15 @@ | |||||||
| #include "Marlin.h" | #include "Marlin.h" | ||||||
| #include "MarlinSerial.h" | #include "MarlinSerial.h" | ||||||
|  |  | ||||||
|  | #if MOTHERBOARD != 8 // !teensylu | ||||||
| // this next line disables the entire HardwareSerial.cpp,  | // this next line disables the entire HardwareSerial.cpp,  | ||||||
| // this is so I can support Attiny series and any other chip without a uart | // 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) || defined(UBRR1H) || defined(UBRR2H) || defined(UBRR3H) | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| #if defined(UBRRH) || defined(UBRR0H) | #if defined(UBRRH) || defined(UBRR0H) | ||||||
|   ring_buffer rx_buffer  =  { { 0 }, 0, 0 }; |   ring_buffer rx_buffer  =  { { 0 }, 0, 0 }; | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
|  |  | ||||||
| FORCE_INLINE void store_char(unsigned char c) | FORCE_INLINE void store_char(unsigned char c) | ||||||
| { | { | ||||||
|   int i = (unsigned int)(rx_buffer.head + 1) % RX_BUFFER_SIZE; |   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;  |     remainder -= toPrint;  | ||||||
|   }  |   }  | ||||||
| } | } | ||||||
|  |  | ||||||
| // Preinstantiate Objects ////////////////////////////////////////////////////// | // Preinstantiate Objects ////////////////////////////////////////////////////// | ||||||
|  |  | ||||||
|  |  | ||||||
| MarlinSerial MSerial; | MarlinSerial MSerial; | ||||||
|  |  | ||||||
|  |  | ||||||
| #endif // whole file | #endif // whole file | ||||||
|  | #endif //teensylu | ||||||
|  |  | ||||||
|   | |||||||
| @@ -31,7 +31,7 @@ | |||||||
| #define BYTE 0 | #define BYTE 0 | ||||||
|  |  | ||||||
|  |  | ||||||
|  | #if MOTHERBOARD != 8 // ! teensylu | ||||||
| // Define constants and variables for buffering incoming serial data.  We're | // 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 | // 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 | // location to which to write the next incoming character and rx_buffer_tail | ||||||
| @@ -144,8 +144,7 @@ class MarlinSerial //: public Stream | |||||||
|     void println(void); |     void println(void); | ||||||
| }; | }; | ||||||
|  |  | ||||||
| #if defined(UBRRH) || defined(UBRR0H) | extern MarlinSerial MSerial; | ||||||
|   extern MarlinSerial MSerial; | #endif // ! teensylu | ||||||
| #endif |  | ||||||
|  |  | ||||||
| #endif | #endif | ||||||
|   | |||||||
| @@ -18,8 +18,6 @@ | |||||||
|  * <http://www.gnu.org/licenses/>. |  * <http://www.gnu.org/licenses/>. | ||||||
|  */ |  */ | ||||||
|  |  | ||||||
| #define SERIAL MSerial |  | ||||||
|  |  | ||||||
| #include "Marlin.h" | #include "Marlin.h" | ||||||
| #ifdef SDSUPPORT | #ifdef SDSUPPORT | ||||||
|  |  | ||||||
| @@ -345,38 +343,38 @@ int8_t SdBaseFile::lsPrintNext( uint8_t flags, uint8_t indent) { | |||||||
|       && DIR_IS_FILE_OR_SUBDIR(&dir)) break; |       && DIR_IS_FILE_OR_SUBDIR(&dir)) break; | ||||||
|   } |   } | ||||||
|   // indent for dir level |   // 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 |   // print name | ||||||
|   for (uint8_t i = 0; i < 11; i++) { |   for (uint8_t i = 0; i < 11; i++) { | ||||||
|     if (dir.name[i] == ' ')continue; |     if (dir.name[i] == ' ')continue; | ||||||
|     if (i == 8) { |     if (i == 8) { | ||||||
|       MSerial.write('.'); |       MYSERIAL.write('.'); | ||||||
|       w++; |       w++; | ||||||
|     } |     } | ||||||
|     MSerial.write(dir.name[i]); |     MYSERIAL.write(dir.name[i]); | ||||||
|     w++; |     w++; | ||||||
|   } |   } | ||||||
|   if (DIR_IS_SUBDIR(&dir)) { |   if (DIR_IS_SUBDIR(&dir)) { | ||||||
|     MSerial.write('/'); |     MYSERIAL.write('/'); | ||||||
|     w++; |     w++; | ||||||
|   } |   } | ||||||
|   if (flags & (LS_DATE | LS_SIZE)) { |   if (flags & (LS_DATE | LS_SIZE)) { | ||||||
|     while (w++ < 14) MSerial.write(' '); |     while (w++ < 14) MYSERIAL.write(' '); | ||||||
|   } |   } | ||||||
|   // print modify date/time if requested |   // print modify date/time if requested | ||||||
|   if (flags & LS_DATE) { |   if (flags & LS_DATE) { | ||||||
|     MSerial.write(' '); |     MYSERIAL.write(' '); | ||||||
|     printFatDate( dir.lastWriteDate); |     printFatDate( dir.lastWriteDate); | ||||||
|     MSerial.write(' '); |     MYSERIAL.write(' '); | ||||||
|     printFatTime( dir.lastWriteTime); |     printFatTime( dir.lastWriteTime); | ||||||
|   } |   } | ||||||
|   // print size if requested |   // print size if requested | ||||||
|   if (!DIR_IS_SUBDIR(&dir) && (flags & LS_SIZE)) { |   if (!DIR_IS_SUBDIR(&dir) && (flags & LS_SIZE)) { | ||||||
|     MSerial.write(' '); |     MYSERIAL.write(' '); | ||||||
|     MSerial.print(dir.fileSize); |     MYSERIAL.print(dir.fileSize); | ||||||
|   } |   } | ||||||
|   MSerial.println(); |   MYSERIAL.println(); | ||||||
|   return DIR_IS_FILE(&dir) ? 1 : 2; |   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++) { |   for (uint8_t i = 0; i < 11; i++) { | ||||||
|     if (dir.name[i] == ' ')continue; |     if (dir.name[i] == ' ')continue; | ||||||
|     if (i == 8) { |     if (i == 8) { | ||||||
|       MSerial.write('.'); |       MYSERIAL.write('.'); | ||||||
|       w++; |       w++; | ||||||
|     } |     } | ||||||
|     MSerial.write(dir.name[i]); |     MYSERIAL.write(dir.name[i]); | ||||||
|     w++; |     w++; | ||||||
|   } |   } | ||||||
|   if (DIR_IS_SUBDIR(&dir) && printSlash) { |   if (DIR_IS_SUBDIR(&dir) && printSlash) { | ||||||
|     MSerial.write('/'); |     MYSERIAL.write('/'); | ||||||
|     w++; |     w++; | ||||||
|   } |   } | ||||||
|   while (w < width) { |   while (w < width) { | ||||||
|     MSerial.write(' '); |     MYSERIAL.write(' '); | ||||||
|     w++; |     w++; | ||||||
|   } |   } | ||||||
| } | } | ||||||
| //------------------------------------------------------------------------------ | //------------------------------------------------------------------------------ | ||||||
| // print uint8_t with width 2 | // print uint8_t with width 2 | ||||||
| static void print2u( uint8_t v) { | static void print2u( uint8_t v) { | ||||||
|   if (v < 10) MSerial.write('0'); |   if (v < 10) MYSERIAL.write('0'); | ||||||
|   MSerial.print(v, DEC); |   MYSERIAL.print(v, DEC); | ||||||
| } | } | ||||||
| //------------------------------------------------------------------------------ | //------------------------------------------------------------------------------ | ||||||
| /** %Print a directory date field to Serial. | /** %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. |  * \param[in] fatDate The date field from a directory entry. | ||||||
|  */ |  */ | ||||||
| void SdBaseFile::printFatDate(uint16_t fatDate) { | void SdBaseFile::printFatDate(uint16_t fatDate) { | ||||||
|   MSerial.print(FAT_YEAR(fatDate)); |   MYSERIAL.print(FAT_YEAR(fatDate)); | ||||||
|   MSerial.write('-'); |   MYSERIAL.write('-'); | ||||||
|   print2u( FAT_MONTH(fatDate)); |   print2u( FAT_MONTH(fatDate)); | ||||||
|   MSerial.write('-'); |   MYSERIAL.write('-'); | ||||||
|   print2u( FAT_DAY(fatDate)); |   print2u( FAT_DAY(fatDate)); | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -1002,9 +1000,9 @@ void SdBaseFile::printFatDate(uint16_t fatDate) { | |||||||
|  */ |  */ | ||||||
| void SdBaseFile::printFatTime( uint16_t fatTime) { | void SdBaseFile::printFatTime( uint16_t fatTime) { | ||||||
|   print2u( FAT_HOUR(fatTime)); |   print2u( FAT_HOUR(fatTime)); | ||||||
|   MSerial.write(':'); |   MYSERIAL.write(':'); | ||||||
|   print2u( FAT_MINUTE(fatTime)); |   print2u( FAT_MINUTE(fatTime)); | ||||||
|   MSerial.write(':'); |   MYSERIAL.write(':'); | ||||||
|   print2u( FAT_SECOND(fatTime)); |   print2u( FAT_SECOND(fatTime)); | ||||||
| } | } | ||||||
| //------------------------------------------------------------------------------ | //------------------------------------------------------------------------------ | ||||||
| @@ -1016,7 +1014,7 @@ void SdBaseFile::printFatTime( uint16_t fatTime) { | |||||||
| bool SdBaseFile::printName() { | bool SdBaseFile::printName() { | ||||||
|   char name[13]; |   char name[13]; | ||||||
|   if (!getFilename(name)) return false; |   if (!getFilename(name)) return false; | ||||||
|   MSerial.print(name); |   MYSERIAL.print(name); | ||||||
|   return true; |   return true; | ||||||
| } | } | ||||||
| //------------------------------------------------------------------------------ | //------------------------------------------------------------------------------ | ||||||
| @@ -1790,4 +1788,4 @@ void (*SdBaseFile::oldDateTime_)(uint16_t& date, uint16_t& time) = 0;  // NOLINT | |||||||
| #endif  // ALLOW_DEPRECATED_FUNCTIONS | #endif  // ALLOW_DEPRECATED_FUNCTIONS | ||||||
|  |  | ||||||
|  |  | ||||||
| #endif | #endif | ||||||
|   | |||||||
| @@ -48,7 +48,7 @@ int SdFatUtil::FreeRam() { | |||||||
|  * \param[in] str Pointer to string stored in flash memory. |  * \param[in] str Pointer to string stored in flash memory. | ||||||
|  */ |  */ | ||||||
| void SdFatUtil::print_P( PGM_P str) { | 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. | /** %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) { | void SdFatUtil::println_P( PGM_P str) { | ||||||
|   print_P( str); |   print_P( str); | ||||||
|   MSerial.println(); |   MYSERIAL.println(); | ||||||
| } | } | ||||||
| //------------------------------------------------------------------------------ | //------------------------------------------------------------------------------ | ||||||
| /** %Print a string in flash memory to Serial. | /** %Print a string in flash memory to Serial. | ||||||
|   | |||||||
| @@ -1,5 +1,8 @@ | |||||||
| #include "Marlin.h" | #include "Marlin.h" | ||||||
| #include "cardreader.h" | #include "cardreader.h" | ||||||
|  | #include "ultralcd.h" | ||||||
|  | #include "stepper.h" | ||||||
|  | #include "temperature.h" | ||||||
| #ifdef SDSUPPORT | #ifdef SDSUPPORT | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| @@ -444,7 +447,9 @@ void CardReader::printingHasFinished() | |||||||
|  st_synchronize(); |  st_synchronize(); | ||||||
|  quickStop(); |  quickStop(); | ||||||
|  sdprinting = false; |  sdprinting = false; | ||||||
|  |  #ifdef STOP_HEATING_WAIT_FOR_SD_PRINTING | ||||||
|  stop_heating_wait=true; |  stop_heating_wait=true; | ||||||
|  |  #endif | ||||||
|  if(SD_FINISHED_STEPPERRELEASE) |  if(SD_FINISHED_STEPPERRELEASE) | ||||||
|  { |  { | ||||||
|    //finishAndDisableSteppers();
 |    //finishAndDisableSteppers();
 | ||||||
| @@ -1928,7 +1928,7 @@ pins | |||||||
|  |  | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
| #if defined (__AVR_AT90USB1287__) | #if defined (__AVR_AT90USB1287__) || defined (__AVR_AT90USB1286__) | ||||||
| // SPI | // SPI | ||||||
| #define	SCK					DIO9 | #define	SCK					DIO9 | ||||||
| #define	MISO				DIO11 | #define	MISO				DIO11 | ||||||
|   | |||||||
| @@ -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; } |   if (isclockwise) { angular_travel -= 2*M_PI; } | ||||||
|    |    | ||||||
|   float millimeters_of_travel = hypot(angular_travel*radius, fabs(linear_travel)); |   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); |   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 |     // Multiply inverse feed_rate to compensate for the fact that this movement is approximated | ||||||
|   | |||||||
							
								
								
									
										183
									
								
								Marlin/pins.h
									
									
									
									
									
								
							
							
						
						
									
										183
									
								
								Marlin/pins.h
									
									
									
									
									
								
							| @@ -1,6 +1,49 @@ | |||||||
| #ifndef PINS_H | #ifndef PINS_H | ||||||
| #define 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 | * Arduino pin assignment | ||||||
| * | * | ||||||
| @@ -331,16 +374,17 @@ | |||||||
| // SPI for Max6675 Thermocouple  | // SPI for Max6675 Thermocouple  | ||||||
|  |  | ||||||
| #ifndef SDSUPPORT | #ifndef SDSUPPORT | ||||||
| // these pins are defined in the SD library if building with SD support  #define SCK_PIN          52 | // these pins are defined in the SD library if building with SD support   | ||||||
|   #define MISO_PIN         50 |   #define MAX_SCK_PIN          52 | ||||||
|   #define MOSI_PIN         51 |   #define MAX_MISO_PIN         50 | ||||||
|  |   #define MAX_MOSI_PIN         51 | ||||||
|   #define MAX6675_SS       53 |   #define MAX6675_SS       53 | ||||||
| #else | #else | ||||||
|   #define MAX6675_SS       49 |   #define MAX6675_SS       49 | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
|  |  | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
| /**************************************************************************************** | /**************************************************************************************** | ||||||
| * Duemilanove w/ ATMega328P pin assignment | * Duemilanove w/ ATMega328P pin assignment | ||||||
| * | * | ||||||
| @@ -470,7 +514,7 @@ | |||||||
| #define X_STEP_PIN         15 | #define X_STEP_PIN         15 | ||||||
| #define X_DIR_PIN          21 | #define X_DIR_PIN          21 | ||||||
| #define X_MIN_PIN          18 | #define X_MIN_PIN          18 | ||||||
| #define X_MAX_PIN           -2 | #define X_MAX_PIN           -1 | ||||||
|  |  | ||||||
| #define Y_STEP_PIN         22 | #define Y_STEP_PIN         22 | ||||||
| #define Y_DIR_PIN          23 | #define Y_DIR_PIN          23 | ||||||
| @@ -658,10 +702,8 @@ | |||||||
| #define HEATER_0_PIN  2 | #define HEATER_0_PIN  2 | ||||||
| #define TEMP_0_PIN 8    | #define TEMP_0_PIN 8    | ||||||
|  |  | ||||||
| #define EXTRUDER_1_HEATER_PIN 3 | #define HEATER_1_PIN 3 | ||||||
| #define EXTRUDER_1_TEMPERATURE_PIN 10  | #define TEMP_1_PIN 9 | ||||||
| #define HEATER_1_PIN 51 |  | ||||||
| #define TEMP_1_PIN 3 |  | ||||||
|  |  | ||||||
| #define HEATER_2_PIN -1 | #define HEATER_2_PIN -1 | ||||||
| #define TEMP_2_PIN -1 | #define TEMP_2_PIN -1 | ||||||
| @@ -751,6 +793,73 @@ | |||||||
|  |  | ||||||
| #endif | #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) | * Teensylu 0.7 pin assingments (ATMEGA90USB) | ||||||
| * Requires the Teensyduino software with Teensy2.0++ selected in arduino IDE! | * Requires the Teensyduino software with Teensy2.0++ selected in arduino IDE! | ||||||
| @@ -810,6 +919,62 @@ | |||||||
| #endif | #endif | ||||||
| #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 | #ifndef KNOWN_BOARD | ||||||
| #error Unknown MOTHERBOARD value in configuration.h | #error Unknown MOTHERBOARD value in configuration.h | ||||||
| #endif | #endif | ||||||
|   | |||||||
| @@ -505,7 +505,9 @@ void plan_buffer_line(const float &x, const float &y, const float &z, const floa | |||||||
|   //enable active axes |   //enable active axes | ||||||
|   if(block->steps_x != 0) enable_x(); |   if(block->steps_x != 0) enable_x(); | ||||||
|   if(block->steps_y != 0) enable_y(); |   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 |   // Enable all | ||||||
|   if(block->steps_e != 0) { enable_e0();enable_e1();enable_e2(); } |   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[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[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]; |   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]) + |   if ( block->steps_x == 0 && block->steps_y == 0 && block->steps_z == 0 ) { | ||||||
|                             square(delta_mm[Z_AXIS]) + square(delta_mm[E_AXIS])); |     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  |   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. |   // 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_speed = block->millimeters * inverse_second; // (mm/sec) Always > 0 | ||||||
|   block->nominal_rate = ceil(block->step_event_count * inverse_second); // (step/sec) Always > 0 |   block->nominal_rate = ceil(block->step_event_count * inverse_second); // (step/sec) Always > 0 | ||||||
|  |  | ||||||
|    |  | ||||||
|   |  | ||||||
|  |  | ||||||
|   if (block->steps_e == 0) { |   if (block->steps_e == 0) { | ||||||
|         if(feed_rate<mintravelfeedrate) feed_rate=mintravelfeedrate; |         if(feed_rate<mintravelfeedrate) feed_rate=mintravelfeedrate; | ||||||
|   } |   } | ||||||
| @@ -535,10 +537,9 @@ void plan_buffer_line(const float &x, const float &y, const float &z, const floa | |||||||
|     	if(feed_rate<minimumfeedrate) feed_rate=minimumfeedrate; |     	if(feed_rate<minimumfeedrate) feed_rate=minimumfeedrate; | ||||||
|   }  |   }  | ||||||
|  |  | ||||||
| #ifdef SLOWDOWN |  | ||||||
|   // slow down when de buffer starts to empty, rather than wait at the corner for a buffer refill |   // slow down when de buffer starts to empty, rather than wait at the corner for a buffer refill | ||||||
|   int moves_queued=(block_buffer_head-block_buffer_tail + BLOCK_BUFFER_SIZE) & (BLOCK_BUFFER_SIZE - 1); |   int moves_queued=(block_buffer_head-block_buffer_tail + BLOCK_BUFFER_SIZE) & (BLOCK_BUFFER_SIZE - 1); | ||||||
|    | #ifdef SLOWDOWN | ||||||
|   if(moves_queued < (BLOCK_BUFFER_SIZE * 0.5) && moves_queued > 1) feed_rate = feed_rate*moves_queued / (BLOCK_BUFFER_SIZE * 0.5);  |   if(moves_queued < (BLOCK_BUFFER_SIZE * 0.5) && moves_queued > 1) feed_rate = feed_rate*moves_queued / (BLOCK_BUFFER_SIZE * 0.5);  | ||||||
| #endif | #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 = max_z_jerk/2; | ||||||
|   vmax_junction = min(vmax_junction, block->nominal_speed); |   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)); |     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)) { |     if((previous_speed[X_AXIS] != 0.0) || (previous_speed[Y_AXIS] != 0.0)) { | ||||||
|       vmax_junction = block->nominal_speed; |       vmax_junction = block->nominal_speed; | ||||||
|   | |||||||
| @@ -1,76 +1,76 @@ | |||||||
| #ifndef SPEED_LOOKUPTABLE_H | #ifndef SPEED_LOOKUPTABLE_H | ||||||
| #define SPEED_LOOKUPTABLE_H | #define SPEED_LOOKUPTABLE_H | ||||||
|  |  | ||||||
| #include "Marlin.h" | #include "Marlin.h" | ||||||
|  |  | ||||||
| uint16_t speed_lookuptable_fast[256][2] PROGMEM = {\ | 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},  | { 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},  | { 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},  | { 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},  | { 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},  | { 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},  | { 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},  | { 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},  | { 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},  | { 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},  | { 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},  | { 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},  | { 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},  | { 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},  | { 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},  | { 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},  | { 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},  | { 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},  | { 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},  | { 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},  | { 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},  | { 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},  | { 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},  | { 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},  | { 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},  | { 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},  | { 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},  | { 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},  | { 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},  | { 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},  | { 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},  | { 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} | { 31, 0}, { 31, 0}, { 31, 0}, { 31, 1}, { 30, 0}, { 30, 0}, { 30, 0}, { 30, 0} | ||||||
| }; | }; | ||||||
|  |  | ||||||
| uint16_t speed_lookuptable_slow[256][2] PROGMEM = {\ | 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},  | { 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},  | { 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},  | { 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},  | { 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},  | { 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},  | { 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},  | { 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},  | { 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},  | { 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},  | { 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},  | { 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},  | { 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},  | { 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},  | { 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},  | { 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},  | { 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},  | { 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},  | { 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},  | { 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},  | { 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},  | { 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},  | { 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},  | { 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},  | { 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},  | { 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},  | { 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},  | { 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},  | { 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},  | { 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},  | { 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},  | { 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} | { 992, 4}, { 988, 4}, { 984, 4}, { 980, 4}, { 976, 4}, { 972, 4}, { 968, 3}, { 965, 3} | ||||||
| }; | }; | ||||||
|  |  | ||||||
| #endif | #endif | ||||||
|   | |||||||
| @@ -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); | ||||||
|     timer -= (((unsigned short)pgm_read_word_near(table_address+2) * (unsigned char)(step_rate & 0x0007))>>3); |     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; |   return timer; | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -275,6 +275,8 @@ FORCE_INLINE void trapezoid_generator_reset() { | |||||||
|   OCR1A = acceleration_time; |   OCR1A = acceleration_time; | ||||||
|   OCR1A_nominal = calc_timer(current_block->nominal_rate); |   OCR1A_nominal = calc_timer(current_block->nominal_rate); | ||||||
|    |    | ||||||
|  |  | ||||||
|  |    | ||||||
| //    SERIAL_ECHO_START; | //    SERIAL_ECHO_START; | ||||||
| //    SERIAL_ECHOPGM("advance :"); | //    SERIAL_ECHOPGM("advance :"); | ||||||
| //    SERIAL_ECHO(current_block->advance/256.0); | //    SERIAL_ECHO(current_block->advance/256.0); | ||||||
| @@ -302,6 +304,14 @@ ISR(TIMER1_COMPA_vect) | |||||||
|       counter_z = counter_x; |       counter_z = counter_x; | ||||||
|       counter_e = counter_x; |       counter_e = counter_x; | ||||||
|       step_events_completed = 0; |       step_events_completed = 0; | ||||||
|  |       #ifdef Z_LATE_ENABLE  | ||||||
|  |         if(current_block->steps_z > 0) { | ||||||
|  |           enable_z(); | ||||||
|  |           OCR1A = 2000; //1ms wait | ||||||
|  |           return; | ||||||
|  |         } | ||||||
|  |       #endif | ||||||
|  |        | ||||||
| //      #ifdef ADVANCE | //      #ifdef ADVANCE | ||||||
| //      e_steps[current_block->active_extruder] = 0; | //      e_steps[current_block->active_extruder] = 0; | ||||||
| //      #endif | //      #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)  |     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 |       #ifdef ADVANCE | ||||||
|       counter_e += current_block->steps_e; |       counter_e += current_block->steps_e; | ||||||
|   | |||||||
| @@ -85,9 +85,9 @@ static unsigned long  previous_millis_bed_heater; | |||||||
|   static unsigned char soft_pwm[EXTRUDERS]; |   static unsigned char soft_pwm[EXTRUDERS]; | ||||||
|    |    | ||||||
| #ifdef WATCHPERIOD | #ifdef WATCHPERIOD | ||||||
|   static int watch_raw[EXTRUDERS] = { -1000 }; // the first value used for all |   int watch_raw[EXTRUDERS] = { -1000 }; // the first value used for all | ||||||
|   static int watch_oldtemp[3] = {0,0,0}; |   int watch_oldtemp[3] = {0,0,0}; | ||||||
|   static unsigned long watchmillis = 0; |   unsigned long watchmillis = 0; | ||||||
| #endif //WATCHPERIOD | #endif //WATCHPERIOD | ||||||
|  |  | ||||||
| // Init min and max temp with extreme values to prevent false errors during startup | // Init min and max temp with extreme values to prevent false errors during startup | ||||||
| @@ -218,7 +218,7 @@ void manage_heater() | |||||||
|    |    | ||||||
|   #ifdef WATCHPERIOD |   #ifdef WATCHPERIOD | ||||||
|     if(watchmillis && millis() - watchmillis > 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); |             setTargetHotend(0,active_extruder); | ||||||
|             LCD_MESSAGEPGM("Heating failed"); |             LCD_MESSAGEPGM("Heating failed"); | ||||||
|             SERIAL_ECHO_START; |             SERIAL_ECHO_START; | ||||||
| @@ -283,6 +283,12 @@ int temp2analog(int celsius, uint8_t e) { | |||||||
|       SERIAL_ERRORLNPGM(" - Invalid extruder number!"); |       SERIAL_ERRORLNPGM(" - Invalid extruder number!"); | ||||||
|       kill(); |       kill(); | ||||||
|   } |   } | ||||||
|  |   #ifdef HEATER_0_USES_MAX6675 | ||||||
|  |     if (e == 0) | ||||||
|  |     { | ||||||
|  |       return celsius * 4; | ||||||
|  |     } | ||||||
|  |   #endif | ||||||
|   if(heater_ttbl_map[e] != 0) |   if(heater_ttbl_map[e] != 0) | ||||||
|   { |   { | ||||||
|     int raw = 0; |     int raw = 0; | ||||||
| @@ -352,7 +358,14 @@ float analog2temp(int raw, uint8_t e) { | |||||||
|       SERIAL_ERROR((int)e); |       SERIAL_ERROR((int)e); | ||||||
|       SERIAL_ERRORLNPGM(" - Invalid extruder number !"); |       SERIAL_ERRORLNPGM(" - Invalid extruder number !"); | ||||||
|       kill(); |       kill(); | ||||||
|   } |   }  | ||||||
|  |   #ifdef HEATER_0_USES_MAX6675 | ||||||
|  |     if (e == 0) | ||||||
|  |     { | ||||||
|  |       return 0.25 * raw; | ||||||
|  |     } | ||||||
|  |   #endif | ||||||
|  |  | ||||||
|   if(heater_ttbl_map[e] != 0) |   if(heater_ttbl_map[e] != 0) | ||||||
|   { |   { | ||||||
|     float celsius = 0; |     float celsius = 0; | ||||||
| @@ -446,6 +459,22 @@ void tp_init() | |||||||
|     SET_OUTPUT(FAN_PIN); |     SET_OUTPUT(FAN_PIN); | ||||||
|   #endif   |   #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 |   // Set analog inputs | ||||||
|   ADCSRA = 1<<ADEN | 1<<ADSC | 1<<ADIF | 0x07; |   ADCSRA = 1<<ADEN | 1<<ADSC | 1<<ADIF | 0x07; | ||||||
|   DIDR0 = 0; |   DIDR0 = 0; | ||||||
| @@ -527,7 +556,7 @@ void setWatch() | |||||||
|   for (int e = 0; e < EXTRUDERS; e++) |   for (int e = 0; e < EXTRUDERS; e++) | ||||||
|   { |   { | ||||||
|     if(isHeatingHotend(e)) |     if(isHeatingHotend(e)) | ||||||
|     watch_oldtemp[TEMPSENSOR_HOTEND_0] = degHotend(0); |     watch_oldtemp[0] = degHotend(0); | ||||||
|     { |     { | ||||||
|       t = max(t,millis()); |       t = max(t,millis()); | ||||||
|       watch_raw[e] = current_raw[e]; |       watch_raw[e] = current_raw[e]; | ||||||
| @@ -595,6 +624,62 @@ void bed_max_temp_error(void) { | |||||||
|   SERIAL_ERRORLNPGM("Temperature heated bed switched off. MAXTEMP triggered !!"); |   SERIAL_ERRORLNPGM("Temperature heated bed switched off. MAXTEMP triggered !!"); | ||||||
| } | } | ||||||
|  |  | ||||||
|  | #define HEAT_INTERVAL 250 | ||||||
|  | #ifdef HEATER_0_USES_MAX6675 | ||||||
|  | long max6675_previous_millis = -HEAT_INTERVAL; | ||||||
|  | int max6675_temp = 2000; | ||||||
|  |  | ||||||
|  | int read_max6675() | ||||||
|  | { | ||||||
|  |   if (millis() - max6675_previous_millis < HEAT_INTERVAL)  | ||||||
|  |     return max6675_temp; | ||||||
|  |    | ||||||
|  |   max6675_previous_millis = millis(); | ||||||
|  |   max6675_temp = 0; | ||||||
|  |      | ||||||
|  |   #ifdef	PRR | ||||||
|  |     PRR &= ~(1<<PRSPI); | ||||||
|  |   #elif defined PRR0 | ||||||
|  |     PRR0 &= ~(1<<PRSPI); | ||||||
|  |   #endif | ||||||
|  |    | ||||||
|  |   SPCR = (1<<MSTR) | (1<<SPE) | (1<<SPR0); | ||||||
|  |    | ||||||
|  |   // enable TT_MAX6675 | ||||||
|  |   WRITE(MAX6675_SS, 0); | ||||||
|  |    | ||||||
|  |   // ensure 100ns delay - a bit extra is fine | ||||||
|  |   delay(1); | ||||||
|  |    | ||||||
|  |   // read MSB | ||||||
|  |   SPDR = 0; | ||||||
|  |   for (;(SPSR & (1<<SPIF)) == 0;); | ||||||
|  |   max6675_temp = SPDR; | ||||||
|  |   max6675_temp <<= 8; | ||||||
|  |    | ||||||
|  |   // read LSB | ||||||
|  |   SPDR = 0; | ||||||
|  |   for (;(SPSR & (1<<SPIF)) == 0;); | ||||||
|  |   max6675_temp |= SPDR; | ||||||
|  |    | ||||||
|  |   // disable TT_MAX6675 | ||||||
|  |   WRITE(MAX6675_SS, 1); | ||||||
|  |  | ||||||
|  |   if (max6675_temp & 4)  | ||||||
|  |   { | ||||||
|  |     // thermocouple open | ||||||
|  |     max6675_temp = 2000; | ||||||
|  |   } | ||||||
|  |   else  | ||||||
|  |   { | ||||||
|  |     max6675_temp = max6675_temp >> 3; | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   return max6675_temp; | ||||||
|  | } | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  |  | ||||||
| // Timer 0 is shared with millies | // Timer 0 is shared with millies | ||||||
| ISR(TIMER0_COMPB_vect) | ISR(TIMER0_COMPB_vect) | ||||||
| { | { | ||||||
| @@ -653,6 +738,9 @@ ISR(TIMER0_COMPB_vect) | |||||||
|       #if (TEMP_0_PIN > -1) |       #if (TEMP_0_PIN > -1) | ||||||
|         raw_temp_0_value += ADC; |         raw_temp_0_value += ADC; | ||||||
|       #endif |       #endif | ||||||
|  |       #ifdef HEATER_0_USES_MAX6675 // TODO remove the blocking | ||||||
|  |         raw_temp_0_value = read_max6675(); | ||||||
|  |       #endif | ||||||
|       temp_state = 2; |       temp_state = 2; | ||||||
|       break; |       break; | ||||||
|     case 2: // Prepare TEMP_BED |     case 2: // Prepare TEMP_BED | ||||||
| @@ -732,7 +820,7 @@ ISR(TIMER0_COMPB_vect) | |||||||
|     #endif |     #endif | ||||||
|  |  | ||||||
| #if EXTRUDERS > 1     | #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; |       current_raw[1] = raw_temp_1_value; | ||||||
|     #else |     #else | ||||||
|       current_raw[1] = 16383 - raw_temp_1_value; |       current_raw[1] = 16383 - raw_temp_1_value; | ||||||
|   | |||||||
| @@ -59,7 +59,7 @@ void lcdProgMemprint(const char *str) | |||||||
| //=============================functions         ============================ | //=============================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) | void lcd_status(const char* message) | ||||||
| { | { | ||||||
|   | |||||||
| @@ -1,6 +1,10 @@ | |||||||
| WARNING:  | 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 | Quick Information | ||||||
| =================== | =================== | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user