Merge remote-tracking branch 'upstream/Marlin_v1' into Marlin_v1
Conflicts: Marlin/Configuration.h
This commit is contained in:
commit
d309565b56
|
@ -1,109 +1,74 @@
|
||||||
#ifndef __CONFIGURATION_H
|
#ifndef __CONFIGURATION_H
|
||||||
#define __CONFIGURATION_H
|
#define __CONFIGURATION_H
|
||||||
|
|
||||||
|
// This configurtion file contains the basic settings.
|
||||||
|
// Advanced settings can be found in Configuration_adv.h
|
||||||
|
// BASIC SETTINGS: select your board type, temperature sensor type, axis scaling, and endstop configuration
|
||||||
|
|
||||||
|
//User specified version info of THIS file to display in [Pronterface, etc] terminal window during startup.
|
||||||
|
//Implementation of an idea by Prof Braino to inform user that any changes made
|
||||||
|
//to THIS file by the user have been successfully uploaded into firmware.
|
||||||
|
#define STRING_VERSION_CONFIG_H "2012-02-08j" //Personal revision number for changes to THIS file.
|
||||||
|
#define STRING_CONFIG_H_AUTHOR "username" //Who made the changes.
|
||||||
|
|
||||||
// This determines the communication speed of the printer
|
// This determines the communication speed of the printer
|
||||||
//#define BAUDRATE 250000
|
//#define BAUDRATE 250000
|
||||||
#define BAUDRATE 115200
|
#define BAUDRATE 115200
|
||||||
//#define BAUDRATE 230400
|
|
||||||
|
|
||||||
#define EXTRUDERS 1
|
|
||||||
|
|
||||||
// Frequency limit
|
|
||||||
// See nophead's blog for more info
|
|
||||||
// Not working O
|
|
||||||
//#define XY_FREQUENCY_LIMIT 15
|
|
||||||
|
|
||||||
// Minimum planner junction speed. Sets the default minimum speed the planner plans for at the end
|
|
||||||
// of the buffer and all stops. This should not be much greater than zero and should only be changed
|
|
||||||
// if unwanted behavior is observed on a user's machine when running at very slow speeds.
|
|
||||||
#define MINIMUM_PLANNER_SPEED 2.0 // (mm/sec)
|
|
||||||
|
|
||||||
// BASIC SETTINGS: select your board type, thermistor type, axis scaling, and endstop configuration
|
|
||||||
|
|
||||||
//// The following define selects which electronics board you have. Please choose the one that matches your setup
|
//// The following define selects which electronics board you have. Please choose the one that matches your setup
|
||||||
// MEGA/RAMPS up to 1.2 = 3,
|
// MEGA/RAMPS up to 1.2 = 3,
|
||||||
// RAMPS 1.3 = 33
|
// RAMPS 1.3 = 33
|
||||||
// Gen6 = 5,
|
// Gen6 = 5,
|
||||||
// Sanguinololu 1.2 and above = 62
|
// Sanguinololu 1.2 and above = 62
|
||||||
// Gen7 = 77,
|
|
||||||
// Ultimaker = 7,
|
// Ultimaker = 7,
|
||||||
// Teensylu = 8
|
// Gen7 = 77,
|
||||||
|
// Teensylu = 8,
|
||||||
|
// Gen3+ =9
|
||||||
#define MOTHERBOARD 77
|
#define MOTHERBOARD 77
|
||||||
|
|
||||||
//===========================================================================
|
//===========================================================================
|
||||||
//=============================Thermal Settings ============================
|
//=============================Thermal Settings ============================
|
||||||
//===========================================================================
|
//===========================================================================
|
||||||
|
|
||||||
//// Thermistor settings:
|
//// Temperature sensor settings:
|
||||||
|
// -2 is thermocouple with MAX6675 (only for sensor 0)
|
||||||
|
// -1 is thermocouple with AD595
|
||||||
|
// 0 is not used
|
||||||
// 1 is 100k thermistor
|
// 1 is 100k thermistor
|
||||||
// 2 is 200k thermistor
|
// 2 is 200k thermistor
|
||||||
// 3 is mendel-parts thermistor
|
// 3 is mendel-parts thermistor
|
||||||
// 4 is 10k thermistor
|
// 4 is 10k thermistor !! do not use it for a hotend. It gives bad resolution at high temp. !!
|
||||||
// 5 is ParCan supplied 104GT-2 100K
|
// 5 is ParCan supplied 104GT-2 100K
|
||||||
// 6 is EPCOS 100k
|
// 6 is EPCOS 100k
|
||||||
// 7 is 100k Honeywell thermistor 135-104LAG-J01
|
// 7 is 100k Honeywell thermistor 135-104LAG-J01
|
||||||
|
|
||||||
#define THERMISTORHEATER_0 1
|
#define TEMP_SENSOR_0 6
|
||||||
//#define THERMISTORHEATER_1 1
|
#define TEMP_SENSOR_1 0
|
||||||
//#define THERMISTORHEATER_2 1
|
#define TEMP_SENSOR_2 0
|
||||||
|
#define TEMP_SENSOR_BED 1
|
||||||
#define HEATER_0_USES_THERMISTOR
|
|
||||||
//#define HEATER_1_USES_THERMISTOR
|
|
||||||
//#define HEATER_2_USES_THERMISTOR
|
|
||||||
//#define HEATER_0_USES_AD595
|
|
||||||
//#define HEATER_1_USES_AD595
|
|
||||||
//#define HEATER_2_USES_AD595
|
|
||||||
|
|
||||||
// Select one of these only to define how the bed temp is read.
|
|
||||||
#define THERMISTORBED 1
|
|
||||||
#define BED_USES_THERMISTOR
|
|
||||||
//#define BED_LIMIT_SWITCHING
|
|
||||||
#ifdef BED_LIMIT_SWITCHING
|
|
||||||
#define BED_HYSTERESIS 2 //only disable heating if T>target+BED_HYSTERESIS and enable heating if T>target-BED_HYSTERESIS
|
|
||||||
#endif
|
|
||||||
//#define BED_USES_AD595
|
|
||||||
|
|
||||||
#define BED_CHECK_INTERVAL 5000 //ms
|
|
||||||
|
|
||||||
//// Heating sanity check:
|
|
||||||
// This waits for the watchperiod in milliseconds whenever an M104 or M109 increases the target temperature
|
|
||||||
// If the temperature has not increased at the end of that period, the target temperature is set to zero.
|
|
||||||
// It can be reset with another M104/M109
|
|
||||||
//#define WATCHPERIOD 20000 //20 seconds
|
|
||||||
|
|
||||||
// Actual temperature must be close to target for this long before M109 returns success
|
// Actual temperature must be close to target for this long before M109 returns success
|
||||||
#define TEMP_RESIDENCY_TIME 30 // (seconds)
|
#define TEMP_RESIDENCY_TIME 30 // (seconds)
|
||||||
#define TEMP_HYSTERESIS 3 // (C°) range of +/- temperatures considered "close" to the target one
|
#define TEMP_HYSTERESIS 3 // (C°) range of +/- temperatures considered "close" to the target one
|
||||||
|
|
||||||
//// The minimal temperature defines the temperature below which the heater will not be enabled
|
|
||||||
//#define HEATER_0_MINTEMP 5
|
|
||||||
//#define HEATER_1_MINTEMP 5
|
|
||||||
//#define HEATER_2_MINTEMP 5
|
|
||||||
//#define BED_MINTEMP 5
|
|
||||||
|
|
||||||
|
// The minimal temperature defines the temperature below which the heater will not be enabled It is used
|
||||||
|
// to check that the wiring to the thermistor is not broken.
|
||||||
|
// Otherwise this would lead to the heater being powered on all the time.
|
||||||
|
#define HEATER_0_MINTEMP 5
|
||||||
|
#define HEATER_1_MINTEMP 5
|
||||||
|
#define HEATER_2_MINTEMP 5
|
||||||
|
#define BED_MINTEMP 5
|
||||||
|
|
||||||
// When temperature exceeds max temp, your heater will be switched off.
|
// When temperature exceeds max temp, your heater will be switched off.
|
||||||
// This feature exists to protect your hotend from overheating accidentally, but *NOT* from thermistor short/failure!
|
// This feature exists to protect your hotend from overheating accidentally, but *NOT* from thermistor short/failure!
|
||||||
// You should use MINTEMP for thermistor short/failure protection.
|
// You should use MINTEMP for thermistor short/failure protection.
|
||||||
#define HEATER_0_MAXTEMP 275
|
#define HEATER_0_MAXTEMP 275
|
||||||
//#define HEATER_1_MAXTEMP 275
|
#define HEATER_1_MAXTEMP 275
|
||||||
//#define HEATER_2_MAXTEMP 275
|
#define HEATER_2_MAXTEMP 275
|
||||||
//#define BED_MAXTEMP 150
|
#define BED_MAXTEMP 150
|
||||||
|
|
||||||
|
|
||||||
// Wait for Cooldown
|
|
||||||
// This defines if the M109 call should not block if it is cooling down.
|
|
||||||
// example: From a current temp of 220, you set M109 S200.
|
|
||||||
// if CooldownNoWait is defined M109 will not wait for the cooldown to finish
|
|
||||||
#define CooldownNoWait true
|
|
||||||
|
|
||||||
// Heating is finished if a temperature close to this degree shift is reached
|
|
||||||
#define HEATING_EARLY_FINISH_DEG_OFFSET 1 //Degree
|
|
||||||
|
|
||||||
// PID settings:
|
// PID settings:
|
||||||
// Uncomment the following line to enable PID support.
|
// Comment the following line to disable PID and enable bang-bang.
|
||||||
#define PIDTEMP
|
#define PIDTEMP
|
||||||
#define PID_MAX 255 // limits current to nozzle; 255=full current
|
#define PID_MAX 255 // limits current to nozzle; 255=full current
|
||||||
#ifdef PIDTEMP
|
#ifdef PIDTEMP
|
||||||
|
@ -113,28 +78,8 @@
|
||||||
#define K1 0.95 //smoothing factor withing the PID
|
#define K1 0.95 //smoothing factor withing the PID
|
||||||
#define PID_dT 0.128 //sampling period of the PID
|
#define PID_dT 0.128 //sampling period of the PID
|
||||||
|
|
||||||
//To develop some PID settings for your machine, you can initiall follow
|
// If you are using a preconfigured hotend then you can use one of the value sets by uncommenting it
|
||||||
// the Ziegler-Nichols method.
|
// Ultimaker
|
||||||
// set Ki and Kd to zero.
|
|
||||||
// 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_Kp 22.2
|
||||||
#define DEFAULT_Ki (1.25*PID_dT)
|
#define DEFAULT_Ki (1.25*PID_dT)
|
||||||
#define DEFAULT_Kd (99/PID_dT)
|
#define DEFAULT_Kd (99/PID_dT)
|
||||||
|
@ -148,38 +93,18 @@
|
||||||
// #define DEFAULT_Kp 63.0
|
// #define DEFAULT_Kp 63.0
|
||||||
// #define DEFAULT_Ki (2.25*PID_dT)
|
// #define DEFAULT_Ki (2.25*PID_dT)
|
||||||
// #define DEFAULT_Kd (440/PID_dT)
|
// #define DEFAULT_Kd (440/PID_dT)
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef PID_PI
|
|
||||||
//PI according to Ziegler-Nichols method
|
|
||||||
#define DEFAULT_Kp (PID_CRITIAL_GAIN/2.2)
|
|
||||||
#define DEFAULT_Ki (1.2*Kp/PID_SWING_AT_CRITIAL*PID_dT)
|
|
||||||
#define DEFAULT_Kd (0)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// this adds an experimental additional term to the heatingpower, proportional to the extrusion speed.
|
|
||||||
// if Kc is choosen well, the additional required power due to increased melting should be compensated.
|
|
||||||
#define PID_ADD_EXTRUSION_RATE
|
|
||||||
#ifdef PID_ADD_EXTRUSION_RATE
|
|
||||||
#define DEFAULT_Kc (1) //heatingpower=Kc*(e_speed)
|
|
||||||
#endif
|
|
||||||
#endif // PIDTEMP
|
#endif // PIDTEMP
|
||||||
|
|
||||||
// extruder run-out prevention.
|
//this prevents dangerous Extruder moves, i.e. if the temperature is under the limit
|
||||||
//if the machine is idle, and the temperature over MINTEMP, every couple of SECONDS some filament is extruded
|
//can be software-disabled for whatever purposes by
|
||||||
//#define EXTRUDER_RUNOUT_PREVENT
|
#define PREVENT_DANGEROUS_EXTRUDE
|
||||||
#define EXTRUDER_RUNOUT_MINTEMP 190
|
#define EXTRUDE_MINTEMP 170
|
||||||
#define EXTRUDER_RUNOUT_SECONDS 30.
|
#define EXTRUDE_MAXLENGTH (X_MAX_LENGTH+Y_MAX_LENGTH) //prevent extrusion of very large distances.
|
||||||
#define EXTRUDER_RUNOUT_ESTEPS 14. //mm filament
|
|
||||||
#define EXTRUDER_RUNOUT_SPEED 1500. //extrusion speed
|
|
||||||
#define EXTRUDER_RUNOUT_EXTRUDE 100
|
|
||||||
|
|
||||||
|
|
||||||
//===========================================================================
|
//===========================================================================
|
||||||
//=============================Mechanical Settings===========================
|
//=============================Mechanical Settings===========================
|
||||||
//===========================================================================
|
//===========================================================================
|
||||||
|
|
||||||
|
|
||||||
// Endstop Settings
|
// Endstop Settings
|
||||||
#define ENDSTOPPULLUPS // Comment this out (using // at the start of the line) to disable the endstop pullup resistors
|
#define ENDSTOPPULLUPS // Comment this out (using // at the start of the line) to disable the endstop pullup resistors
|
||||||
|
|
||||||
|
@ -187,9 +112,6 @@
|
||||||
const bool X_ENDSTOPS_INVERTING = false; // set to true to invert the logic of the endstops.
|
const bool X_ENDSTOPS_INVERTING = false; // set to true to invert the logic of the endstops.
|
||||||
const bool Y_ENDSTOPS_INVERTING = false; // set to true to invert the logic of the endstops.
|
const bool Y_ENDSTOPS_INVERTING = false; // set to true to invert the logic of the endstops.
|
||||||
const bool Z_ENDSTOPS_INVERTING = false; // set to true to invert the logic of the endstops.
|
const bool Z_ENDSTOPS_INVERTING = false; // set to true to invert the logic of the endstops.
|
||||||
// For optos H21LOB set to true, for Mendel-Parts newer optos TCST2103 set to false
|
|
||||||
|
|
||||||
#define ENDSTOPS_ONLY_FOR_HOMING // If defined the endstops will only be used for homing
|
|
||||||
|
|
||||||
// For Inverting Stepper Enable Pins (Active Low) use 0, Non Inverting (Active High) use 1
|
// For Inverting Stepper Enable Pins (Active Low) use 0, Non Inverting (Active High) use 1
|
||||||
#define X_ENABLE_ON 0
|
#define X_ENABLE_ON 0
|
||||||
|
@ -203,20 +125,14 @@ const bool Z_ENDSTOPS_INVERTING = false; // set to true to invert the logic of t
|
||||||
#define DISABLE_Z false
|
#define DISABLE_Z false
|
||||||
#define DISABLE_E false // For all extruders
|
#define DISABLE_E false // For all extruders
|
||||||
|
|
||||||
// Inverting axis direction
|
|
||||||
//#define INVERT_X_DIR false // for Mendel set to false, for Orca set to true
|
|
||||||
//#define INVERT_Y_DIR true // for Mendel set to true, for Orca set to false
|
|
||||||
//#define INVERT_Z_DIR false // for Mendel set to false, for Orca set to true
|
|
||||||
//#define INVERT_E*_DIR true // for direct drive extruder v9 set to true, for geared extruder set to false, used for all extruders
|
|
||||||
|
|
||||||
#define INVERT_X_DIR false // for Mendel set to false, for Orca set to true
|
#define INVERT_X_DIR false // for Mendel set to false, for Orca set to true
|
||||||
#define INVERT_Y_DIR false // for Mendel set to true, for Orca set to false
|
#define INVERT_Y_DIR false // for Mendel set to true, for Orca set to false
|
||||||
#define INVERT_Z_DIR false // for Mendel set to false, for Orca set to true
|
#define INVERT_Z_DIR true // for Mendel set to false, for Orca set to true
|
||||||
#define INVERT_E0_DIR false // for direct drive extruder v9 set to true, for geared extruder set to false
|
#define INVERT_E0_DIR false // for direct drive extruder v9 set to true, for geared extruder set to false
|
||||||
#define INVERT_E1_DIR false // for direct drive extruder v9 set to true, for geared extruder set to false
|
#define INVERT_E1_DIR false // for direct drive extruder v9 set to true, for geared extruder set to false
|
||||||
#define INVERT_E2_DIR false // for direct drive extruder v9 set to true, for geared extruder set to false
|
#define INVERT_E2_DIR false // for direct drive extruder v9 set to true, for geared extruder set to false
|
||||||
|
|
||||||
//// ENDSTOP SETTINGS:
|
// ENDSTOP SETTINGS:
|
||||||
// Sets direction of endstops when homing; 1=MAX, -1=MIN
|
// Sets direction of endstops when homing; 1=MAX, -1=MIN
|
||||||
#define X_HOME_DIR -1
|
#define X_HOME_DIR -1
|
||||||
#define Y_HOME_DIR -1
|
#define Y_HOME_DIR -1
|
||||||
|
@ -232,44 +148,19 @@ const bool Z_ENDSTOPS_INVERTING = false; // set to true to invert the logic of t
|
||||||
#define NUM_AXIS 4 // The axis order in all axis related arrays is X, Y, Z, E
|
#define NUM_AXIS 4 // The axis order in all axis related arrays is X, Y, Z, E
|
||||||
#define HOMING_FEEDRATE {50*60, 50*60, 4*60, 0} // set the homing speeds (mm/min)
|
#define HOMING_FEEDRATE {50*60, 50*60, 4*60, 0} // set the homing speeds (mm/min)
|
||||||
|
|
||||||
//homing hits the endstop, then retracts by this distance, before it tries to slowly bump again:
|
|
||||||
#define X_HOME_RETRACT_MM 5
|
|
||||||
#define Y_HOME_RETRACT_MM 5
|
|
||||||
#define Z_HOME_RETRACT_MM 1
|
|
||||||
#define QUICK_HOME //if this is defined, if both x and y are to be homed, a diagonal move will be performed initially.
|
|
||||||
|
|
||||||
#define AXIS_RELATIVE_MODES {false, false, false, false}
|
|
||||||
|
|
||||||
#define MAX_STEP_FREQUENCY 40000 // Max step frequency for Ultimaker (5000 pps / half step)
|
|
||||||
|
|
||||||
// default settings
|
// default settings
|
||||||
|
|
||||||
#define DEFAULT_AXIS_STEPS_PER_UNIT {78.7402,78.7402,200*8/3,760*1.1} // default steps per unit for ultimaker
|
#define DEFAULT_AXIS_STEPS_PER_UNIT {80,80,2560,760*1.1} // default steps per unit for ultimaker
|
||||||
//#define DEFAULT_AXIS_STEPS_PER_UNIT {40, 40, 3333.92, 360} //sells mendel with v9 extruder
|
|
||||||
//#define DEFAULT_AXIS_STEPS_PER_UNIT {80.3232, 80.8900, 2284.7651, 757.2218} // SAE Prusa w/ Wade extruder
|
|
||||||
#define DEFAULT_MAX_FEEDRATE {500, 500, 5, 45} // (mm/sec)
|
#define DEFAULT_MAX_FEEDRATE {500, 500, 5, 45} // (mm/sec)
|
||||||
#define DEFAULT_MAX_ACCELERATION {9000,9000,100,10000} // X, Y, Z, E maximum start speed for accelerated moves. E default values are good for skeinforge 40+, for older versions raise them a lot.
|
#define DEFAULT_MAX_ACCELERATION {9000,9000,100,10000} // X, Y, Z, E maximum start speed for accelerated moves. E default values are good for skeinforge 40+, for older versions raise them a lot.
|
||||||
|
|
||||||
#define DEFAULT_ACCELERATION 3000 // X, Y, Z and E max acceleration in mm/s^2 for printing moves
|
#define DEFAULT_ACCELERATION 3000 // X, Y, Z and E max acceleration in mm/s^2 for printing moves
|
||||||
#define DEFAULT_RETRACT_ACCELERATION 3000 // X, Y, Z and E max acceleration in mm/s^2 for r retracts
|
#define DEFAULT_RETRACT_ACCELERATION 3000 // X, Y, Z and E max acceleration in mm/s^2 for r retracts
|
||||||
|
|
||||||
#define DEFAULT_MINIMUMFEEDRATE 0.0 // minimum feedrate
|
//
|
||||||
#define DEFAULT_MINTRAVELFEEDRATE 0.0
|
|
||||||
|
|
||||||
// minimum time in microseconds that a movement needs to take if the buffer is emptied. Increase this number if you see blobs while
|
|
||||||
//printing high speed & high detail. It will slowdown on the detailed stuff.
|
|
||||||
#define DEFAULT_MINSEGMENTTIME 20000 // Obsolete delete this
|
|
||||||
#define DEFAULT_XYJERK 20.0 // (mm/sec)
|
#define DEFAULT_XYJERK 20.0 // (mm/sec)
|
||||||
#define DEFAULT_ZJERK 0.4 // (mm/sec)
|
#define DEFAULT_ZJERK 0.4 // (mm/sec)
|
||||||
|
|
||||||
// If defined the movements slow down when the look ahead buffer is only half full
|
|
||||||
#define SLOWDOWN
|
|
||||||
|
|
||||||
//default stepper release if idle
|
|
||||||
#define DEFAULT_STEPPER_DEACTIVE_TIME 60
|
|
||||||
#define DEFAULT_STEPPER_DEACTIVE_COMMAND "M84 X Y E" //z stays powered
|
|
||||||
|
|
||||||
|
|
||||||
//===========================================================================
|
//===========================================================================
|
||||||
//=============================Additional Features===========================
|
//=============================Additional Features===========================
|
||||||
//===========================================================================
|
//===========================================================================
|
||||||
|
@ -285,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.
|
// please keep turned on if you can.
|
||||||
#define EEPROM_CHITCHAT
|
#define EEPROM_CHITCHAT
|
||||||
|
|
||||||
|
|
||||||
// The hardware watchdog should halt the Microcontroller, in case the firmware gets stuck somewhere. However:
|
|
||||||
// the Watchdog is not working well, so please only enable this for testing
|
|
||||||
// this enables the watchdog interrupt.
|
|
||||||
//#define USE_WATCHDOG
|
|
||||||
//#ifdef USE_WATCHDOG
|
|
||||||
// you cannot reboot on a mega2560 due to a bug in he bootloader. Hence, you have to reset manually, and this is done hereby:
|
|
||||||
//#define RESET_MANUAL
|
|
||||||
//#define WATCHDOG_TIMEOUT 4 //seconds
|
|
||||||
//#endif
|
|
||||||
|
|
||||||
// extruder advance constant (s2/mm3)
|
|
||||||
//
|
|
||||||
// advance (steps) = STEPS_PER_CUBIC_MM_E * EXTUDER_ADVANCE_K * cubic mm per second ^ 2
|
|
||||||
//
|
|
||||||
// hooke's law says: force = k * distance
|
|
||||||
// bernoulli's priniciple says: v ^ 2 / 2 + g . h + pressure / density = constant
|
|
||||||
// so: v ^ 2 is proportional to number of steps we advance the extruder
|
|
||||||
//#define ADVANCE
|
|
||||||
|
|
||||||
#ifdef ADVANCE
|
|
||||||
#define EXTRUDER_ADVANCE_K .0
|
|
||||||
|
|
||||||
#define D_FILAMENT 2.85
|
|
||||||
#define STEPS_MM_E 836
|
|
||||||
#define EXTRUTION_AREA (0.25 * D_FILAMENT * D_FILAMENT * 3.14159)
|
|
||||||
#define STEPS_PER_CUBIC_MM_E (axis_steps_per_unit[E_AXIS]/ EXTRUTION_AREA)
|
|
||||||
|
|
||||||
#endif // ADVANCE
|
|
||||||
|
|
||||||
|
|
||||||
//LCD and SD support
|
//LCD and SD support
|
||||||
//#define ULTRA_LCD //general lcd support, also 16x2
|
//#define ULTRA_LCD //general lcd support, also 16x2
|
||||||
//#define SDSUPPORT // Enable SD Card Support in Hardware Console
|
#define SDSUPPORT // Enable SD Card Support in Hardware Console
|
||||||
#define SD_FINISHED_STEPPERRELEASE true //if sd support and the file is finished: disable steppers?
|
|
||||||
#define SD_FINISHED_RELEASECOMMAND "M84 X Y E" // no z because of layer shift.
|
|
||||||
|
|
||||||
#define ULTIPANEL
|
#define ULTIPANEL
|
||||||
#ifdef ULTIPANEL
|
#ifdef ULTIPANEL
|
||||||
|
@ -336,62 +194,11 @@ const bool Z_ENDSTOPS_INVERTING = false; // set to true to invert the logic of t
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// A debugging feature to compare calculated vs performed steps, to see if steps are lost by the software.
|
|
||||||
//#define DEBUG_STEPS
|
|
||||||
|
|
||||||
|
|
||||||
// Arc interpretation settings:
|
|
||||||
#define MM_PER_ARC_SEGMENT 1
|
|
||||||
#define N_ARC_CORRECTION 25
|
|
||||||
|
|
||||||
|
|
||||||
//automatic temperature: The hot end target temperature is calculated by all the buffered lines of gcode.
|
|
||||||
//The maximum buffered steps/sec of the extruder motor are called "se".
|
|
||||||
//You enter the autotemp mode by a M109 S<mintemp> T<maxtemp> F<factor>
|
|
||||||
// the target temperature is set to mintemp+factor*se[steps/sec] and limited by mintemp and maxtemp
|
|
||||||
// you exit the value by any M109 without F*
|
|
||||||
// Also, if the temperature is set to a value <mintemp, it is not changed by autotemp.
|
|
||||||
// on an ultimaker, some initial testing worked with M109 S215 T260 F0.1 in the start.gcode
|
|
||||||
//#define AUTOTEMP
|
|
||||||
#ifdef AUTOTEMP
|
|
||||||
#define AUTOTEMP_OLDWEIGHT 0.98
|
|
||||||
#endif
|
|
||||||
|
|
||||||
//this prevents dangerous Extruder moves, i.e. if the temperature is under the limit
|
|
||||||
//can be software-disabled for whatever purposes by
|
|
||||||
#define PREVENT_DANGEROUS_EXTRUDE
|
|
||||||
#define EXTRUDE_MINTEMP 0
|
|
||||||
#define EXTRUDE_MAXLENGTH (X_MAX_LENGTH+Y_MAX_LENGTH) //prevent extrusion of very large distances.
|
|
||||||
|
|
||||||
const int dropsegments=5; //everything with less than this number of steps will be ignored as move and joined with the next movement
|
|
||||||
|
|
||||||
|
|
||||||
// M240 Triggers a camera by emulating a Canon RC-1 Remote
|
// M240 Triggers a camera by emulating a Canon RC-1 Remote
|
||||||
// Data from: http://www.doc-diy.net/photo/rc-1_hacked/
|
// Data from: http://www.doc-diy.net/photo/rc-1_hacked/
|
||||||
// #define PHOTOGRAPH_PIN 23
|
// #define PHOTOGRAPH_PIN 23
|
||||||
|
|
||||||
//===========================================================================
|
#include "Configuration_adv.h"
|
||||||
//=============================Buffers ============================
|
|
||||||
//===========================================================================
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// The number of linear motions that can be in the plan at any give time.
|
|
||||||
// THE BLOCK_BUFFER_SIZE NEEDS TO BE A POWER OF 2, i.g. 8,16,32 because shifts and ors are used to do the ringbuffering.
|
|
||||||
#if defined SDSUPPORT
|
|
||||||
#define BLOCK_BUFFER_SIZE 16 // SD,LCD,Buttons take more memory, block buffer needs to be smaller
|
|
||||||
#else
|
|
||||||
#define BLOCK_BUFFER_SIZE 16 // maximize block buffer
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
//The ASCII buffer for recieving from the serial:
|
|
||||||
#define MAX_CMD_SIZE 96
|
|
||||||
#define BUFSIZE 4
|
|
||||||
|
|
||||||
|
|
||||||
#include "thermistortables.h"
|
#include "thermistortables.h"
|
||||||
|
|
||||||
#endif //__CONFIGURATION_H
|
#endif //__CONFIGURATION_H
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,397 +0,0 @@
|
||||||
#ifndef __CONFIGURATION_H
|
|
||||||
#define __CONFIGURATION_H
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// This determines the communication speed of the printer
|
|
||||||
//#define BAUDRATE 250000
|
|
||||||
#define BAUDRATE 115200
|
|
||||||
//#define BAUDRATE 230400
|
|
||||||
|
|
||||||
#define EXTRUDERS 1
|
|
||||||
|
|
||||||
// Frequency limit
|
|
||||||
// See nophead's blog for more info
|
|
||||||
// Not working O
|
|
||||||
//#define XY_FREQUENCY_LIMIT 15
|
|
||||||
|
|
||||||
// Minimum planner junction speed. Sets the default minimum speed the planner plans for at the end
|
|
||||||
// of the buffer and all stops. This should not be much greater than zero and should only be changed
|
|
||||||
// if unwanted behavior is observed on a user's machine when running at very slow speeds.
|
|
||||||
#define MINIMUM_PLANNER_SPEED 2.0 // (mm/sec)
|
|
||||||
|
|
||||||
// BASIC SETTINGS: select your board type, thermistor type, axis scaling, and endstop configuration
|
|
||||||
|
|
||||||
//// The following define selects which electronics board you have. Please choose the one that matches your setup
|
|
||||||
// MEGA/RAMPS up to 1.2 = 3,
|
|
||||||
// RAMPS 1.3 = 33
|
|
||||||
// Gen6 = 5,
|
|
||||||
// Sanguinololu 1.2 and above = 62
|
|
||||||
// Gen7 = 77,
|
|
||||||
// Ultimaker = 7,
|
|
||||||
// Teensylu = 8
|
|
||||||
#define MOTHERBOARD 77
|
|
||||||
|
|
||||||
//===========================================================================
|
|
||||||
//=============================Thermal Settings ============================
|
|
||||||
//===========================================================================
|
|
||||||
|
|
||||||
//// Thermistor settings:
|
|
||||||
// 1 is 100k thermistor
|
|
||||||
// 2 is 200k thermistor
|
|
||||||
// 3 is mendel-parts thermistor
|
|
||||||
// 4 is 10k thermistor
|
|
||||||
// 5 is ParCan supplied 104GT-2 100K
|
|
||||||
// 6 is EPCOS 100k
|
|
||||||
// 7 is 100k Honeywell thermistor 135-104LAG-J01
|
|
||||||
|
|
||||||
#define THERMISTORHEATER_0 1
|
|
||||||
//#define THERMISTORHEATER_1 1
|
|
||||||
//#define THERMISTORHEATER_2 1
|
|
||||||
|
|
||||||
#define HEATER_0_USES_THERMISTOR
|
|
||||||
//#define HEATER_1_USES_THERMISTOR
|
|
||||||
//#define HEATER_2_USES_THERMISTOR
|
|
||||||
//#define HEATER_0_USES_AD595
|
|
||||||
//#define HEATER_1_USES_AD595
|
|
||||||
//#define HEATER_2_USES_AD595
|
|
||||||
|
|
||||||
// Select one of these only to define how the bed temp is read.
|
|
||||||
#define THERMISTORBED 1
|
|
||||||
#define BED_USES_THERMISTOR
|
|
||||||
//#define BED_LIMIT_SWITCHING
|
|
||||||
#ifdef BED_LIMIT_SWITCHING
|
|
||||||
#define BED_HYSTERESIS 2 //only disable heating if T>target+BED_HYSTERESIS and enable heating if T>target-BED_HYSTERESIS
|
|
||||||
#endif
|
|
||||||
//#define BED_USES_AD595
|
|
||||||
|
|
||||||
#define BED_CHECK_INTERVAL 5000 //ms
|
|
||||||
|
|
||||||
//// Heating sanity check:
|
|
||||||
// This waits for the watchperiod in milliseconds whenever an M104 or M109 increases the target temperature
|
|
||||||
// If the temperature has not increased at the end of that period, the target temperature is set to zero.
|
|
||||||
// It can be reset with another M104/M109
|
|
||||||
//#define WATCHPERIOD 20000 //20 seconds
|
|
||||||
|
|
||||||
// Actual temperature must be close to target for this long before M109 returns success
|
|
||||||
#define TEMP_RESIDENCY_TIME 30 // (seconds)
|
|
||||||
#define TEMP_HYSTERESIS 3 // (C°) range of +/- temperatures considered "close" to the target one
|
|
||||||
|
|
||||||
//// The minimal temperature defines the temperature below which the heater will not be enabled
|
|
||||||
//#define HEATER_0_MINTEMP 5
|
|
||||||
//#define HEATER_1_MINTEMP 5
|
|
||||||
//#define HEATER_2_MINTEMP 5
|
|
||||||
//#define BED_MINTEMP 5
|
|
||||||
|
|
||||||
|
|
||||||
// When temperature exceeds max temp, your heater will be switched off.
|
|
||||||
// This feature exists to protect your hotend from overheating accidentally, but *NOT* from thermistor short/failure!
|
|
||||||
// You should use MINTEMP for thermistor short/failure protection.
|
|
||||||
#define HEATER_0_MAXTEMP 275
|
|
||||||
//#define HEATER_1_MAXTEMP 275
|
|
||||||
//#define HEATER_2_MAXTEMP 275
|
|
||||||
//#define BED_MAXTEMP 150
|
|
||||||
|
|
||||||
|
|
||||||
// Wait for Cooldown
|
|
||||||
// This defines if the M109 call should not block if it is cooling down.
|
|
||||||
// example: From a current temp of 220, you set M109 S200.
|
|
||||||
// if CooldownNoWait is defined M109 will not wait for the cooldown to finish
|
|
||||||
#define CooldownNoWait true
|
|
||||||
|
|
||||||
// Heating is finished if a temperature close to this degree shift is reached
|
|
||||||
#define HEATING_EARLY_FINISH_DEG_OFFSET 1 //Degree
|
|
||||||
|
|
||||||
// PID settings:
|
|
||||||
// Uncomment the following line to enable PID support.
|
|
||||||
#define PIDTEMP
|
|
||||||
#define PID_MAX 255 // limits current to nozzle; 255=full current
|
|
||||||
#ifdef PIDTEMP
|
|
||||||
//#define PID_DEBUG // Sends debug data to the serial port.
|
|
||||||
//#define PID_OPENLOOP 1 // Puts PID in open loop. M104 sets the output power in %
|
|
||||||
#define PID_INTEGRAL_DRIVE_MAX 255 //limit for the integral term
|
|
||||||
#define K1 0.95 //smoothing factor withing the PID
|
|
||||||
#define PID_dT 0.128 //sampling period of the PID
|
|
||||||
|
|
||||||
//To develop some PID settings for your machine, you can initiall follow
|
|
||||||
// the Ziegler-Nichols method.
|
|
||||||
// set Ki and Kd to zero.
|
|
||||||
// heat with a defined Kp and see if the temperature stabilizes
|
|
||||||
// ideally you do this graphically with repg.
|
|
||||||
// the PID_CRITIAL_GAIN should be the Kp at which temperature oscillatins are not dampned out/decreas in amplitutde
|
|
||||||
// PID_SWING_AT_CRITIAL is the time for a full period of the oscillations at the critical Gain
|
|
||||||
// usually further manual tunine is necessary.
|
|
||||||
|
|
||||||
#define PID_CRITIAL_GAIN 50
|
|
||||||
#define PID_SWING_AT_CRITIAL 47 //seconds
|
|
||||||
|
|
||||||
//#define PID_PI //no differentail term
|
|
||||||
#define PID_PID //normal PID
|
|
||||||
|
|
||||||
#ifdef PID_PID
|
|
||||||
//PID according to Ziegler-Nichols method
|
|
||||||
// #define DEFAULT_Kp (0.6*PID_CRITIAL_GAIN)
|
|
||||||
// #define DEFAULT_Ki (2*Kp/PID_SWING_AT_CRITIAL*PID_dT)
|
|
||||||
// #define DEFAULT_Kd (PID_SWING_AT_CRITIAL/8./PID_dT)
|
|
||||||
|
|
||||||
// Ultitmaker
|
|
||||||
#define DEFAULT_Kp 22.2
|
|
||||||
#define DEFAULT_Ki (1.25*PID_dT)
|
|
||||||
#define DEFAULT_Kd (99/PID_dT)
|
|
||||||
|
|
||||||
// Makergear
|
|
||||||
// #define DEFAULT_Kp 7.0
|
|
||||||
// #define DEFAULT_Ki 0.1
|
|
||||||
// #define DEFAULT_Kd 12
|
|
||||||
|
|
||||||
// Mendel Parts V9 on 12V
|
|
||||||
// #define DEFAULT_Kp 63.0
|
|
||||||
// #define DEFAULT_Ki (2.25*PID_dT)
|
|
||||||
// #define DEFAULT_Kd (440/PID_dT)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef PID_PI
|
|
||||||
//PI according to Ziegler-Nichols method
|
|
||||||
#define DEFAULT_Kp (PID_CRITIAL_GAIN/2.2)
|
|
||||||
#define DEFAULT_Ki (1.2*Kp/PID_SWING_AT_CRITIAL*PID_dT)
|
|
||||||
#define DEFAULT_Kd (0)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// this adds an experimental additional term to the heatingpower, proportional to the extrusion speed.
|
|
||||||
// if Kc is choosen well, the additional required power due to increased melting should be compensated.
|
|
||||||
#define PID_ADD_EXTRUSION_RATE
|
|
||||||
#ifdef PID_ADD_EXTRUSION_RATE
|
|
||||||
#define DEFAULT_Kc (1) //heatingpower=Kc*(e_speed)
|
|
||||||
#endif
|
|
||||||
#endif // PIDTEMP
|
|
||||||
|
|
||||||
// extruder run-out prevention.
|
|
||||||
//if the machine is idle, and the temperature over MINTEMP, every couple of SECONDS some filament is extruded
|
|
||||||
//#define EXTRUDER_RUNOUT_PREVENT
|
|
||||||
#define EXTRUDER_RUNOUT_MINTEMP 190
|
|
||||||
#define EXTRUDER_RUNOUT_SECONDS 30.
|
|
||||||
#define EXTRUDER_RUNOUT_ESTEPS 14. //mm filament
|
|
||||||
#define EXTRUDER_RUNOUT_SPEED 1500. //extrusion speed
|
|
||||||
#define EXTRUDER_RUNOUT_EXTRUDE 100
|
|
||||||
|
|
||||||
|
|
||||||
//===========================================================================
|
|
||||||
//=============================Mechanical Settings===========================
|
|
||||||
//===========================================================================
|
|
||||||
|
|
||||||
|
|
||||||
// Endstop Settings
|
|
||||||
#define ENDSTOPPULLUPS // Comment this out (using // at the start of the line) to disable the endstop pullup resistors
|
|
||||||
|
|
||||||
// The pullups are needed if you directly connect a mechanical endswitch between the signal and ground pins.
|
|
||||||
const bool X_ENDSTOPS_INVERTING = false; // set to true to invert the logic of the endstops.
|
|
||||||
const bool Y_ENDSTOPS_INVERTING = false; // set to true to invert the logic of the endstops.
|
|
||||||
const bool Z_ENDSTOPS_INVERTING = false; // set to true to invert the logic of the endstops.
|
|
||||||
// For optos H21LOB set to true, for Mendel-Parts newer optos TCST2103 set to false
|
|
||||||
|
|
||||||
#define ENDSTOPS_ONLY_FOR_HOMING // If defined the endstops will only be used for homing
|
|
||||||
|
|
||||||
// For Inverting Stepper Enable Pins (Active Low) use 0, Non Inverting (Active High) use 1
|
|
||||||
#define X_ENABLE_ON 0
|
|
||||||
#define Y_ENABLE_ON 0
|
|
||||||
#define Z_ENABLE_ON 0
|
|
||||||
#define E_ENABLE_ON 0 // For all extruders
|
|
||||||
|
|
||||||
// Disables axis when it's not being used.
|
|
||||||
#define DISABLE_X false
|
|
||||||
#define DISABLE_Y false
|
|
||||||
#define DISABLE_Z false
|
|
||||||
#define DISABLE_E false // For all extruders
|
|
||||||
|
|
||||||
// Inverting axis direction
|
|
||||||
//#define INVERT_X_DIR false // for Mendel set to false, for Orca set to true
|
|
||||||
//#define INVERT_Y_DIR true // for Mendel set to true, for Orca set to false
|
|
||||||
//#define INVERT_Z_DIR false // for Mendel set to false, for Orca set to true
|
|
||||||
//#define INVERT_E*_DIR true // for direct drive extruder v9 set to true, for geared extruder set to false, used for all extruders
|
|
||||||
|
|
||||||
#define INVERT_X_DIR false // for Mendel set to false, for Orca set to true
|
|
||||||
#define INVERT_Y_DIR false // for Mendel set to true, for Orca set to false
|
|
||||||
#define INVERT_Z_DIR false // for Mendel set to false, for Orca set to true
|
|
||||||
#define INVERT_E0_DIR false // for direct drive extruder v9 set to true, for geared extruder set to false
|
|
||||||
#define INVERT_E1_DIR false // for direct drive extruder v9 set to true, for geared extruder set to false
|
|
||||||
#define INVERT_E2_DIR false // for direct drive extruder v9 set to true, for geared extruder set to false
|
|
||||||
|
|
||||||
//// ENDSTOP SETTINGS:
|
|
||||||
// Sets direction of endstops when homing; 1=MAX, -1=MIN
|
|
||||||
#define X_HOME_DIR -1
|
|
||||||
#define Y_HOME_DIR -1
|
|
||||||
#define Z_HOME_DIR -1
|
|
||||||
|
|
||||||
#define min_software_endstops true //If true, axis won't move to coordinates less than zero.
|
|
||||||
#define max_software_endstops true //If true, axis won't move to coordinates greater than the defined lengths below.
|
|
||||||
#define X_MAX_LENGTH 205
|
|
||||||
#define Y_MAX_LENGTH 205
|
|
||||||
#define Z_MAX_LENGTH 200
|
|
||||||
|
|
||||||
//// MOVEMENT SETTINGS
|
|
||||||
#define NUM_AXIS 4 // The axis order in all axis related arrays is X, Y, Z, E
|
|
||||||
#define HOMING_FEEDRATE {50*60, 50*60, 4*60, 0} // set the homing speeds (mm/min)
|
|
||||||
|
|
||||||
//homing hits the endstop, then retracts by this distance, before it tries to slowly bump again:
|
|
||||||
#define X_HOME_RETRACT_MM 5
|
|
||||||
#define Y_HOME_RETRACT_MM 5
|
|
||||||
#define Z_HOME_RETRACT_MM 1
|
|
||||||
#define QUICK_HOME //if this is defined, if both x and y are to be homed, a diagonal move will be performed initially.
|
|
||||||
|
|
||||||
#define AXIS_RELATIVE_MODES {false, false, false, false}
|
|
||||||
|
|
||||||
#define MAX_STEP_FREQUENCY 40000 // Max step frequency for Ultimaker (5000 pps / half step)
|
|
||||||
|
|
||||||
// default settings
|
|
||||||
|
|
||||||
#define DEFAULT_AXIS_STEPS_PER_UNIT {78.7402,78.7402,200*8/3,760*1.1} // default steps per unit for ultimaker
|
|
||||||
//#define DEFAULT_AXIS_STEPS_PER_UNIT {40, 40, 3333.92, 360} //sells mendel with v9 extruder
|
|
||||||
//#define DEFAULT_AXIS_STEPS_PER_UNIT {80.3232, 80.8900, 2284.7651, 757.2218} // SAE Prusa w/ Wade extruder
|
|
||||||
#define DEFAULT_MAX_FEEDRATE {500, 500, 5, 45} // (mm/sec)
|
|
||||||
#define DEFAULT_MAX_ACCELERATION {9000,9000,100,10000} // X, Y, Z, E maximum start speed for accelerated moves. E default values are good for skeinforge 40+, for older versions raise them a lot.
|
|
||||||
|
|
||||||
#define DEFAULT_ACCELERATION 3000 // X, Y, Z and E max acceleration in mm/s^2 for printing moves
|
|
||||||
#define DEFAULT_RETRACT_ACCELERATION 3000 // X, Y, Z and E max acceleration in mm/s^2 for r retracts
|
|
||||||
|
|
||||||
#define DEFAULT_MINIMUMFEEDRATE 0.0 // minimum feedrate
|
|
||||||
#define DEFAULT_MINTRAVELFEEDRATE 0.0
|
|
||||||
|
|
||||||
// minimum time in microseconds that a movement needs to take if the buffer is emptied. Increase this number if you see blobs while
|
|
||||||
//printing high speed & high detail. It will slowdown on the detailed stuff.
|
|
||||||
#define DEFAULT_MINSEGMENTTIME 20000 // Obsolete delete this
|
|
||||||
#define DEFAULT_XYJERK 20.0 // (mm/sec)
|
|
||||||
#define DEFAULT_ZJERK 0.4 // (mm/sec)
|
|
||||||
|
|
||||||
// If defined the movements slow down when the look ahead buffer is only half full
|
|
||||||
#define SLOWDOWN
|
|
||||||
|
|
||||||
//default stepper release if idle
|
|
||||||
#define DEFAULT_STEPPER_DEACTIVE_TIME 60
|
|
||||||
#define DEFAULT_STEPPER_DEACTIVE_COMMAND "M84 X Y E" //z stays powered
|
|
||||||
|
|
||||||
|
|
||||||
//===========================================================================
|
|
||||||
//=============================Additional Features===========================
|
|
||||||
//===========================================================================
|
|
||||||
|
|
||||||
// EEPROM
|
|
||||||
// the microcontroller can store settings in the EEPROM, e.g. max velocity...
|
|
||||||
// M500 - stores paramters in EEPROM
|
|
||||||
// M501 - reads parameters from EEPROM (if you need reset them after you changed them temporarily).
|
|
||||||
// M502 - reverts to the default "factory settings". You still need to store them in EEPROM afterwards if you want to.
|
|
||||||
//define this to enable eeprom support
|
|
||||||
#define EEPROM_SETTINGS
|
|
||||||
//to disable EEPROM Serial responses and decrease program space by ~1700 byte: comment this out:
|
|
||||||
// please keep turned on if you can.
|
|
||||||
#define EEPROM_CHITCHAT
|
|
||||||
|
|
||||||
|
|
||||||
// The hardware watchdog should halt the Microcontroller, in case the firmware gets stuck somewhere. However:
|
|
||||||
// the Watchdog is not working well, so please only enable this for testing
|
|
||||||
// this enables the watchdog interrupt.
|
|
||||||
//#define USE_WATCHDOG
|
|
||||||
//#ifdef USE_WATCHDOG
|
|
||||||
// you cannot reboot on a mega2560 due to a bug in he bootloader. Hence, you have to reset manually, and this is done hereby:
|
|
||||||
//#define RESET_MANUAL
|
|
||||||
//#define WATCHDOG_TIMEOUT 4 //seconds
|
|
||||||
//#endif
|
|
||||||
|
|
||||||
// extruder advance constant (s2/mm3)
|
|
||||||
//
|
|
||||||
// advance (steps) = STEPS_PER_CUBIC_MM_E * EXTUDER_ADVANCE_K * cubic mm per second ^ 2
|
|
||||||
//
|
|
||||||
// hooke's law says: force = k * distance
|
|
||||||
// bernoulli's priniciple says: v ^ 2 / 2 + g . h + pressure / density = constant
|
|
||||||
// so: v ^ 2 is proportional to number of steps we advance the extruder
|
|
||||||
//#define ADVANCE
|
|
||||||
|
|
||||||
#ifdef ADVANCE
|
|
||||||
#define EXTRUDER_ADVANCE_K .0
|
|
||||||
|
|
||||||
#define D_FILAMENT 2.85
|
|
||||||
#define STEPS_MM_E 836
|
|
||||||
#define EXTRUTION_AREA (0.25 * D_FILAMENT * D_FILAMENT * 3.14159)
|
|
||||||
#define STEPS_PER_CUBIC_MM_E (axis_steps_per_unit[E_AXIS]/ EXTRUTION_AREA)
|
|
||||||
|
|
||||||
#endif // ADVANCE
|
|
||||||
|
|
||||||
|
|
||||||
//LCD and SD support
|
|
||||||
//#define ULTRA_LCD //general lcd support, also 16x2
|
|
||||||
//#define SDSUPPORT // Enable SD Card Support in Hardware Console
|
|
||||||
#define SD_FINISHED_STEPPERRELEASE true //if sd support and the file is finished: disable steppers?
|
|
||||||
#define SD_FINISHED_RELEASECOMMAND "M84 X Y E" // no z because of layer shift.
|
|
||||||
|
|
||||||
#define ULTIPANEL
|
|
||||||
#ifdef ULTIPANEL
|
|
||||||
#define NEWPANEL //enable this if you have a click-encoder panel
|
|
||||||
#define SDSUPPORT
|
|
||||||
#define ULTRA_LCD
|
|
||||||
#define LCD_WIDTH 20
|
|
||||||
#define LCD_HEIGHT 4
|
|
||||||
#else //no panel but just lcd
|
|
||||||
#ifdef ULTRA_LCD
|
|
||||||
#define LCD_WIDTH 16
|
|
||||||
#define LCD_HEIGHT 2
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// A debugging feature to compare calculated vs performed steps, to see if steps are lost by the software.
|
|
||||||
//#define DEBUG_STEPS
|
|
||||||
|
|
||||||
|
|
||||||
// Arc interpretation settings:
|
|
||||||
#define MM_PER_ARC_SEGMENT 1
|
|
||||||
#define N_ARC_CORRECTION 25
|
|
||||||
|
|
||||||
|
|
||||||
//automatic temperature: The hot end target temperature is calculated by all the buffered lines of gcode.
|
|
||||||
//The maximum buffered steps/sec of the extruder motor are called "se".
|
|
||||||
//You enter the autotemp mode by a M109 S<mintemp> T<maxtemp> F<factor>
|
|
||||||
// the target temperature is set to mintemp+factor*se[steps/sec] and limited by mintemp and maxtemp
|
|
||||||
// you exit the value by any M109 without F*
|
|
||||||
// Also, if the temperature is set to a value <mintemp, it is not changed by autotemp.
|
|
||||||
// on an ultimaker, some initial testing worked with M109 S215 T260 F0.1 in the start.gcode
|
|
||||||
//#define AUTOTEMP
|
|
||||||
#ifdef AUTOTEMP
|
|
||||||
#define AUTOTEMP_OLDWEIGHT 0.98
|
|
||||||
#endif
|
|
||||||
|
|
||||||
//this prevents dangerous Extruder moves, i.e. if the temperature is under the limit
|
|
||||||
//can be software-disabled for whatever purposes by
|
|
||||||
#define PREVENT_DANGEROUS_EXTRUDE
|
|
||||||
#define EXTRUDE_MINTEMP 0
|
|
||||||
#define EXTRUDE_MAXLENGTH (X_MAX_LENGTH+Y_MAX_LENGTH) //prevent extrusion of very large distances.
|
|
||||||
|
|
||||||
const int dropsegments=5; //everything with less than this number of steps will be ignored as move and joined with the next movement
|
|
||||||
|
|
||||||
|
|
||||||
// M240 Triggers a camera by emulating a Canon RC-1 Remote
|
|
||||||
// Data from: http://www.doc-diy.net/photo/rc-1_hacked/
|
|
||||||
// #define PHOTOGRAPH_PIN 23
|
|
||||||
|
|
||||||
//===========================================================================
|
|
||||||
//=============================Buffers ============================
|
|
||||||
//===========================================================================
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// The number of linear motions that can be in the plan at any give time.
|
|
||||||
// THE BLOCK_BUFFER_SIZE NEEDS TO BE A POWER OF 2, i.g. 8,16,32 because shifts and ors are used to do the ringbuffering.
|
|
||||||
#if defined SDSUPPORT
|
|
||||||
#define BLOCK_BUFFER_SIZE 16 // SD,LCD,Buttons take more memory, block buffer needs to be smaller
|
|
||||||
#else
|
|
||||||
#define BLOCK_BUFFER_SIZE 16 // maximize block buffer
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
//The ASCII buffer for recieving from the serial:
|
|
||||||
#define MAX_CMD_SIZE 96
|
|
||||||
#define BUFSIZE 4
|
|
||||||
|
|
||||||
|
|
||||||
#include "thermistortables.h"
|
|
||||||
|
|
||||||
#endif //__CONFIGURATION_H
|
|
||||||
|
|
||||||
|
|
221
Marlin/Configuration_adv.h
Normal file
221
Marlin/Configuration_adv.h
Normal file
|
@ -0,0 +1,221 @@
|
||||||
|
#ifndef __CONFIGURATION_ADV_H
|
||||||
|
#define __CONFIGURATION_ADV_H
|
||||||
|
|
||||||
|
//===========================================================================
|
||||||
|
//=============================Thermal Settings ============================
|
||||||
|
//===========================================================================
|
||||||
|
|
||||||
|
// Select one of these only to define how the bed temp is read.
|
||||||
|
//
|
||||||
|
//#define BED_LIMIT_SWITCHING
|
||||||
|
#ifdef BED_LIMIT_SWITCHING
|
||||||
|
#define BED_HYSTERESIS 2 //only disable heating if T>target+BED_HYSTERESIS and enable heating if T>target-BED_HYSTERESIS
|
||||||
|
#endif
|
||||||
|
#define BED_CHECK_INTERVAL 5000 //ms
|
||||||
|
|
||||||
|
//// Heating sanity check:
|
||||||
|
// This waits for the watchperiod in milliseconds whenever an M104 or M109 increases the target temperature
|
||||||
|
// If the temperature has not increased at the end of that period, the target temperature is set to zero.
|
||||||
|
// It can be reset with another M104/M109
|
||||||
|
//#define WATCHPERIOD 20000 //20 seconds
|
||||||
|
|
||||||
|
// Wait for Cooldown
|
||||||
|
// This defines if the M109 call should not block if it is cooling down.
|
||||||
|
// example: From a current temp of 220, you set M109 S200.
|
||||||
|
// if CooldownNoWait is defined M109 will not wait for the cooldown to finish
|
||||||
|
#define CooldownNoWait true
|
||||||
|
|
||||||
|
//Do not wait for M109 to finish when printing from SD card
|
||||||
|
//#define STOP_HEATING_WAIT_WHEN_SD_PRINTING
|
||||||
|
|
||||||
|
#ifdef PIDTEMP
|
||||||
|
// this adds an experimental additional term to the heatingpower, proportional to the extrusion speed.
|
||||||
|
// if Kc is choosen well, the additional required power due to increased melting should be compensated.
|
||||||
|
#define PID_ADD_EXTRUSION_RATE
|
||||||
|
#ifdef PID_ADD_EXTRUSION_RATE
|
||||||
|
#define DEFAULT_Kc (1) //heatingpower=Kc*(e_speed)
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
//automatic temperature: The hot end target temperature is calculated by all the buffered lines of gcode.
|
||||||
|
//The maximum buffered steps/sec of the extruder motor are called "se".
|
||||||
|
//You enter the autotemp mode by a M109 S<mintemp> T<maxtemp> F<factor>
|
||||||
|
// the target temperature is set to mintemp+factor*se[steps/sec] and limited by mintemp and maxtemp
|
||||||
|
// you exit the value by any M109 without F*
|
||||||
|
// Also, if the temperature is set to a value <mintemp, it is not changed by autotemp.
|
||||||
|
// on an ultimaker, some initial testing worked with M109 S215 T260 F0.1 in the start.gcode
|
||||||
|
//#define AUTOTEMP
|
||||||
|
#ifdef AUTOTEMP
|
||||||
|
#define AUTOTEMP_OLDWEIGHT 0.98
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// extruder run-out prevention.
|
||||||
|
//if the machine is idle, and the temperature over MINTEMP, every couple of SECONDS some filament is extruded
|
||||||
|
//#define EXTRUDER_RUNOUT_PREVENT
|
||||||
|
#define EXTRUDER_RUNOUT_MINTEMP 190
|
||||||
|
#define EXTRUDER_RUNOUT_SECONDS 30.
|
||||||
|
#define EXTRUDER_RUNOUT_ESTEPS 14. //mm filament
|
||||||
|
#define EXTRUDER_RUNOUT_SPEED 1500. //extrusion speed
|
||||||
|
#define EXTRUDER_RUNOUT_EXTRUDE 100
|
||||||
|
|
||||||
|
//===========================================================================
|
||||||
|
//=============================Mechanical Settings===========================
|
||||||
|
//===========================================================================
|
||||||
|
|
||||||
|
// This defines the number of extruders
|
||||||
|
#define EXTRUDERS 1
|
||||||
|
|
||||||
|
#define ENDSTOPS_ONLY_FOR_HOMING // If defined the endstops will only be used for homing
|
||||||
|
|
||||||
|
//#define Z_LATE_ENABLE // Enable Z the last moment. Needed if your Z driver overheats.
|
||||||
|
|
||||||
|
//homing hits the endstop, then retracts by this distance, before it tries to slowly bump again:
|
||||||
|
#define X_HOME_RETRACT_MM 5
|
||||||
|
#define Y_HOME_RETRACT_MM 5
|
||||||
|
#define Z_HOME_RETRACT_MM 1
|
||||||
|
#define QUICK_HOME //if this is defined, if both x and y are to be homed, a diagonal move will be performed initially.
|
||||||
|
|
||||||
|
#define AXIS_RELATIVE_MODES {false, false, false, false}
|
||||||
|
|
||||||
|
#define MAX_STEP_FREQUENCY 40000 // Max step frequency for Ultimaker (5000 pps / half step)
|
||||||
|
|
||||||
|
//default stepper release if idle
|
||||||
|
#define DEFAULT_STEPPER_DEACTIVE_TIME 60
|
||||||
|
|
||||||
|
#define DEFAULT_MINIMUMFEEDRATE 0.0 // minimum feedrate
|
||||||
|
#define DEFAULT_MINTRAVELFEEDRATE 0.0
|
||||||
|
|
||||||
|
// minimum time in microseconds that a movement needs to take if the buffer is emptied. Increase this number if you see blobs while printing high speed & high detail. It will slowdown on the detailed stuff.
|
||||||
|
#define DEFAULT_MINSEGMENTTIME 20000 // Obsolete delete this
|
||||||
|
|
||||||
|
// If defined the movements slow down when the look ahead buffer is only half full
|
||||||
|
#define SLOWDOWN
|
||||||
|
|
||||||
|
// Frequency limit
|
||||||
|
// See nophead's blog for more info
|
||||||
|
// Not working O
|
||||||
|
//#define XY_FREQUENCY_LIMIT 15
|
||||||
|
|
||||||
|
// Minimum planner junction speed. Sets the default minimum speed the planner plans for at the end
|
||||||
|
// of the buffer and all stops. This should not be much greater than zero and should only be changed
|
||||||
|
// if unwanted behavior is observed on a user's machine when running at very slow speeds.
|
||||||
|
#define MINIMUM_PLANNER_SPEED 2.0 // (mm/sec)
|
||||||
|
|
||||||
|
//===========================================================================
|
||||||
|
//=============================Additional Features===========================
|
||||||
|
//===========================================================================
|
||||||
|
|
||||||
|
|
||||||
|
#define SD_FINISHED_STEPPERRELEASE true //if sd support and the file is finished: disable steppers?
|
||||||
|
#define SD_FINISHED_RELEASECOMMAND "M84 X Y Z E" // no z because of layer shift.
|
||||||
|
|
||||||
|
// The hardware watchdog should halt the Microcontroller, in case the firmware gets stuck somewhere. However:
|
||||||
|
// the Watchdog is not working well, so please only enable this for testing
|
||||||
|
// this enables the watchdog interrupt.
|
||||||
|
//#define USE_WATCHDOG
|
||||||
|
//#ifdef USE_WATCHDOG
|
||||||
|
// you cannot reboot on a mega2560 due to a bug in he bootloader. Hence, you have to reset manually, and this is done hereby:
|
||||||
|
//#define RESET_MANUAL
|
||||||
|
//#define WATCHDOG_TIMEOUT 4 //seconds
|
||||||
|
//#endif
|
||||||
|
|
||||||
|
// extruder advance constant (s2/mm3)
|
||||||
|
//
|
||||||
|
// advance (steps) = STEPS_PER_CUBIC_MM_E * EXTUDER_ADVANCE_K * cubic mm per second ^ 2
|
||||||
|
//
|
||||||
|
// hooke's law says: force = k * distance
|
||||||
|
// bernoulli's priniciple says: v ^ 2 / 2 + g . h + pressure / density = constant
|
||||||
|
// so: v ^ 2 is proportional to number of steps we advance the extruder
|
||||||
|
//#define ADVANCE
|
||||||
|
|
||||||
|
#ifdef ADVANCE
|
||||||
|
#define EXTRUDER_ADVANCE_K .0
|
||||||
|
|
||||||
|
#define D_FILAMENT 2.85
|
||||||
|
#define STEPS_MM_E 836
|
||||||
|
#define EXTRUTION_AREA (0.25 * D_FILAMENT * D_FILAMENT * 3.14159)
|
||||||
|
#define STEPS_PER_CUBIC_MM_E (axis_steps_per_unit[E_AXIS]/ EXTRUTION_AREA)
|
||||||
|
|
||||||
|
#endif // ADVANCE
|
||||||
|
|
||||||
|
// A debugging feature to compare calculated vs performed steps, to see if steps are lost by the software.
|
||||||
|
//#define DEBUG_STEPS
|
||||||
|
|
||||||
|
// Arc interpretation settings:
|
||||||
|
#define MM_PER_ARC_SEGMENT 1
|
||||||
|
#define N_ARC_CORRECTION 25
|
||||||
|
|
||||||
|
const int dropsegments=5; //everything with less than this number of steps will be ignored as move and joined with the next movement
|
||||||
|
|
||||||
|
//===========================================================================
|
||||||
|
//=============================Buffers ============================
|
||||||
|
//===========================================================================
|
||||||
|
|
||||||
|
// The number of linear motions that can be in the plan at any give time.
|
||||||
|
// THE BLOCK_BUFFER_SIZE NEEDS TO BE A POWER OF 2, i.g. 8,16,32 because shifts and ors are used to do the ringbuffering.
|
||||||
|
#if defined SDSUPPORT
|
||||||
|
#define BLOCK_BUFFER_SIZE 16 // SD,LCD,Buttons take more memory, block buffer needs to be smaller
|
||||||
|
#else
|
||||||
|
#define BLOCK_BUFFER_SIZE 16 // maximize block buffer
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
//The ASCII buffer for recieving from the serial:
|
||||||
|
#define MAX_CMD_SIZE 96
|
||||||
|
#define BUFSIZE 4
|
||||||
|
|
||||||
|
//===========================================================================
|
||||||
|
//============================= Define Defines ============================
|
||||||
|
//===========================================================================
|
||||||
|
|
||||||
|
#if TEMP_SENSOR_0 > 0
|
||||||
|
#define THERMISTORHEATER_0 TEMP_SENSOR_0
|
||||||
|
#define HEATER_0_USES_THERMISTOR
|
||||||
|
#endif
|
||||||
|
#if TEMP_SENSOR_1 > 0
|
||||||
|
#define THERMISTORHEATER_1 TEMP_SENSOR_1
|
||||||
|
#define HEATER_1_USES_THERMISTOR
|
||||||
|
#endif
|
||||||
|
#if TEMP_SENSOR_2 > 0
|
||||||
|
#define THERMISTORHEATER_2 TEMP_SENSOR_2
|
||||||
|
#define HEATER_2_USES_THERMISTOR
|
||||||
|
#endif
|
||||||
|
#if TEMP_SENSOR_BED > 0
|
||||||
|
#define THERMISTORBED TEMP_SENSOR_BED
|
||||||
|
#define BED_USES_THERMISTOR
|
||||||
|
#endif
|
||||||
|
#if TEMP_SENSOR_0 == -1
|
||||||
|
#define HEATER_0_USES_AD595
|
||||||
|
#endif
|
||||||
|
#if TEMP_SENSOR_1 == -1
|
||||||
|
#define HEATER_1_USES_AD595
|
||||||
|
#endif
|
||||||
|
#if TEMP_SENSOR_2 == -1
|
||||||
|
#define HEATER_2_USES_AD595
|
||||||
|
#endif
|
||||||
|
#if TEMP_SENSOR_BED == -1
|
||||||
|
#define BED_USES_AD595
|
||||||
|
#endif
|
||||||
|
#if TEMP_SENSOR_0 == -2
|
||||||
|
#define HEATER_0_USES_MAX6675
|
||||||
|
#endif
|
||||||
|
#if TEMP_SENSOR_0 == 0
|
||||||
|
#undef HEATER_0_MINTEMP
|
||||||
|
#undef HEATER_0_MAXTEMP
|
||||||
|
#endif
|
||||||
|
#if TEMP_SENSOR_1 == 0
|
||||||
|
#undef HEATER_1_MINTEMP
|
||||||
|
#undef HEATER_1_MAXTEMP
|
||||||
|
#endif
|
||||||
|
#if TEMP_SENSOR_2 == 0
|
||||||
|
#undef HEATER_2_MINTEMP
|
||||||
|
#undef HEATER_2_MAXTEMP
|
||||||
|
#endif
|
||||||
|
#if TEMP_SENSOR_BED == 0
|
||||||
|
#undef BED_MINTEMP
|
||||||
|
#undef BED_MAXTEMP
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#endif //__CONFIGURATION_ADV_H
|
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))
|
TARGET = $(notdir $(CURDIR))
|
||||||
# CHANGE BELOW:
|
|
||||||
#~ INSTALL_DIR = /Applications/Arduino.app/Contents/Resources/Java
|
|
||||||
INSTALL_DIR = /home/bkubicek/software/arduino-0023
|
|
||||||
#~ PORT = /dev/cu.usbserial*
|
|
||||||
PORT = /dev/ttyACM0
|
|
||||||
|
|
||||||
# Get these values from:
|
|
||||||
# $(INSTALL_DIR)/hardware/boards.txt
|
|
||||||
# (arduino-0022/hardware/arduino/boards.txt)
|
|
||||||
# The values below are for the "Arduino Duemilanove or Nano w/ ATmega328"
|
|
||||||
# now for "Arduino Mega 2560"
|
|
||||||
UPLOAD_SPEED = 115200
|
|
||||||
UPLOAD_PROTOCOL = stk500v2
|
|
||||||
BUILD_MCU = atmega2560
|
|
||||||
BUILD_F_CPU = 16000000L
|
|
||||||
TERM=bash
|
|
||||||
|
|
||||||
# getting undefined reference to `__cxa_pure_virtual'
|
|
||||||
#~ [http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1254180518 Arduino Forum - Makefile]
|
|
||||||
#~ http://www.arduino.cc/playground/OpenBSD/CLI
|
|
||||||
#~ [http://arduino.cc/forum/index.php?topic=52041.0 A "simple" makefile for Arduino]
|
|
||||||
#~ [http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1275488191 Arduino Forum - Configuring avr-gcc options in arduino IDE]
|
|
||||||
# found in /usr/lib/gcc/avr/4.3.5/cc1plus; fixed with -Wl,--gc-section
|
|
||||||
|
|
||||||
############################################################################
|
############################################################################
|
||||||
# Below here nothing should be changed...
|
# Below here nothing should be changed...
|
||||||
|
|
||||||
LINKORDER=\
|
|
||||||
applet/Marlin.cpp.o \
|
|
||||||
applet/EEPROM.o \
|
|
||||||
applet/main.o \
|
|
||||||
applet/MarlinSerial.o \
|
|
||||||
applet/motion_control.o\
|
|
||||||
applet/pins_arduino.o\
|
|
||||||
applet/planner.o\
|
|
||||||
applet/Print.o\
|
|
||||||
applet/Sd2Card.o\
|
|
||||||
applet/SdBaseFile.o\
|
|
||||||
applet/SdFatUtil.o\
|
|
||||||
applet/SdFile.o\
|
|
||||||
applet/SdVolume.o\
|
|
||||||
applet/stepper.o\
|
|
||||||
applet/temperature.o\
|
|
||||||
applet/WInterrupts.o\
|
|
||||||
applet/wiring_analog.o\
|
|
||||||
applet/wiring_digital.o\
|
|
||||||
applet/wiring.o\
|
|
||||||
applet/wiring_pulse.o\
|
|
||||||
applet/wiring_shift.o\
|
|
||||||
applet/WMath.o
|
|
||||||
|
|
||||||
PDES=Marlin.pde ultralcd.pde watchdog.pde cardreader.pde
|
|
||||||
ARDUINO = $(INSTALL_DIR)/hardware/arduino/cores/arduino
|
ARDUINO = $(INSTALL_DIR)/hardware/arduino/cores/arduino
|
||||||
#
|
AVR_TOOLS_PATH =
|
||||||
#~ AVR_TOOLS_PATH = $(INSTALL_DIR)/hardware/tools/avr/bin
|
|
||||||
# in Ubuntu, avr-gcc is installed separate;
|
|
||||||
# only avrdude comes with the IDE
|
|
||||||
AVR_TOOLS_PATH = /usr/bin
|
|
||||||
AVR_DUDE_PATH = $(INSTALL_DIR)/hardware/tools
|
|
||||||
#
|
|
||||||
SRC = $(ARDUINO)/pins_arduino.c $(ARDUINO)/wiring.c \
|
SRC = $(ARDUINO)/pins_arduino.c $(ARDUINO)/wiring.c \
|
||||||
$(ARDUINO)/wiring_analog.c $(ARDUINO)/wiring_digital.c \
|
$(ARDUINO)/wiring_analog.c $(ARDUINO)/wiring_digital.c \
|
||||||
$(ARDUINO)/wiring_pulse.c \
|
$(ARDUINO)/wiring_pulse.c \
|
||||||
$(ARDUINO)/wiring_shift.c $(ARDUINO)/WInterrupts.c
|
$(ARDUINO)/wiring_shift.c $(ARDUINO)/WInterrupts.c
|
||||||
# added applet/$(TARGET).cpp as in IDE 0022
|
CXXSRC = $(ARDUINO)/WMath.cpp $(ARDUINO)/WString.cpp\
|
||||||
CXXSRC = $(ARDUINO)/HardwareSerial.cpp $(ARDUINO)/WMath.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
|
||||||
$(ARDUINO)/Print.cpp \
|
|
||||||
$(ARDUINO)/main.cpp
|
|
||||||
# applet/$(TARGET).cpp # no need, having a rule now for applet/$(TARGET).cpp.o
|
|
||||||
# added main.cpp, as in 0022
|
|
||||||
FORMAT = ihex
|
FORMAT = ihex
|
||||||
|
|
||||||
|
|
||||||
# Name of this Makefile (used for "make depend").
|
# Name of this Makefile (used for "make depend").
|
||||||
MAKEFILE = Makefile
|
MAKEFILE = Makefile
|
||||||
|
|
||||||
|
@ -79,17 +73,14 @@ MAKEFILE = Makefile
|
||||||
# AVR (extended) COFF requires stabs, plus an avr-objcopy run.
|
# AVR (extended) COFF requires stabs, plus an avr-objcopy run.
|
||||||
DEBUG = stabs
|
DEBUG = stabs
|
||||||
|
|
||||||
OPT = 2
|
OPT = s
|
||||||
|
|
||||||
# Place -D or -U options here
|
# Place -D or -U options here
|
||||||
#~ CDEFS = -DBUILD_F_CPU=$(BUILD_F_CPU)
|
CDEFS = -DF_CPU=$(F_CPU)
|
||||||
#~ CXXDEFS = -DBUILD_F_CPU=$(BUILD_F_CPU)
|
CXXDEFS = -DF_CPU=$(F_CPU)
|
||||||
# now called DF_CPU
|
|
||||||
CDEFS = -DF_CPU=$(BUILD_F_CPU) -DARDUINO=23
|
|
||||||
CXXDEFS = -DF_CPU=$(BUILD_F_CPU) -DARDUINO=23
|
|
||||||
|
|
||||||
# Place -I options here
|
# Place -I options here
|
||||||
CINCS = -I$(ARDUINO) -I$(INSTALL_DIR)/libraries/LiquidCrystal/ -I$(INSTALL_DIR)/libraries/EEPROM/
|
CINCS = -I$(ARDUINO)
|
||||||
CXXINCS = -I$(ARDUINO)
|
CXXINCS = -I$(ARDUINO)
|
||||||
|
|
||||||
# Compiler flag to set the C Standard level.
|
# Compiler flag to set the C Standard level.
|
||||||
|
@ -97,114 +88,56 @@ CXXINCS = -I$(ARDUINO)
|
||||||
# gnu89 - c89 plus GCC extensions
|
# gnu89 - c89 plus GCC extensions
|
||||||
# c99 - ISO C99 standard (not yet fully implemented)
|
# c99 - ISO C99 standard (not yet fully implemented)
|
||||||
# gnu99 - c99 plus GCC extensions
|
# gnu99 - c99 plus GCC extensions
|
||||||
CSTANDARD = -std=gnu99
|
#CSTANDARD = -std=gnu99
|
||||||
CDEBUG = -g$(DEBUG)
|
CDEBUG = -g$(DEBUG)
|
||||||
# note that typically, IDE 0022 uses -w to suppress warnings (both in cpp and c)!
|
CWARN = -Wall -Wstrict-prototypes
|
||||||
CWARN = -Wall
|
CTUNING = -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -w -ffunction-sections -fdata-sections -DARDUINO=22
|
||||||
#~ CWARN = -w
|
|
||||||
# "-Wstrict-prototypes" is valid for Ada/C/ObjC but not for C++:
|
|
||||||
CCWARN = -Wstrict-prototypes
|
|
||||||
CTUNING = -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums
|
|
||||||
#CEXTRA = -Wa,-adhlns=$(<:.c=.lst)
|
#CEXTRA = -Wa,-adhlns=$(<:.c=.lst)
|
||||||
|
|
||||||
# to eliminate pins_ardiuno warnings:
|
CFLAGS = $(CDEBUG) $(CDEFS) $(CINCS) -O$(OPT) $(CWARN) $(CEXTRA) $(CTUNING)
|
||||||
# http://arduino.cc/pipermail/developers_arduino.cc/2010-December/004005.html
|
CXXFLAGS = $(CDEFS) $(CINCS) -O$(OPT) -Wall $(CEXTRA) $(CTUNING)
|
||||||
|
|
||||||
# [http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1254180518 Arduino Forum - Makefile]
|
|
||||||
#~ For building the objects files "-ffunction-sections -fdata-sections" was missing
|
|
||||||
#~ and the final avr-gcc call needs "-Wl,--gc-section".
|
|
||||||
CXSECTF = -fno-exceptions -ffunction-sections -fdata-sections
|
|
||||||
CFINALF = -Wl,--gc-section
|
|
||||||
|
|
||||||
CFLAGS = $(CDEBUG) $(CDEFS) $(CINCS) -O$(OPT) $(CWARN) $(CCWARN) $(CSTANDARD) $(CEXTRA)
|
|
||||||
# added CWARN also to .cpp
|
|
||||||
CXXFLAGS = $(CDEFS) $(CINCS) -O$(OPT) $(CWARN) $(CXSECTF)
|
|
||||||
#ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs
|
#ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs
|
||||||
LDFLAGS = -lm
|
LDFLAGS = -lm
|
||||||
|
|
||||||
|
|
||||||
# Programming support using avrdude. Settings and variables.
|
# Programming support using avrdude. Settings and variables.
|
||||||
AVRDUDE_PORT = $(PORT)
|
AVRDUDE_PORT = $(PORT)
|
||||||
AVRDUDE_WRITE_FLASH = -U flash:w:applet/$(TARGET).hex
|
AVRDUDE_WRITE_FLASH = -U flash:w:applet/$(TARGET).hex:i
|
||||||
AVRDUDE_FLAGS = -V -F \
|
AVRDUDE_FLAGS = -D -C $(INSTALL_DIR)/hardware/tools/avrdude.conf \
|
||||||
-p $(BUILD_MCU) -P $(AVRDUDE_PORT) -c $(UPLOAD_PROTOCOL) \
|
-p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER) \
|
||||||
-b $(UPLOAD_SPEED) -C $(INSTALL_DIR)/hardware/tools/avrdude.conf
|
-b $(UPLOAD_RATE)
|
||||||
# -b $(UPLOAD_SPEED) -C $(INSTALL_DIR)/hardware/tools/avr/etc/avrdude.conf
|
|
||||||
|
|
||||||
# Program settings
|
# Program settings
|
||||||
CC = $(AVR_TOOLS_PATH)/avr-gcc
|
CC = $(AVR_TOOLS_PATH)avr-gcc
|
||||||
CXX = $(AVR_TOOLS_PATH)/avr-g++
|
CXX = $(AVR_TOOLS_PATH)avr-g++
|
||||||
OBJCOPY = $(AVR_TOOLS_PATH)/avr-objcopy
|
OBJCOPY = $(AVR_TOOLS_PATH)avr-objcopy
|
||||||
OBJDUMP = $(AVR_TOOLS_PATH)/avr-objdump
|
OBJDUMP = $(AVR_TOOLS_PATH)avr-objdump
|
||||||
AR = $(AVR_TOOLS_PATH)/avr-ar
|
AR = $(AVR_TOOLS_PATH)avr-ar
|
||||||
SIZE = $(AVR_TOOLS_PATH)/avr-size
|
SIZE = $(AVR_TOOLS_PATH)avr-size
|
||||||
NM = $(AVR_TOOLS_PATH)/avr-nm
|
NM = $(AVR_TOOLS_PATH)avr-nm
|
||||||
#~ AVRDUDE = $(AVR_TOOLS_PATH)/avrdude
|
AVRDUDE = avrdude
|
||||||
AVRDUDE = $(AVR_DUDE_PATH)/avrdude
|
|
||||||
REMOVE = rm -f
|
REMOVE = rm -f
|
||||||
MV = mv -f
|
MV = mv -f
|
||||||
|
|
||||||
# Define all object files.
|
# Define all object files.
|
||||||
# NOTE: obj files will be created in respective src directories (libraries or $(INSTALL_DIR));
|
|
||||||
# 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)
|
OBJ = $(SRC:.c=.o) $(CXXSRC:.cpp=.o) $(ASRC:.S=.o)
|
||||||
|
|
||||||
# added - OBJ list, transformed into applet/
|
|
||||||
OBJT = $(addprefix applet/,$(notdir $(OBJ)))
|
|
||||||
ALLSRC = $(SRC) $(CXXSRC) $(ASRC)
|
|
||||||
|
|
||||||
# Define all listing files.
|
# Define all listing files.
|
||||||
LST = $(ASRC:.S=.lst) $(CXXSRC:.cpp=.lst) $(SRC:.c=.lst)
|
LST = $(ASRC:.S=.lst) $(CXXSRC:.cpp=.lst) $(SRC:.c=.lst)
|
||||||
|
|
||||||
# Combine all necessary flags and optional flags.
|
# Combine all necessary flags and optional flags.
|
||||||
# Add target processor to flags.
|
# Add target processor to flags.
|
||||||
ALL_CFLAGS = -mmcu=$(BUILD_MCU) -I. $(CFLAGS)
|
ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS)
|
||||||
ALL_CXXFLAGS = -mmcu=$(BUILD_MCU) -I. $(CXXFLAGS)
|
ALL_CXXFLAGS = -mmcu=$(MCU) -I. $(CXXFLAGS)
|
||||||
ALL_ASFLAGS = -mmcu=$(BUILD_MCU) -I. -x assembler-with-cpp $(ASFLAGS)
|
ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)
|
||||||
|
|
||||||
# depended libraries of .pde need to be added from
|
|
||||||
# $(INSTALL_DIR)/libraries (TODO: and/or ~/sketchbook/libraries)
|
|
||||||
# grep for 'include', test if exists, add...
|
|
||||||
# note: prefix "a real tab character" http://www.delorie.com/djgpp/doc/ug/larger/makefiles.html
|
|
||||||
# $$ to escape $ for shell;
|
|
||||||
# note: must NOT put comments # inside bash execution;
|
|
||||||
# those would get removed by make; making shell see "EOF in backquote substitution"
|
|
||||||
# echo $$ix ; \
|
|
||||||
# 'shell' twice - for each subprocess! Backtick doesn't get expanded?
|
|
||||||
GREPRES:=$(shell for ix in $(shell grep include $(TARGET).pde | sed 's/.*[<"]\(.*\).h[>"].*/\1/'); do \
|
|
||||||
if [ -d $(INSTALL_DIR)/libraries/$$ix ] ; then \
|
|
||||||
LINCS="$$LINCS -I$(INSTALL_DIR)/libraries/$$ix" ;\
|
|
||||||
fi; \
|
|
||||||
done; \
|
|
||||||
echo $$LINCS)
|
|
||||||
# append includes:
|
|
||||||
CINCS += $(GREPRES)
|
|
||||||
CXXINCS += $(GREPRES)
|
|
||||||
# append library source .cpp files too (CXXSRC)
|
|
||||||
GREPRESB:=$(shell for ix in $(shell grep include $(TARGET).pde | sed 's/.*[<"]\(.*\).h[>"].*/\1/'); do \
|
|
||||||
if [ -d $(INSTALL_DIR)/libraries/$$ix ] ; then \
|
|
||||||
CPPSRCS="$$CPPSRCS $(INSTALL_DIR)/libraries/$$ix/*.cpp" ;\
|
|
||||||
fi; \
|
|
||||||
done; \
|
|
||||||
echo $$CPPSRCS)
|
|
||||||
CXXSRC += $(GREPRESB)
|
|
||||||
# added - only CXX obj from libraries:
|
|
||||||
CXXLIBOBJ = $(GREPRESB:.cpp=.o)
|
|
||||||
|
|
||||||
# Default target.
|
# Default target.
|
||||||
all: applet_files build sizeafter
|
all: build sizeafter
|
||||||
|
|
||||||
build: elf hex
|
build: elf hex
|
||||||
|
|
||||||
applet_files: $(TARGET).pde
|
applet/$(TARGET).cpp: $(TARGET).pde $(MAKEFILE)
|
||||||
# Here is the "preprocessing".
|
# Here is the "preprocessing".
|
||||||
# It creates a .cpp file based with the same name as the .pde file.
|
# 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.
|
# 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
|
# Then the .cpp file will be compiled. Errors during compile will
|
||||||
# refer to this new, automatically generated, file.
|
# refer to this new, automatically generated, file.
|
||||||
# Not the original .pde file you actually edit...
|
# Not the original .pde file you actually edit...
|
||||||
test -d applet || mkdir applet
|
@echo " WR applet/$(TARGET).cpp"
|
||||||
# @ supresses printout of the cmdline itself; so only the out of echo is printed
|
@test -d applet || mkdir applet
|
||||||
@echo ALL OBJT: $(OBJT)
|
@echo '#include "WProgram.h"' > applet/$(TARGET).cpp
|
||||||
@echo ALL CXXLIBOBJ: $(CXXLIBOBJ)
|
@cat $(TARGET).pde >> applet/$(TARGET).cpp
|
||||||
# echo '#include "WProgram.h"' > applet/$(TARGET).cpp
|
@cat $(ARDUINO)/main.cpp >> 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
|
|
||||||
|
|
||||||
|
|
||||||
elf: applet/$(TARGET).elf
|
elf: applet/$(TARGET).elf
|
||||||
hex: applet/$(TARGET).hex
|
hex: applet/$(TARGET).hex
|
||||||
|
@ -233,7 +159,10 @@ sym: applet/$(TARGET).sym
|
||||||
|
|
||||||
# Program the device.
|
# Program the device.
|
||||||
upload: applet/$(TARGET).hex
|
upload: applet/$(TARGET).hex
|
||||||
|
stty hup < $(PORT); true
|
||||||
$(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH)
|
$(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH)
|
||||||
|
stty -hup < $(PORT); true
|
||||||
|
|
||||||
|
|
||||||
# Display size of file.
|
# Display size of file.
|
||||||
HEXSIZE = $(SIZE) --target=$(FORMAT) applet/$(TARGET).hex
|
HEXSIZE = $(SIZE) --target=$(FORMAT) applet/$(TARGET).hex
|
||||||
|
@ -242,7 +171,8 @@ sizebefore:
|
||||||
@if [ -f applet/$(TARGET).elf ]; then echo; echo $(MSG_SIZE_BEFORE); $(HEXSIZE); echo; fi
|
@if [ -f applet/$(TARGET).elf ]; then echo; echo $(MSG_SIZE_BEFORE); $(HEXSIZE); echo; fi
|
||||||
|
|
||||||
sizeafter:
|
sizeafter:
|
||||||
@if [ -f applet/$(TARGET).elf ]; then echo; echo $(MSG_SIZE_AFTER); $(HEXSIZE); echo; fi
|
@if [ -f applet/$(TARGET).elf ]; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); echo; fi
|
||||||
|
|
||||||
|
|
||||||
# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.
|
# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.
|
||||||
COFFCONVERT=$(OBJCOPY) --debugging \
|
COFFCONVERT=$(OBJCOPY) --debugging \
|
||||||
|
@ -251,16 +181,21 @@ COFFCONVERT=$(OBJCOPY) --debugging \
|
||||||
--change-section-address .noinit-0x800000 \
|
--change-section-address .noinit-0x800000 \
|
||||||
--change-section-address .eeprom-0x810000
|
--change-section-address .eeprom-0x810000
|
||||||
|
|
||||||
|
|
||||||
coff: applet/$(TARGET).elf
|
coff: applet/$(TARGET).elf
|
||||||
$(COFFCONVERT) -O coff-avr applet/$(TARGET).elf $(TARGET).cof
|
$(COFFCONVERT) -O coff-avr applet/$(TARGET).elf $(TARGET).cof
|
||||||
|
|
||||||
|
|
||||||
extcoff: $(TARGET).elf
|
extcoff: $(TARGET).elf
|
||||||
$(COFFCONVERT) -O coff-ext-avr applet/$(TARGET).elf $(TARGET).cof
|
$(COFFCONVERT) -O coff-ext-avr applet/$(TARGET).elf $(TARGET).cof
|
||||||
|
|
||||||
|
|
||||||
.SUFFIXES: .elf .hex .eep .lss .sym
|
.SUFFIXES: .elf .hex .eep .lss .sym
|
||||||
|
.PRECIOUS: .o
|
||||||
|
|
||||||
.elf.hex:
|
.elf.hex:
|
||||||
$(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@
|
@echo " COPY $@"
|
||||||
|
@$(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@
|
||||||
|
|
||||||
.elf.eep:
|
.elf.eep:
|
||||||
-$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \
|
-$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \
|
||||||
|
@ -275,78 +210,39 @@ extcoff: $(TARGET).elf
|
||||||
$(NM) -n $< > $@
|
$(NM) -n $< > $@
|
||||||
|
|
||||||
# Link: create ELF output file from library.
|
# Link: create ELF output file from library.
|
||||||
# NOTE: applet/$(TARGET).cpp.o MUST BE BEFORE applet/core.a
|
applet/$(TARGET).elf: applet/$(TARGET).cpp applet/core.a Configuration.h
|
||||||
# in the dependency list, so its rule runs first!
|
@echo " CXX $@"
|
||||||
applet/$(TARGET).elf: $(TARGET).pde applet/$(TARGET).cpp.o applet/core.a
|
@$(CC) $(ALL_CXXFLAGS) -Wl,--gc-sections -o $@ applet/$(TARGET).cpp -L. applet/core.a $(LDFLAGS)
|
||||||
# $(CC) $(ALL_CFLAGS) -o $@ applet/$(TARGET).cpp -L. applet/core.a $(LDFLAGS)
|
|
||||||
# changed as in IDE v0022: link cpp obj files
|
|
||||||
@echo $$(tput bold)$$(tput setaf 2) $(CC) $$(tput sgr0) $(ALL_CFLAGS) $(CFINALF) -o $@ applet/$(TARGET).cpp.o $(CXXOBJ) -L. applet/core.a $(LDFLAGS)
|
|
||||||
echo ${OBJT}
|
|
||||||
#$(CC) $(ALL_CFLAGS) $(CFINALF) -o $@ applet/$(TARGET).cpp.o -L. applet/core.a $(LDFLAGS)
|
|
||||||
$(CC) $(ALL_CFLAGS) $(CFINALF) -o $@ ${LINKORDER} $(LDFLAGS)
|
|
||||||
#@$(CC) $(ALL_CFLAGS) $(CFINALF) -o $@ applet/*.o applet/$(TARGET).cpp.o $(CXXOBJ) -L. applet/core.a $(LDFLAGS)
|
|
||||||
|
|
||||||
# added: cpp.o depends on cpp (and .pde which generates it)
|
applet/core.a: $(OBJ) Configuration.h
|
||||||
# $< "first item in the dependencies list"; $@ "left side of the :"; $^ "right side of the :"
|
@for i in $(OBJ); do echo " AR $$i"; $(AR) rcs applet/core.a $$i; done
|
||||||
# http://www.cs.colby.edu/maxwell/courses/tutorials/maketutor/
|
|
||||||
applet/$(TARGET).cpp.o: applet/$(TARGET).cpp
|
%.o: %.c Configuration.h $(MAKEFILE)
|
||||||
@echo $$(tput bold) $(CXX) $$(tput sgr0) -c $(ALL_CXXFLAGS) $< -o $@
|
@echo " CC $@"
|
||||||
|
@$(CC) -c $(ALL_CFLAGS) $< -o $@
|
||||||
|
|
||||||
|
%.o: %.cpp Configuration.h $(MAKEFILE)
|
||||||
|
@echo " CXX $@"
|
||||||
@$(CXX) -c $(ALL_CXXFLAGS) $< -o $@
|
@$(CXX) -c $(ALL_CXXFLAGS) $< -o $@
|
||||||
|
|
||||||
#~ applet/core.a: $(OBJ)
|
|
||||||
#~ @for i in $(OBJ); do echo $(AR) rcs applet/core.a $$i; $(AR) rcs applet/core.a $$i; done
|
|
||||||
|
|
||||||
applet/core.a: $(OBJT)
|
|
||||||
@for i in $(OBJT); do echo $(AR) rcs applet/core.a $$i; $(AR) rcs applet/core.a $$i; done
|
|
||||||
|
|
||||||
# iterate through OBJ to find the original location; then build depending on source extension
|
|
||||||
# TODO: add handling of assembler files
|
|
||||||
applet/%.o:
|
|
||||||
@for iob in $(OBJ); do \
|
|
||||||
if [ "`basename $$iob`" = "`basename $@`" ]; then \
|
|
||||||
for ios in $(ALLSRC); do \
|
|
||||||
if [ "$${iob%%.*}" = "$${ios%%.*}" ]; then \
|
|
||||||
case $${ios##*.} in \
|
|
||||||
"cpp") \
|
|
||||||
echo "$$(tput bold)$$(tput setaf 1) $(CXX) $$(tput sgr0) -c $(ALL_CXXFLAGS) $$ios -o $@"; \
|
|
||||||
$(CXX) -c $(ALL_CXXFLAGS) $$ios -o $@;; \
|
|
||||||
"c") \
|
|
||||||
echo "$$(tput bold)$$(tput setaf 1) $(CC) $$(tput sgr0) -c $(ALL_CFLAGS) $$ios -o $@"; \
|
|
||||||
$(CC) -c $(ALL_CFLAGS) $$ios -o $@;; \
|
|
||||||
esac; \
|
|
||||||
fi; \
|
|
||||||
done; \
|
|
||||||
fi; \
|
|
||||||
done;
|
|
||||||
|
|
||||||
#~ # Compile: create object files from C++ source files.
|
|
||||||
#~ .cpp.o:
|
|
||||||
#~ $(CXX) -c $(ALL_CXXFLAGS) $< -o $@
|
|
||||||
|
|
||||||
#~ # Compile: create object files from C source files.
|
|
||||||
#~ .c.o:
|
|
||||||
#~ $(CC) -c $(ALL_CFLAGS) $< -o $@
|
|
||||||
|
|
||||||
#~ # Compile: create assembler files from C source files.
|
|
||||||
#~ .c.s:
|
|
||||||
#~ $(CC) -S $(ALL_CFLAGS) $< -o $@
|
|
||||||
|
|
||||||
#~ # Assemble: create object files from assembler source files.
|
|
||||||
#~ .S.o:
|
|
||||||
#~ $(CC) -c $(ALL_ASFLAGS) $< -o $@
|
|
||||||
|
|
||||||
#~ # Automatic dependencies
|
|
||||||
#~ %.d: %.c
|
|
||||||
#~ $(CC) -M $(ALL_CFLAGS) $< | sed "s;$(notdir $*).o:;$*.o $*.d:;" > $@
|
|
||||||
|
|
||||||
#~ %.d: %.cpp
|
|
||||||
#~ $(CXX) -M $(ALL_CXXFLAGS) $< | sed "s;$(notdir $*).o:;$*.o $*.d:;" > $@
|
|
||||||
|
|
||||||
# Target: clean project.
|
# Target: clean project.
|
||||||
clean:
|
clean:
|
||||||
$(REMOVE) applet/$(TARGET).hex applet/$(TARGET).eep applet/$(TARGET).cof applet/$(TARGET).elf \
|
@echo " RM applet/*"
|
||||||
applet/$(TARGET).map applet/$(TARGET).sym applet/$(TARGET).lss applet/core.a \
|
@$(REMOVE) applet/$(TARGET).hex applet/$(TARGET).eep applet/$(TARGET).cof applet/$(TARGET).elf \
|
||||||
$(OBJT) applet/$(TARGET).cpp.o \
|
applet/$(TARGET).map applet/$(TARGET).sym applet/$(TARGET).lss applet/$(TARGET).cpp applet/core.a \
|
||||||
$(OBJ) $(LST) $(SRC:.c=.s) $(SRC:.c=.d) $(CXXSRC:.cpp=.s) $(CXXSRC:.cpp=.d)
|
$(OBJ) $(LST) $(SRC:.c=.s) $(SRC:.c=.d) $(CXXSRC:.cpp=.s) $(CXXSRC:.cpp=.d)
|
||||||
|
@echo " RMDIR applet/"
|
||||||
|
@rmdir applet
|
||||||
|
|
||||||
.PHONY: all build elf hex eep lss sym program coff extcoff clean applet_files sizebefore sizeafter
|
depend:
|
||||||
|
if grep '^# DO NOT DELETE' $(MAKEFILE) >/dev/null; \
|
||||||
|
then \
|
||||||
|
sed -e '/^# DO NOT DELETE/,$$d' $(MAKEFILE) > \
|
||||||
|
$(MAKEFILE).$$$$ && \
|
||||||
|
$(MV) $(MAKEFILE).$$$$ $(MAKEFILE); \
|
||||||
|
fi
|
||||||
|
echo '# DO NOT DELETE THIS LINE -- make depend depends on it.' \
|
||||||
|
>> $(MAKEFILE); \
|
||||||
|
$(CC) -M -mmcu=$(MCU) $(CDEFS) $(CINCS) $(SRC) $(ASRC) >> $(MAKEFILE)
|
||||||
|
|
||||||
|
.PHONY: all build elf hex eep lss sym program coff extcoff clean depend applet_files sizebefore sizeafter
|
||||||
|
|
|
@ -14,7 +14,7 @@
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <inttypes.h>
|
#include <inttypes.h>
|
||||||
|
|
||||||
#include <avr/delay.h>
|
#include <util/delay.h>
|
||||||
#include <avr/pgmspace.h>
|
#include <avr/pgmspace.h>
|
||||||
#include <avr/eeprom.h>
|
#include <avr/eeprom.h>
|
||||||
#include <avr/wdt.h>
|
#include <avr/wdt.h>
|
||||||
|
@ -46,7 +46,11 @@
|
||||||
|
|
||||||
#include "WString.h"
|
#include "WString.h"
|
||||||
|
|
||||||
|
#if MOTHERBOARD == 8 // Teensylu
|
||||||
|
#define MYSERIAL Serial
|
||||||
|
#else
|
||||||
|
#define MYSERIAL MSerial
|
||||||
|
#endif
|
||||||
|
|
||||||
//this is a unfinsihed attemp to removes a lot of warning messages, see:
|
//this is a unfinsihed attemp to removes a lot of warning messages, see:
|
||||||
// http://www.avrfreaks.net/index.php?name=PNphpBB2&file=printview&t=57011
|
// http://www.avrfreaks.net/index.php?name=PNphpBB2&file=printview&t=57011
|
||||||
|
@ -54,19 +58,19 @@
|
||||||
// //#define PSTR (s ) ((const PROGMEM char *)(s))
|
// //#define PSTR (s ) ((const PROGMEM char *)(s))
|
||||||
// //# define MYPGM(s) (__extension__({static prog_char __c[] = (s); &__c[0];}))
|
// //# define MYPGM(s) (__extension__({static prog_char __c[] = (s); &__c[0];}))
|
||||||
// //#define MYPGM(s) ((const prog_char *g PROGMEM=s))
|
// //#define MYPGM(s) ((const prog_char *g PROGMEM=s))
|
||||||
// //#define MYPGM(s) PSTR(s)
|
#define MYPGM(s) PSTR(s)
|
||||||
#define MYPGM(s) (__extension__({static char __c[] __attribute__((__progmem__)) = (s); &__c[0];})) //This is the normal behaviour
|
//#define MYPGM(s) (__extension__({static char __c[] __attribute__((__progmem__)) = (s); &__c[0];})) //This is the normal behaviour
|
||||||
//#define MYPGM(s) (__extension__({static prog_char __c[] = (s); &__c[0];})) //this does not work but hides the warnings
|
//#define MYPGM(s) (__extension__({static prog_char __c[] = (s); &__c[0];})) //this does not work but hides the warnings
|
||||||
|
|
||||||
|
|
||||||
#define SERIAL_PROTOCOL(x) MSerial.print(x);
|
#define SERIAL_PROTOCOL(x) MYSERIAL.print(x);
|
||||||
#define SERIAL_PROTOCOLPGM(x) serialprintPGM(MYPGM(x));
|
#define SERIAL_PROTOCOLPGM(x) serialprintPGM(MYPGM(x));
|
||||||
#define SERIAL_PROTOCOLLN(x) {MSerial.print(x);MSerial.write('\n');}
|
#define SERIAL_PROTOCOLLN(x) {MYSERIAL.print(x);MYSERIAL.write('\n');}
|
||||||
#define SERIAL_PROTOCOLLNPGM(x) {serialprintPGM(MYPGM(x));MSerial.write('\n');}
|
#define SERIAL_PROTOCOLLNPGM(x) {serialprintPGM(MYPGM(x));MYSERIAL.write('\n');}
|
||||||
|
|
||||||
|
|
||||||
const prog_char errormagic[] PROGMEM ="Error:";
|
const char errormagic[] PROGMEM ="Error:";
|
||||||
const prog_char echomagic[] PROGMEM ="echo:";
|
const char echomagic[] PROGMEM ="echo:";
|
||||||
#define SERIAL_ERROR_START serialprintPGM(errormagic);
|
#define SERIAL_ERROR_START serialprintPGM(errormagic);
|
||||||
#define SERIAL_ERROR(x) SERIAL_PROTOCOL(x)
|
#define SERIAL_ERROR(x) SERIAL_PROTOCOL(x)
|
||||||
#define SERIAL_ERRORPGM(x) SERIAL_PROTOCOLPGM(x)
|
#define SERIAL_ERRORPGM(x) SERIAL_PROTOCOLPGM(x)
|
||||||
|
@ -89,7 +93,7 @@ FORCE_INLINE void serialprintPGM(const char *str)
|
||||||
char ch=pgm_read_byte(str);
|
char ch=pgm_read_byte(str);
|
||||||
while(ch)
|
while(ch)
|
||||||
{
|
{
|
||||||
MSerial.write(ch);
|
MYSERIAL.write(ch);
|
||||||
ch=pgm_read_byte(++str);
|
ch=pgm_read_byte(++str);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -27,8 +27,6 @@
|
||||||
|
|
||||||
#include "Marlin.h"
|
#include "Marlin.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#include "ultralcd.h"
|
#include "ultralcd.h"
|
||||||
#include "planner.h"
|
#include "planner.h"
|
||||||
#include "stepper.h"
|
#include "stepper.h"
|
||||||
|
@ -38,12 +36,7 @@
|
||||||
#include "watchdog.h"
|
#include "watchdog.h"
|
||||||
#include "EEPROMwrite.h"
|
#include "EEPROMwrite.h"
|
||||||
|
|
||||||
|
#define VERSION_STRING "1.0.0 RC1"
|
||||||
|
|
||||||
#define VERSION_STRING "1.0.0 Beta 1"
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// look here for descriptions of gcodes: http://linuxcnc.org/handbook/gcode/g-code.html
|
// look here for descriptions of gcodes: http://linuxcnc.org/handbook/gcode/g-code.html
|
||||||
// http://objects.reprap.org/wiki/Mendel_User_Manual:_RepRapGCodes
|
// http://objects.reprap.org/wiki/Mendel_User_Manual:_RepRapGCodes
|
||||||
|
@ -147,15 +140,11 @@ static bool home_all_axis = true;
|
||||||
static float feedrate = 1500.0, next_feedrate, saved_feedrate;
|
static float feedrate = 1500.0, next_feedrate, saved_feedrate;
|
||||||
static long gcode_N, gcode_LastN;
|
static long gcode_N, gcode_LastN;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
static bool relative_mode = false; //Determines Absolute or Relative Coordinates
|
static bool relative_mode = false; //Determines Absolute or Relative Coordinates
|
||||||
static bool relative_mode_e = false; //Determines Absolute or Relative E Codes while in Absolute Coordinates mode. E is always relative in Relative Coordinates mode.
|
static bool relative_mode_e = false; //Determines Absolute or Relative E Codes while in Absolute Coordinates mode. E is always relative in Relative Coordinates mode.
|
||||||
|
|
||||||
static uint8_t fanpwm=0;
|
static uint8_t fanpwm=0;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
static char cmdbuffer[BUFSIZE][MAX_CMD_SIZE];
|
static char cmdbuffer[BUFSIZE][MAX_CMD_SIZE];
|
||||||
static bool fromsd[BUFSIZE];
|
static bool fromsd[BUFSIZE];
|
||||||
static int bufindr = 0;
|
static int bufindr = 0;
|
||||||
|
@ -175,8 +164,7 @@ const int sensitive_pins[] = SENSITIVE_PINS; // Sensitive pin list for M42
|
||||||
//Inactivity shutdown variables
|
//Inactivity shutdown variables
|
||||||
static unsigned long previous_millis_cmd = 0;
|
static unsigned long previous_millis_cmd = 0;
|
||||||
static unsigned long max_inactive_time = 0;
|
static unsigned long max_inactive_time = 0;
|
||||||
static unsigned long stepper_inactive_time = DEFAULT_STEPPER_DEACTIVE_TIME*1000;
|
static unsigned long stepper_inactive_time = DEFAULT_STEPPER_DEACTIVE_TIME*1000l;
|
||||||
static unsigned long last_stepperdisabled_time=30*1000; //first release check after 30 seconds
|
|
||||||
|
|
||||||
static unsigned long starttime=0;
|
static unsigned long starttime=0;
|
||||||
static unsigned long stoptime=0;
|
static unsigned long stoptime=0;
|
||||||
|
@ -224,6 +212,7 @@ void enquecommand(const char *cmd)
|
||||||
buflen += 1;
|
buflen += 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void setup_photpin()
|
void setup_photpin()
|
||||||
{
|
{
|
||||||
#ifdef PHOTOGRAPH_PIN
|
#ifdef PHOTOGRAPH_PIN
|
||||||
|
@ -257,11 +246,21 @@ void suicide()
|
||||||
void setup()
|
void setup()
|
||||||
{
|
{
|
||||||
setup_powerhold();
|
setup_powerhold();
|
||||||
MSerial.begin(BAUDRATE);
|
MYSERIAL.begin(BAUDRATE);
|
||||||
SERIAL_ECHO_START;
|
|
||||||
SERIAL_ECHOLNPGM(VERSION_STRING);
|
|
||||||
SERIAL_PROTOCOLLNPGM("start");
|
SERIAL_PROTOCOLLNPGM("start");
|
||||||
SERIAL_ECHO_START;
|
SERIAL_ECHO_START;
|
||||||
|
SERIAL_ECHOPGM("Marlin: ");
|
||||||
|
SERIAL_ECHOLNPGM(VERSION_STRING);
|
||||||
|
#ifdef STRING_VERSION_CONFIG_H
|
||||||
|
#ifdef STRING_CONFIG_H_AUTHOR
|
||||||
|
SERIAL_ECHO_START;
|
||||||
|
SERIAL_ECHOPGM("Configuration.h: ");
|
||||||
|
SERIAL_ECHOPGM(STRING_VERSION_CONFIG_H);
|
||||||
|
SERIAL_ECHOPGM(" | Author: ");
|
||||||
|
SERIAL_ECHOLNPGM(STRING_CONFIG_H_AUTHOR);
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
SERIAL_ECHO_START;
|
||||||
SERIAL_ECHOPGM("Free Memory:");
|
SERIAL_ECHOPGM("Free Memory:");
|
||||||
SERIAL_ECHO(freeMemory());
|
SERIAL_ECHO(freeMemory());
|
||||||
SERIAL_ECHOPGM(" PlannerBufferBytes:");
|
SERIAL_ECHOPGM(" PlannerBufferBytes:");
|
||||||
|
@ -326,11 +325,10 @@ void loop()
|
||||||
LCD_STATUS;
|
LCD_STATUS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void get_command()
|
||||||
FORCE_INLINE void get_command()
|
|
||||||
{
|
{
|
||||||
while( MSerial.available() > 0 && buflen < BUFSIZE) {
|
while( MYSERIAL.available() > 0 && buflen < BUFSIZE) {
|
||||||
serial_char = MSerial.read();
|
serial_char = MYSERIAL.read();
|
||||||
if(serial_char == '\n' || serial_char == '\r' || serial_char == ':' || serial_count >= (MAX_CMD_SIZE - 1) )
|
if(serial_char == '\n' || serial_char == '\r' || serial_char == ':' || serial_count >= (MAX_CMD_SIZE - 1) )
|
||||||
{
|
{
|
||||||
if(!serial_count) return; //if empty line
|
if(!serial_count) return; //if empty line
|
||||||
|
@ -474,20 +472,20 @@ FORCE_INLINE void get_command()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
FORCE_INLINE float code_value()
|
float code_value()
|
||||||
{
|
{
|
||||||
return (strtod(&cmdbuffer[bufindr][strchr_pointer - cmdbuffer[bufindr] + 1], NULL));
|
return (strtod(&cmdbuffer[bufindr][strchr_pointer - cmdbuffer[bufindr] + 1], NULL));
|
||||||
}
|
}
|
||||||
FORCE_INLINE long code_value_long()
|
long code_value_long()
|
||||||
{
|
{
|
||||||
return (strtol(&cmdbuffer[bufindr][strchr_pointer - cmdbuffer[bufindr] + 1], NULL, 10));
|
return (strtol(&cmdbuffer[bufindr][strchr_pointer - cmdbuffer[bufindr] + 1], NULL, 10));
|
||||||
}
|
}
|
||||||
FORCE_INLINE bool code_seen(char code_string[]) //Return True if the string was found
|
bool code_seen(char code_string[]) //Return True if the string was found
|
||||||
{
|
{
|
||||||
return (strstr(cmdbuffer[bufindr], code_string) != NULL);
|
return (strstr(cmdbuffer[bufindr], code_string) != NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
FORCE_INLINE bool code_seen(char code)
|
bool code_seen(char code)
|
||||||
{
|
{
|
||||||
strchr_pointer = strchr(cmdbuffer[bufindr], code);
|
strchr_pointer = strchr(cmdbuffer[bufindr], code);
|
||||||
return (strchr_pointer != NULL); //Return True if a character was found
|
return (strchr_pointer != NULL); //Return True if a character was found
|
||||||
|
@ -519,7 +517,7 @@ FORCE_INLINE bool code_seen(char code)
|
||||||
endstops_hit_on_purpose();\
|
endstops_hit_on_purpose();\
|
||||||
}
|
}
|
||||||
|
|
||||||
FORCE_INLINE void process_commands()
|
void process_commands()
|
||||||
{
|
{
|
||||||
unsigned long codenum; //throw away variable
|
unsigned long codenum; //throw away variable
|
||||||
char *starpos = NULL;
|
char *starpos = NULL;
|
||||||
|
@ -843,11 +841,11 @@ FORCE_INLINE void process_commands()
|
||||||
/* continue to loop until we have reached the target temp
|
/* continue to loop until we have reached the target temp
|
||||||
_and_ until TEMP_RESIDENCY_TIME hasn't passed since we reached it */
|
_and_ until TEMP_RESIDENCY_TIME hasn't passed since we reached it */
|
||||||
while((residencyStart == -1) ||
|
while((residencyStart == -1) ||
|
||||||
(residencyStart > -1 && (millis() - residencyStart) < TEMP_RESIDENCY_TIME*1000) ) {
|
(residencyStart >= 0 && (((unsigned int) (millis() - residencyStart)) < (TEMP_RESIDENCY_TIME * 1000UL))) ) {
|
||||||
#else
|
#else
|
||||||
while ( target_direction ? (isHeatingHotend(tmp_extruder)) : (isCoolingHotend(tmp_extruder)&&(CooldownNoWait==false)) ) {
|
while ( target_direction ? (isHeatingHotend(tmp_extruder)) : (isCoolingHotend(tmp_extruder)&&(CooldownNoWait==false)) ) {
|
||||||
#endif //TEMP_RESIDENCY_TIME
|
#endif //TEMP_RESIDENCY_TIME
|
||||||
if( (millis() - codenum) > 1000 )
|
if( (millis() - codenum) > 1000UL )
|
||||||
{ //Print Temp Reading and remaining time every 1 second while heating up/cooling down
|
{ //Print Temp Reading and remaining time every 1 second while heating up/cooling down
|
||||||
SERIAL_PROTOCOLPGM("T:");
|
SERIAL_PROTOCOLPGM("T:");
|
||||||
SERIAL_PROTOCOL( degHotend(tmp_extruder) );
|
SERIAL_PROTOCOL( degHotend(tmp_extruder) );
|
||||||
|
@ -857,13 +855,15 @@ FORCE_INLINE void process_commands()
|
||||||
SERIAL_PROTOCOLPGM(" W:");
|
SERIAL_PROTOCOLPGM(" W:");
|
||||||
if(residencyStart > -1)
|
if(residencyStart > -1)
|
||||||
{
|
{
|
||||||
codenum = TEMP_RESIDENCY_TIME - ((millis() - residencyStart) / 1000);
|
codenum = ((TEMP_RESIDENCY_TIME * 1000UL) - (millis() - residencyStart)) / 1000UL;
|
||||||
SERIAL_PROTOCOLLN( codenum );
|
SERIAL_PROTOCOLLN( codenum );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
SERIAL_PROTOCOLLN( "?" );
|
SERIAL_PROTOCOLLN( "?" );
|
||||||
}
|
}
|
||||||
|
#else
|
||||||
|
SERIAL_PROTOCOLLN("");
|
||||||
#endif
|
#endif
|
||||||
codenum = millis();
|
codenum = millis();
|
||||||
}
|
}
|
||||||
|
@ -938,14 +938,13 @@ FORCE_INLINE void process_commands()
|
||||||
|
|
||||||
case 81: // M81 - ATX Power Off
|
case 81: // M81 - ATX Power Off
|
||||||
|
|
||||||
#if (SUICIDE_PIN >-1)
|
#if defined SUICIDE_PIN && SUICIDE_PIN > -1
|
||||||
st_synchronize();
|
st_synchronize();
|
||||||
suicide();
|
suicide();
|
||||||
#else
|
#elif (PS_ON_PIN > -1)
|
||||||
#if (PS_ON_PIN > -1)
|
|
||||||
SET_INPUT(PS_ON_PIN); //Floating
|
SET_INPUT(PS_ON_PIN); //Floating
|
||||||
#endif
|
#endif
|
||||||
#endif
|
break;
|
||||||
|
|
||||||
case 82:
|
case 82:
|
||||||
axis_relative_modes[3] = false;
|
axis_relative_modes[3] = false;
|
||||||
|
@ -963,6 +962,7 @@ FORCE_INLINE void process_commands()
|
||||||
bool all_axis = !((code_seen(axis_codes[0])) || (code_seen(axis_codes[1])) || (code_seen(axis_codes[2]))|| (code_seen(axis_codes[3])));
|
bool all_axis = !((code_seen(axis_codes[0])) || (code_seen(axis_codes[1])) || (code_seen(axis_codes[2]))|| (code_seen(axis_codes[3])));
|
||||||
if(all_axis)
|
if(all_axis)
|
||||||
{
|
{
|
||||||
|
st_synchronize();
|
||||||
disable_e0();
|
disable_e0();
|
||||||
disable_e1();
|
disable_e1();
|
||||||
disable_e2();
|
disable_e2();
|
||||||
|
@ -1217,7 +1217,7 @@ FORCE_INLINE void process_commands()
|
||||||
void FlushSerialRequestResend()
|
void FlushSerialRequestResend()
|
||||||
{
|
{
|
||||||
//char cmdbuffer[bufindr][100]="Resend:";
|
//char cmdbuffer[bufindr][100]="Resend:";
|
||||||
MSerial.flush();
|
MYSERIAL.flush();
|
||||||
SERIAL_PROTOCOLPGM("Resend:");
|
SERIAL_PROTOCOLPGM("Resend:");
|
||||||
SERIAL_PROTOCOLLN(gcode_LastN + 1);
|
SERIAL_PROTOCOLLN(gcode_LastN + 1);
|
||||||
ClearToSend();
|
ClearToSend();
|
||||||
|
@ -1233,7 +1233,7 @@ void ClearToSend()
|
||||||
SERIAL_PROTOCOLLNPGM("ok");
|
SERIAL_PROTOCOLLNPGM("ok");
|
||||||
}
|
}
|
||||||
|
|
||||||
FORCE_INLINE void get_coordinates()
|
void get_coordinates()
|
||||||
{
|
{
|
||||||
for(int8_t i=0; i < NUM_AXIS; i++) {
|
for(int8_t i=0; i < NUM_AXIS; i++) {
|
||||||
if(code_seen(axis_codes[i])) destination[i] = (float)code_value() + (axis_relative_modes[i] || relative_mode)*current_position[i];
|
if(code_seen(axis_codes[i])) destination[i] = (float)code_value() + (axis_relative_modes[i] || relative_mode)*current_position[i];
|
||||||
|
@ -1245,7 +1245,7 @@ FORCE_INLINE void get_coordinates()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
FORCE_INLINE void get_arc_coordinates()
|
void get_arc_coordinates()
|
||||||
{
|
{
|
||||||
get_coordinates();
|
get_coordinates();
|
||||||
if(code_seen('I')) offset[0] = code_value();
|
if(code_seen('I')) offset[0] = code_value();
|
||||||
|
@ -1294,16 +1294,15 @@ void manage_inactivity(byte debug)
|
||||||
if( (millis() - previous_millis_cmd) > max_inactive_time )
|
if( (millis() - previous_millis_cmd) > max_inactive_time )
|
||||||
if(max_inactive_time)
|
if(max_inactive_time)
|
||||||
kill();
|
kill();
|
||||||
if(stepper_inactive_time)
|
if(stepper_inactive_time) {
|
||||||
if( (millis()-last_stepperdisabled_time) > stepper_inactive_time )
|
if( (millis() - previous_millis_cmd) > stepper_inactive_time )
|
||||||
{
|
{
|
||||||
if(previous_millis_cmd>last_stepperdisabled_time)
|
disable_x();
|
||||||
last_stepperdisabled_time=previous_millis_cmd;
|
disable_y();
|
||||||
else
|
disable_z();
|
||||||
{
|
disable_e0();
|
||||||
if( (X_ENABLE_ON && (READ(X_ENABLE_PIN)!=0)) || (!X_ENABLE_ON && READ(X_ENABLE_PIN)==0) )
|
disable_e1();
|
||||||
enquecommand(DEFAULT_STEPPER_DEACTIVE_COMMAND);
|
disable_e2();
|
||||||
last_stepperdisabled_time=millis();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#ifdef EXTRUDER_RUNOUT_PREVENT
|
#ifdef EXTRUDER_RUNOUT_PREVENT
|
||||||
|
@ -1321,7 +1320,6 @@ void manage_inactivity(byte debug)
|
||||||
destination[E_AXIS]=oldedes;
|
destination[E_AXIS]=oldedes;
|
||||||
plan_set_e_position(oldepos);
|
plan_set_e_position(oldepos);
|
||||||
previous_millis_cmd=millis();
|
previous_millis_cmd=millis();
|
||||||
//enquecommand(DEFAULT_STEPPER_DEACTIVE_COMMAND);
|
|
||||||
st_synchronize();
|
st_synchronize();
|
||||||
WRITE(E0_ENABLE_PIN,oldstatus);
|
WRITE(E0_ENABLE_PIN,oldstatus);
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,20 +23,15 @@
|
||||||
#include "Marlin.h"
|
#include "Marlin.h"
|
||||||
#include "MarlinSerial.h"
|
#include "MarlinSerial.h"
|
||||||
|
|
||||||
|
#if MOTHERBOARD != 8 // !teensylu
|
||||||
// this next line disables the entire HardwareSerial.cpp,
|
// this next line disables the entire HardwareSerial.cpp,
|
||||||
// this is so I can support Attiny series and any other chip without a uart
|
// this is so I can support Attiny series and any other chip without a uart
|
||||||
#if defined(UBRRH) || defined(UBRR0H) || defined(UBRR1H) || defined(UBRR2H) || defined(UBRR3H)
|
#if defined(UBRRH) || defined(UBRR0H) || defined(UBRR1H) || defined(UBRR2H) || defined(UBRR3H)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#if defined(UBRRH) || defined(UBRR0H)
|
#if defined(UBRRH) || defined(UBRR0H)
|
||||||
ring_buffer rx_buffer = { { 0 }, 0, 0 };
|
ring_buffer rx_buffer = { { 0 }, 0, 0 };
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
FORCE_INLINE void store_char(unsigned char c)
|
FORCE_INLINE void store_char(unsigned char c)
|
||||||
{
|
{
|
||||||
int i = (unsigned int)(rx_buffer.head + 1) % RX_BUFFER_SIZE;
|
int i = (unsigned int)(rx_buffer.head + 1) % RX_BUFFER_SIZE;
|
||||||
|
@ -324,11 +319,11 @@ void MarlinSerial::printFloat(double number, uint8_t digits)
|
||||||
remainder -= toPrint;
|
remainder -= toPrint;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Preinstantiate Objects //////////////////////////////////////////////////////
|
// Preinstantiate Objects //////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
|
||||||
MarlinSerial MSerial;
|
MarlinSerial MSerial;
|
||||||
|
|
||||||
|
|
||||||
#endif // whole file
|
#endif // whole file
|
||||||
|
#endif //teensylu
|
||||||
|
|
||||||
|
|
|
@ -31,7 +31,7 @@
|
||||||
#define BYTE 0
|
#define BYTE 0
|
||||||
|
|
||||||
|
|
||||||
|
#if MOTHERBOARD != 8 // ! teensylu
|
||||||
// Define constants and variables for buffering incoming serial data. We're
|
// Define constants and variables for buffering incoming serial data. We're
|
||||||
// using a ring buffer (I think), in which rx_buffer_head is the index of the
|
// using a ring buffer (I think), in which rx_buffer_head is the index of the
|
||||||
// location to which to write the next incoming character and rx_buffer_tail
|
// location to which to write the next incoming character and rx_buffer_tail
|
||||||
|
@ -144,8 +144,7 @@ class MarlinSerial //: public Stream
|
||||||
void println(void);
|
void println(void);
|
||||||
};
|
};
|
||||||
|
|
||||||
#if defined(UBRRH) || defined(UBRR0H)
|
|
||||||
extern MarlinSerial MSerial;
|
extern MarlinSerial MSerial;
|
||||||
#endif
|
#endif // ! teensylu
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -18,8 +18,6 @@
|
||||||
* <http://www.gnu.org/licenses/>.
|
* <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define SERIAL MSerial
|
|
||||||
|
|
||||||
#include "Marlin.h"
|
#include "Marlin.h"
|
||||||
#ifdef SDSUPPORT
|
#ifdef SDSUPPORT
|
||||||
|
|
||||||
|
@ -345,38 +343,38 @@ int8_t SdBaseFile::lsPrintNext( uint8_t flags, uint8_t indent) {
|
||||||
&& DIR_IS_FILE_OR_SUBDIR(&dir)) break;
|
&& DIR_IS_FILE_OR_SUBDIR(&dir)) break;
|
||||||
}
|
}
|
||||||
// indent for dir level
|
// indent for dir level
|
||||||
for (uint8_t i = 0; i < indent; i++) MSerial.write(' ');
|
for (uint8_t i = 0; i < indent; i++) MYSERIAL.write(' ');
|
||||||
|
|
||||||
// print name
|
// print name
|
||||||
for (uint8_t i = 0; i < 11; i++) {
|
for (uint8_t i = 0; i < 11; i++) {
|
||||||
if (dir.name[i] == ' ')continue;
|
if (dir.name[i] == ' ')continue;
|
||||||
if (i == 8) {
|
if (i == 8) {
|
||||||
MSerial.write('.');
|
MYSERIAL.write('.');
|
||||||
w++;
|
w++;
|
||||||
}
|
}
|
||||||
MSerial.write(dir.name[i]);
|
MYSERIAL.write(dir.name[i]);
|
||||||
w++;
|
w++;
|
||||||
}
|
}
|
||||||
if (DIR_IS_SUBDIR(&dir)) {
|
if (DIR_IS_SUBDIR(&dir)) {
|
||||||
MSerial.write('/');
|
MYSERIAL.write('/');
|
||||||
w++;
|
w++;
|
||||||
}
|
}
|
||||||
if (flags & (LS_DATE | LS_SIZE)) {
|
if (flags & (LS_DATE | LS_SIZE)) {
|
||||||
while (w++ < 14) MSerial.write(' ');
|
while (w++ < 14) MYSERIAL.write(' ');
|
||||||
}
|
}
|
||||||
// print modify date/time if requested
|
// print modify date/time if requested
|
||||||
if (flags & LS_DATE) {
|
if (flags & LS_DATE) {
|
||||||
MSerial.write(' ');
|
MYSERIAL.write(' ');
|
||||||
printFatDate( dir.lastWriteDate);
|
printFatDate( dir.lastWriteDate);
|
||||||
MSerial.write(' ');
|
MYSERIAL.write(' ');
|
||||||
printFatTime( dir.lastWriteTime);
|
printFatTime( dir.lastWriteTime);
|
||||||
}
|
}
|
||||||
// print size if requested
|
// print size if requested
|
||||||
if (!DIR_IS_SUBDIR(&dir) && (flags & LS_SIZE)) {
|
if (!DIR_IS_SUBDIR(&dir) && (flags & LS_SIZE)) {
|
||||||
MSerial.write(' ');
|
MYSERIAL.write(' ');
|
||||||
MSerial.print(dir.fileSize);
|
MYSERIAL.print(dir.fileSize);
|
||||||
}
|
}
|
||||||
MSerial.println();
|
MYSERIAL.println();
|
||||||
return DIR_IS_FILE(&dir) ? 1 : 2;
|
return DIR_IS_FILE(&dir) ? 1 : 2;
|
||||||
}
|
}
|
||||||
//------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------
|
||||||
|
@ -947,26 +945,26 @@ void SdBaseFile::printDirName(const dir_t& dir,
|
||||||
for (uint8_t i = 0; i < 11; i++) {
|
for (uint8_t i = 0; i < 11; i++) {
|
||||||
if (dir.name[i] == ' ')continue;
|
if (dir.name[i] == ' ')continue;
|
||||||
if (i == 8) {
|
if (i == 8) {
|
||||||
MSerial.write('.');
|
MYSERIAL.write('.');
|
||||||
w++;
|
w++;
|
||||||
}
|
}
|
||||||
MSerial.write(dir.name[i]);
|
MYSERIAL.write(dir.name[i]);
|
||||||
w++;
|
w++;
|
||||||
}
|
}
|
||||||
if (DIR_IS_SUBDIR(&dir) && printSlash) {
|
if (DIR_IS_SUBDIR(&dir) && printSlash) {
|
||||||
MSerial.write('/');
|
MYSERIAL.write('/');
|
||||||
w++;
|
w++;
|
||||||
}
|
}
|
||||||
while (w < width) {
|
while (w < width) {
|
||||||
MSerial.write(' ');
|
MYSERIAL.write(' ');
|
||||||
w++;
|
w++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------
|
||||||
// print uint8_t with width 2
|
// print uint8_t with width 2
|
||||||
static void print2u( uint8_t v) {
|
static void print2u( uint8_t v) {
|
||||||
if (v < 10) MSerial.write('0');
|
if (v < 10) MYSERIAL.write('0');
|
||||||
MSerial.print(v, DEC);
|
MYSERIAL.print(v, DEC);
|
||||||
}
|
}
|
||||||
//------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------
|
||||||
/** %Print a directory date field to Serial.
|
/** %Print a directory date field to Serial.
|
||||||
|
@ -985,10 +983,10 @@ static void print2u( uint8_t v) {
|
||||||
* \param[in] fatDate The date field from a directory entry.
|
* \param[in] fatDate The date field from a directory entry.
|
||||||
*/
|
*/
|
||||||
void SdBaseFile::printFatDate(uint16_t fatDate) {
|
void SdBaseFile::printFatDate(uint16_t fatDate) {
|
||||||
MSerial.print(FAT_YEAR(fatDate));
|
MYSERIAL.print(FAT_YEAR(fatDate));
|
||||||
MSerial.write('-');
|
MYSERIAL.write('-');
|
||||||
print2u( FAT_MONTH(fatDate));
|
print2u( FAT_MONTH(fatDate));
|
||||||
MSerial.write('-');
|
MYSERIAL.write('-');
|
||||||
print2u( FAT_DAY(fatDate));
|
print2u( FAT_DAY(fatDate));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1002,9 +1000,9 @@ void SdBaseFile::printFatDate(uint16_t fatDate) {
|
||||||
*/
|
*/
|
||||||
void SdBaseFile::printFatTime( uint16_t fatTime) {
|
void SdBaseFile::printFatTime( uint16_t fatTime) {
|
||||||
print2u( FAT_HOUR(fatTime));
|
print2u( FAT_HOUR(fatTime));
|
||||||
MSerial.write(':');
|
MYSERIAL.write(':');
|
||||||
print2u( FAT_MINUTE(fatTime));
|
print2u( FAT_MINUTE(fatTime));
|
||||||
MSerial.write(':');
|
MYSERIAL.write(':');
|
||||||
print2u( FAT_SECOND(fatTime));
|
print2u( FAT_SECOND(fatTime));
|
||||||
}
|
}
|
||||||
//------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------
|
||||||
|
@ -1016,7 +1014,7 @@ void SdBaseFile::printFatTime( uint16_t fatTime) {
|
||||||
bool SdBaseFile::printName() {
|
bool SdBaseFile::printName() {
|
||||||
char name[13];
|
char name[13];
|
||||||
if (!getFilename(name)) return false;
|
if (!getFilename(name)) return false;
|
||||||
MSerial.print(name);
|
MYSERIAL.print(name);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
//------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------
|
||||||
|
|
|
@ -48,7 +48,7 @@ int SdFatUtil::FreeRam() {
|
||||||
* \param[in] str Pointer to string stored in flash memory.
|
* \param[in] str Pointer to string stored in flash memory.
|
||||||
*/
|
*/
|
||||||
void SdFatUtil::print_P( PGM_P str) {
|
void SdFatUtil::print_P( PGM_P str) {
|
||||||
for (uint8_t c; (c = pgm_read_byte(str)); str++) MSerial.write(c);
|
for (uint8_t c; (c = pgm_read_byte(str)); str++) MYSERIAL.write(c);
|
||||||
}
|
}
|
||||||
//------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------
|
||||||
/** %Print a string in flash memory followed by a CR/LF.
|
/** %Print a string in flash memory followed by a CR/LF.
|
||||||
|
@ -58,7 +58,7 @@ void SdFatUtil::print_P( PGM_P str) {
|
||||||
*/
|
*/
|
||||||
void SdFatUtil::println_P( PGM_P str) {
|
void SdFatUtil::println_P( PGM_P str) {
|
||||||
print_P( str);
|
print_P( str);
|
||||||
MSerial.println();
|
MYSERIAL.println();
|
||||||
}
|
}
|
||||||
//------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------
|
||||||
/** %Print a string in flash memory to Serial.
|
/** %Print a string in flash memory to Serial.
|
||||||
|
|
|
@ -1,5 +1,8 @@
|
||||||
#include "Marlin.h"
|
#include "Marlin.h"
|
||||||
#include "cardreader.h"
|
#include "cardreader.h"
|
||||||
|
#include "ultralcd.h"
|
||||||
|
#include "stepper.h"
|
||||||
|
#include "temperature.h"
|
||||||
#ifdef SDSUPPORT
|
#ifdef SDSUPPORT
|
||||||
|
|
||||||
|
|
||||||
|
@ -444,7 +447,9 @@ void CardReader::printingHasFinished()
|
||||||
st_synchronize();
|
st_synchronize();
|
||||||
quickStop();
|
quickStop();
|
||||||
sdprinting = false;
|
sdprinting = false;
|
||||||
|
#ifdef STOP_HEATING_WAIT_FOR_SD_PRINTING
|
||||||
stop_heating_wait=true;
|
stop_heating_wait=true;
|
||||||
|
#endif
|
||||||
if(SD_FINISHED_STEPPERRELEASE)
|
if(SD_FINISHED_STEPPERRELEASE)
|
||||||
{
|
{
|
||||||
//finishAndDisableSteppers();
|
//finishAndDisableSteppers();
|
|
@ -1928,7 +1928,7 @@ pins
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined (__AVR_AT90USB1287__)
|
#if defined (__AVR_AT90USB1287__) || defined (__AVR_AT90USB1286__)
|
||||||
// SPI
|
// SPI
|
||||||
#define SCK DIO9
|
#define SCK DIO9
|
||||||
#define MISO DIO11
|
#define MISO DIO11
|
||||||
|
|
|
@ -45,7 +45,7 @@ void mc_arc(float *position, float *target, float *offset, uint8_t axis_0, uint8
|
||||||
if (isclockwise) { angular_travel -= 2*M_PI; }
|
if (isclockwise) { angular_travel -= 2*M_PI; }
|
||||||
|
|
||||||
float millimeters_of_travel = hypot(angular_travel*radius, fabs(linear_travel));
|
float millimeters_of_travel = hypot(angular_travel*radius, fabs(linear_travel));
|
||||||
if (millimeters_of_travel == 0.0) { return; }
|
if (millimeters_of_travel < 0.001) { return; }
|
||||||
uint16_t segments = floor(millimeters_of_travel/MM_PER_ARC_SEGMENT);
|
uint16_t segments = floor(millimeters_of_travel/MM_PER_ARC_SEGMENT);
|
||||||
/*
|
/*
|
||||||
// Multiply inverse feed_rate to compensate for the fact that this movement is approximated
|
// Multiply inverse feed_rate to compensate for the fact that this movement is approximated
|
||||||
|
|
183
Marlin/pins.h
183
Marlin/pins.h
|
@ -1,6 +1,49 @@
|
||||||
#ifndef PINS_H
|
#ifndef PINS_H
|
||||||
#define PINS_H
|
#define PINS_H
|
||||||
|
|
||||||
|
#if MOTHERBOARD == 99
|
||||||
|
#define KNOWN_BOARD 1
|
||||||
|
|
||||||
|
#define X_STEP_PIN 2
|
||||||
|
#define X_DIR_PIN 3
|
||||||
|
#define X_ENABLE_PIN -1
|
||||||
|
#define X_MIN_PIN -1
|
||||||
|
#define X_MAX_PIN 16
|
||||||
|
|
||||||
|
#define Y_STEP_PIN 5
|
||||||
|
#define Y_DIR_PIN 6
|
||||||
|
#define Y_ENABLE_PIN -1
|
||||||
|
#define Y_MIN_PIN 67
|
||||||
|
#define Y_MAX_PIN -1
|
||||||
|
|
||||||
|
#define Z_STEP_PIN 62
|
||||||
|
#define Z_DIR_PIN 63
|
||||||
|
#define Z_ENABLE_PIN -1
|
||||||
|
#define Z_MIN_PIN 59
|
||||||
|
#define Z_MAX_PIN -1
|
||||||
|
|
||||||
|
#define E0_STEP_PIN 65
|
||||||
|
#define E0_DIR_PIN 66
|
||||||
|
#define E0_ENABLE_PIN -1
|
||||||
|
|
||||||
|
#define SDPOWER -1
|
||||||
|
#define SDSS 53
|
||||||
|
#define LED_PIN -1
|
||||||
|
#define FAN_PIN -1
|
||||||
|
#define PS_ON_PIN 9
|
||||||
|
#define KILL_PIN -1
|
||||||
|
|
||||||
|
#define HEATER_0_PIN 13
|
||||||
|
#define HEATER_1_PIN -1
|
||||||
|
#define HEATER_2_PIN -1
|
||||||
|
#define TEMP_0_PIN 6 // MUST USE ANALOG INPUT NUMBERING NOT DIGITAL OUTPUT NUMBERING!!!!!!!!!
|
||||||
|
#define TEMP_1_PIN -1 // MUST USE ANALOG INPUT NUMBERING NOT DIGITAL OUTPUT NUMBERING!!!!!!!!!
|
||||||
|
#define TEMP_2_PIN -1 // MUST USE ANALOG INPUT NUMBERING NOT DIGITAL OUTPUT NUMBERING!!!!!!!!!
|
||||||
|
#define HEATER_BED_PIN 4
|
||||||
|
#define TEMP_BED_PIN 10
|
||||||
|
|
||||||
|
#endif /* 99 */
|
||||||
|
|
||||||
/****************************************************************************************
|
/****************************************************************************************
|
||||||
* Arduino pin assignment
|
* Arduino pin assignment
|
||||||
*
|
*
|
||||||
|
@ -331,16 +374,17 @@
|
||||||
// SPI for Max6675 Thermocouple
|
// SPI for Max6675 Thermocouple
|
||||||
|
|
||||||
#ifndef SDSUPPORT
|
#ifndef SDSUPPORT
|
||||||
// these pins are defined in the SD library if building with SD support #define SCK_PIN 52
|
// these pins are defined in the SD library if building with SD support
|
||||||
#define MISO_PIN 50
|
#define MAX_SCK_PIN 52
|
||||||
#define MOSI_PIN 51
|
#define MAX_MISO_PIN 50
|
||||||
|
#define MAX_MOSI_PIN 51
|
||||||
#define MAX6675_SS 53
|
#define MAX6675_SS 53
|
||||||
#else
|
#else
|
||||||
#define MAX6675_SS 49
|
#define MAX6675_SS 49
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/****************************************************************************************
|
/****************************************************************************************
|
||||||
* Duemilanove w/ ATMega328P pin assignment
|
* Duemilanove w/ ATMega328P pin assignment
|
||||||
*
|
*
|
||||||
|
@ -470,7 +514,7 @@
|
||||||
#define X_STEP_PIN 15
|
#define X_STEP_PIN 15
|
||||||
#define X_DIR_PIN 21
|
#define X_DIR_PIN 21
|
||||||
#define X_MIN_PIN 18
|
#define X_MIN_PIN 18
|
||||||
#define X_MAX_PIN -2
|
#define X_MAX_PIN -1
|
||||||
|
|
||||||
#define Y_STEP_PIN 22
|
#define Y_STEP_PIN 22
|
||||||
#define Y_DIR_PIN 23
|
#define Y_DIR_PIN 23
|
||||||
|
@ -658,10 +702,8 @@
|
||||||
#define HEATER_0_PIN 2
|
#define HEATER_0_PIN 2
|
||||||
#define TEMP_0_PIN 8
|
#define TEMP_0_PIN 8
|
||||||
|
|
||||||
#define EXTRUDER_1_HEATER_PIN 3
|
#define HEATER_1_PIN 3
|
||||||
#define EXTRUDER_1_TEMPERATURE_PIN 10
|
#define TEMP_1_PIN 9
|
||||||
#define HEATER_1_PIN 51
|
|
||||||
#define TEMP_1_PIN 3
|
|
||||||
|
|
||||||
#define HEATER_2_PIN -1
|
#define HEATER_2_PIN -1
|
||||||
#define TEMP_2_PIN -1
|
#define TEMP_2_PIN -1
|
||||||
|
@ -751,6 +793,73 @@
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if MOTHERBOARD == 71
|
||||||
|
#define KNOWN_BOARD
|
||||||
|
/*****************************************************************
|
||||||
|
* Ultimaker pin assignment (Old electronics)
|
||||||
|
******************************************************************/
|
||||||
|
|
||||||
|
#ifndef __AVR_ATmega1280__
|
||||||
|
#ifndef __AVR_ATmega2560__
|
||||||
|
#error Oops! Make sure you have 'Arduino Mega' selected from the 'Tools -> Boards' menu.
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define X_STEP_PIN 25
|
||||||
|
#define X_DIR_PIN 23
|
||||||
|
#define X_MIN_PIN 15
|
||||||
|
#define X_MAX_PIN 14
|
||||||
|
#define X_ENABLE_PIN 27
|
||||||
|
|
||||||
|
#define Y_STEP_PIN 31
|
||||||
|
#define Y_DIR_PIN 33
|
||||||
|
#define Y_MIN_PIN 17
|
||||||
|
#define Y_MAX_PIN 16
|
||||||
|
#define Y_ENABLE_PIN 29
|
||||||
|
|
||||||
|
#define Z_STEP_PIN 37
|
||||||
|
#define Z_DIR_PIN 39
|
||||||
|
#define Z_MIN_PIN 19
|
||||||
|
#define Z_MAX_PIN 18
|
||||||
|
#define Z_ENABLE_PIN 35
|
||||||
|
|
||||||
|
#define HEATER_BED_PIN -1
|
||||||
|
#define TEMP_BED_PIN -1
|
||||||
|
|
||||||
|
#define HEATER_0_PIN 2
|
||||||
|
#define TEMP_0_PIN 8
|
||||||
|
|
||||||
|
#define HEATER_1_PIN 1
|
||||||
|
#define TEMP_1_PIN 1
|
||||||
|
|
||||||
|
#define HEATER_2_PIN -1
|
||||||
|
#define TEMP_2_PIN -1
|
||||||
|
|
||||||
|
#define E0_STEP_PIN 43
|
||||||
|
#define E0_DIR_PIN 45
|
||||||
|
#define E0_ENABLE_PIN 41
|
||||||
|
|
||||||
|
#define E1_STEP_PIN -1
|
||||||
|
#define E1_DIR_PIN -1
|
||||||
|
#define E1_ENABLE_PIN -1
|
||||||
|
|
||||||
|
#define SDPOWER -1
|
||||||
|
#define SDSS -1
|
||||||
|
#define LED_PIN -1
|
||||||
|
#define FAN_PIN -1
|
||||||
|
#define PS_ON_PIN -1
|
||||||
|
#define KILL_PIN -1
|
||||||
|
#define SUICIDE_PIN -1 //PIN that has to be turned on right after start, to keep power flowing.
|
||||||
|
|
||||||
|
#define LCD_PINS_RS 24
|
||||||
|
#define LCD_PINS_ENABLE 22
|
||||||
|
#define LCD_PINS_D4 36
|
||||||
|
#define LCD_PINS_D5 34
|
||||||
|
#define LCD_PINS_D6 32
|
||||||
|
#define LCD_PINS_D7 30
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
/****************************************************************************************
|
/****************************************************************************************
|
||||||
* Teensylu 0.7 pin assingments (ATMEGA90USB)
|
* Teensylu 0.7 pin assingments (ATMEGA90USB)
|
||||||
* Requires the Teensyduino software with Teensy2.0++ selected in arduino IDE!
|
* Requires the Teensyduino software with Teensy2.0++ selected in arduino IDE!
|
||||||
|
@ -810,6 +919,62 @@
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/****************************************************************************************
|
||||||
|
* Gen3+ pin assignment
|
||||||
|
*
|
||||||
|
****************************************************************************************/
|
||||||
|
#if MOTHERBOARD == 9
|
||||||
|
#define MOTHERBOARD 6
|
||||||
|
#define KNOWN_BOARD 1
|
||||||
|
#ifndef __AVR_ATmega644P__
|
||||||
|
#error Oops! Make sure you have 'Sanguino' selected from the 'Tools -> Boards' menu.
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define X_STEP_PIN 15
|
||||||
|
#define X_DIR_PIN 18
|
||||||
|
#define X_MIN_PIN 20
|
||||||
|
#define X_MAX_PIN -1
|
||||||
|
|
||||||
|
#define Y_STEP_PIN 23
|
||||||
|
#define Y_DIR_PIN 22
|
||||||
|
#define Y_MIN_PIN 25
|
||||||
|
#define Y_MAX_PIN -1
|
||||||
|
|
||||||
|
#define Z_STEP_PIN 27
|
||||||
|
#define Z_DIR_PIN 28
|
||||||
|
#define Z_MIN_PIN 30
|
||||||
|
#define Z_MAX_PIN -1
|
||||||
|
|
||||||
|
#define E_STEP_PIN 17
|
||||||
|
#define E_DIR_PIN 21
|
||||||
|
|
||||||
|
#define LED_PIN -1
|
||||||
|
|
||||||
|
#define FAN_PIN -1
|
||||||
|
|
||||||
|
#define PS_ON_PIN 14
|
||||||
|
#define KILL_PIN -1
|
||||||
|
|
||||||
|
#define HEATER_0_PIN 12 // (extruder)
|
||||||
|
|
||||||
|
#define HEATER_1_PIN 16 // (bed)
|
||||||
|
#define X_ENABLE_PIN 19
|
||||||
|
#define Y_ENABLE_PIN 24
|
||||||
|
#define Z_ENABLE_PIN 29
|
||||||
|
#define E_ENABLE_PIN 13
|
||||||
|
|
||||||
|
#define TEMP_0_PIN 0 // MUST USE ANALOG INPUT NUMBERING NOT DIGITAL OUTPUT NUMBERING!!!!!!!!! (pin 33 extruder)
|
||||||
|
#define TEMP_1_PIN 5 // MUST USE ANALOG INPUT NUMBERING NOT DIGITAL OUTPUT NUMBERING!!!!!!!!! (pin 34 bed)
|
||||||
|
#define TEMP_2_PIN -1
|
||||||
|
#define SDPOWER -1
|
||||||
|
#define SDSS 4
|
||||||
|
#define HEATER_2_PIN -1
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#ifndef KNOWN_BOARD
|
#ifndef KNOWN_BOARD
|
||||||
#error Unknown MOTHERBOARD value in configuration.h
|
#error Unknown MOTHERBOARD value in configuration.h
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -505,7 +505,9 @@ void plan_buffer_line(const float &x, const float &y, const float &z, const floa
|
||||||
//enable active axes
|
//enable active axes
|
||||||
if(block->steps_x != 0) enable_x();
|
if(block->steps_x != 0) enable_x();
|
||||||
if(block->steps_y != 0) enable_y();
|
if(block->steps_y != 0) enable_y();
|
||||||
|
#ifndef Z_LATE_ENABLE
|
||||||
if(block->steps_z != 0) enable_z();
|
if(block->steps_z != 0) enable_z();
|
||||||
|
#endif
|
||||||
|
|
||||||
// Enable all
|
// Enable all
|
||||||
if(block->steps_e != 0) { enable_e0();enable_e1();enable_e2(); }
|
if(block->steps_e != 0) { enable_e0();enable_e1();enable_e2(); }
|
||||||
|
@ -515,8 +517,11 @@ void plan_buffer_line(const float &x, const float &y, const float &z, const floa
|
||||||
delta_mm[Y_AXIS] = (target[Y_AXIS]-position[Y_AXIS])/axis_steps_per_unit[Y_AXIS];
|
delta_mm[Y_AXIS] = (target[Y_AXIS]-position[Y_AXIS])/axis_steps_per_unit[Y_AXIS];
|
||||||
delta_mm[Z_AXIS] = (target[Z_AXIS]-position[Z_AXIS])/axis_steps_per_unit[Z_AXIS];
|
delta_mm[Z_AXIS] = (target[Z_AXIS]-position[Z_AXIS])/axis_steps_per_unit[Z_AXIS];
|
||||||
delta_mm[E_AXIS] = (target[E_AXIS]-position[E_AXIS])/axis_steps_per_unit[E_AXIS];
|
delta_mm[E_AXIS] = (target[E_AXIS]-position[E_AXIS])/axis_steps_per_unit[E_AXIS];
|
||||||
block->millimeters = sqrt(square(delta_mm[X_AXIS]) + square(delta_mm[Y_AXIS]) +
|
if ( block->steps_x == 0 && block->steps_y == 0 && block->steps_z == 0 ) {
|
||||||
square(delta_mm[Z_AXIS]) + square(delta_mm[E_AXIS]));
|
block->millimeters = abs(delta_mm[E_AXIS]);
|
||||||
|
} else {
|
||||||
|
block->millimeters = sqrt(square(delta_mm[X_AXIS]) + square(delta_mm[Y_AXIS]) + square(delta_mm[Z_AXIS]));
|
||||||
|
}
|
||||||
float inverse_millimeters = 1.0/block->millimeters; // Inverse millimeters to remove multiple divides
|
float inverse_millimeters = 1.0/block->millimeters; // Inverse millimeters to remove multiple divides
|
||||||
|
|
||||||
// Calculate speed in mm/second for each axis. No divide by zero due to previous checks.
|
// Calculate speed in mm/second for each axis. No divide by zero due to previous checks.
|
||||||
|
@ -525,9 +530,6 @@ void plan_buffer_line(const float &x, const float &y, const float &z, const floa
|
||||||
block->nominal_speed = block->millimeters * inverse_second; // (mm/sec) Always > 0
|
block->nominal_speed = block->millimeters * inverse_second; // (mm/sec) Always > 0
|
||||||
block->nominal_rate = ceil(block->step_event_count * inverse_second); // (step/sec) Always > 0
|
block->nominal_rate = ceil(block->step_event_count * inverse_second); // (step/sec) Always > 0
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if (block->steps_e == 0) {
|
if (block->steps_e == 0) {
|
||||||
if(feed_rate<mintravelfeedrate) feed_rate=mintravelfeedrate;
|
if(feed_rate<mintravelfeedrate) feed_rate=mintravelfeedrate;
|
||||||
}
|
}
|
||||||
|
@ -535,10 +537,9 @@ void plan_buffer_line(const float &x, const float &y, const float &z, const floa
|
||||||
if(feed_rate<minimumfeedrate) feed_rate=minimumfeedrate;
|
if(feed_rate<minimumfeedrate) feed_rate=minimumfeedrate;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef SLOWDOWN
|
|
||||||
// slow down when de buffer starts to empty, rather than wait at the corner for a buffer refill
|
// slow down when de buffer starts to empty, rather than wait at the corner for a buffer refill
|
||||||
int moves_queued=(block_buffer_head-block_buffer_tail + BLOCK_BUFFER_SIZE) & (BLOCK_BUFFER_SIZE - 1);
|
int moves_queued=(block_buffer_head-block_buffer_tail + BLOCK_BUFFER_SIZE) & (BLOCK_BUFFER_SIZE - 1);
|
||||||
|
#ifdef SLOWDOWN
|
||||||
if(moves_queued < (BLOCK_BUFFER_SIZE * 0.5) && moves_queued > 1) feed_rate = feed_rate*moves_queued / (BLOCK_BUFFER_SIZE * 0.5);
|
if(moves_queued < (BLOCK_BUFFER_SIZE * 0.5) && moves_queued > 1) feed_rate = feed_rate*moves_queued / (BLOCK_BUFFER_SIZE * 0.5);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -686,7 +687,7 @@ void plan_buffer_line(const float &x, const float &y, const float &z, const floa
|
||||||
vmax_junction = max_z_jerk/2;
|
vmax_junction = max_z_jerk/2;
|
||||||
vmax_junction = min(vmax_junction, block->nominal_speed);
|
vmax_junction = min(vmax_junction, block->nominal_speed);
|
||||||
|
|
||||||
if ((block_buffer_head != block_buffer_tail) && (previous_nominal_speed > 0.0)) {
|
if ((moves_queued > 1) && (previous_nominal_speed > 0.0)) {
|
||||||
float jerk = sqrt(pow((current_speed[X_AXIS]-previous_speed[X_AXIS]), 2)+pow((current_speed[Y_AXIS]-previous_speed[Y_AXIS]), 2));
|
float jerk = sqrt(pow((current_speed[X_AXIS]-previous_speed[X_AXIS]), 2)+pow((current_speed[Y_AXIS]-previous_speed[Y_AXIS]), 2));
|
||||||
if((previous_speed[X_AXIS] != 0.0) || (previous_speed[Y_AXIS] != 0.0)) {
|
if((previous_speed[X_AXIS] != 0.0) || (previous_speed[Y_AXIS] != 0.0)) {
|
||||||
vmax_junction = block->nominal_speed;
|
vmax_junction = block->nominal_speed;
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
|
|
||||||
#include "Marlin.h"
|
#include "Marlin.h"
|
||||||
|
|
||||||
uint16_t speed_lookuptable_fast[256][2] PROGMEM = {\
|
const uint16_t speed_lookuptable_fast[256][2] PROGMEM = {\
|
||||||
{ 62500, 55556}, { 6944, 3268}, { 3676, 1176}, { 2500, 607}, { 1893, 369}, { 1524, 249}, { 1275, 179}, { 1096, 135},
|
{ 62500, 55556}, { 6944, 3268}, { 3676, 1176}, { 2500, 607}, { 1893, 369}, { 1524, 249}, { 1275, 179}, { 1096, 135},
|
||||||
{ 961, 105}, { 856, 85}, { 771, 69}, { 702, 58}, { 644, 49}, { 595, 42}, { 553, 37}, { 516, 32},
|
{ 961, 105}, { 856, 85}, { 771, 69}, { 702, 58}, { 644, 49}, { 595, 42}, { 553, 37}, { 516, 32},
|
||||||
{ 484, 28}, { 456, 25}, { 431, 23}, { 408, 20}, { 388, 19}, { 369, 16}, { 353, 16}, { 337, 14},
|
{ 484, 28}, { 456, 25}, { 431, 23}, { 408, 20}, { 388, 19}, { 369, 16}, { 353, 16}, { 337, 14},
|
||||||
|
@ -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}
|
{ 31, 0}, { 31, 0}, { 31, 0}, { 31, 1}, { 30, 0}, { 30, 0}, { 30, 0}, { 30, 0}
|
||||||
};
|
};
|
||||||
|
|
||||||
uint16_t speed_lookuptable_slow[256][2] PROGMEM = {\
|
const uint16_t speed_lookuptable_slow[256][2] PROGMEM = {\
|
||||||
{ 62500, 12500}, { 50000, 8334}, { 41666, 5952}, { 35714, 4464}, { 31250, 3473}, { 27777, 2777}, { 25000, 2273}, { 22727, 1894},
|
{ 62500, 12500}, { 50000, 8334}, { 41666, 5952}, { 35714, 4464}, { 31250, 3473}, { 27777, 2777}, { 25000, 2273}, { 22727, 1894},
|
||||||
{ 20833, 1603}, { 19230, 1373}, { 17857, 1191}, { 16666, 1041}, { 15625, 920}, { 14705, 817}, { 13888, 731}, { 13157, 657},
|
{ 20833, 1603}, { 19230, 1373}, { 17857, 1191}, { 16666, 1041}, { 15625, 920}, { 14705, 817}, { 13888, 731}, { 13157, 657},
|
||||||
{ 12500, 596}, { 11904, 541}, { 11363, 494}, { 10869, 453}, { 10416, 416}, { 10000, 385}, { 9615, 356}, { 9259, 331},
|
{ 12500, 596}, { 11904, 541}, { 11363, 494}, { 10869, 453}, { 10416, 416}, { 10000, 385}, { 9615, 356}, { 9259, 331},
|
||||||
|
|
|
@ -254,7 +254,7 @@ FORCE_INLINE unsigned short calc_timer(unsigned short step_rate) {
|
||||||
timer = (unsigned short)pgm_read_word_near(table_address);
|
timer = (unsigned short)pgm_read_word_near(table_address);
|
||||||
timer -= (((unsigned short)pgm_read_word_near(table_address+2) * (unsigned char)(step_rate & 0x0007))>>3);
|
timer -= (((unsigned short)pgm_read_word_near(table_address+2) * (unsigned char)(step_rate & 0x0007))>>3);
|
||||||
}
|
}
|
||||||
if(timer < 100) { timer = 100; MSerial.print("Steprate to high : "); MSerial.println(step_rate); }//(20kHz this should never happen)
|
if(timer < 100) { timer = 100; MYSERIAL.print("Steprate to high : "); MYSERIAL.println(step_rate); }//(20kHz this should never happen)
|
||||||
return timer;
|
return timer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -275,6 +275,8 @@ FORCE_INLINE void trapezoid_generator_reset() {
|
||||||
OCR1A = acceleration_time;
|
OCR1A = acceleration_time;
|
||||||
OCR1A_nominal = calc_timer(current_block->nominal_rate);
|
OCR1A_nominal = calc_timer(current_block->nominal_rate);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// SERIAL_ECHO_START;
|
// SERIAL_ECHO_START;
|
||||||
// SERIAL_ECHOPGM("advance :");
|
// SERIAL_ECHOPGM("advance :");
|
||||||
// SERIAL_ECHO(current_block->advance/256.0);
|
// SERIAL_ECHO(current_block->advance/256.0);
|
||||||
|
@ -302,6 +304,14 @@ ISR(TIMER1_COMPA_vect)
|
||||||
counter_z = counter_x;
|
counter_z = counter_x;
|
||||||
counter_e = counter_x;
|
counter_e = counter_x;
|
||||||
step_events_completed = 0;
|
step_events_completed = 0;
|
||||||
|
#ifdef Z_LATE_ENABLE
|
||||||
|
if(current_block->steps_z > 0) {
|
||||||
|
enable_z();
|
||||||
|
OCR1A = 2000; //1ms wait
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
// #ifdef ADVANCE
|
// #ifdef ADVANCE
|
||||||
// e_steps[current_block->active_extruder] = 0;
|
// e_steps[current_block->active_extruder] = 0;
|
||||||
// #endif
|
// #endif
|
||||||
|
@ -429,7 +439,9 @@ ISR(TIMER1_COMPA_vect)
|
||||||
|
|
||||||
|
|
||||||
for(int8_t i=0; i < step_loops; i++) { // Take multiple steps per interrupt (For high speed moves)
|
for(int8_t i=0; i < step_loops; i++) { // Take multiple steps per interrupt (For high speed moves)
|
||||||
|
#if MOTHERBOARD != 8 // !teensylu
|
||||||
MSerial.checkRx(); // Check for serial chars.
|
MSerial.checkRx(); // Check for serial chars.
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef ADVANCE
|
#ifdef ADVANCE
|
||||||
counter_e += current_block->steps_e;
|
counter_e += current_block->steps_e;
|
||||||
|
|
|
@ -85,9 +85,9 @@ static unsigned long previous_millis_bed_heater;
|
||||||
static unsigned char soft_pwm[EXTRUDERS];
|
static unsigned char soft_pwm[EXTRUDERS];
|
||||||
|
|
||||||
#ifdef WATCHPERIOD
|
#ifdef WATCHPERIOD
|
||||||
static int watch_raw[EXTRUDERS] = { -1000 }; // the first value used for all
|
int watch_raw[EXTRUDERS] = { -1000 }; // the first value used for all
|
||||||
static int watch_oldtemp[3] = {0,0,0};
|
int watch_oldtemp[3] = {0,0,0};
|
||||||
static unsigned long watchmillis = 0;
|
unsigned long watchmillis = 0;
|
||||||
#endif //WATCHPERIOD
|
#endif //WATCHPERIOD
|
||||||
|
|
||||||
// Init min and max temp with extreme values to prevent false errors during startup
|
// Init min and max temp with extreme values to prevent false errors during startup
|
||||||
|
@ -218,7 +218,7 @@ void manage_heater()
|
||||||
|
|
||||||
#ifdef WATCHPERIOD
|
#ifdef WATCHPERIOD
|
||||||
if(watchmillis && millis() - watchmillis > WATCHPERIOD){
|
if(watchmillis && millis() - watchmillis > WATCHPERIOD){
|
||||||
if(watch_oldtemp[TEMPSENSOR_HOTEND_0] >= degHotend(active_extruder)){
|
if(watch_oldtemp[0] >= degHotend(active_extruder)){
|
||||||
setTargetHotend(0,active_extruder);
|
setTargetHotend(0,active_extruder);
|
||||||
LCD_MESSAGEPGM("Heating failed");
|
LCD_MESSAGEPGM("Heating failed");
|
||||||
SERIAL_ECHO_START;
|
SERIAL_ECHO_START;
|
||||||
|
@ -283,6 +283,12 @@ int temp2analog(int celsius, uint8_t e) {
|
||||||
SERIAL_ERRORLNPGM(" - Invalid extruder number!");
|
SERIAL_ERRORLNPGM(" - Invalid extruder number!");
|
||||||
kill();
|
kill();
|
||||||
}
|
}
|
||||||
|
#ifdef HEATER_0_USES_MAX6675
|
||||||
|
if (e == 0)
|
||||||
|
{
|
||||||
|
return celsius * 4;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
if(heater_ttbl_map[e] != 0)
|
if(heater_ttbl_map[e] != 0)
|
||||||
{
|
{
|
||||||
int raw = 0;
|
int raw = 0;
|
||||||
|
@ -353,6 +359,13 @@ float analog2temp(int raw, uint8_t e) {
|
||||||
SERIAL_ERRORLNPGM(" - Invalid extruder number !");
|
SERIAL_ERRORLNPGM(" - Invalid extruder number !");
|
||||||
kill();
|
kill();
|
||||||
}
|
}
|
||||||
|
#ifdef HEATER_0_USES_MAX6675
|
||||||
|
if (e == 0)
|
||||||
|
{
|
||||||
|
return 0.25 * raw;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
if(heater_ttbl_map[e] != 0)
|
if(heater_ttbl_map[e] != 0)
|
||||||
{
|
{
|
||||||
float celsius = 0;
|
float celsius = 0;
|
||||||
|
@ -446,6 +459,22 @@ void tp_init()
|
||||||
SET_OUTPUT(FAN_PIN);
|
SET_OUTPUT(FAN_PIN);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef HEATER_0_USES_MAX6675
|
||||||
|
#ifndef SDSUPPORT
|
||||||
|
SET_OUTPUT(MAX_SCK_PIN);
|
||||||
|
WRITE(MAX_SCK_PIN,0);
|
||||||
|
|
||||||
|
SET_OUTPUT(MAX_MOSI_PIN);
|
||||||
|
WRITE(MAX_MOSI_PIN,1);
|
||||||
|
|
||||||
|
SET_INPUT(MAX_MISO_PIN);
|
||||||
|
WRITE(MAX_MISO_PIN,1);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
SET_OUTPUT(MAX6675_SS);
|
||||||
|
WRITE(MAX6675_SS,1);
|
||||||
|
#endif
|
||||||
|
|
||||||
// Set analog inputs
|
// Set analog inputs
|
||||||
ADCSRA = 1<<ADEN | 1<<ADSC | 1<<ADIF | 0x07;
|
ADCSRA = 1<<ADEN | 1<<ADSC | 1<<ADIF | 0x07;
|
||||||
DIDR0 = 0;
|
DIDR0 = 0;
|
||||||
|
@ -527,7 +556,7 @@ void setWatch()
|
||||||
for (int e = 0; e < EXTRUDERS; e++)
|
for (int e = 0; e < EXTRUDERS; e++)
|
||||||
{
|
{
|
||||||
if(isHeatingHotend(e))
|
if(isHeatingHotend(e))
|
||||||
watch_oldtemp[TEMPSENSOR_HOTEND_0] = degHotend(0);
|
watch_oldtemp[0] = degHotend(0);
|
||||||
{
|
{
|
||||||
t = max(t,millis());
|
t = max(t,millis());
|
||||||
watch_raw[e] = current_raw[e];
|
watch_raw[e] = current_raw[e];
|
||||||
|
@ -595,6 +624,62 @@ void bed_max_temp_error(void) {
|
||||||
SERIAL_ERRORLNPGM("Temperature heated bed switched off. MAXTEMP triggered !!");
|
SERIAL_ERRORLNPGM("Temperature heated bed switched off. MAXTEMP triggered !!");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define HEAT_INTERVAL 250
|
||||||
|
#ifdef HEATER_0_USES_MAX6675
|
||||||
|
long max6675_previous_millis = -HEAT_INTERVAL;
|
||||||
|
int max6675_temp = 2000;
|
||||||
|
|
||||||
|
int read_max6675()
|
||||||
|
{
|
||||||
|
if (millis() - max6675_previous_millis < HEAT_INTERVAL)
|
||||||
|
return max6675_temp;
|
||||||
|
|
||||||
|
max6675_previous_millis = millis();
|
||||||
|
max6675_temp = 0;
|
||||||
|
|
||||||
|
#ifdef PRR
|
||||||
|
PRR &= ~(1<<PRSPI);
|
||||||
|
#elif defined PRR0
|
||||||
|
PRR0 &= ~(1<<PRSPI);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
SPCR = (1<<MSTR) | (1<<SPE) | (1<<SPR0);
|
||||||
|
|
||||||
|
// enable TT_MAX6675
|
||||||
|
WRITE(MAX6675_SS, 0);
|
||||||
|
|
||||||
|
// ensure 100ns delay - a bit extra is fine
|
||||||
|
delay(1);
|
||||||
|
|
||||||
|
// read MSB
|
||||||
|
SPDR = 0;
|
||||||
|
for (;(SPSR & (1<<SPIF)) == 0;);
|
||||||
|
max6675_temp = SPDR;
|
||||||
|
max6675_temp <<= 8;
|
||||||
|
|
||||||
|
// read LSB
|
||||||
|
SPDR = 0;
|
||||||
|
for (;(SPSR & (1<<SPIF)) == 0;);
|
||||||
|
max6675_temp |= SPDR;
|
||||||
|
|
||||||
|
// disable TT_MAX6675
|
||||||
|
WRITE(MAX6675_SS, 1);
|
||||||
|
|
||||||
|
if (max6675_temp & 4)
|
||||||
|
{
|
||||||
|
// thermocouple open
|
||||||
|
max6675_temp = 2000;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
max6675_temp = max6675_temp >> 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
return max6675_temp;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
// Timer 0 is shared with millies
|
// Timer 0 is shared with millies
|
||||||
ISR(TIMER0_COMPB_vect)
|
ISR(TIMER0_COMPB_vect)
|
||||||
{
|
{
|
||||||
|
@ -653,6 +738,9 @@ ISR(TIMER0_COMPB_vect)
|
||||||
#if (TEMP_0_PIN > -1)
|
#if (TEMP_0_PIN > -1)
|
||||||
raw_temp_0_value += ADC;
|
raw_temp_0_value += ADC;
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef HEATER_0_USES_MAX6675 // TODO remove the blocking
|
||||||
|
raw_temp_0_value = read_max6675();
|
||||||
|
#endif
|
||||||
temp_state = 2;
|
temp_state = 2;
|
||||||
break;
|
break;
|
||||||
case 2: // Prepare TEMP_BED
|
case 2: // Prepare TEMP_BED
|
||||||
|
@ -732,7 +820,7 @@ ISR(TIMER0_COMPB_vect)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if EXTRUDERS > 1
|
#if EXTRUDERS > 1
|
||||||
#ifdef HEATER_1_USES_AD595
|
#ifdef HEATER_1_USES_AD595 || defined HEATER_0_USES_MAX6675
|
||||||
current_raw[1] = raw_temp_1_value;
|
current_raw[1] = raw_temp_1_value;
|
||||||
#else
|
#else
|
||||||
current_raw[1] = 16383 - raw_temp_1_value;
|
current_raw[1] = 16383 - raw_temp_1_value;
|
||||||
|
|
|
@ -59,7 +59,7 @@ void lcdProgMemprint(const char *str)
|
||||||
//=============================functions ============================
|
//=============================functions ============================
|
||||||
//===========================================================================
|
//===========================================================================
|
||||||
|
|
||||||
FORCE_INLINE int intround(const float &x){return int(0.5+x);}
|
int intround(const float &x){return int(0.5+x);}
|
||||||
|
|
||||||
void lcd_status(const char* message)
|
void lcd_status(const char* message)
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,6 +1,10 @@
|
||||||
WARNING:
|
WARNING:
|
||||||
--------
|
--------
|
||||||
THIS IS THE BETA 1 FOR MARLIN 1.0.0
|
THIS IS RELEASE CANDIDATE 1 FOR MARLIN 1.0.0
|
||||||
|
|
||||||
|
The configuration is now split in two files
|
||||||
|
Configuration.h for the normal settings
|
||||||
|
Configuration_adv.h for the advanced settings
|
||||||
|
|
||||||
Quick Information
|
Quick Information
|
||||||
===================
|
===================
|
||||||
|
|
Loading…
Reference in a new issue