Merge remote-tracking branch 'upstream/Marlin_v1' into Marlin_v1
Conflicts: Marlin/Configuration.h
This commit is contained in:
		| @@ -1,109 +1,74 @@ | ||||
| #ifndef __CONFIGURATION_H | ||||
| #define __CONFIGURATION_H | ||||
|  | ||||
| // This configurtion file contains the basic settings. | ||||
| // Advanced settings can be found in Configuration_adv.h  | ||||
| // BASIC SETTINGS: select your board type, temperature sensor type, axis scaling, and endstop configuration | ||||
|  | ||||
| //User specified version info of THIS file to display in [Pronterface, etc] terminal window during startup. | ||||
| //Implementation of an idea by Prof Braino to inform user that any changes made | ||||
| //to THIS file by the user have been successfully uploaded into firmware. | ||||
| #define STRING_VERSION_CONFIG_H "2012-02-08j" //Personal revision number for changes to THIS file. | ||||
| #define STRING_CONFIG_H_AUTHOR "username" //Who made the changes. | ||||
|  | ||||
| // This determines the communication speed of the printer | ||||
| //#define BAUDRATE 250000 | ||||
| #define BAUDRATE 115200 | ||||
| //#define BAUDRATE 230400 | ||||
|  | ||||
| #define EXTRUDERS 1 | ||||
|  | ||||
| // Frequency limit | ||||
| // See nophead's blog for more info | ||||
| // Not working O | ||||
| //#define XY_FREQUENCY_LIMIT  15 | ||||
|  | ||||
| // Minimum planner junction speed. Sets the default minimum speed the planner plans for at the end | ||||
| // of the buffer and all stops. This should not be much greater than zero and should only be changed | ||||
| // if unwanted behavior is observed on a user's machine when running at very slow speeds. | ||||
| #define MINIMUM_PLANNER_SPEED 2.0 // (mm/sec) | ||||
|  | ||||
| // BASIC SETTINGS: select your board type, thermistor type, axis scaling, and endstop configuration | ||||
|  | ||||
| //// The following define selects which electronics board you have. Please choose the one that matches your setup | ||||
| // MEGA/RAMPS up to 1.2 = 3, | ||||
| // RAMPS 1.3 = 33 | ||||
| // Gen6 = 5, | ||||
| // Sanguinololu 1.2 and above = 62 | ||||
| // Gen7 = 77, | ||||
| // Ultimaker = 7, | ||||
| // Teensylu = 8 | ||||
| // Gen7 = 77, | ||||
| // Teensylu = 8, | ||||
| // Gen3+ =9 | ||||
| #define MOTHERBOARD 77 | ||||
|  | ||||
| //=========================================================================== | ||||
| //=============================Thermal Settings  ============================ | ||||
| //=========================================================================== | ||||
|  | ||||
| //// Thermistor settings: | ||||
| //// Temperature sensor settings: | ||||
| // -2 is thermocouple with MAX6675 (only for sensor 0) | ||||
| // -1 is thermocouple with AD595 | ||||
| // 0 is not used | ||||
| // 1 is 100k thermistor | ||||
| // 2 is 200k thermistor | ||||
| // 3 is mendel-parts thermistor | ||||
| // 4 is 10k thermistor | ||||
| // 4 is 10k thermistor !! do not use it for a hotend. It gives bad resolution at high temp. !! | ||||
| // 5 is ParCan supplied 104GT-2 100K | ||||
| // 6 is EPCOS 100k | ||||
| // 7 is 100k Honeywell thermistor 135-104LAG-J01 | ||||
|  | ||||
| #define THERMISTORHEATER_0 1 | ||||
| //#define THERMISTORHEATER_1 1 | ||||
| //#define THERMISTORHEATER_2 1 | ||||
|  | ||||
| #define HEATER_0_USES_THERMISTOR | ||||
| //#define HEATER_1_USES_THERMISTOR | ||||
| //#define HEATER_2_USES_THERMISTOR | ||||
| //#define HEATER_0_USES_AD595 | ||||
| //#define HEATER_1_USES_AD595 | ||||
| //#define HEATER_2_USES_AD595 | ||||
|  | ||||
| // Select one of these only to define how the bed temp is read. | ||||
| #define THERMISTORBED 1 | ||||
| #define BED_USES_THERMISTOR | ||||
| //#define BED_LIMIT_SWITCHING | ||||
| #ifdef BED_LIMIT_SWITCHING | ||||
| #define BED_HYSTERESIS 2 //only disable heating if T>target+BED_HYSTERESIS and enable heating if T>target-BED_HYSTERESIS | ||||
| #endif | ||||
| //#define BED_USES_AD595 | ||||
|  | ||||
| #define BED_CHECK_INTERVAL 5000 //ms | ||||
|  | ||||
| //// Heating sanity check: | ||||
| // This waits for the watchperiod in milliseconds whenever an M104 or M109 increases the target temperature | ||||
| // If the temperature has not increased at the end of that period, the target temperature is set to zero.  | ||||
| // It can be reset with another M104/M109 | ||||
| //#define WATCHPERIOD 20000 //20 seconds | ||||
| #define TEMP_SENSOR_0 6 | ||||
| #define TEMP_SENSOR_1 0 | ||||
| #define TEMP_SENSOR_2 0 | ||||
| #define TEMP_SENSOR_BED 1 | ||||
|  | ||||
| // Actual temperature must be close to target for this long before M109 returns success | ||||
| #define TEMP_RESIDENCY_TIME 30  // (seconds) | ||||
| #define TEMP_HYSTERESIS 3       // (C°) range of +/- temperatures considered "close" to the target one | ||||
|  | ||||
| //// The minimal temperature defines the temperature below which the heater will not be enabled | ||||
| //#define HEATER_0_MINTEMP 5 | ||||
| //#define HEATER_1_MINTEMP 5 | ||||
| //#define HEATER_2_MINTEMP 5 | ||||
| //#define BED_MINTEMP 5 | ||||
| #define TEMP_HYSTERESIS 3       // (C<EFBFBD>) range of +/- temperatures considered "close" to the target one | ||||
|  | ||||
| // The minimal temperature defines the temperature below which the heater will not be enabled It is used | ||||
| // to check that the wiring to the thermistor is not broken.  | ||||
| // Otherwise this would lead to the heater being powered on all the time. | ||||
| #define HEATER_0_MINTEMP 5 | ||||
| #define HEATER_1_MINTEMP 5 | ||||
| #define HEATER_2_MINTEMP 5 | ||||
| #define BED_MINTEMP 5 | ||||
|  | ||||
| // When temperature exceeds max temp, your heater will be switched off. | ||||
| // This feature exists to protect your hotend from overheating accidentally, but *NOT* from thermistor short/failure! | ||||
| // You should use MINTEMP for thermistor short/failure protection. | ||||
| #define HEATER_0_MAXTEMP 275 | ||||
| //#define HEATER_1_MAXTEMP 275 | ||||
| //#define HEATER_2_MAXTEMP 275 | ||||
| //#define BED_MAXTEMP 150 | ||||
|  | ||||
|  | ||||
| // Wait for Cooldown | ||||
| // This defines if the M109 call should not block if it is cooling down. | ||||
| // example: From a current temp of 220, you set M109 S200.  | ||||
| // if CooldownNoWait is defined M109 will not wait for the cooldown to finish | ||||
| #define CooldownNoWait true | ||||
|  | ||||
| // Heating is finished if a temperature close to this degree shift is reached | ||||
| #define HEATING_EARLY_FINISH_DEG_OFFSET 1 //Degree | ||||
| #define HEATER_1_MAXTEMP 275 | ||||
| #define HEATER_2_MAXTEMP 275 | ||||
| #define BED_MAXTEMP 150 | ||||
|  | ||||
| // PID settings: | ||||
| // Uncomment the following line to enable PID support. | ||||
| // Comment the following line to disable PID and enable bang-bang. | ||||
| #define PIDTEMP | ||||
| #define PID_MAX 255 // limits current to nozzle; 255=full current | ||||
| #ifdef PIDTEMP | ||||
| @@ -113,28 +78,8 @@ | ||||
|   #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 | ||||
| // If you are using a preconfigured hotend then you can use one of the value sets by uncommenting it | ||||
| // Ultimaker | ||||
|     #define  DEFAULT_Kp  22.2 | ||||
|     #define  DEFAULT_Ki (1.25*PID_dT)   | ||||
|     #define  DEFAULT_Kd (99/PID_dT)   | ||||
| @@ -148,38 +93,18 @@ | ||||
| //    #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 | ||||
|  | ||||
| //this prevents dangerous Extruder moves, i.e. if the temperature is under the limit | ||||
| //can be software-disabled for whatever purposes by | ||||
| #define PREVENT_DANGEROUS_EXTRUDE | ||||
| #define EXTRUDE_MINTEMP 170 | ||||
| #define EXTRUDE_MAXLENGTH (X_MAX_LENGTH+Y_MAX_LENGTH) //prevent extrusion of very large distances. | ||||
|  | ||||
| //=========================================================================== | ||||
| //=============================Mechanical Settings=========================== | ||||
| //=========================================================================== | ||||
|  | ||||
|  | ||||
| // Endstop Settings | ||||
| #define ENDSTOPPULLUPS // Comment this out (using // at the start of the line) to disable the endstop pullup resistors | ||||
|  | ||||
| @@ -187,9 +112,6 @@ | ||||
| const bool X_ENDSTOPS_INVERTING = false; // set to true to invert the logic of the endstops.  | ||||
| const bool Y_ENDSTOPS_INVERTING = false; // set to true to invert the logic of the endstops.  | ||||
| const bool Z_ENDSTOPS_INVERTING = false; // set to true to invert the logic of the endstops.  | ||||
| // For optos H21LOB set to true, for Mendel-Parts newer optos TCST2103 set to false | ||||
|  | ||||
| #define ENDSTOPS_ONLY_FOR_HOMING // If defined the endstops will only be used for homing | ||||
|  | ||||
| // For Inverting Stepper Enable Pins (Active Low) use 0, Non Inverting (Active High) use 1 | ||||
| #define X_ENABLE_ON 0 | ||||
| @@ -203,20 +125,14 @@ const bool Z_ENDSTOPS_INVERTING = false; // set to true to invert the logic of t | ||||
| #define DISABLE_Z false | ||||
| #define DISABLE_E false // For all extruders | ||||
|  | ||||
| // Inverting axis direction | ||||
| //#define INVERT_X_DIR false    // for Mendel set to false, for Orca set to true | ||||
| //#define INVERT_Y_DIR true   // for Mendel set to true, for Orca set to false | ||||
| //#define INVERT_Z_DIR false    // for Mendel set to false, for Orca set to true | ||||
| //#define INVERT_E*_DIR true   // for direct drive extruder v9 set to true, for geared extruder set to false, used for all extruders | ||||
|  | ||||
| #define INVERT_X_DIR false    // for Mendel set to false, for Orca set to true | ||||
| #define INVERT_Y_DIR false    // for Mendel set to true, for Orca set to false | ||||
| #define INVERT_Z_DIR false     // for Mendel set to false, for Orca set to true | ||||
| #define INVERT_Z_DIR true     // for Mendel set to false, for Orca set to true | ||||
| #define INVERT_E0_DIR false   // for direct drive extruder v9 set to true, for geared extruder set to false | ||||
| #define INVERT_E1_DIR false    // for direct drive extruder v9 set to true, for geared extruder set to false | ||||
| #define INVERT_E2_DIR false   // for direct drive extruder v9 set to true, for geared extruder set to false | ||||
|  | ||||
| //// ENDSTOP SETTINGS: | ||||
| // ENDSTOP SETTINGS: | ||||
| // Sets direction of endstops when homing; 1=MAX, -1=MIN | ||||
| #define X_HOME_DIR -1 | ||||
| #define Y_HOME_DIR -1 | ||||
| @@ -232,44 +148,19 @@ const bool Z_ENDSTOPS_INVERTING = false; // set to true to invert the logic of t | ||||
| #define NUM_AXIS 4 // The axis order in all axis related arrays is X, Y, Z, E | ||||
| #define HOMING_FEEDRATE {50*60, 50*60, 4*60, 0}  // set the homing speeds (mm/min) | ||||
|  | ||||
| //homing hits the endstop, then retracts by this distance, before it tries to slowly bump again: | ||||
| #define X_HOME_RETRACT_MM 5  | ||||
| #define Y_HOME_RETRACT_MM 5  | ||||
| #define Z_HOME_RETRACT_MM 1  | ||||
| #define QUICK_HOME  //if this is defined, if both x and y are to be homed, a diagonal move will be performed initially. | ||||
|  | ||||
| #define AXIS_RELATIVE_MODES {false, false, false, false} | ||||
|  | ||||
| #define MAX_STEP_FREQUENCY 40000 // Max step frequency for Ultimaker (5000 pps / half step) | ||||
|  | ||||
| // default settings  | ||||
|  | ||||
| #define DEFAULT_AXIS_STEPS_PER_UNIT   {78.7402,78.7402,200*8/3,760*1.1}                    // default steps per unit for ultimaker  | ||||
| //#define DEFAULT_AXIS_STEPS_PER_UNIT   {40, 40, 3333.92, 360} //sells mendel with v9 extruder | ||||
| //#define DEFAULT_AXIS_STEPS_PER_UNIT   {80.3232, 80.8900, 2284.7651, 757.2218} // SAE Prusa w/ Wade extruder | ||||
| #define DEFAULT_AXIS_STEPS_PER_UNIT   {80,80,2560,760*1.1}                    // default steps per unit for ultimaker  | ||||
| #define DEFAULT_MAX_FEEDRATE          {500, 500, 5, 45}    // (mm/sec)     | ||||
| #define DEFAULT_MAX_ACCELERATION      {9000,9000,100,10000}    // X, Y, Z, E maximum start speed for accelerated moves. E default values are good for skeinforge 40+, for older versions raise them a lot. | ||||
|  | ||||
| #define DEFAULT_ACCELERATION          3000    // X, Y, Z and E max acceleration in mm/s^2 for printing moves  | ||||
| #define DEFAULT_RETRACT_ACCELERATION  3000   // X, Y, Z and E max acceleration in mm/s^2 for r retracts | ||||
|  | ||||
| #define DEFAULT_MINIMUMFEEDRATE       0.0     // minimum feedrate | ||||
| #define DEFAULT_MINTRAVELFEEDRATE     0.0 | ||||
|  | ||||
| // minimum time in microseconds that a movement needs to take if the buffer is emptied.   Increase this number if you see blobs while | ||||
| //printing high speed & high detail.  It will slowdown on the detailed stuff. | ||||
| #define DEFAULT_MINSEGMENTTIME        20000   // Obsolete delete this | ||||
| //  | ||||
| #define DEFAULT_XYJERK                20.0    // (mm/sec) | ||||
| #define DEFAULT_ZJERK                 0.4     // (mm/sec) | ||||
|  | ||||
| // If defined the movements slow down when the look ahead buffer is only half full | ||||
| #define SLOWDOWN | ||||
|  | ||||
| //default stepper release if idle | ||||
| #define DEFAULT_STEPPER_DEACTIVE_TIME 60 | ||||
| #define DEFAULT_STEPPER_DEACTIVE_COMMAND "M84 X Y E"  //z stays  powered | ||||
|  | ||||
|  | ||||
| //=========================================================================== | ||||
| //=============================Additional Features=========================== | ||||
| //=========================================================================== | ||||
| @@ -285,42 +176,9 @@ const bool Z_ENDSTOPS_INVERTING = false; // set to true to invert the logic of t | ||||
| // please keep turned on if you can. | ||||
| #define EEPROM_CHITCHAT | ||||
|  | ||||
|  | ||||
| // The hardware watchdog should halt the Microcontroller, in case the firmware gets stuck somewhere. However: | ||||
| // the Watchdog is not working well, so please only enable this for testing | ||||
| // this enables the watchdog interrupt. | ||||
| //#define USE_WATCHDOG | ||||
| //#ifdef USE_WATCHDOG | ||||
| // you cannot reboot on a mega2560 due to a bug in he bootloader. Hence, you have to reset manually, and this is done hereby: | ||||
| //#define RESET_MANUAL | ||||
| //#define WATCHDOG_TIMEOUT 4  //seconds | ||||
| //#endif | ||||
|  | ||||
| // extruder advance constant (s2/mm3) | ||||
| // | ||||
| // advance (steps) = STEPS_PER_CUBIC_MM_E * EXTUDER_ADVANCE_K * cubic mm per second ^ 2 | ||||
| // | ||||
| // hooke's law says:		force = k * distance | ||||
| // bernoulli's priniciple says:	v ^ 2 / 2 + g . h + pressure / density = constant | ||||
| // so: v ^ 2 is proportional to number of steps we advance the extruder | ||||
| //#define ADVANCE | ||||
|  | ||||
| #ifdef ADVANCE | ||||
| #define EXTRUDER_ADVANCE_K .0 | ||||
|  | ||||
| #define D_FILAMENT 2.85 | ||||
| #define STEPS_MM_E 836 | ||||
| #define EXTRUTION_AREA (0.25 * D_FILAMENT * D_FILAMENT * 3.14159) | ||||
| #define STEPS_PER_CUBIC_MM_E (axis_steps_per_unit[E_AXIS]/ EXTRUTION_AREA) | ||||
|  | ||||
| #endif // ADVANCE | ||||
|  | ||||
|  | ||||
| //LCD and SD support | ||||
| //#define ULTRA_LCD  //general lcd support, also 16x2 | ||||
| //#define SDSUPPORT // Enable SD Card Support in Hardware Console | ||||
| #define SD_FINISHED_STEPPERRELEASE true  //if sd support and the file is finished: disable steppers? | ||||
| #define SD_FINISHED_RELEASECOMMAND "M84 X Y E" // no z because of layer shift. | ||||
| #define SDSUPPORT // Enable SD Card Support in Hardware Console | ||||
|  | ||||
| #define ULTIPANEL | ||||
| #ifdef ULTIPANEL | ||||
| @@ -336,62 +194,11 @@ const bool Z_ENDSTOPS_INVERTING = false; // set to true to invert the logic of t | ||||
|   #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 "Configuration_adv.h" | ||||
| #include "thermistortables.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 | ||||
							
								
								
									
										356
									
								
								Marlin/Makefile
									
									
									
									
									
								
							
							
						
						
									
										356
									
								
								Marlin/Makefile
									
									
									
									
									
								
							| @@ -1,76 +1,70 @@ | ||||
| # Sprinter Arduino Project Makefile | ||||
| #  | ||||
| # Makefile Based on: | ||||
| # Arduino 0011 Makefile | ||||
| # Arduino adaptation by mellis, eighthave, oli.keller | ||||
| # | ||||
| # This has been tested with Arduino 0022. | ||||
| #  | ||||
| # This makefile allows you to build sketches from the command line | ||||
| # without the Arduino environment (or Java). | ||||
| # | ||||
| # Detailed instructions for using the makefile: | ||||
| # | ||||
| #  1. Modify the line containg "INSTALL_DIR" to point to the directory that | ||||
| #     contains the Arduino installation (for example, under Mac OS X, this | ||||
| #     might be /Applications/arduino-0012). | ||||
| # | ||||
| #  2. Modify the line containing "PORT" to refer to the filename | ||||
| #     representing the USB or serial connection to your Arduino board | ||||
| #     (e.g. PORT = /dev/tty.USB0).  If the exact name of this file | ||||
| #     changes, you can use * as a wildcard (e.g. PORT = /dev/tty.usb*). | ||||
| # | ||||
| #  3. Set the line containing "MCU" to match your board's processor.  | ||||
| #     Older one's are atmega8 based, newer ones like Arduino Mini, Bluetooth | ||||
| #     or Diecimila have the atmega168.  If you're using a LilyPad Arduino, | ||||
| #     change F_CPU to 8000000. | ||||
| # | ||||
| #  4. Type "make" and press enter to compile/verify your program. | ||||
| # | ||||
| #  5. Type "make upload", reset your Arduino board, and press enter to | ||||
| #     upload your program to the Arduino board. | ||||
| # | ||||
| # $Id$ | ||||
|  | ||||
| #For "old" Arduino Mega | ||||
| MCU = atmega1280 | ||||
| #For Arduino Mega2560 | ||||
| #MCU = atmega2560 | ||||
| #For Sanguinololu | ||||
| #MCU = atmega644p  | ||||
|  | ||||
| #Arduino install directory | ||||
| INSTALL_DIR = ../../arduino-0022/ | ||||
|  | ||||
| F_CPU = 16000000 | ||||
|  | ||||
| UPLOAD_RATE = 115200 | ||||
| AVRDUDE_PROGRAMMER = arduino | ||||
| PORT = /dev/arduino | ||||
|  | ||||
| TARGET = $(notdir $(CURDIR)) | ||||
| # CHANGE BELOW: | ||||
| #~ INSTALL_DIR = /Applications/Arduino.app/Contents/Resources/Java | ||||
| INSTALL_DIR = /home/bkubicek/software/arduino-0023 | ||||
| #~ PORT = /dev/cu.usbserial* | ||||
| PORT = /dev/ttyACM0 | ||||
|  | ||||
| # Get these values from: | ||||
| #     $(INSTALL_DIR)/hardware/boards.txt | ||||
| #     (arduino-0022/hardware/arduino/boards.txt) | ||||
| # The values below are for the "Arduino Duemilanove or Nano w/ ATmega328" | ||||
| # now for "Arduino Mega 2560" | ||||
| UPLOAD_SPEED = 115200 | ||||
| UPLOAD_PROTOCOL = stk500v2 | ||||
| BUILD_MCU = atmega2560 | ||||
| BUILD_F_CPU = 16000000L | ||||
| TERM=bash | ||||
|  | ||||
| # getting undefined reference to `__cxa_pure_virtual' | ||||
| #~ [http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1254180518 Arduino Forum - Makefile] | ||||
| #~ http://www.arduino.cc/playground/OpenBSD/CLI | ||||
| #~ [http://arduino.cc/forum/index.php?topic=52041.0 A "simple" makefile for Arduino] | ||||
| #~ [http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1275488191 Arduino Forum - Configuring avr-gcc options in arduino IDE] | ||||
| # found in /usr/lib/gcc/avr/4.3.5/cc1plus; fixed with -Wl,--gc-section | ||||
|  | ||||
| ############################################################################ | ||||
| # Below here nothing should be changed... | ||||
|  | ||||
| LINKORDER=\ | ||||
| applet/Marlin.cpp.o \ | ||||
| applet/EEPROM.o  \ | ||||
| applet/main.o \ | ||||
| applet/MarlinSerial.o \ | ||||
| applet/motion_control.o\ | ||||
| applet/pins_arduino.o\ | ||||
| applet/planner.o\ | ||||
| applet/Print.o\ | ||||
| applet/Sd2Card.o\ | ||||
| applet/SdBaseFile.o\ | ||||
| applet/SdFatUtil.o\ | ||||
| applet/SdFile.o\ | ||||
| applet/SdVolume.o\ | ||||
| applet/stepper.o\ | ||||
| applet/temperature.o\ | ||||
| applet/WInterrupts.o\ | ||||
| applet/wiring_analog.o\ | ||||
| applet/wiring_digital.o\ | ||||
| applet/wiring.o\ | ||||
| applet/wiring_pulse.o\ | ||||
| applet/wiring_shift.o\ | ||||
| applet/WMath.o | ||||
|  | ||||
| PDES=Marlin.pde  ultralcd.pde  watchdog.pde cardreader.pde   | ||||
| ARDUINO = $(INSTALL_DIR)/hardware/arduino/cores/arduino | ||||
| # | ||||
| #~ AVR_TOOLS_PATH = $(INSTALL_DIR)/hardware/tools/avr/bin | ||||
| # in Ubuntu, avr-gcc is installed separate; | ||||
| # only avrdude comes with the IDE | ||||
| AVR_TOOLS_PATH = /usr/bin | ||||
| AVR_DUDE_PATH = $(INSTALL_DIR)/hardware/tools | ||||
| # | ||||
| AVR_TOOLS_PATH =  | ||||
| SRC =  $(ARDUINO)/pins_arduino.c $(ARDUINO)/wiring.c \ | ||||
| 	$(ARDUINO)/wiring_analog.c $(ARDUINO)/wiring_digital.c \ | ||||
| 	$(ARDUINO)/wiring_pulse.c \ | ||||
| 	$(ARDUINO)/wiring_shift.c $(ARDUINO)/WInterrupts.c | ||||
| # 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 | ||||
| CXXSRC = $(ARDUINO)/WMath.cpp $(ARDUINO)/WString.cpp\ | ||||
| 	$(ARDUINO)/Print.cpp Marlin.cpp MarlinSerial.cpp Sd2Card.cpp SdBaseFile.cpp SdFatUtil.cpp SdFile.cpp SdVolume.cpp motion_control.cpp planner.cpp stepper.cpp temperature.cpp cardreader.cpp | ||||
| FORMAT = ihex | ||||
|  | ||||
|  | ||||
| # Name of this Makefile (used for "make depend"). | ||||
| MAKEFILE = Makefile | ||||
|  | ||||
| @@ -79,17 +73,14 @@ MAKEFILE = Makefile | ||||
| # AVR (extended) COFF requires stabs, plus an avr-objcopy run. | ||||
| DEBUG = stabs | ||||
|  | ||||
| OPT = 2 | ||||
| OPT = s | ||||
|  | ||||
| # Place -D or -U options here | ||||
| #~ CDEFS = -DBUILD_F_CPU=$(BUILD_F_CPU) | ||||
| #~ CXXDEFS = -DBUILD_F_CPU=$(BUILD_F_CPU) | ||||
| # now called DF_CPU | ||||
| CDEFS = -DF_CPU=$(BUILD_F_CPU) -DARDUINO=23 | ||||
| CXXDEFS = -DF_CPU=$(BUILD_F_CPU) -DARDUINO=23 | ||||
| CDEFS = -DF_CPU=$(F_CPU) | ||||
| CXXDEFS = -DF_CPU=$(F_CPU) | ||||
|  | ||||
| # Place -I options here | ||||
| CINCS = -I$(ARDUINO) -I$(INSTALL_DIR)/libraries/LiquidCrystal/ -I$(INSTALL_DIR)/libraries/EEPROM/ | ||||
| CINCS = -I$(ARDUINO) | ||||
| CXXINCS = -I$(ARDUINO) | ||||
|  | ||||
| # Compiler flag to set the C Standard level. | ||||
| @@ -97,114 +88,56 @@ CXXINCS = -I$(ARDUINO) | ||||
| # gnu89 - c89 plus GCC extensions | ||||
| # c99   - ISO C99 standard (not yet fully implemented) | ||||
| # gnu99 - c99 plus GCC extensions | ||||
| CSTANDARD = -std=gnu99 | ||||
| #CSTANDARD = -std=gnu99 | ||||
| CDEBUG = -g$(DEBUG) | ||||
| # note that typically, IDE 0022 uses -w to suppress warnings (both in cpp and c)! | ||||
| CWARN = -Wall | ||||
| #~ CWARN = -w | ||||
| #  "-Wstrict-prototypes" is valid for Ada/C/ObjC but not for C++: | ||||
| CCWARN = -Wstrict-prototypes | ||||
| CTUNING = -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums | ||||
| CWARN = -Wall -Wstrict-prototypes | ||||
| CTUNING = -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -w -ffunction-sections -fdata-sections -DARDUINO=22 | ||||
| #CEXTRA = -Wa,-adhlns=$(<:.c=.lst) | ||||
|  | ||||
| # to eliminate pins_ardiuno warnings: | ||||
| # http://arduino.cc/pipermail/developers_arduino.cc/2010-December/004005.html | ||||
|  | ||||
| # [http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1254180518 Arduino Forum - Makefile] | ||||
| #~ For building the objects files "-ffunction-sections -fdata-sections" was missing | ||||
| #~ and the final avr-gcc call needs "-Wl,--gc-section". | ||||
| CXSECTF = -fno-exceptions -ffunction-sections -fdata-sections | ||||
| CFINALF = -Wl,--gc-section | ||||
|  | ||||
| CFLAGS = $(CDEBUG) $(CDEFS) $(CINCS) -O$(OPT) $(CWARN) $(CCWARN) $(CSTANDARD) $(CEXTRA) | ||||
| # added CWARN also to .cpp | ||||
| CXXFLAGS = $(CDEFS) $(CINCS) -O$(OPT) $(CWARN) $(CXSECTF) | ||||
| CFLAGS = $(CDEBUG) $(CDEFS) $(CINCS) -O$(OPT) $(CWARN) $(CEXTRA) $(CTUNING) | ||||
| CXXFLAGS =         $(CDEFS) $(CINCS) -O$(OPT) -Wall    $(CEXTRA) $(CTUNING) | ||||
| #ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs  | ||||
| LDFLAGS = -lm | ||||
|  | ||||
|  | ||||
| # Programming support using avrdude. Settings and variables. | ||||
| AVRDUDE_PORT = $(PORT) | ||||
| AVRDUDE_WRITE_FLASH = -U flash:w:applet/$(TARGET).hex | ||||
| AVRDUDE_FLAGS = -V -F \ | ||||
|     -p $(BUILD_MCU) -P $(AVRDUDE_PORT) -c $(UPLOAD_PROTOCOL) \ | ||||
|     -b $(UPLOAD_SPEED) -C $(INSTALL_DIR)/hardware/tools/avrdude.conf | ||||
| #    -b $(UPLOAD_SPEED) -C $(INSTALL_DIR)/hardware/tools/avr/etc/avrdude.conf | ||||
| AVRDUDE_WRITE_FLASH = -U flash:w:applet/$(TARGET).hex:i | ||||
| AVRDUDE_FLAGS = -D -C $(INSTALL_DIR)/hardware/tools/avrdude.conf \ | ||||
| 	-p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER) \ | ||||
| 	-b $(UPLOAD_RATE) | ||||
|  | ||||
| # Program settings | ||||
| CC = $(AVR_TOOLS_PATH)/avr-gcc | ||||
| CXX = $(AVR_TOOLS_PATH)/avr-g++ | ||||
| OBJCOPY = $(AVR_TOOLS_PATH)/avr-objcopy | ||||
| OBJDUMP = $(AVR_TOOLS_PATH)/avr-objdump | ||||
| AR = $(AVR_TOOLS_PATH)/avr-ar | ||||
| SIZE = $(AVR_TOOLS_PATH)/avr-size | ||||
| NM = $(AVR_TOOLS_PATH)/avr-nm | ||||
| #~ AVRDUDE = $(AVR_TOOLS_PATH)/avrdude | ||||
| AVRDUDE = $(AVR_DUDE_PATH)/avrdude | ||||
| CC = $(AVR_TOOLS_PATH)avr-gcc | ||||
| CXX = $(AVR_TOOLS_PATH)avr-g++ | ||||
| OBJCOPY = $(AVR_TOOLS_PATH)avr-objcopy | ||||
| OBJDUMP = $(AVR_TOOLS_PATH)avr-objdump | ||||
| AR  = $(AVR_TOOLS_PATH)avr-ar | ||||
| SIZE = $(AVR_TOOLS_PATH)avr-size | ||||
| NM = $(AVR_TOOLS_PATH)avr-nm | ||||
| AVRDUDE = avrdude | ||||
| REMOVE = rm -f | ||||
| MV = mv -f | ||||
|  | ||||
| # Define all object files. | ||||
| # NOTE: obj files will be created in respective src directories (libraries or $(INSTALL_DIR)); | ||||
| #  make clean deletes them fine | ||||
| # note that srcs are in libraries or other directories; | ||||
| # $(CXXSRC:.cpp=.o) will cause obj files to be in same loc as src files | ||||
| #~ OBJ = $(SRC:.c=.o) $(CXXSRC:.cpp=.o) $(ASRC:.S=.o) | ||||
| # to change the output directory for object files; | ||||
| # must change the obj list here! | ||||
| # and then, match to corresponding rule somehow? | ||||
| # or leave this - and parse in rule (auth automatic variable $(@F))? | ||||
| # "Suffix Replacement" | ||||
| CXXSRC+=MarlinSerial.cpp    SdBaseFile.cpp  stepper.cpp motion_control.cpp SdFatUtil.cpp temperature.cpp planner.cpp SdFile.cpp Sd2Card.cpp SdVolume.cpp | ||||
| OBJ = $(SRC:.c=.o) $(CXXSRC:.cpp=.o) $(ASRC:.S=.o)  | ||||
|  | ||||
| # added - OBJ list, transformed into applet/ | ||||
| OBJT = $(addprefix applet/,$(notdir $(OBJ))) | ||||
| ALLSRC = $(SRC) $(CXXSRC) $(ASRC) | ||||
|  | ||||
| # Define all listing files. | ||||
| LST = $(ASRC:.S=.lst) $(CXXSRC:.cpp=.lst) $(SRC:.c=.lst) | ||||
|  | ||||
| # Combine all necessary flags and optional flags. | ||||
| # Add target processor to flags. | ||||
| ALL_CFLAGS = -mmcu=$(BUILD_MCU) -I. $(CFLAGS) | ||||
| ALL_CXXFLAGS = -mmcu=$(BUILD_MCU) -I. $(CXXFLAGS) | ||||
| ALL_ASFLAGS = -mmcu=$(BUILD_MCU) -I. -x assembler-with-cpp $(ASFLAGS) | ||||
| ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) | ||||
| ALL_CXXFLAGS = -mmcu=$(MCU) -I. $(CXXFLAGS) | ||||
| 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. | ||||
| all: applet_files build sizeafter | ||||
| all: build sizeafter | ||||
|  | ||||
| build: elf hex  | ||||
|  | ||||
| applet_files: $(TARGET).pde | ||||
| 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. | ||||
| @@ -212,18 +145,11 @@ applet_files: $(TARGET).pde | ||||
| # 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 | ||||
|  | ||||
| 	@echo "  WR    applet/$(TARGET).cpp" | ||||
| 	@test -d applet || mkdir applet | ||||
| 	@echo '#include "WProgram.h"' > applet/$(TARGET).cpp | ||||
| 	@cat $(TARGET).pde >> applet/$(TARGET).cpp | ||||
| 	@cat $(ARDUINO)/main.cpp >> applet/$(TARGET).cpp | ||||
|  | ||||
| elf: applet/$(TARGET).elf | ||||
| hex: applet/$(TARGET).hex | ||||
| @@ -233,7 +159,10 @@ sym: applet/$(TARGET).sym | ||||
|  | ||||
| # Program the device.   | ||||
| upload: applet/$(TARGET).hex | ||||
| 	stty hup < $(PORT); true | ||||
| 	$(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) | ||||
| 	stty -hup < $(PORT); true | ||||
|  | ||||
|  | ||||
| 	# Display size of file. | ||||
| HEXSIZE = $(SIZE) --target=$(FORMAT) applet/$(TARGET).hex | ||||
| @@ -242,7 +171,8 @@ sizebefore: | ||||
| 	@if [ -f applet/$(TARGET).elf ]; then echo; echo $(MSG_SIZE_BEFORE); $(HEXSIZE); echo; fi | ||||
|  | ||||
| sizeafter: | ||||
| 	@if [ -f applet/$(TARGET).elf ]; then echo; echo $(MSG_SIZE_AFTER); $(HEXSIZE); echo; fi | ||||
| 	@if [ -f applet/$(TARGET).elf ]; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); echo; fi | ||||
|  | ||||
|  | ||||
| # Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB. | ||||
| COFFCONVERT=$(OBJCOPY) --debugging \ | ||||
| @@ -251,16 +181,21 @@ COFFCONVERT=$(OBJCOPY) --debugging \ | ||||
| 	--change-section-address .noinit-0x800000 \ | ||||
| 	--change-section-address .eeprom-0x810000  | ||||
|  | ||||
|  | ||||
| coff: applet/$(TARGET).elf | ||||
| 	$(COFFCONVERT) -O coff-avr applet/$(TARGET).elf $(TARGET).cof | ||||
|  | ||||
|  | ||||
| extcoff: $(TARGET).elf | ||||
| 	$(COFFCONVERT) -O coff-ext-avr applet/$(TARGET).elf $(TARGET).cof | ||||
|  | ||||
|  | ||||
| .SUFFIXES: .elf .hex .eep .lss .sym | ||||
| .PRECIOUS: .o | ||||
|  | ||||
| .elf.hex: | ||||
| 	$(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@ | ||||
| 	@echo "  COPY  $@" | ||||
| 	@$(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@ | ||||
|  | ||||
| .elf.eep: | ||||
| 	-$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \ | ||||
| @@ -275,78 +210,39 @@ extcoff: $(TARGET).elf | ||||
| 	$(NM) -n $< > $@ | ||||
|  | ||||
| 	# Link: create ELF output file from library. | ||||
| # NOTE: applet/$(TARGET).cpp.o MUST BE BEFORE applet/core.a | ||||
| #  in the dependency list, so its rule runs first! | ||||
| applet/$(TARGET).elf: $(TARGET).pde applet/$(TARGET).cpp.o applet/core.a | ||||
| #	$(CC) $(ALL_CFLAGS) -o $@ applet/$(TARGET).cpp -L. applet/core.a $(LDFLAGS) | ||||
| # changed as in IDE v0022: link cpp obj files | ||||
| 	@echo $$(tput bold)$$(tput setaf 2) $(CC) $$(tput sgr0) $(ALL_CFLAGS) $(CFINALF) -o $@ applet/$(TARGET).cpp.o $(CXXOBJ) -L. applet/core.a $(LDFLAGS) | ||||
| 	echo ${OBJT} | ||||
| 	#$(CC) $(ALL_CFLAGS) $(CFINALF) -o $@  applet/$(TARGET).cpp.o  -L. applet/core.a $(LDFLAGS) | ||||
| 	$(CC) $(ALL_CFLAGS) $(CFINALF) -o $@ ${LINKORDER}   $(LDFLAGS) | ||||
| 	#@$(CC) $(ALL_CFLAGS) $(CFINALF) -o $@ applet/*.o applet/$(TARGET).cpp.o $(CXXOBJ) -L. applet/core.a $(LDFLAGS) | ||||
| applet/$(TARGET).elf: applet/$(TARGET).cpp applet/core.a Configuration.h | ||||
| 	@echo "  CXX   $@" | ||||
| 	@$(CC) $(ALL_CXXFLAGS) -Wl,--gc-sections -o $@ applet/$(TARGET).cpp -L. applet/core.a $(LDFLAGS) | ||||
|  | ||||
| # added: cpp.o depends on cpp (and .pde which generates it) | ||||
| # $< "first item in the dependencies list"; $@ "left side of the :"; $^ "right side of the :" | ||||
| # http://www.cs.colby.edu/maxwell/courses/tutorials/maketutor/ | ||||
| applet/$(TARGET).cpp.o: applet/$(TARGET).cpp | ||||
| 	@echo $$(tput bold) $(CXX) $$(tput sgr0) -c $(ALL_CXXFLAGS) $< -o $@ | ||||
| applet/core.a: $(OBJ) Configuration.h | ||||
| 	@for i in $(OBJ); do echo "  AR    $$i"; $(AR) rcs applet/core.a $$i; done | ||||
|  | ||||
| %.o: %.c Configuration.h $(MAKEFILE) | ||||
| 	@echo "  CC    $@" | ||||
| 	@$(CC) -c $(ALL_CFLAGS) $< -o $@ | ||||
|  | ||||
| %.o: %.cpp Configuration.h $(MAKEFILE) | ||||
| 	@echo "  CXX   $@" | ||||
| 	@$(CXX) -c $(ALL_CXXFLAGS) $< -o $@ | ||||
|  | ||||
| #~ 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. | ||||
| clean: | ||||
| 	$(REMOVE) applet/$(TARGET).hex applet/$(TARGET).eep applet/$(TARGET).cof applet/$(TARGET).elf \ | ||||
|         applet/$(TARGET).map applet/$(TARGET).sym applet/$(TARGET).lss applet/core.a \ | ||||
|         $(OBJT) applet/$(TARGET).cpp.o \ | ||||
| 	@echo "  RM    applet/*" | ||||
| 	@$(REMOVE) applet/$(TARGET).hex applet/$(TARGET).eep applet/$(TARGET).cof applet/$(TARGET).elf \ | ||||
| 		applet/$(TARGET).map applet/$(TARGET).sym applet/$(TARGET).lss applet/$(TARGET).cpp applet/core.a \ | ||||
| 		$(OBJ) $(LST) $(SRC:.c=.s) $(SRC:.c=.d) $(CXXSRC:.cpp=.s) $(CXXSRC:.cpp=.d) | ||||
| 	@echo "  RMDIR applet/" | ||||
| 	@rmdir applet | ||||
|  | ||||
| .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 <inttypes.h> | ||||
|  | ||||
| #include <avr/delay.h> | ||||
| #include <util/delay.h> | ||||
| #include <avr/pgmspace.h> | ||||
| #include <avr/eeprom.h> | ||||
| #include  <avr/wdt.h> | ||||
| @@ -46,7 +46,11 @@ | ||||
|  | ||||
| #include "WString.h" | ||||
|  | ||||
|  | ||||
| #if MOTHERBOARD == 8  // Teensylu | ||||
|   #define MYSERIAL Serial | ||||
| #else | ||||
|   #define MYSERIAL MSerial | ||||
| #endif | ||||
|  | ||||
| //this is a unfinsihed attemp to removes a lot of warning messages, see: | ||||
| // http://www.avrfreaks.net/index.php?name=PNphpBB2&file=printview&t=57011 | ||||
| @@ -54,19 +58,19 @@ | ||||
| // //#define PSTR    (s )        ((const PROGMEM char *)(s)) | ||||
| // //# define MYPGM(s) (__extension__({static prog_char __c[] = (s); &__c[0];}))  | ||||
| // //#define MYPGM(s) ((const prog_char *g PROGMEM=s)) | ||||
| // //#define MYPGM(s) PSTR(s) | ||||
| #define MYPGM(s)  (__extension__({static char __c[] __attribute__((__progmem__)) = (s); &__c[0];}))  //This is the normal behaviour | ||||
| #define MYPGM(s) PSTR(s) | ||||
| //#define MYPGM(s)  (__extension__({static char __c[] __attribute__((__progmem__)) = (s); &__c[0];}))  //This is the normal behaviour | ||||
| //#define MYPGM(s)  (__extension__({static prog_char __c[]  = (s); &__c[0];})) //this does not work but hides the warnings | ||||
|  | ||||
|  | ||||
| #define SERIAL_PROTOCOL(x) MSerial.print(x); | ||||
| #define SERIAL_PROTOCOL(x) MYSERIAL.print(x); | ||||
| #define SERIAL_PROTOCOLPGM(x) serialprintPGM(MYPGM(x)); | ||||
| #define SERIAL_PROTOCOLLN(x) {MSerial.print(x);MSerial.write('\n');} | ||||
| #define SERIAL_PROTOCOLLNPGM(x) {serialprintPGM(MYPGM(x));MSerial.write('\n');} | ||||
| #define SERIAL_PROTOCOLLN(x) {MYSERIAL.print(x);MYSERIAL.write('\n');} | ||||
| #define SERIAL_PROTOCOLLNPGM(x) {serialprintPGM(MYPGM(x));MYSERIAL.write('\n');} | ||||
|  | ||||
|  | ||||
| const prog_char errormagic[] PROGMEM ="Error:"; | ||||
| const prog_char echomagic[] PROGMEM ="echo:"; | ||||
| const char errormagic[] PROGMEM ="Error:"; | ||||
| const char echomagic[] PROGMEM ="echo:"; | ||||
| #define SERIAL_ERROR_START serialprintPGM(errormagic); | ||||
| #define SERIAL_ERROR(x) SERIAL_PROTOCOL(x) | ||||
| #define SERIAL_ERRORPGM(x) SERIAL_PROTOCOLPGM(x) | ||||
| @@ -89,7 +93,7 @@ FORCE_INLINE void serialprintPGM(const char *str) | ||||
|   char ch=pgm_read_byte(str); | ||||
|   while(ch) | ||||
|   { | ||||
|     MSerial.write(ch); | ||||
|     MYSERIAL.write(ch); | ||||
|     ch=pgm_read_byte(++str); | ||||
|   } | ||||
| } | ||||
|   | ||||
| @@ -27,8 +27,6 @@ | ||||
|  | ||||
| #include "Marlin.h" | ||||
|  | ||||
|  | ||||
|  | ||||
| #include "ultralcd.h" | ||||
| #include "planner.h" | ||||
| #include "stepper.h" | ||||
| @@ -38,12 +36,7 @@ | ||||
| #include "watchdog.h" | ||||
| #include "EEPROMwrite.h" | ||||
|  | ||||
|  | ||||
|  | ||||
| #define VERSION_STRING  "1.0.0 Beta 1" | ||||
|  | ||||
|  | ||||
|  | ||||
| #define VERSION_STRING  "1.0.0 RC1" | ||||
|  | ||||
| // look here for descriptions of gcodes: http://linuxcnc.org/handbook/gcode/g-code.html | ||||
| // http://objects.reprap.org/wiki/Mendel_User_Manual:_RepRapGCodes | ||||
| @@ -147,15 +140,11 @@ static bool home_all_axis = true; | ||||
| static float feedrate = 1500.0, next_feedrate, saved_feedrate; | ||||
| static long gcode_N, gcode_LastN; | ||||
|  | ||||
|  | ||||
|  | ||||
| static bool relative_mode = false;  //Determines Absolute or Relative Coordinates | ||||
| static bool relative_mode_e = false;  //Determines Absolute or Relative E Codes while in Absolute Coordinates mode. E is always relative in Relative Coordinates mode. | ||||
|  | ||||
| static uint8_t fanpwm=0; | ||||
|  | ||||
|  | ||||
|  | ||||
| static char cmdbuffer[BUFSIZE][MAX_CMD_SIZE]; | ||||
| static bool fromsd[BUFSIZE]; | ||||
| static int bufindr = 0; | ||||
| @@ -175,8 +164,7 @@ const int sensitive_pins[] = SENSITIVE_PINS; // Sensitive pin list for M42 | ||||
| //Inactivity shutdown variables | ||||
| static unsigned long previous_millis_cmd = 0; | ||||
| static unsigned long max_inactive_time = 0; | ||||
| static unsigned long stepper_inactive_time = DEFAULT_STEPPER_DEACTIVE_TIME*1000; | ||||
| static unsigned long last_stepperdisabled_time=30*1000; //first release check after 30 seconds | ||||
| static unsigned long stepper_inactive_time = DEFAULT_STEPPER_DEACTIVE_TIME*1000l; | ||||
|  | ||||
| static unsigned long starttime=0; | ||||
| static unsigned long stoptime=0; | ||||
| @@ -224,6 +212,7 @@ void enquecommand(const char *cmd) | ||||
|     buflen += 1; | ||||
|   } | ||||
| } | ||||
|  | ||||
| void setup_photpin() | ||||
| { | ||||
|   #ifdef PHOTOGRAPH_PIN | ||||
| @@ -257,11 +246,21 @@ void suicide() | ||||
| void setup() | ||||
| {  | ||||
|   setup_powerhold(); | ||||
|   MSerial.begin(BAUDRATE); | ||||
|   SERIAL_ECHO_START; | ||||
|   SERIAL_ECHOLNPGM(VERSION_STRING); | ||||
|   MYSERIAL.begin(BAUDRATE); | ||||
|   SERIAL_PROTOCOLLNPGM("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_ECHO(freeMemory()); | ||||
|   SERIAL_ECHOPGM(" PlannerBufferBytes:"); | ||||
| @@ -326,11 +325,10 @@ void loop() | ||||
|   LCD_STATUS; | ||||
| } | ||||
|  | ||||
|  | ||||
| FORCE_INLINE void get_command()  | ||||
| void get_command()  | ||||
| {  | ||||
|   while( MSerial.available() > 0  && buflen < BUFSIZE) { | ||||
|     serial_char = MSerial.read(); | ||||
|   while( MYSERIAL.available() > 0  && buflen < BUFSIZE) { | ||||
|     serial_char = MYSERIAL.read(); | ||||
|     if(serial_char == '\n' || serial_char == '\r' || serial_char == ':' || serial_count >= (MAX_CMD_SIZE - 1) )  | ||||
|     { | ||||
|       if(!serial_count) return; //if empty line | ||||
| @@ -474,20 +472,20 @@ FORCE_INLINE void get_command() | ||||
| } | ||||
|  | ||||
|  | ||||
| FORCE_INLINE float code_value()  | ||||
| float code_value()  | ||||
| {  | ||||
|   return (strtod(&cmdbuffer[bufindr][strchr_pointer - cmdbuffer[bufindr] + 1], NULL));  | ||||
| } | ||||
| FORCE_INLINE long code_value_long()  | ||||
| long code_value_long()  | ||||
| {  | ||||
|   return (strtol(&cmdbuffer[bufindr][strchr_pointer - cmdbuffer[bufindr] + 1], NULL, 10));  | ||||
| } | ||||
| FORCE_INLINE bool code_seen(char code_string[]) //Return True if the string was found | ||||
| bool code_seen(char code_string[]) //Return True if the string was found | ||||
| {  | ||||
|   return (strstr(cmdbuffer[bufindr], code_string) != NULL);  | ||||
| }   | ||||
|  | ||||
| FORCE_INLINE bool code_seen(char code) | ||||
| bool code_seen(char code) | ||||
| { | ||||
|   strchr_pointer = strchr(cmdbuffer[bufindr], code); | ||||
|   return (strchr_pointer != NULL);  //Return True if a character was found | ||||
| @@ -519,7 +517,7 @@ FORCE_INLINE bool code_seen(char code) | ||||
|     endstops_hit_on_purpose();\ | ||||
|   } | ||||
|  | ||||
| FORCE_INLINE void process_commands() | ||||
| void process_commands() | ||||
| { | ||||
|   unsigned long codenum; //throw away variable | ||||
|   char *starpos = NULL; | ||||
| @@ -843,11 +841,11 @@ FORCE_INLINE void process_commands() | ||||
|         /* continue to loop until we have reached the target temp    | ||||
|           _and_ until TEMP_RESIDENCY_TIME hasn't passed since we reached it */ | ||||
|         while((residencyStart == -1) || | ||||
|               (residencyStart > -1 && (millis() - residencyStart) < TEMP_RESIDENCY_TIME*1000) ) { | ||||
|               (residencyStart >= 0 && (((unsigned int) (millis() - residencyStart)) < (TEMP_RESIDENCY_TIME * 1000UL))) ) { | ||||
|       #else | ||||
|         while ( target_direction ? (isHeatingHotend(tmp_extruder)) : (isCoolingHotend(tmp_extruder)&&(CooldownNoWait==false)) ) { | ||||
|       #endif //TEMP_RESIDENCY_TIME | ||||
|           if( (millis() - codenum) > 1000 )  | ||||
|           if( (millis() - codenum) > 1000UL ) | ||||
|           { //Print Temp Reading and remaining time every 1 second while heating up/cooling down | ||||
|             SERIAL_PROTOCOLPGM("T:"); | ||||
|             SERIAL_PROTOCOL( degHotend(tmp_extruder) );  | ||||
| @@ -857,13 +855,15 @@ FORCE_INLINE void process_commands() | ||||
|               SERIAL_PROTOCOLPGM(" W:"); | ||||
|               if(residencyStart > -1) | ||||
|               { | ||||
|                  codenum = TEMP_RESIDENCY_TIME - ((millis() - residencyStart) / 1000); | ||||
|                  codenum = ((TEMP_RESIDENCY_TIME * 1000UL) - (millis() - residencyStart)) / 1000UL; | ||||
|                  SERIAL_PROTOCOLLN( codenum ); | ||||
|               } | ||||
|               else  | ||||
|               { | ||||
|                  SERIAL_PROTOCOLLN( "?" ); | ||||
|               } | ||||
|             #else | ||||
|               SERIAL_PROTOCOLLN(""); | ||||
|             #endif | ||||
|             codenum = millis(); | ||||
|           } | ||||
| @@ -938,14 +938,13 @@ FORCE_INLINE void process_commands() | ||||
|        | ||||
|       case 81: // M81 - ATX Power Off | ||||
|        | ||||
|       #if (SUICIDE_PIN >-1) | ||||
|       #if defined SUICIDE_PIN && SUICIDE_PIN > -1 | ||||
|         st_synchronize(); | ||||
|         suicide(); | ||||
|       #else | ||||
|         #if (PS_ON_PIN > -1)  | ||||
|       #elif (PS_ON_PIN > -1) | ||||
|         SET_INPUT(PS_ON_PIN); //Floating | ||||
|       #endif | ||||
|       #endif | ||||
| 		break; | ||||
|          | ||||
|     case 82: | ||||
|       axis_relative_modes[3] = false; | ||||
| @@ -963,6 +962,7 @@ FORCE_INLINE void process_commands() | ||||
|         bool all_axis = !((code_seen(axis_codes[0])) || (code_seen(axis_codes[1])) || (code_seen(axis_codes[2]))|| (code_seen(axis_codes[3]))); | ||||
|         if(all_axis) | ||||
|         { | ||||
|           st_synchronize(); | ||||
|           disable_e0(); | ||||
|           disable_e1(); | ||||
|           disable_e2(); | ||||
| @@ -1217,7 +1217,7 @@ FORCE_INLINE void process_commands() | ||||
| void FlushSerialRequestResend() | ||||
| { | ||||
|   //char cmdbuffer[bufindr][100]="Resend:"; | ||||
|   MSerial.flush(); | ||||
|   MYSERIAL.flush(); | ||||
|   SERIAL_PROTOCOLPGM("Resend:"); | ||||
|   SERIAL_PROTOCOLLN(gcode_LastN + 1); | ||||
|   ClearToSend(); | ||||
| @@ -1233,7 +1233,7 @@ void ClearToSend() | ||||
|   SERIAL_PROTOCOLLNPGM("ok");  | ||||
| } | ||||
|  | ||||
| FORCE_INLINE void get_coordinates() | ||||
| void get_coordinates() | ||||
| { | ||||
|   for(int8_t i=0; i < NUM_AXIS; i++) { | ||||
|     if(code_seen(axis_codes[i])) destination[i] = (float)code_value() + (axis_relative_modes[i] || relative_mode)*current_position[i]; | ||||
| @@ -1245,7 +1245,7 @@ FORCE_INLINE void get_coordinates() | ||||
|   } | ||||
| } | ||||
|  | ||||
| FORCE_INLINE void get_arc_coordinates() | ||||
| void get_arc_coordinates() | ||||
| { | ||||
|    get_coordinates(); | ||||
|    if(code_seen('I')) offset[0] = code_value(); | ||||
| @@ -1294,16 +1294,15 @@ void manage_inactivity(byte debug) | ||||
|   if( (millis() - previous_millis_cmd) >  max_inactive_time )  | ||||
|     if(max_inactive_time)  | ||||
|       kill();  | ||||
|   if(stepper_inactive_time)   | ||||
|   if( (millis()-last_stepperdisabled_time) >  stepper_inactive_time )  | ||||
|   if(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)  ) | ||||
|         enquecommand(DEFAULT_STEPPER_DEACTIVE_COMMAND);  | ||||
|       last_stepperdisabled_time=millis(); | ||||
|       disable_x(); | ||||
|       disable_y(); | ||||
|       disable_z(); | ||||
|       disable_e0(); | ||||
|       disable_e1(); | ||||
|       disable_e2(); | ||||
|     } | ||||
|   } | ||||
|   #ifdef EXTRUDER_RUNOUT_PREVENT | ||||
| @@ -1321,7 +1320,6 @@ void manage_inactivity(byte debug) | ||||
|      destination[E_AXIS]=oldedes; | ||||
|      plan_set_e_position(oldepos); | ||||
|      previous_millis_cmd=millis(); | ||||
|      //enquecommand(DEFAULT_STEPPER_DEACTIVE_COMMAND); | ||||
|      st_synchronize(); | ||||
|      WRITE(E0_ENABLE_PIN,oldstatus); | ||||
|     } | ||||
|   | ||||
| @@ -23,20 +23,15 @@ | ||||
| #include "Marlin.h" | ||||
| #include "MarlinSerial.h" | ||||
|  | ||||
| #if MOTHERBOARD != 8 // !teensylu | ||||
| // this next line disables the entire HardwareSerial.cpp,  | ||||
| // this is so I can support Attiny series and any other chip without a uart | ||||
| #if defined(UBRRH) || defined(UBRR0H) || defined(UBRR1H) || defined(UBRR2H) || defined(UBRR3H) | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
| #if defined(UBRRH) || defined(UBRR0H) | ||||
|   ring_buffer rx_buffer  =  { { 0 }, 0, 0 }; | ||||
| #endif | ||||
|  | ||||
|  | ||||
| FORCE_INLINE void store_char(unsigned char c) | ||||
| { | ||||
|   int i = (unsigned int)(rx_buffer.head + 1) % RX_BUFFER_SIZE; | ||||
| @@ -324,11 +319,11 @@ void MarlinSerial::printFloat(double number, uint8_t digits) | ||||
|     remainder -= toPrint;  | ||||
|   }  | ||||
| } | ||||
|  | ||||
| // Preinstantiate Objects ////////////////////////////////////////////////////// | ||||
|  | ||||
|  | ||||
| MarlinSerial MSerial; | ||||
|  | ||||
|  | ||||
| #endif // whole file | ||||
| #endif //teensylu | ||||
|  | ||||
|   | ||||
| @@ -31,7 +31,7 @@ | ||||
| #define BYTE 0 | ||||
|  | ||||
|  | ||||
|  | ||||
| #if MOTHERBOARD != 8 // ! teensylu | ||||
| // Define constants and variables for buffering incoming serial data.  We're | ||||
| // using a ring buffer (I think), in which rx_buffer_head is the index of the | ||||
| // location to which to write the next incoming character and rx_buffer_tail | ||||
| @@ -144,8 +144,7 @@ class MarlinSerial //: public Stream | ||||
|     void println(void); | ||||
| }; | ||||
|  | ||||
| #if defined(UBRRH) || defined(UBRR0H) | ||||
| extern MarlinSerial MSerial; | ||||
| #endif | ||||
| #endif // ! teensylu | ||||
|  | ||||
| #endif | ||||
|   | ||||
| @@ -18,8 +18,6 @@ | ||||
|  * <http://www.gnu.org/licenses/>. | ||||
|  */ | ||||
|  | ||||
| #define SERIAL MSerial | ||||
|  | ||||
| #include "Marlin.h" | ||||
| #ifdef SDSUPPORT | ||||
|  | ||||
| @@ -345,38 +343,38 @@ int8_t SdBaseFile::lsPrintNext( uint8_t flags, uint8_t indent) { | ||||
|       && DIR_IS_FILE_OR_SUBDIR(&dir)) break; | ||||
|   } | ||||
|   // indent for dir level | ||||
|   for (uint8_t i = 0; i < indent; i++) MSerial.write(' '); | ||||
|   for (uint8_t i = 0; i < indent; i++) MYSERIAL.write(' '); | ||||
|  | ||||
|   // print name | ||||
|   for (uint8_t i = 0; i < 11; i++) { | ||||
|     if (dir.name[i] == ' ')continue; | ||||
|     if (i == 8) { | ||||
|       MSerial.write('.'); | ||||
|       MYSERIAL.write('.'); | ||||
|       w++; | ||||
|     } | ||||
|     MSerial.write(dir.name[i]); | ||||
|     MYSERIAL.write(dir.name[i]); | ||||
|     w++; | ||||
|   } | ||||
|   if (DIR_IS_SUBDIR(&dir)) { | ||||
|     MSerial.write('/'); | ||||
|     MYSERIAL.write('/'); | ||||
|     w++; | ||||
|   } | ||||
|   if (flags & (LS_DATE | LS_SIZE)) { | ||||
|     while (w++ < 14) MSerial.write(' '); | ||||
|     while (w++ < 14) MYSERIAL.write(' '); | ||||
|   } | ||||
|   // print modify date/time if requested | ||||
|   if (flags & LS_DATE) { | ||||
|     MSerial.write(' '); | ||||
|     MYSERIAL.write(' '); | ||||
|     printFatDate( dir.lastWriteDate); | ||||
|     MSerial.write(' '); | ||||
|     MYSERIAL.write(' '); | ||||
|     printFatTime( dir.lastWriteTime); | ||||
|   } | ||||
|   // print size if requested | ||||
|   if (!DIR_IS_SUBDIR(&dir) && (flags & LS_SIZE)) { | ||||
|     MSerial.write(' '); | ||||
|     MSerial.print(dir.fileSize); | ||||
|     MYSERIAL.write(' '); | ||||
|     MYSERIAL.print(dir.fileSize); | ||||
|   } | ||||
|   MSerial.println(); | ||||
|   MYSERIAL.println(); | ||||
|   return DIR_IS_FILE(&dir) ? 1 : 2; | ||||
| } | ||||
| //------------------------------------------------------------------------------ | ||||
| @@ -947,26 +945,26 @@ void SdBaseFile::printDirName(const dir_t& dir, | ||||
|   for (uint8_t i = 0; i < 11; i++) { | ||||
|     if (dir.name[i] == ' ')continue; | ||||
|     if (i == 8) { | ||||
|       MSerial.write('.'); | ||||
|       MYSERIAL.write('.'); | ||||
|       w++; | ||||
|     } | ||||
|     MSerial.write(dir.name[i]); | ||||
|     MYSERIAL.write(dir.name[i]); | ||||
|     w++; | ||||
|   } | ||||
|   if (DIR_IS_SUBDIR(&dir) && printSlash) { | ||||
|     MSerial.write('/'); | ||||
|     MYSERIAL.write('/'); | ||||
|     w++; | ||||
|   } | ||||
|   while (w < width) { | ||||
|     MSerial.write(' '); | ||||
|     MYSERIAL.write(' '); | ||||
|     w++; | ||||
|   } | ||||
| } | ||||
| //------------------------------------------------------------------------------ | ||||
| // print uint8_t with width 2 | ||||
| static void print2u( uint8_t v) { | ||||
|   if (v < 10) MSerial.write('0'); | ||||
|   MSerial.print(v, DEC); | ||||
|   if (v < 10) MYSERIAL.write('0'); | ||||
|   MYSERIAL.print(v, DEC); | ||||
| } | ||||
| //------------------------------------------------------------------------------ | ||||
| /** %Print a directory date field to Serial. | ||||
| @@ -985,10 +983,10 @@ static void print2u( uint8_t v) { | ||||
|  * \param[in] fatDate The date field from a directory entry. | ||||
|  */ | ||||
| void SdBaseFile::printFatDate(uint16_t fatDate) { | ||||
|   MSerial.print(FAT_YEAR(fatDate)); | ||||
|   MSerial.write('-'); | ||||
|   MYSERIAL.print(FAT_YEAR(fatDate)); | ||||
|   MYSERIAL.write('-'); | ||||
|   print2u( FAT_MONTH(fatDate)); | ||||
|   MSerial.write('-'); | ||||
|   MYSERIAL.write('-'); | ||||
|   print2u( FAT_DAY(fatDate)); | ||||
| } | ||||
|  | ||||
| @@ -1002,9 +1000,9 @@ void SdBaseFile::printFatDate(uint16_t fatDate) { | ||||
|  */ | ||||
| void SdBaseFile::printFatTime( uint16_t fatTime) { | ||||
|   print2u( FAT_HOUR(fatTime)); | ||||
|   MSerial.write(':'); | ||||
|   MYSERIAL.write(':'); | ||||
|   print2u( FAT_MINUTE(fatTime)); | ||||
|   MSerial.write(':'); | ||||
|   MYSERIAL.write(':'); | ||||
|   print2u( FAT_SECOND(fatTime)); | ||||
| } | ||||
| //------------------------------------------------------------------------------ | ||||
| @@ -1016,7 +1014,7 @@ void SdBaseFile::printFatTime( uint16_t fatTime) { | ||||
| bool SdBaseFile::printName() { | ||||
|   char name[13]; | ||||
|   if (!getFilename(name)) return false; | ||||
|   MSerial.print(name); | ||||
|   MYSERIAL.print(name); | ||||
|   return true; | ||||
| } | ||||
| //------------------------------------------------------------------------------ | ||||
|   | ||||
| @@ -48,7 +48,7 @@ int SdFatUtil::FreeRam() { | ||||
|  * \param[in] str Pointer to string stored in flash memory. | ||||
|  */ | ||||
| void SdFatUtil::print_P( PGM_P str) { | ||||
|   for (uint8_t c; (c = pgm_read_byte(str)); str++) MSerial.write(c); | ||||
|   for (uint8_t c; (c = pgm_read_byte(str)); str++) MYSERIAL.write(c); | ||||
| } | ||||
| //------------------------------------------------------------------------------ | ||||
| /** %Print a string in flash memory followed by a CR/LF. | ||||
| @@ -58,7 +58,7 @@ void SdFatUtil::print_P( PGM_P str) { | ||||
|  */ | ||||
| void SdFatUtil::println_P( PGM_P str) { | ||||
|   print_P( str); | ||||
|   MSerial.println(); | ||||
|   MYSERIAL.println(); | ||||
| } | ||||
| //------------------------------------------------------------------------------ | ||||
| /** %Print a string in flash memory to Serial. | ||||
|   | ||||
| @@ -1,5 +1,8 @@ | ||||
| #include "Marlin.h" | ||||
| #include "cardreader.h" | ||||
| #include "ultralcd.h" | ||||
| #include "stepper.h" | ||||
| #include "temperature.h" | ||||
| #ifdef SDSUPPORT | ||||
| 
 | ||||
| 
 | ||||
| @@ -444,7 +447,9 @@ void CardReader::printingHasFinished() | ||||
|  st_synchronize(); | ||||
|  quickStop(); | ||||
|  sdprinting = false; | ||||
|  #ifdef STOP_HEATING_WAIT_FOR_SD_PRINTING | ||||
|  stop_heating_wait=true; | ||||
|  #endif | ||||
|  if(SD_FINISHED_STEPPERRELEASE) | ||||
|  { | ||||
|    //finishAndDisableSteppers();
 | ||||
| @@ -1928,7 +1928,7 @@ pins | ||||
|  | ||||
| #endif | ||||
|  | ||||
| #if defined (__AVR_AT90USB1287__) | ||||
| #if defined (__AVR_AT90USB1287__) || defined (__AVR_AT90USB1286__) | ||||
| // SPI | ||||
| #define	SCK					DIO9 | ||||
| #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; } | ||||
|    | ||||
|   float millimeters_of_travel = hypot(angular_travel*radius, fabs(linear_travel)); | ||||
|   if (millimeters_of_travel == 0.0) { return; } | ||||
|   if (millimeters_of_travel < 0.001) { return; } | ||||
|   uint16_t segments = floor(millimeters_of_travel/MM_PER_ARC_SEGMENT); | ||||
|   /*   | ||||
|     // Multiply inverse feed_rate to compensate for the fact that this movement is approximated | ||||
|   | ||||
							
								
								
									
										183
									
								
								Marlin/pins.h
									
									
									
									
									
								
							
							
						
						
									
										183
									
								
								Marlin/pins.h
									
									
									
									
									
								
							| @@ -1,6 +1,49 @@ | ||||
| #ifndef PINS_H | ||||
| #define PINS_H | ||||
|  | ||||
| #if MOTHERBOARD == 99 | ||||
| #define	KNOWN_BOARD 1 | ||||
|  | ||||
| #define X_STEP_PIN          2 | ||||
| #define X_DIR_PIN           3 | ||||
| #define X_ENABLE_PIN        -1 | ||||
| #define X_MIN_PIN           -1 | ||||
| #define X_MAX_PIN           16 | ||||
|  | ||||
| #define Y_STEP_PIN          5 | ||||
| #define Y_DIR_PIN           6 | ||||
| #define Y_ENABLE_PIN       -1 | ||||
| #define Y_MIN_PIN           67 | ||||
| #define Y_MAX_PIN          -1 | ||||
|  | ||||
| #define Z_STEP_PIN          62 | ||||
| #define Z_DIR_PIN           63 | ||||
| #define Z_ENABLE_PIN       -1 | ||||
| #define Z_MIN_PIN           59 | ||||
| #define Z_MAX_PIN          -1 | ||||
|  | ||||
| #define E0_STEP_PIN         65 | ||||
| #define E0_DIR_PIN          66 | ||||
| #define E0_ENABLE_PIN      -1 | ||||
|  | ||||
| #define SDPOWER            -1 | ||||
| #define SDSS               53 | ||||
| #define LED_PIN            -1 | ||||
| #define FAN_PIN            -1 | ||||
| #define PS_ON_PIN           9 | ||||
| #define KILL_PIN           -1 | ||||
|  | ||||
| #define HEATER_0_PIN        13 | ||||
| #define HEATER_1_PIN       -1 | ||||
| #define HEATER_2_PIN       -1 | ||||
| #define TEMP_0_PIN          6   // MUST USE ANALOG INPUT NUMBERING NOT DIGITAL OUTPUT NUMBERING!!!!!!!!! | ||||
| #define TEMP_1_PIN         -1   // MUST USE ANALOG INPUT NUMBERING NOT DIGITAL OUTPUT NUMBERING!!!!!!!!! | ||||
| #define TEMP_2_PIN         -1   // MUST USE ANALOG INPUT NUMBERING NOT DIGITAL OUTPUT NUMBERING!!!!!!!!! | ||||
| #define HEATER_BED_PIN      4 | ||||
| #define TEMP_BED_PIN       10 | ||||
|  | ||||
| #endif /* 99 */ | ||||
|  | ||||
| /**************************************************************************************** | ||||
| * Arduino pin assignment | ||||
| * | ||||
| @@ -331,16 +374,17 @@ | ||||
| // SPI for Max6675 Thermocouple  | ||||
|  | ||||
| #ifndef SDSUPPORT | ||||
| // these pins are defined in the SD library if building with SD support  #define SCK_PIN          52 | ||||
|   #define MISO_PIN         50 | ||||
|   #define MOSI_PIN         51 | ||||
| // these pins are defined in the SD library if building with SD support   | ||||
|   #define MAX_SCK_PIN          52 | ||||
|   #define MAX_MISO_PIN         50 | ||||
|   #define MAX_MOSI_PIN         51 | ||||
|   #define MAX6675_SS       53 | ||||
| #else | ||||
|   #define MAX6675_SS       49 | ||||
| #endif | ||||
|  | ||||
|  | ||||
| #endif | ||||
|  | ||||
| /**************************************************************************************** | ||||
| * Duemilanove w/ ATMega328P pin assignment | ||||
| * | ||||
| @@ -470,7 +514,7 @@ | ||||
| #define X_STEP_PIN         15 | ||||
| #define X_DIR_PIN          21 | ||||
| #define X_MIN_PIN          18 | ||||
| #define X_MAX_PIN           -2 | ||||
| #define X_MAX_PIN           -1 | ||||
|  | ||||
| #define Y_STEP_PIN         22 | ||||
| #define Y_DIR_PIN          23 | ||||
| @@ -658,10 +702,8 @@ | ||||
| #define HEATER_0_PIN  2 | ||||
| #define TEMP_0_PIN 8    | ||||
|  | ||||
| #define EXTRUDER_1_HEATER_PIN 3 | ||||
| #define EXTRUDER_1_TEMPERATURE_PIN 10  | ||||
| #define HEATER_1_PIN 51 | ||||
| #define TEMP_1_PIN 3 | ||||
| #define HEATER_1_PIN 3 | ||||
| #define TEMP_1_PIN 9 | ||||
|  | ||||
| #define HEATER_2_PIN -1 | ||||
| #define TEMP_2_PIN -1 | ||||
| @@ -751,6 +793,73 @@ | ||||
|  | ||||
| #endif | ||||
|  | ||||
| #if MOTHERBOARD == 71 | ||||
| #define KNOWN_BOARD | ||||
| /***************************************************************** | ||||
| * Ultimaker pin assignment (Old electronics) | ||||
| ******************************************************************/ | ||||
|  | ||||
| #ifndef __AVR_ATmega1280__ | ||||
|  #ifndef __AVR_ATmega2560__ | ||||
|  #error Oops!  Make sure you have 'Arduino Mega' selected from the 'Tools -> Boards' menu. | ||||
|  #endif | ||||
| #endif | ||||
|  | ||||
| #define X_STEP_PIN 25 | ||||
| #define X_DIR_PIN 23 | ||||
| #define X_MIN_PIN 15 | ||||
| #define X_MAX_PIN 14 | ||||
| #define X_ENABLE_PIN 27 | ||||
|  | ||||
| #define Y_STEP_PIN 31 | ||||
| #define Y_DIR_PIN 33 | ||||
| #define Y_MIN_PIN 17 | ||||
| #define Y_MAX_PIN 16 | ||||
| #define Y_ENABLE_PIN 29 | ||||
|  | ||||
| #define Z_STEP_PIN 37  | ||||
| #define Z_DIR_PIN 39 | ||||
| #define Z_MIN_PIN 19 | ||||
| #define Z_MAX_PIN 18 | ||||
| #define Z_ENABLE_PIN 35 | ||||
|  | ||||
| #define HEATER_BED_PIN -1  | ||||
| #define TEMP_BED_PIN -1   | ||||
|  | ||||
| #define HEATER_0_PIN  2 | ||||
| #define TEMP_0_PIN 8    | ||||
|  | ||||
| #define HEATER_1_PIN 1 | ||||
| #define TEMP_1_PIN 1 | ||||
|  | ||||
| #define HEATER_2_PIN -1 | ||||
| #define TEMP_2_PIN -1 | ||||
|  | ||||
| #define E0_STEP_PIN         43 | ||||
| #define E0_DIR_PIN          45 | ||||
| #define E0_ENABLE_PIN       41 | ||||
|  | ||||
| #define E1_STEP_PIN         -1 | ||||
| #define E1_DIR_PIN          -1 | ||||
| #define E1_ENABLE_PIN       -1 | ||||
|  | ||||
| #define SDPOWER            -1 | ||||
| #define SDSS               -1 | ||||
| #define LED_PIN            -1 | ||||
| #define FAN_PIN            -1 | ||||
| #define PS_ON_PIN          -1 | ||||
| #define KILL_PIN           -1 | ||||
| #define SUICIDE_PIN        -1  //PIN that has to be turned on right after start, to keep power flowing. | ||||
|  | ||||
| #define LCD_PINS_RS 24  | ||||
| #define LCD_PINS_ENABLE 22 | ||||
| #define LCD_PINS_D4 36 | ||||
| #define LCD_PINS_D5 34  | ||||
| #define LCD_PINS_D6 32 | ||||
| #define LCD_PINS_D7 30 | ||||
|  | ||||
| #endif | ||||
|  | ||||
| /**************************************************************************************** | ||||
| * Teensylu 0.7 pin assingments (ATMEGA90USB) | ||||
| * Requires the Teensyduino software with Teensy2.0++ selected in arduino IDE! | ||||
| @@ -810,6 +919,62 @@ | ||||
| #endif | ||||
| #endif | ||||
|  | ||||
| /**************************************************************************************** | ||||
| * Gen3+ pin assignment | ||||
| * | ||||
| ****************************************************************************************/ | ||||
| #if MOTHERBOARD == 9 | ||||
| #define MOTHERBOARD 6 | ||||
| #define KNOWN_BOARD 1 | ||||
| #ifndef __AVR_ATmega644P__ | ||||
| #error Oops!  Make sure you have 'Sanguino' selected from the 'Tools -> Boards' menu. | ||||
| #endif | ||||
|  | ||||
| #define X_STEP_PIN         15 | ||||
| #define X_DIR_PIN          18 | ||||
| #define X_MIN_PIN          20 | ||||
| #define X_MAX_PIN           -1 | ||||
|  | ||||
| #define Y_STEP_PIN         23 | ||||
| #define Y_DIR_PIN          22 | ||||
| #define Y_MIN_PIN          25 | ||||
| #define Y_MAX_PIN          -1 | ||||
|  | ||||
| #define Z_STEP_PIN         27 | ||||
| #define Z_DIR_PIN          28 | ||||
| #define Z_MIN_PIN          30 | ||||
| #define Z_MAX_PIN          -1 | ||||
|  | ||||
| #define E_STEP_PIN         17 | ||||
| #define E_DIR_PIN          21 | ||||
|  | ||||
| #define LED_PIN            -1 | ||||
|  | ||||
| #define FAN_PIN            -1  | ||||
|  | ||||
| #define PS_ON_PIN         14 | ||||
| #define KILL_PIN           -1 | ||||
|  | ||||
| #define HEATER_0_PIN       12 // (extruder) | ||||
|  | ||||
| #define HEATER_1_PIN       16 // (bed) | ||||
| #define X_ENABLE_PIN       19 | ||||
| #define Y_ENABLE_PIN       24 | ||||
| #define Z_ENABLE_PIN       29 | ||||
| #define E_ENABLE_PIN       13 | ||||
|  | ||||
| #define TEMP_0_PIN          0   // MUST USE ANALOG INPUT NUMBERING NOT DIGITAL OUTPUT NUMBERING!!!!!!!!! (pin 33 extruder) | ||||
| #define TEMP_1_PIN          5   // MUST USE ANALOG INPUT NUMBERING NOT DIGITAL OUTPUT NUMBERING!!!!!!!!! (pin 34 bed) | ||||
| #define TEMP_2_PIN         -1 | ||||
| #define SDPOWER            -1 | ||||
| #define SDSS               4 | ||||
| #define HEATER_2_PIN       -1 | ||||
|  | ||||
| #endif | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
| #ifndef KNOWN_BOARD | ||||
| #error Unknown MOTHERBOARD value in configuration.h | ||||
| #endif | ||||
|   | ||||
| @@ -505,7 +505,9 @@ void plan_buffer_line(const float &x, const float &y, const float &z, const floa | ||||
|   //enable active axes | ||||
|   if(block->steps_x != 0) enable_x(); | ||||
|   if(block->steps_y != 0) enable_y(); | ||||
|   #ifndef Z_LATE_ENABLE | ||||
|     if(block->steps_z != 0) enable_z(); | ||||
|   #endif | ||||
|  | ||||
|   // Enable all | ||||
|   if(block->steps_e != 0) { enable_e0();enable_e1();enable_e2(); } | ||||
| @@ -515,8 +517,11 @@ void plan_buffer_line(const float &x, const float &y, const float &z, const floa | ||||
|   delta_mm[Y_AXIS] = (target[Y_AXIS]-position[Y_AXIS])/axis_steps_per_unit[Y_AXIS]; | ||||
|   delta_mm[Z_AXIS] = (target[Z_AXIS]-position[Z_AXIS])/axis_steps_per_unit[Z_AXIS]; | ||||
|   delta_mm[E_AXIS] = (target[E_AXIS]-position[E_AXIS])/axis_steps_per_unit[E_AXIS]; | ||||
|   block->millimeters = sqrt(square(delta_mm[X_AXIS]) + square(delta_mm[Y_AXIS]) + | ||||
|                             square(delta_mm[Z_AXIS]) + square(delta_mm[E_AXIS])); | ||||
|   if ( block->steps_x == 0 && block->steps_y == 0 && block->steps_z == 0 ) { | ||||
|     block->millimeters = abs(delta_mm[E_AXIS]); | ||||
|   } else { | ||||
|     block->millimeters = sqrt(square(delta_mm[X_AXIS]) + square(delta_mm[Y_AXIS]) + square(delta_mm[Z_AXIS])); | ||||
|   } | ||||
|   float inverse_millimeters = 1.0/block->millimeters;  // Inverse millimeters to remove multiple divides  | ||||
|    | ||||
|   // Calculate speed in mm/second for each axis. No divide by zero due to previous checks. | ||||
| @@ -525,9 +530,6 @@ void plan_buffer_line(const float &x, const float &y, const float &z, const floa | ||||
|   block->nominal_speed = block->millimeters * inverse_second; // (mm/sec) Always > 0 | ||||
|   block->nominal_rate = ceil(block->step_event_count * inverse_second); // (step/sec) Always > 0 | ||||
|  | ||||
|    | ||||
|   | ||||
|  | ||||
|   if (block->steps_e == 0) { | ||||
|         if(feed_rate<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; | ||||
|   }  | ||||
|  | ||||
| #ifdef SLOWDOWN | ||||
|   // 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); | ||||
|    | ||||
| #ifdef SLOWDOWN | ||||
|   if(moves_queued < (BLOCK_BUFFER_SIZE * 0.5) && moves_queued > 1) feed_rate = feed_rate*moves_queued / (BLOCK_BUFFER_SIZE * 0.5);  | ||||
| #endif | ||||
|  | ||||
| @@ -686,7 +687,7 @@ void plan_buffer_line(const float &x, const float &y, const float &z, const floa | ||||
|     vmax_junction = max_z_jerk/2; | ||||
|   vmax_junction = min(vmax_junction, block->nominal_speed); | ||||
|  | ||||
|   if ((block_buffer_head != block_buffer_tail) && (previous_nominal_speed > 0.0)) { | ||||
|   if ((moves_queued > 1) && (previous_nominal_speed > 0.0)) { | ||||
|     float jerk = sqrt(pow((current_speed[X_AXIS]-previous_speed[X_AXIS]), 2)+pow((current_speed[Y_AXIS]-previous_speed[Y_AXIS]), 2)); | ||||
|     if((previous_speed[X_AXIS] != 0.0) || (previous_speed[Y_AXIS] != 0.0)) { | ||||
|       vmax_junction = block->nominal_speed; | ||||
|   | ||||
| @@ -3,7 +3,7 @@ | ||||
|  | ||||
| #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},  | ||||
| { 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},  | ||||
| @@ -38,7 +38,7 @@ uint16_t speed_lookuptable_fast[256][2] PROGMEM = {\ | ||||
| { 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},  | ||||
| { 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},  | ||||
|   | ||||
| @@ -254,7 +254,7 @@ FORCE_INLINE unsigned short calc_timer(unsigned short step_rate) { | ||||
|     timer = (unsigned short)pgm_read_word_near(table_address); | ||||
|     timer -= (((unsigned short)pgm_read_word_near(table_address+2) * (unsigned char)(step_rate & 0x0007))>>3); | ||||
|   } | ||||
|   if(timer < 100) { timer = 100; MSerial.print("Steprate to high : "); MSerial.println(step_rate); }//(20kHz this should never happen) | ||||
|   if(timer < 100) { timer = 100; MYSERIAL.print("Steprate to high : "); MYSERIAL.println(step_rate); }//(20kHz this should never happen) | ||||
|   return timer; | ||||
| } | ||||
|  | ||||
| @@ -275,6 +275,8 @@ FORCE_INLINE void trapezoid_generator_reset() { | ||||
|   OCR1A = acceleration_time; | ||||
|   OCR1A_nominal = calc_timer(current_block->nominal_rate); | ||||
|    | ||||
|  | ||||
|    | ||||
| //    SERIAL_ECHO_START; | ||||
| //    SERIAL_ECHOPGM("advance :"); | ||||
| //    SERIAL_ECHO(current_block->advance/256.0); | ||||
| @@ -302,6 +304,14 @@ ISR(TIMER1_COMPA_vect) | ||||
|       counter_z = counter_x; | ||||
|       counter_e = counter_x; | ||||
|       step_events_completed = 0; | ||||
|       #ifdef Z_LATE_ENABLE  | ||||
|         if(current_block->steps_z > 0) { | ||||
|           enable_z(); | ||||
|           OCR1A = 2000; //1ms wait | ||||
|           return; | ||||
|         } | ||||
|       #endif | ||||
|        | ||||
| //      #ifdef ADVANCE | ||||
| //      e_steps[current_block->active_extruder] = 0; | ||||
| //      #endif | ||||
| @@ -429,7 +439,9 @@ ISR(TIMER1_COMPA_vect) | ||||
|  | ||||
|      | ||||
|     for(int8_t i=0; i < step_loops; i++) { // Take multiple steps per interrupt (For high speed moves)  | ||||
|       #if MOTHERBOARD != 8 // !teensylu | ||||
|       MSerial.checkRx(); // Check for serial chars. | ||||
|       #endif  | ||||
|        | ||||
|       #ifdef ADVANCE | ||||
|       counter_e += current_block->steps_e; | ||||
|   | ||||
| @@ -85,9 +85,9 @@ static unsigned long  previous_millis_bed_heater; | ||||
|   static unsigned char soft_pwm[EXTRUDERS]; | ||||
|    | ||||
| #ifdef WATCHPERIOD | ||||
|   static int watch_raw[EXTRUDERS] = { -1000 }; // the first value used for all | ||||
|   static int watch_oldtemp[3] = {0,0,0}; | ||||
|   static unsigned long watchmillis = 0; | ||||
|   int watch_raw[EXTRUDERS] = { -1000 }; // the first value used for all | ||||
|   int watch_oldtemp[3] = {0,0,0}; | ||||
|   unsigned long watchmillis = 0; | ||||
| #endif //WATCHPERIOD | ||||
|  | ||||
| // Init min and max temp with extreme values to prevent false errors during startup | ||||
| @@ -218,7 +218,7 @@ void manage_heater() | ||||
|    | ||||
|   #ifdef WATCHPERIOD | ||||
|     if(watchmillis && millis() - watchmillis > WATCHPERIOD){ | ||||
|         if(watch_oldtemp[TEMPSENSOR_HOTEND_0] >= degHotend(active_extruder)){ | ||||
|         if(watch_oldtemp[0] >= degHotend(active_extruder)){ | ||||
|             setTargetHotend(0,active_extruder); | ||||
|             LCD_MESSAGEPGM("Heating failed"); | ||||
|             SERIAL_ECHO_START; | ||||
| @@ -283,6 +283,12 @@ int temp2analog(int celsius, uint8_t e) { | ||||
|       SERIAL_ERRORLNPGM(" - Invalid extruder number!"); | ||||
|       kill(); | ||||
|   } | ||||
|   #ifdef HEATER_0_USES_MAX6675 | ||||
|     if (e == 0) | ||||
|     { | ||||
|       return celsius * 4; | ||||
|     } | ||||
|   #endif | ||||
|   if(heater_ttbl_map[e] != 0) | ||||
|   { | ||||
|     int raw = 0; | ||||
| @@ -353,6 +359,13 @@ float analog2temp(int raw, uint8_t e) { | ||||
|       SERIAL_ERRORLNPGM(" - Invalid extruder number !"); | ||||
|       kill(); | ||||
|   }  | ||||
|   #ifdef HEATER_0_USES_MAX6675 | ||||
|     if (e == 0) | ||||
|     { | ||||
|       return 0.25 * raw; | ||||
|     } | ||||
|   #endif | ||||
|  | ||||
|   if(heater_ttbl_map[e] != 0) | ||||
|   { | ||||
|     float celsius = 0; | ||||
| @@ -446,6 +459,22 @@ void tp_init() | ||||
|     SET_OUTPUT(FAN_PIN); | ||||
|   #endif   | ||||
|  | ||||
|   #ifdef HEATER_0_USES_MAX6675 | ||||
|     #ifndef SDSUPPORT | ||||
|       SET_OUTPUT(MAX_SCK_PIN); | ||||
|       WRITE(MAX_SCK_PIN,0); | ||||
|      | ||||
|       SET_OUTPUT(MAX_MOSI_PIN); | ||||
|       WRITE(MAX_MOSI_PIN,1); | ||||
|      | ||||
|       SET_INPUT(MAX_MISO_PIN); | ||||
|       WRITE(MAX_MISO_PIN,1); | ||||
|     #endif | ||||
|      | ||||
|     SET_OUTPUT(MAX6675_SS); | ||||
|     WRITE(MAX6675_SS,1); | ||||
|   #endif | ||||
|  | ||||
|   // Set analog inputs | ||||
|   ADCSRA = 1<<ADEN | 1<<ADSC | 1<<ADIF | 0x07; | ||||
|   DIDR0 = 0; | ||||
| @@ -527,7 +556,7 @@ void setWatch() | ||||
|   for (int e = 0; e < EXTRUDERS; e++) | ||||
|   { | ||||
|     if(isHeatingHotend(e)) | ||||
|     watch_oldtemp[TEMPSENSOR_HOTEND_0] = degHotend(0); | ||||
|     watch_oldtemp[0] = degHotend(0); | ||||
|     { | ||||
|       t = max(t,millis()); | ||||
|       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 !!"); | ||||
| } | ||||
|  | ||||
| #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 | ||||
| ISR(TIMER0_COMPB_vect) | ||||
| { | ||||
| @@ -653,6 +738,9 @@ ISR(TIMER0_COMPB_vect) | ||||
|       #if (TEMP_0_PIN > -1) | ||||
|         raw_temp_0_value += ADC; | ||||
|       #endif | ||||
|       #ifdef HEATER_0_USES_MAX6675 // TODO remove the blocking | ||||
|         raw_temp_0_value = read_max6675(); | ||||
|       #endif | ||||
|       temp_state = 2; | ||||
|       break; | ||||
|     case 2: // Prepare TEMP_BED | ||||
| @@ -732,7 +820,7 @@ ISR(TIMER0_COMPB_vect) | ||||
|     #endif | ||||
|  | ||||
| #if EXTRUDERS > 1     | ||||
|     #ifdef HEATER_1_USES_AD595 | ||||
|     #ifdef HEATER_1_USES_AD595 || defined HEATER_0_USES_MAX6675 | ||||
|       current_raw[1] = raw_temp_1_value; | ||||
|     #else | ||||
|       current_raw[1] = 16383 - raw_temp_1_value; | ||||
|   | ||||
| @@ -59,7 +59,7 @@ void lcdProgMemprint(const char *str) | ||||
| //=============================functions         ============================ | ||||
| //=========================================================================== | ||||
|  | ||||
| FORCE_INLINE int intround(const float &x){return int(0.5+x);} | ||||
| int intround(const float &x){return int(0.5+x);} | ||||
|  | ||||
| void lcd_status(const char* message) | ||||
| { | ||||
|   | ||||
| @@ -1,6 +1,10 @@ | ||||
| WARNING:  | ||||
| -------- | ||||
| THIS IS THE BETA 1 FOR MARLIN 1.0.0 | ||||
| THIS IS RELEASE CANDIDATE 1 FOR MARLIN 1.0.0 | ||||
|  | ||||
| The configuration is now split in two files | ||||
| Configuration.h for the normal settings | ||||
| Configuration_adv.h for the advanced settings | ||||
|  | ||||
| Quick Information | ||||
| =================== | ||||
|   | ||||
		Reference in New Issue
	
	Block a user