Permalink
Browse files

Merge remote-tracking branch 'upstream/Marlin_v1' into Marlin_v1

Conflicts:
	Marlin/Configuration.h
  • Loading branch information...
2 parents 0e3631f + fa2e1be commit d309565b56610b4295c7f517c6fada8d51c0ef04 @SCUBA82 SCUBA82 committed Feb 13, 2012
View
321 Marlin/Configuration.h
@@ -1,143 +1,88 @@
#ifndef __CONFIGURATION_H
#define __CONFIGURATION_H
+// This configurtion file contains the basic settings.
+// Advanced settings can be found in Configuration_adv.h
+// BASIC SETTINGS: select your board type, temperature sensor type, axis scaling, and endstop configuration
+//User specified version info of THIS file to display in [Pronterface, etc] terminal window during startup.
+//Implementation of an idea by Prof Braino to inform user that any changes made
+//to THIS file by the user have been successfully uploaded into firmware.
+#define STRING_VERSION_CONFIG_H "2012-02-08j" //Personal revision number for changes to THIS file.
+#define STRING_CONFIG_H_AUTHOR "username" //Who made the changes.
// This determines the communication speed of the printer
//#define BAUDRATE 250000
#define BAUDRATE 115200
-//#define BAUDRATE 230400
-
-#define EXTRUDERS 1
-
-// Frequency limit
-// See nophead's blog for more info
-// Not working O
-//#define XY_FREQUENCY_LIMIT 15
-
-// Minimum planner junction speed. Sets the default minimum speed the planner plans for at the end
-// of the buffer and all stops. This should not be much greater than zero and should only be changed
-// if unwanted behavior is observed on a user's machine when running at very slow speeds.
-#define MINIMUM_PLANNER_SPEED 2.0 // (mm/sec)
-
-// BASIC SETTINGS: select your board type, thermistor type, axis scaling, and endstop configuration
//// The following define selects which electronics board you have. Please choose the one that matches your setup
// MEGA/RAMPS up to 1.2 = 3,
// RAMPS 1.3 = 33
// Gen6 = 5,
// Sanguinololu 1.2 and above = 62
-// Gen7 = 77,
// Ultimaker = 7,
-// Teensylu = 8
+// Gen7 = 77,
+// Teensylu = 8,
+// Gen3+ =9
#define MOTHERBOARD 77
//===========================================================================
//=============================Thermal Settings ============================
//===========================================================================
-//// Thermistor settings:
+//// Temperature sensor settings:
+// -2 is thermocouple with MAX6675 (only for sensor 0)
+// -1 is thermocouple with AD595
+// 0 is not used
// 1 is 100k thermistor
// 2 is 200k thermistor
// 3 is mendel-parts thermistor
-// 4 is 10k thermistor
+// 4 is 10k thermistor !! do not use it for a hotend. It gives bad resolution at high temp. !!
// 5 is ParCan supplied 104GT-2 100K
// 6 is EPCOS 100k
// 7 is 100k Honeywell thermistor 135-104LAG-J01
-#define THERMISTORHEATER_0 1
-//#define THERMISTORHEATER_1 1
-//#define THERMISTORHEATER_2 1
-
-#define HEATER_0_USES_THERMISTOR
-//#define HEATER_1_USES_THERMISTOR
-//#define HEATER_2_USES_THERMISTOR
-//#define HEATER_0_USES_AD595
-//#define HEATER_1_USES_AD595
-//#define HEATER_2_USES_AD595
-
-// Select one of these only to define how the bed temp is read.
-#define THERMISTORBED 1
-#define BED_USES_THERMISTOR
-//#define BED_LIMIT_SWITCHING
-#ifdef BED_LIMIT_SWITCHING
-#define BED_HYSTERESIS 2 //only disable heating if T>target+BED_HYSTERESIS and enable heating if T>target-BED_HYSTERESIS
-#endif
-//#define BED_USES_AD595
-
-#define BED_CHECK_INTERVAL 5000 //ms
-
-//// Heating sanity check:
-// This waits for the watchperiod in milliseconds whenever an M104 or M109 increases the target temperature
-// If the temperature has not increased at the end of that period, the target temperature is set to zero.
-// It can be reset with another M104/M109
-//#define WATCHPERIOD 20000 //20 seconds
+#define TEMP_SENSOR_0 6
+#define TEMP_SENSOR_1 0
+#define TEMP_SENSOR_2 0
+#define TEMP_SENSOR_BED 1
// Actual temperature must be close to target for this long before M109 returns success
#define TEMP_RESIDENCY_TIME 30 // (seconds)
-#define TEMP_HYSTERESIS 3 // (C°) range of +/- temperatures considered "close" to the target one
-
-//// The minimal temperature defines the temperature below which the heater will not be enabled
-//#define HEATER_0_MINTEMP 5
-//#define HEATER_1_MINTEMP 5
-//#define HEATER_2_MINTEMP 5
-//#define BED_MINTEMP 5
+#define TEMP_HYSTERESIS 3 // (C°) range of +/- temperatures considered "close" to the target one
+// The minimal temperature defines the temperature below which the heater will not be enabled It is used
+// to check that the wiring to the thermistor is not broken.
+// Otherwise this would lead to the heater being powered on all the time.
+#define HEATER_0_MINTEMP 5
+#define HEATER_1_MINTEMP 5
+#define HEATER_2_MINTEMP 5
+#define BED_MINTEMP 5
// When temperature exceeds max temp, your heater will be switched off.
// This feature exists to protect your hotend from overheating accidentally, but *NOT* from thermistor short/failure!
// You should use MINTEMP for thermistor short/failure protection.
#define HEATER_0_MAXTEMP 275
-//#define HEATER_1_MAXTEMP 275
-//#define HEATER_2_MAXTEMP 275
-//#define BED_MAXTEMP 150
-
-
-// Wait for Cooldown
-// This defines if the M109 call should not block if it is cooling down.
-// example: From a current temp of 220, you set M109 S200.
-// if CooldownNoWait is defined M109 will not wait for the cooldown to finish
-#define CooldownNoWait true
-
-// Heating is finished if a temperature close to this degree shift is reached
-#define HEATING_EARLY_FINISH_DEG_OFFSET 1 //Degree
+#define HEATER_1_MAXTEMP 275
+#define HEATER_2_MAXTEMP 275
+#define BED_MAXTEMP 150
// PID settings:
-// Uncomment the following line to enable PID support.
+// Comment the following line to disable PID and enable bang-bang.
#define PIDTEMP
#define PID_MAX 255 // limits current to nozzle; 255=full current
#ifdef PIDTEMP
-//#define PID_DEBUG // Sends debug data to the serial port.
-//#define PID_OPENLOOP 1 // Puts PID in open loop. M104 sets the output power in %
-#define PID_INTEGRAL_DRIVE_MAX 255 //limit for the integral term
-#define K1 0.95 //smoothing factor withing the PID
-#define PID_dT 0.128 //sampling period of the PID
-
-//To develop some PID settings for your machine, you can initiall follow
-// the Ziegler-Nichols method.
-// set Ki and Kd to zero.
-// heat with a defined Kp and see if the temperature stabilizes
-// ideally you do this graphically with repg.
-// the PID_CRITIAL_GAIN should be the Kp at which temperature oscillatins are not dampned out/decreas in amplitutde
-// PID_SWING_AT_CRITIAL is the time for a full period of the oscillations at the critical Gain
-// usually further manual tunine is necessary.
-
-#define PID_CRITIAL_GAIN 50
-#define PID_SWING_AT_CRITIAL 47 //seconds
-
-//#define PID_PI //no differentail term
-#define PID_PID //normal PID
-
-#ifdef PID_PID
-//PID according to Ziegler-Nichols method
-// #define DEFAULT_Kp (0.6*PID_CRITIAL_GAIN)
-// #define DEFAULT_Ki (2*Kp/PID_SWING_AT_CRITIAL*PID_dT)
-// #define DEFAULT_Kd (PID_SWING_AT_CRITIAL/8./PID_dT)
-
-// Ultitmaker
-#define DEFAULT_Kp 22.2
-#define DEFAULT_Ki (1.25*PID_dT)
-#define DEFAULT_Kd (99/PID_dT)
+ //#define PID_DEBUG // Sends debug data to the serial port.
+ //#define PID_OPENLOOP 1 // Puts PID in open loop. M104 sets the output power in %
+ #define PID_INTEGRAL_DRIVE_MAX 255 //limit for the integral term
+ #define K1 0.95 //smoothing factor withing the PID
+ #define PID_dT 0.128 //sampling period of the PID
+
+// If you are using a preconfigured hotend then you can use one of the value sets by uncommenting it
+// Ultimaker
+ #define DEFAULT_Kp 22.2
+ #define DEFAULT_Ki (1.25*PID_dT)
+ #define DEFAULT_Kd (99/PID_dT)
// Makergear
// #define DEFAULT_Kp 7.0
@@ -147,49 +92,26 @@
// Mendel Parts V9 on 12V
// #define DEFAULT_Kp 63.0
// #define DEFAULT_Ki (2.25*PID_dT)
-// #define DEFAULT_Kd (440/PID_dT)
-#endif
-
-#ifdef PID_PI
-//PI according to Ziegler-Nichols method
-#define DEFAULT_Kp (PID_CRITIAL_GAIN/2.2)
-#define DEFAULT_Ki (1.2*Kp/PID_SWING_AT_CRITIAL*PID_dT)
-#define DEFAULT_Kd (0)
-#endif
-
-// this adds an experimental additional term to the heatingpower, proportional to the extrusion speed.
-// if Kc is choosen well, the additional required power due to increased melting should be compensated.
-#define PID_ADD_EXTRUSION_RATE
-#ifdef PID_ADD_EXTRUSION_RATE
-#define DEFAULT_Kc (1) //heatingpower=Kc*(e_speed)
-#endif
+// #define DEFAULT_Kd (440/PID_dT)
#endif // PIDTEMP
-// extruder run-out prevention.
-//if the machine is idle, and the temperature over MINTEMP, every couple of SECONDS some filament is extruded
-//#define EXTRUDER_RUNOUT_PREVENT
-#define EXTRUDER_RUNOUT_MINTEMP 190
-#define EXTRUDER_RUNOUT_SECONDS 30.
-#define EXTRUDER_RUNOUT_ESTEPS 14. //mm filament
-#define EXTRUDER_RUNOUT_SPEED 1500. //extrusion speed
-#define EXTRUDER_RUNOUT_EXTRUDE 100
-
+//this prevents dangerous Extruder moves, i.e. if the temperature is under the limit
+//can be software-disabled for whatever purposes by
+#define PREVENT_DANGEROUS_EXTRUDE
+#define EXTRUDE_MINTEMP 170
+#define EXTRUDE_MAXLENGTH (X_MAX_LENGTH+Y_MAX_LENGTH) //prevent extrusion of very large distances.
//===========================================================================
//=============================Mechanical Settings===========================
//===========================================================================
-
// Endstop Settings
#define ENDSTOPPULLUPS // Comment this out (using // at the start of the line) to disable the endstop pullup resistors
// 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
@@ -203,20 +125,14 @@ const bool Z_ENDSTOPS_INVERTING = false; // set to true to invert the logic of t
#define DISABLE_Z false
#define DISABLE_E false // For all extruders
-// Inverting axis direction
-//#define INVERT_X_DIR false // for Mendel set to false, for Orca set to true
-//#define INVERT_Y_DIR true // for Mendel set to true, for Orca set to false
-//#define INVERT_Z_DIR false // for Mendel set to false, for Orca set to true
-//#define INVERT_E*_DIR true // for direct drive extruder v9 set to true, for geared extruder set to false, used for all extruders
-
#define INVERT_X_DIR false // for Mendel set to false, for Orca set to true
#define INVERT_Y_DIR false // for Mendel set to true, for Orca set to false
-#define INVERT_Z_DIR false // for Mendel set to false, for Orca set to true
+#define INVERT_Z_DIR true // for Mendel set to false, for Orca set to true
#define INVERT_E0_DIR false // for direct drive extruder v9 set to true, for geared extruder set to false
#define INVERT_E1_DIR false // for direct drive extruder v9 set to true, for geared extruder set to false
#define INVERT_E2_DIR false // for direct drive extruder v9 set to true, for geared extruder set to false
-//// ENDSTOP SETTINGS:
+// ENDSTOP SETTINGS:
// Sets direction of endstops when homing; 1=MAX, -1=MIN
#define X_HOME_DIR -1
#define Y_HOME_DIR -1
@@ -232,44 +148,19 @@ const bool Z_ENDSTOPS_INVERTING = false; // set to true to invert the logic of t
#define NUM_AXIS 4 // The axis order in all axis related arrays is X, Y, Z, E
#define HOMING_FEEDRATE {50*60, 50*60, 4*60, 0} // set the homing speeds (mm/min)
-//homing hits the endstop, then retracts by this distance, before it tries to slowly bump again:
-#define X_HOME_RETRACT_MM 5
-#define Y_HOME_RETRACT_MM 5
-#define Z_HOME_RETRACT_MM 1
-#define QUICK_HOME //if this is defined, if both x and y are to be homed, a diagonal move will be performed initially.
-
-#define AXIS_RELATIVE_MODES {false, false, false, false}
-
-#define MAX_STEP_FREQUENCY 40000 // Max step frequency for Ultimaker (5000 pps / half step)
-
// default settings
-#define DEFAULT_AXIS_STEPS_PER_UNIT {78.7402,78.7402,200*8/3,760*1.1} // default steps per unit for ultimaker
-//#define DEFAULT_AXIS_STEPS_PER_UNIT {40, 40, 3333.92, 360} //sells mendel with v9 extruder
-//#define DEFAULT_AXIS_STEPS_PER_UNIT {80.3232, 80.8900, 2284.7651, 757.2218} // SAE Prusa w/ Wade extruder
+#define DEFAULT_AXIS_STEPS_PER_UNIT {80,80,2560,760*1.1} // default steps per unit for ultimaker
#define DEFAULT_MAX_FEEDRATE {500, 500, 5, 45} // (mm/sec)
#define DEFAULT_MAX_ACCELERATION {9000,9000,100,10000} // X, Y, Z, E maximum start speed for accelerated moves. E default values are good for skeinforge 40+, for older versions raise them a lot.
#define DEFAULT_ACCELERATION 3000 // X, Y, Z and E max acceleration in mm/s^2 for printing moves
#define DEFAULT_RETRACT_ACCELERATION 3000 // X, Y, Z and E max acceleration in mm/s^2 for r retracts
-#define DEFAULT_MINIMUMFEEDRATE 0.0 // minimum feedrate
-#define DEFAULT_MINTRAVELFEEDRATE 0.0
-
-// minimum time in microseconds that a movement needs to take if the buffer is emptied. Increase this number if you see blobs while
-//printing high speed & high detail. It will slowdown on the detailed stuff.
-#define DEFAULT_MINSEGMENTTIME 20000 // Obsolete delete this
+//
#define DEFAULT_XYJERK 20.0 // (mm/sec)
#define DEFAULT_ZJERK 0.4 // (mm/sec)
-// If defined the movements slow down when the look ahead buffer is only half full
-#define SLOWDOWN
-
-//default stepper release if idle
-#define DEFAULT_STEPPER_DEACTIVE_TIME 60
-#define DEFAULT_STEPPER_DEACTIVE_COMMAND "M84 X Y E" //z stays powered
-
-
//===========================================================================
//=============================Additional Features===========================
//===========================================================================
@@ -285,113 +176,29 @@ const bool Z_ENDSTOPS_INVERTING = false; // set to true to invert the logic of t
// please keep turned on if you can.
#define EEPROM_CHITCHAT
-
-// The hardware watchdog should halt the Microcontroller, in case the firmware gets stuck somewhere. However:
-// the Watchdog is not working well, so please only enable this for testing
-// this enables the watchdog interrupt.
-//#define USE_WATCHDOG
-//#ifdef USE_WATCHDOG
-// you cannot reboot on a mega2560 due to a bug in he bootloader. Hence, you have to reset manually, and this is done hereby:
-//#define RESET_MANUAL
-//#define WATCHDOG_TIMEOUT 4 //seconds
-//#endif
-
-// extruder advance constant (s2/mm3)
-//
-// advance (steps) = STEPS_PER_CUBIC_MM_E * EXTUDER_ADVANCE_K * cubic mm per second ^ 2
-//
-// hooke's law says: force = k * distance
-// bernoulli's priniciple says: v ^ 2 / 2 + g . h + pressure / density = constant
-// so: v ^ 2 is proportional to number of steps we advance the extruder
-//#define ADVANCE
-
-#ifdef ADVANCE
-#define EXTRUDER_ADVANCE_K .0
-
-#define D_FILAMENT 2.85
-#define STEPS_MM_E 836
-#define EXTRUTION_AREA (0.25 * D_FILAMENT * D_FILAMENT * 3.14159)
-#define STEPS_PER_CUBIC_MM_E (axis_steps_per_unit[E_AXIS]/ EXTRUTION_AREA)
-
-#endif // ADVANCE
-
-
//LCD and SD support
//#define ULTRA_LCD //general lcd support, also 16x2
-//#define SDSUPPORT // Enable SD Card Support in Hardware Console
-#define SD_FINISHED_STEPPERRELEASE true //if sd support and the file is finished: disable steppers?
-#define SD_FINISHED_RELEASECOMMAND "M84 X Y E" // no z because of layer shift.
+#define SDSUPPORT // Enable SD Card Support in Hardware Console
#define ULTIPANEL
#ifdef ULTIPANEL
-#define NEWPANEL //enable this if you have a click-encoder panel
-#define SDSUPPORT
-#define ULTRA_LCD
-#define LCD_WIDTH 20
-#define LCD_HEIGHT 4
+ #define NEWPANEL //enable this if you have a click-encoder panel
+ #define SDSUPPORT
+ #define ULTRA_LCD
+ #define LCD_WIDTH 20
+ #define LCD_HEIGHT 4
#else //no panel but just lcd
-#ifdef ULTRA_LCD
-#define LCD_WIDTH 16
-#define LCD_HEIGHT 2
+ #ifdef ULTRA_LCD
+ #define LCD_WIDTH 16
+ #define LCD_HEIGHT 2
+ #endif
#endif
-#endif
-
-// A debugging feature to compare calculated vs performed steps, to see if steps are lost by the software.
-//#define DEBUG_STEPS
-
-
-// Arc interpretation settings:
-#define MM_PER_ARC_SEGMENT 1
-#define N_ARC_CORRECTION 25
-
-
-//automatic temperature: The hot end target temperature is calculated by all the buffered lines of gcode.
-//The maximum buffered steps/sec of the extruder motor are called "se".
-//You enter the autotemp mode by a M109 S<mintemp> T<maxtemp> F<factor>
-// the target temperature is set to mintemp+factor*se[steps/sec] and limited by mintemp and maxtemp
-// you exit the value by any M109 without F*
-// Also, if the temperature is set to a value <mintemp, it is not changed by autotemp.
-// on an ultimaker, some initial testing worked with M109 S215 T260 F0.1 in the start.gcode
-//#define AUTOTEMP
-#ifdef AUTOTEMP
-#define AUTOTEMP_OLDWEIGHT 0.98
-#endif
-
-//this prevents dangerous Extruder moves, i.e. if the temperature is under the limit
-//can be software-disabled for whatever purposes by
-#define PREVENT_DANGEROUS_EXTRUDE
-#define EXTRUDE_MINTEMP 0
-#define EXTRUDE_MAXLENGTH (X_MAX_LENGTH+Y_MAX_LENGTH) //prevent extrusion of very large distances.
-
-const int dropsegments=5; //everything with less than this number of steps will be ignored as move and joined with the next movement
-
// M240 Triggers a camera by emulating a Canon RC-1 Remote
// Data from: http://www.doc-diy.net/photo/rc-1_hacked/
// #define PHOTOGRAPH_PIN 23
-//===========================================================================
-//=============================Buffers ============================
-//===========================================================================
-
-
-
-// The number of linear motions that can be in the plan at any give time.
-// THE BLOCK_BUFFER_SIZE NEEDS TO BE A POWER OF 2, i.g. 8,16,32 because shifts and ors are used to do the ringbuffering.
-#if defined SDSUPPORT
-#define BLOCK_BUFFER_SIZE 16 // SD,LCD,Buttons take more memory, block buffer needs to be smaller
-#else
-#define BLOCK_BUFFER_SIZE 16 // maximize block buffer
-#endif
-
-
-//The ASCII buffer for recieving from the serial:
-#define MAX_CMD_SIZE 96
-#define BUFSIZE 4
-
-
+#include "Configuration_adv.h"
#include "thermistortables.h"
#endif //__CONFIGURATION_H
-
-
View
397 Marlin/Configuration.h.GEN7
@@ -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
-
-
View
221 Marlin/Configuration_adv.h
@@ -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
View
424 Marlin/Makefile
@@ -1,76 +1,70 @@
+# Sprinter Arduino Project Makefile
+#
+# Makefile Based on:
+# Arduino 0011 Makefile
+# Arduino adaptation by mellis, eighthave, oli.keller
+#
+# This has been tested with Arduino 0022.
+#
+# This makefile allows you to build sketches from the command line
+# without the Arduino environment (or Java).
+#
+# Detailed instructions for using the makefile:
+#
+# 1. Modify the line containg "INSTALL_DIR" to point to the directory that
+# contains the Arduino installation (for example, under Mac OS X, this
+# might be /Applications/arduino-0012).
+#
+# 2. Modify the line containing "PORT" to refer to the filename
+# representing the USB or serial connection to your Arduino board
+# (e.g. PORT = /dev/tty.USB0). If the exact name of this file
+# changes, you can use * as a wildcard (e.g. PORT = /dev/tty.usb*).
+#
+# 3. Set the line containing "MCU" to match your board's processor.
+# Older one's are atmega8 based, newer ones like Arduino Mini, Bluetooth
+# or Diecimila have the atmega168. If you're using a LilyPad Arduino,
+# change F_CPU to 8000000.
+#
+# 4. Type "make" and press enter to compile/verify your program.
+#
+# 5. Type "make upload", reset your Arduino board, and press enter to
+# upload your program to the Arduino board.
+#
+# $Id$
+
+#For "old" Arduino Mega
+MCU = atmega1280
+#For Arduino Mega2560
+#MCU = atmega2560
+#For Sanguinololu
+#MCU = atmega644p
+
+#Arduino install directory
+INSTALL_DIR = ../../arduino-0022/
+
+F_CPU = 16000000
+
+UPLOAD_RATE = 115200
+AVRDUDE_PROGRAMMER = arduino
+PORT = /dev/arduino
+
TARGET = $(notdir $(CURDIR))
-# CHANGE BELOW:
-#~ INSTALL_DIR = /Applications/Arduino.app/Contents/Resources/Java
-INSTALL_DIR = /home/bkubicek/software/arduino-0023
-#~ PORT = /dev/cu.usbserial*
-PORT = /dev/ttyACM0
-
-# Get these values from:
-# $(INSTALL_DIR)/hardware/boards.txt
-# (arduino-0022/hardware/arduino/boards.txt)
-# The values below are for the "Arduino Duemilanove or Nano w/ ATmega328"
-# now for "Arduino Mega 2560"
-UPLOAD_SPEED = 115200
-UPLOAD_PROTOCOL = stk500v2
-BUILD_MCU = atmega2560
-BUILD_F_CPU = 16000000L
-TERM=bash
-
-# getting undefined reference to `__cxa_pure_virtual'
-#~ [http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1254180518 Arduino Forum - Makefile]
-#~ http://www.arduino.cc/playground/OpenBSD/CLI
-#~ [http://arduino.cc/forum/index.php?topic=52041.0 A "simple" makefile for Arduino]
-#~ [http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1275488191 Arduino Forum - Configuring avr-gcc options in arduino IDE]
-# found in /usr/lib/gcc/avr/4.3.5/cc1plus; fixed with -Wl,--gc-section
+
############################################################################
# Below here nothing should be changed...
-LINKORDER=\
-applet/Marlin.cpp.o \
-applet/EEPROM.o \
-applet/main.o \
-applet/MarlinSerial.o \
-applet/motion_control.o\
-applet/pins_arduino.o\
-applet/planner.o\
-applet/Print.o\
-applet/Sd2Card.o\
-applet/SdBaseFile.o\
-applet/SdFatUtil.o\
-applet/SdFile.o\
-applet/SdVolume.o\
-applet/stepper.o\
-applet/temperature.o\
-applet/WInterrupts.o\
-applet/wiring_analog.o\
-applet/wiring_digital.o\
-applet/wiring.o\
-applet/wiring_pulse.o\
-applet/wiring_shift.o\
-applet/WMath.o
-
-PDES=Marlin.pde ultralcd.pde watchdog.pde cardreader.pde
ARDUINO = $(INSTALL_DIR)/hardware/arduino/cores/arduino
-#
-#~ AVR_TOOLS_PATH = $(INSTALL_DIR)/hardware/tools/avr/bin
-# in Ubuntu, avr-gcc is installed separate;
-# only avrdude comes with the IDE
-AVR_TOOLS_PATH = /usr/bin
-AVR_DUDE_PATH = $(INSTALL_DIR)/hardware/tools
-#
-SRC = $(ARDUINO)/pins_arduino.c $(ARDUINO)/wiring.c \
- $(ARDUINO)/wiring_analog.c $(ARDUINO)/wiring_digital.c \
- $(ARDUINO)/wiring_pulse.c \
- $(ARDUINO)/wiring_shift.c $(ARDUINO)/WInterrupts.c
-# added applet/$(TARGET).cpp as in IDE 0022
-CXXSRC = $(ARDUINO)/HardwareSerial.cpp $(ARDUINO)/WMath.cpp \
- $(ARDUINO)/Print.cpp \
- $(ARDUINO)/main.cpp
-# applet/$(TARGET).cpp # no need, having a rule now for applet/$(TARGET).cpp.o
-# added main.cpp, as in 0022
+AVR_TOOLS_PATH =
+SRC = $(ARDUINO)/pins_arduino.c $(ARDUINO)/wiring.c \
+ $(ARDUINO)/wiring_analog.c $(ARDUINO)/wiring_digital.c \
+ $(ARDUINO)/wiring_pulse.c \
+ $(ARDUINO)/wiring_shift.c $(ARDUINO)/WInterrupts.c
+CXXSRC = $(ARDUINO)/WMath.cpp $(ARDUINO)/WString.cpp\
+ $(ARDUINO)/Print.cpp Marlin.cpp MarlinSerial.cpp Sd2Card.cpp SdBaseFile.cpp SdFatUtil.cpp SdFile.cpp SdVolume.cpp motion_control.cpp planner.cpp stepper.cpp temperature.cpp cardreader.cpp
FORMAT = ihex
+
# Name of this Makefile (used for "make depend").
MAKEFILE = Makefile
@@ -79,192 +73,133 @@ MAKEFILE = Makefile
# AVR (extended) COFF requires stabs, plus an avr-objcopy run.
DEBUG = stabs
-OPT = 2
+OPT = s
# Place -D or -U options here
-#~ CDEFS = -DBUILD_F_CPU=$(BUILD_F_CPU)
-#~ CXXDEFS = -DBUILD_F_CPU=$(BUILD_F_CPU)
-# now called DF_CPU
-CDEFS = -DF_CPU=$(BUILD_F_CPU) -DARDUINO=23
-CXXDEFS = -DF_CPU=$(BUILD_F_CPU) -DARDUINO=23
+CDEFS = -DF_CPU=$(F_CPU)
+CXXDEFS = -DF_CPU=$(F_CPU)
# Place -I options here
-CINCS = -I$(ARDUINO) -I$(INSTALL_DIR)/libraries/LiquidCrystal/ -I$(INSTALL_DIR)/libraries/EEPROM/
+CINCS = -I$(ARDUINO)
CXXINCS = -I$(ARDUINO)
# Compiler flag to set the C Standard level.
-# c89 - "ANSI" C
+# c89 - "ANSI" C
# gnu89 - c89 plus GCC extensions
-# c99 - ISO C99 standard (not yet fully implemented)
+# c99 - ISO C99 standard (not yet fully implemented)
# gnu99 - c99 plus GCC extensions
-CSTANDARD = -std=gnu99
+#CSTANDARD = -std=gnu99
CDEBUG = -g$(DEBUG)
-# note that typically, IDE 0022 uses -w to suppress warnings (both in cpp and c)!
-CWARN = -Wall
-#~ CWARN = -w
-# "-Wstrict-prototypes" is valid for Ada/C/ObjC but not for C++:
-CCWARN = -Wstrict-prototypes
-CTUNING = -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums
+CWARN = -Wall -Wstrict-prototypes
+CTUNING = -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -w -ffunction-sections -fdata-sections -DARDUINO=22
#CEXTRA = -Wa,-adhlns=$(<:.c=.lst)
-# to eliminate pins_ardiuno warnings:
-# http://arduino.cc/pipermail/developers_arduino.cc/2010-December/004005.html
-
-# [http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1254180518 Arduino Forum - Makefile]
-#~ For building the objects files "-ffunction-sections -fdata-sections" was missing
-#~ and the final avr-gcc call needs "-Wl,--gc-section".
-CXSECTF = -fno-exceptions -ffunction-sections -fdata-sections
-CFINALF = -Wl,--gc-section
-
-CFLAGS = $(CDEBUG) $(CDEFS) $(CINCS) -O$(OPT) $(CWARN) $(CCWARN) $(CSTANDARD) $(CEXTRA)
-# added CWARN also to .cpp
-CXXFLAGS = $(CDEFS) $(CINCS) -O$(OPT) $(CWARN) $(CXSECTF)
-#ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs
+CFLAGS = $(CDEBUG) $(CDEFS) $(CINCS) -O$(OPT) $(CWARN) $(CEXTRA) $(CTUNING)
+CXXFLAGS = $(CDEFS) $(CINCS) -O$(OPT) -Wall $(CEXTRA) $(CTUNING)
+#ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs
LDFLAGS = -lm
+
# Programming support using avrdude. Settings and variables.
AVRDUDE_PORT = $(PORT)
-AVRDUDE_WRITE_FLASH = -U flash:w:applet/$(TARGET).hex
-AVRDUDE_FLAGS = -V -F \
- -p $(BUILD_MCU) -P $(AVRDUDE_PORT) -c $(UPLOAD_PROTOCOL) \
- -b $(UPLOAD_SPEED) -C $(INSTALL_DIR)/hardware/tools/avrdude.conf
-# -b $(UPLOAD_SPEED) -C $(INSTALL_DIR)/hardware/tools/avr/etc/avrdude.conf
+AVRDUDE_WRITE_FLASH = -U flash:w:applet/$(TARGET).hex:i
+AVRDUDE_FLAGS = -D -C $(INSTALL_DIR)/hardware/tools/avrdude.conf \
+ -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER) \
+ -b $(UPLOAD_RATE)
# Program settings
-CC = $(AVR_TOOLS_PATH)/avr-gcc
-CXX = $(AVR_TOOLS_PATH)/avr-g++
-OBJCOPY = $(AVR_TOOLS_PATH)/avr-objcopy
-OBJDUMP = $(AVR_TOOLS_PATH)/avr-objdump
-AR = $(AVR_TOOLS_PATH)/avr-ar
-SIZE = $(AVR_TOOLS_PATH)/avr-size
-NM = $(AVR_TOOLS_PATH)/avr-nm
-#~ AVRDUDE = $(AVR_TOOLS_PATH)/avrdude
-AVRDUDE = $(AVR_DUDE_PATH)/avrdude
+CC = $(AVR_TOOLS_PATH)avr-gcc
+CXX = $(AVR_TOOLS_PATH)avr-g++
+OBJCOPY = $(AVR_TOOLS_PATH)avr-objcopy
+OBJDUMP = $(AVR_TOOLS_PATH)avr-objdump
+AR = $(AVR_TOOLS_PATH)avr-ar
+SIZE = $(AVR_TOOLS_PATH)avr-size
+NM = $(AVR_TOOLS_PATH)avr-nm
+AVRDUDE = avrdude
REMOVE = rm -f
MV = mv -f
# Define all object files.
-# NOTE: obj files will be created in respective src directories (libraries or $(INSTALL_DIR));
-# make clean deletes them fine
-# note that srcs are in libraries or other directories;
-# $(CXXSRC:.cpp=.o) will cause obj files to be in same loc as src files
-#~ OBJ = $(SRC:.c=.o) $(CXXSRC:.cpp=.o) $(ASRC:.S=.o)
-# to change the output directory for object files;
-# must change the obj list here!
-# and then, match to corresponding rule somehow?
-# or leave this - and parse in rule (auth automatic variable $(@F))?
-# "Suffix Replacement"
-CXXSRC+=MarlinSerial.cpp SdBaseFile.cpp stepper.cpp motion_control.cpp SdFatUtil.cpp temperature.cpp planner.cpp SdFile.cpp Sd2Card.cpp SdVolume.cpp
-OBJ = $(SRC:.c=.o) $(CXXSRC:.cpp=.o) $(ASRC:.S=.o)
-
-# added - OBJ list, transformed into applet/
-OBJT = $(addprefix applet/,$(notdir $(OBJ)))
-ALLSRC = $(SRC) $(CXXSRC) $(ASRC)
+OBJ = $(SRC:.c=.o) $(CXXSRC:.cpp=.o) $(ASRC:.S=.o)
# Define all listing files.
LST = $(ASRC:.S=.lst) $(CXXSRC:.cpp=.lst) $(SRC:.c=.lst)
# Combine all necessary flags and optional flags.
# Add target processor to flags.
-ALL_CFLAGS = -mmcu=$(BUILD_MCU) -I. $(CFLAGS)
-ALL_CXXFLAGS = -mmcu=$(BUILD_MCU) -I. $(CXXFLAGS)
-ALL_ASFLAGS = -mmcu=$(BUILD_MCU) -I. -x assembler-with-cpp $(ASFLAGS)
-
-# depended libraries of .pde need to be added from
-# $(INSTALL_DIR)/libraries (TODO: and/or ~/sketchbook/libraries)
-# grep for 'include', test if exists, add...
-# note: prefix "a real tab character" http://www.delorie.com/djgpp/doc/ug/larger/makefiles.html
-# $$ to escape $ for shell;
-# note: must NOT put comments # inside bash execution;
-# those would get removed by make; making shell see "EOF in backquote substitution"
-# echo $$ix ; \
-# 'shell' twice - for each subprocess! Backtick doesn't get expanded?
-GREPRES:=$(shell for ix in $(shell grep include $(TARGET).pde | sed 's/.*[<"]\(.*\).h[>"].*/\1/'); do \
- if [ -d $(INSTALL_DIR)/libraries/$$ix ] ; then \
- LINCS="$$LINCS -I$(INSTALL_DIR)/libraries/$$ix" ;\
- fi; \
- done; \
- echo $$LINCS)
-# append includes:
-CINCS += $(GREPRES)
-CXXINCS += $(GREPRES)
-# append library source .cpp files too (CXXSRC)
-GREPRESB:=$(shell for ix in $(shell grep include $(TARGET).pde | sed 's/.*[<"]\(.*\).h[>"].*/\1/'); do \
- if [ -d $(INSTALL_DIR)/libraries/$$ix ] ; then \
- CPPSRCS="$$CPPSRCS $(INSTALL_DIR)/libraries/$$ix/*.cpp" ;\
- fi; \
- done; \
- echo $$CPPSRCS)
-CXXSRC += $(GREPRESB)
-# added - only CXX obj from libraries:
-CXXLIBOBJ = $(GREPRESB:.cpp=.o)
+ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS)
+ALL_CXXFLAGS = -mmcu=$(MCU) -I. $(CXXFLAGS)
+ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)
-# Default target.
-all: applet_files build sizeafter
-
-build: elf hex
-
-applet_files: $(TARGET).pde
- # Here is the "preprocessing".
- # It creates a .cpp file based with the same name as the .pde file.
- # On top of the new .cpp file comes the WProgram.h header.
- # At the end there is a generic main() function attached.
- # Then the .cpp file will be compiled. Errors during compile will
- # refer to this new, automatically generated, file.
- # Not the original .pde file you actually edit...
- test -d applet || mkdir applet
- # @ supresses printout of the cmdline itself; so only the out of echo is printed
- @echo ALL OBJT: $(OBJT)
- @echo ALL CXXLIBOBJ: $(CXXLIBOBJ)
-# echo '#include "WProgram.h"' > applet/$(TARGET).cpp
- @echo "#include \"WProgram.h\"\nvoid setup();\nvoid loop();\n" > applet/$(TARGET).cpp
- ##cat $(TARGET).pde >> applet/$(TARGET).cpp
- cat ${PDES}>> applet/$(TARGET).cpp
- cp *.cpp applet/
- # no more need to cat main.cpp (v0022) - now it is compiled in
-# cat $(ARDUINO)/main.cpp >> applet/$(TARGET).cpp
+# Default target.
+all: build sizeafter
+
+build: elf hex
+
+applet/$(TARGET).cpp: $(TARGET).pde $(MAKEFILE)
+# Here is the "preprocessing".
+# It creates a .cpp file based with the same name as the .pde file.
+# On top of the new .cpp file comes the WProgram.h header.
+# At the end there is a generic main() function attached.
+# Then the .cpp file will be compiled. Errors during compile will
+# refer to this new, automatically generated, file.
+# Not the original .pde file you actually edit...
+ @echo " WR applet/$(TARGET).cpp"
+ @test -d applet || mkdir applet
+ @echo '#include "WProgram.h"' > applet/$(TARGET).cpp
+ @cat $(TARGET).pde >> applet/$(TARGET).cpp
+ @cat $(ARDUINO)/main.cpp >> applet/$(TARGET).cpp
elf: applet/$(TARGET).elf
hex: applet/$(TARGET).hex
eep: applet/$(TARGET).eep
-lss: applet/$(TARGET).lss
+lss: applet/$(TARGET).lss
sym: applet/$(TARGET).sym
-# Program the device.
+# Program the device.
upload: applet/$(TARGET).hex
+ stty hup < $(PORT); true
$(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH)
+ stty -hup < $(PORT); true
-# Display size of file.
+
+ # Display size of file.
HEXSIZE = $(SIZE) --target=$(FORMAT) applet/$(TARGET).hex
-ELFSIZE = $(SIZE) applet/$(TARGET).elf
+ELFSIZE = $(SIZE) applet/$(TARGET).elf
sizebefore:
@if [ -f applet/$(TARGET).elf ]; then echo; echo $(MSG_SIZE_BEFORE); $(HEXSIZE); echo; fi
sizeafter:
- @if [ -f applet/$(TARGET).elf ]; then echo; echo $(MSG_SIZE_AFTER); $(HEXSIZE); echo; fi
+ @if [ -f applet/$(TARGET).elf ]; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); echo; fi
+
# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.
COFFCONVERT=$(OBJCOPY) --debugging \
- --change-section-address .data-0x800000 \
- --change-section-address .bss-0x800000 \
- --change-section-address .noinit-0x800000 \
- --change-section-address .eeprom-0x810000
+ --change-section-address .data-0x800000 \
+ --change-section-address .bss-0x800000 \
+ --change-section-address .noinit-0x800000 \
+ --change-section-address .eeprom-0x810000
+
coff: applet/$(TARGET).elf
$(COFFCONVERT) -O coff-avr applet/$(TARGET).elf $(TARGET).cof
+
extcoff: $(TARGET).elf
$(COFFCONVERT) -O coff-ext-avr applet/$(TARGET).elf $(TARGET).cof
+
.SUFFIXES: .elf .hex .eep .lss .sym
+.PRECIOUS: .o
.elf.hex:
- $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@
+ @echo " COPY $@"
+ @$(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@
.elf.eep:
- -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \
- --change-section-lma .eeprom=0 -O $(FORMAT) $< $@
+ -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \
+ --change-section-lma .eeprom=0 -O $(FORMAT) $< $@
# Create extended listing file from ELF output file.
.elf.lss:
@@ -274,79 +209,40 @@ extcoff: $(TARGET).elf
.elf.sym:
$(NM) -n $< > $@
-# Link: create ELF output file from library.
-# NOTE: applet/$(TARGET).cpp.o MUST BE BEFORE applet/core.a
-# in the dependency list, so its rule runs first!
-applet/$(TARGET).elf: $(TARGET).pde applet/$(TARGET).cpp.o applet/core.a
-# $(CC) $(ALL_CFLAGS) -o $@ applet/$(TARGET).cpp -L. applet/core.a $(LDFLAGS)
-# changed as in IDE v0022: link cpp obj files
- @echo $$(tput bold)$$(tput setaf 2) $(CC) $$(tput sgr0) $(ALL_CFLAGS) $(CFINALF) -o $@ applet/$(TARGET).cpp.o $(CXXOBJ) -L. applet/core.a $(LDFLAGS)
- echo ${OBJT}
- #$(CC) $(ALL_CFLAGS) $(CFINALF) -o $@ applet/$(TARGET).cpp.o -L. applet/core.a $(LDFLAGS)
- $(CC) $(ALL_CFLAGS) $(CFINALF) -o $@ ${LINKORDER} $(LDFLAGS)
- #@$(CC) $(ALL_CFLAGS) $(CFINALF) -o $@ applet/*.o applet/$(TARGET).cpp.o $(CXXOBJ) -L. applet/core.a $(LDFLAGS)
-
-# added: cpp.o depends on cpp (and .pde which generates it)
-# $< "first item in the dependencies list"; $@ "left side of the :"; $^ "right side of the :"
-# http://www.cs.colby.edu/maxwell/courses/tutorials/maketutor/
-applet/$(TARGET).cpp.o: applet/$(TARGET).cpp
- @echo $$(tput bold) $(CXX) $$(tput sgr0) -c $(ALL_CXXFLAGS) $< -o $@
- @$(CXX) -c $(ALL_CXXFLAGS) $< -o $@
+ # Link: create ELF output file from library.
+applet/$(TARGET).elf: applet/$(TARGET).cpp applet/core.a Configuration.h
+ @echo " CXX $@"
+ @$(CC) $(ALL_CXXFLAGS) -Wl,--gc-sections -o $@ applet/$(TARGET).cpp -L. applet/core.a $(LDFLAGS)
-#~ applet/core.a: $(OBJ)
-#~ @for i in $(OBJ); do echo $(AR) rcs applet/core.a $$i; $(AR) rcs applet/core.a $$i; done
-
-applet/core.a: $(OBJT)
- @for i in $(OBJT); do echo $(AR) rcs applet/core.a $$i; $(AR) rcs applet/core.a $$i; done
-
-# iterate through OBJ to find the original location; then build depending on source extension
-# TODO: add handling of assembler files
-applet/%.o:
- @for iob in $(OBJ); do \
- if [ "`basename $$iob`" = "`basename $@`" ]; then \
- for ios in $(ALLSRC); do \
- if [ "$${iob%%.*}" = "$${ios%%.*}" ]; then \
- case $${ios##*.} in \
- "cpp") \
- echo "$$(tput bold)$$(tput setaf 1) $(CXX) $$(tput sgr0) -c $(ALL_CXXFLAGS) $$ios -o $@"; \
- $(CXX) -c $(ALL_CXXFLAGS) $$ios -o $@;; \
- "c") \
- echo "$$(tput bold)$$(tput setaf 1) $(CC) $$(tput sgr0) -c $(ALL_CFLAGS) $$ios -o $@"; \
- $(CC) -c $(ALL_CFLAGS) $$ios -o $@;; \
- esac; \
- fi; \
- done; \
- fi; \
- done;
-
-#~ # Compile: create object files from C++ source files.
-#~ .cpp.o:
-#~ $(CXX) -c $(ALL_CXXFLAGS) $< -o $@
-
-#~ # Compile: create object files from C source files.
-#~ .c.o:
-#~ $(CC) -c $(ALL_CFLAGS) $< -o $@
-
-#~ # Compile: create assembler files from C source files.
-#~ .c.s:
-#~ $(CC) -S $(ALL_CFLAGS) $< -o $@
-
-#~ # Assemble: create object files from assembler source files.
-#~ .S.o:
-#~ $(CC) -c $(ALL_ASFLAGS) $< -o $@
-
-#~ # Automatic dependencies
-#~ %.d: %.c
-#~ $(CC) -M $(ALL_CFLAGS) $< | sed "s;$(notdir $*).o:;$*.o $*.d:;" > $@
-
-#~ %.d: %.cpp
-#~ $(CXX) -M $(ALL_CXXFLAGS) $< | sed "s;$(notdir $*).o:;$*.o $*.d:;" > $@
+applet/core.a: $(OBJ) Configuration.h
+ @for i in $(OBJ); do echo " AR $$i"; $(AR) rcs applet/core.a $$i; done
+
+%.o: %.c Configuration.h $(MAKEFILE)
+ @echo " CC $@"
+ @$(CC) -c $(ALL_CFLAGS) $< -o $@
+
+%.o: %.cpp Configuration.h $(MAKEFILE)
+ @echo " CXX $@"
+ @$(CXX) -c $(ALL_CXXFLAGS) $< -o $@
# Target: clean project.
clean:
- $(REMOVE) applet/$(TARGET).hex applet/$(TARGET).eep applet/$(TARGET).cof applet/$(TARGET).elf \
- applet/$(TARGET).map applet/$(TARGET).sym applet/$(TARGET).lss applet/core.a \
- $(OBJT) applet/$(TARGET).cpp.o \
- $(OBJ) $(LST) $(SRC:.c=.s) $(SRC:.c=.d) $(CXXSRC:.cpp=.s) $(CXXSRC:.cpp=.d)
-
-.PHONY: all build elf hex eep lss sym program coff extcoff clean applet_files sizebefore sizeafter
+ @echo " RM applet/*"
+ @$(REMOVE) applet/$(TARGET).hex applet/$(TARGET).eep applet/$(TARGET).cof applet/$(TARGET).elf \
+ applet/$(TARGET).map applet/$(TARGET).sym applet/$(TARGET).lss applet/$(TARGET).cpp applet/core.a \
+ $(OBJ) $(LST) $(SRC:.c=.s) $(SRC:.c=.d) $(CXXSRC:.cpp=.s) $(CXXSRC:.cpp=.d)
+ @echo " RMDIR applet/"
+ @rmdir applet
+
+depend:
+ if grep '^# DO NOT DELETE' $(MAKEFILE) >/dev/null; \
+ then \
+ sed -e '/^# DO NOT DELETE/,$$d' $(MAKEFILE) > \
+ $(MAKEFILE).$$$$ && \
+ $(MV) $(MAKEFILE).$$$$ $(MAKEFILE); \
+ fi
+ echo '# DO NOT DELETE THIS LINE -- make depend depends on it.' \
+ >> $(MAKEFILE); \
+ $(CC) -M -mmcu=$(MCU) $(CDEFS) $(CINCS) $(SRC) $(ASRC) >> $(MAKEFILE)
+
+.PHONY: all build elf hex eep lss sym program coff extcoff clean depend applet_files sizebefore sizeafter
View
24 Marlin/Marlin.h
@@ -14,7 +14,7 @@
#include <string.h>
#include <inttypes.h>
-#include <avr/delay.h>
+#include <util/delay.h>
#include <avr/pgmspace.h>
#include <avr/eeprom.h>
#include <avr/wdt.h>
@@ -46,27 +46,31 @@
#include "WString.h"
-
+#if MOTHERBOARD == 8 // Teensylu
+ #define MYSERIAL Serial
+#else
+ #define MYSERIAL MSerial
+#endif
//this is a unfinsihed attemp to removes a lot of warning messages, see:
// http://www.avrfreaks.net/index.php?name=PNphpBB2&file=printview&t=57011
//typedef char prog_char PROGMEM;
// //#define PSTR (s ) ((const PROGMEM char *)(s))
// //# define MYPGM(s) (__extension__({static prog_char __c[] = (s); &__c[0];}))
// //#define MYPGM(s) ((const prog_char *g PROGMEM=s))
-// //#define MYPGM(s) PSTR(s)
-#define MYPGM(s) (__extension__({static char __c[] __attribute__((__progmem__)) = (s); &__c[0];})) //This is the normal behaviour
+#define MYPGM(s) PSTR(s)
+//#define MYPGM(s) (__extension__({static char __c[] __attribute__((__progmem__)) = (s); &__c[0];})) //This is the normal behaviour
//#define MYPGM(s) (__extension__({static prog_char __c[] = (s); &__c[0];})) //this does not work but hides the warnings
-#define SERIAL_PROTOCOL(x) MSerial.print(x);
+#define SERIAL_PROTOCOL(x) MYSERIAL.print(x);
#define SERIAL_PROTOCOLPGM(x) serialprintPGM(MYPGM(x));
-#define SERIAL_PROTOCOLLN(x) {MSerial.print(x);MSerial.write('\n');}
-#define SERIAL_PROTOCOLLNPGM(x) {serialprintPGM(MYPGM(x));MSerial.write('\n');}
+#define SERIAL_PROTOCOLLN(x) {MYSERIAL.print(x);MYSERIAL.write('\n');}
+#define SERIAL_PROTOCOLLNPGM(x) {serialprintPGM(MYPGM(x));MYSERIAL.write('\n');}
-const prog_char errormagic[] PROGMEM ="Error:";
-const prog_char echomagic[] PROGMEM ="echo:";
+const char errormagic[] PROGMEM ="Error:";
+const char echomagic[] PROGMEM ="echo:";
#define SERIAL_ERROR_START serialprintPGM(errormagic);
#define SERIAL_ERROR(x) SERIAL_PROTOCOL(x)
#define SERIAL_ERRORPGM(x) SERIAL_PROTOCOLPGM(x)
@@ -89,7 +93,7 @@ FORCE_INLINE void serialprintPGM(const char *str)
char ch=pgm_read_byte(str);
while(ch)
{
- MSerial.write(ch);
+ MYSERIAL.write(ch);
ch=pgm_read_byte(++str);
}
}
View
100 Marlin/Marlin.pde
@@ -27,8 +27,6 @@
#include "Marlin.h"
-
-
#include "ultralcd.h"
#include "planner.h"
#include "stepper.h"
@@ -38,12 +36,7 @@
#include "watchdog.h"
#include "EEPROMwrite.h"
-
-
-#define VERSION_STRING "1.0.0 Beta 1"
-
-
-
+#define VERSION_STRING "1.0.0 RC1"
// look here for descriptions of gcodes: http://linuxcnc.org/handbook/gcode/g-code.html
// http://objects.reprap.org/wiki/Mendel_User_Manual:_RepRapGCodes
@@ -147,15 +140,11 @@ static bool home_all_axis = true;
static float feedrate = 1500.0, next_feedrate, saved_feedrate;
static long gcode_N, gcode_LastN;
-
-
static bool relative_mode = false; //Determines Absolute or Relative Coordinates
static bool relative_mode_e = false; //Determines Absolute or Relative E Codes while in Absolute Coordinates mode. E is always relative in Relative Coordinates mode.
static uint8_t fanpwm=0;
-
-
static char cmdbuffer[BUFSIZE][MAX_CMD_SIZE];
static bool fromsd[BUFSIZE];
static int bufindr = 0;
@@ -175,8 +164,7 @@ const int sensitive_pins[] = SENSITIVE_PINS; // Sensitive pin list for M42
//Inactivity shutdown variables
static unsigned long previous_millis_cmd = 0;
static unsigned long max_inactive_time = 0;
-static unsigned long stepper_inactive_time = DEFAULT_STEPPER_DEACTIVE_TIME*1000;
-static unsigned long last_stepperdisabled_time=30*1000; //first release check after 30 seconds
+static unsigned long stepper_inactive_time = DEFAULT_STEPPER_DEACTIVE_TIME*1000l;
static unsigned long starttime=0;
static unsigned long stoptime=0;
@@ -224,6 +212,7 @@ void enquecommand(const char *cmd)
buflen += 1;
}
}
+
void setup_photpin()
{
#ifdef PHOTOGRAPH_PIN
@@ -257,10 +246,20 @@ void suicide()
void setup()
{
setup_powerhold();
- MSerial.begin(BAUDRATE);
+ MYSERIAL.begin(BAUDRATE);
+ SERIAL_PROTOCOLLNPGM("start");
SERIAL_ECHO_START;
+ SERIAL_ECHOPGM("Marlin: ");
SERIAL_ECHOLNPGM(VERSION_STRING);
- SERIAL_PROTOCOLLNPGM("start");
+ #ifdef STRING_VERSION_CONFIG_H
+ #ifdef STRING_CONFIG_H_AUTHOR
+ SERIAL_ECHO_START;
+ SERIAL_ECHOPGM("Configuration.h: ");
+ SERIAL_ECHOPGM(STRING_VERSION_CONFIG_H);
+ SERIAL_ECHOPGM(" | Author: ");
+ SERIAL_ECHOLNPGM(STRING_CONFIG_H_AUTHOR);
+ #endif
+ #endif
SERIAL_ECHO_START;
SERIAL_ECHOPGM("Free Memory:");
SERIAL_ECHO(freeMemory());
@@ -326,11 +325,10 @@ void loop()
LCD_STATUS;
}
-
-FORCE_INLINE void get_command()
+void get_command()
{
- while( MSerial.available() > 0 && buflen < BUFSIZE) {
- serial_char = MSerial.read();
+ while( MYSERIAL.available() > 0 && buflen < BUFSIZE) {
+ serial_char = MYSERIAL.read();
if(serial_char == '\n' || serial_char == '\r' || serial_char == ':' || serial_count >= (MAX_CMD_SIZE - 1) )
{
if(!serial_count) return; //if empty line
@@ -474,20 +472,20 @@ FORCE_INLINE void get_command()
}
-FORCE_INLINE float code_value()
+float code_value()
{
return (strtod(&cmdbuffer[bufindr][strchr_pointer - cmdbuffer[bufindr] + 1], NULL));
}
-FORCE_INLINE long code_value_long()
+long code_value_long()
{
return (strtol(&cmdbuffer[bufindr][strchr_pointer - cmdbuffer[bufindr] + 1], NULL, 10));
}
-FORCE_INLINE bool code_seen(char code_string[]) //Return True if the string was found
+bool code_seen(char code_string[]) //Return True if the string was found
{
return (strstr(cmdbuffer[bufindr], code_string) != NULL);
}
-FORCE_INLINE bool code_seen(char code)
+bool code_seen(char code)
{
strchr_pointer = strchr(cmdbuffer[bufindr], code);
return (strchr_pointer != NULL); //Return True if a character was found
@@ -519,7 +517,7 @@ FORCE_INLINE bool code_seen(char code)
endstops_hit_on_purpose();\
}
-FORCE_INLINE void process_commands()
+void process_commands()
{
unsigned long codenum; //throw away variable
char *starpos = NULL;
@@ -789,7 +787,7 @@ FORCE_INLINE void process_commands()
#if (TEMP_0_PIN > -1)
SERIAL_PROTOCOLPGM("ok T:");
SERIAL_PROTOCOL(degHotend(tmp_extruder));
- #if TEMP_BED_PIN > -1
+ #if TEMP_BED_PIN > -1
SERIAL_PROTOCOLPGM(" B:");
SERIAL_PROTOCOL(degBed());
#endif //TEMP_BED_PIN
@@ -843,11 +841,11 @@ FORCE_INLINE void process_commands()
/* continue to loop until we have reached the target temp
_and_ until TEMP_RESIDENCY_TIME hasn't passed since we reached it */
while((residencyStart == -1) ||
- (residencyStart > -1 && (millis() - residencyStart) < TEMP_RESIDENCY_TIME*1000) ) {
+ (residencyStart >= 0 && (((unsigned int) (millis() - residencyStart)) < (TEMP_RESIDENCY_TIME * 1000UL))) ) {
#else
while ( target_direction ? (isHeatingHotend(tmp_extruder)) : (isCoolingHotend(tmp_extruder)&&(CooldownNoWait==false)) ) {
#endif //TEMP_RESIDENCY_TIME
- if( (millis() - codenum) > 1000 )
+ if( (millis() - codenum) > 1000UL )
{ //Print Temp Reading and remaining time every 1 second while heating up/cooling down
SERIAL_PROTOCOLPGM("T:");
SERIAL_PROTOCOL( degHotend(tmp_extruder) );
@@ -857,13 +855,15 @@ FORCE_INLINE void process_commands()
SERIAL_PROTOCOLPGM(" W:");
if(residencyStart > -1)
{
- codenum = TEMP_RESIDENCY_TIME - ((millis() - residencyStart) / 1000);
+ codenum = ((TEMP_RESIDENCY_TIME * 1000UL) - (millis() - residencyStart)) / 1000UL;
SERIAL_PROTOCOLLN( codenum );
}
else
{
SERIAL_PROTOCOLLN( "?" );
}
+ #else
+ SERIAL_PROTOCOLLN("");
#endif
codenum = millis();
}
@@ -893,7 +893,7 @@ FORCE_INLINE void process_commands()
codenum = millis();
while(isHeatingBed())
{
- if( (millis()-codenum) > 1000 ) //Print Temp Reading every 1 second while heating up.
+ if(( millis() - codenum) > 1000 ) //Print Temp Reading every 1 second while heating up.
{
float tt=degHotend(active_extruder);
SERIAL_PROTOCOLPGM("T:");
@@ -909,7 +909,7 @@ FORCE_INLINE void process_commands()
LCD_MESSAGEPGM("Bed done.");
previous_millis_cmd = millis();
#endif
- break;
+ break;
#if FAN_PIN > -1
case 106: //M106 Fan On
@@ -938,14 +938,13 @@ FORCE_INLINE void process_commands()
case 81: // M81 - ATX Power Off
- #if (SUICIDE_PIN >-1)
+ #if defined SUICIDE_PIN && SUICIDE_PIN > -1
st_synchronize();
suicide();
- #else
- #if (PS_ON_PIN > -1)
- SET_INPUT(PS_ON_PIN); //Floating
- #endif
+ #elif (PS_ON_PIN > -1)
+ SET_INPUT(PS_ON_PIN); //Floating
#endif
+ break;
case 82:
axis_relative_modes[3] = false;
@@ -963,6 +962,7 @@ FORCE_INLINE void process_commands()
bool all_axis = !((code_seen(axis_codes[0])) || (code_seen(axis_codes[1])) || (code_seen(axis_codes[2]))|| (code_seen(axis_codes[3])));
if(all_axis)
{
+ st_synchronize();
disable_e0();
disable_e1();
disable_e2();
@@ -1217,7 +1217,7 @@ FORCE_INLINE void process_commands()
void FlushSerialRequestResend()
{
//char cmdbuffer[bufindr][100]="Resend:";
- MSerial.flush();
+ MYSERIAL.flush();
SERIAL_PROTOCOLPGM("Resend:");
SERIAL_PROTOCOLLN(gcode_LastN + 1);
ClearToSend();
@@ -1233,7 +1233,7 @@ void ClearToSend()
SERIAL_PROTOCOLLNPGM("ok");
}
-FORCE_INLINE void get_coordinates()
+void get_coordinates()
{
for(int8_t i=0; i < NUM_AXIS; i++) {
if(code_seen(axis_codes[i])) destination[i] = (float)code_value() + (axis_relative_modes[i] || relative_mode)*current_position[i];
@@ -1245,7 +1245,7 @@ FORCE_INLINE void get_coordinates()
}
}
-FORCE_INLINE void get_arc_coordinates()
+void get_arc_coordinates()
{
get_coordinates();
if(code_seen('I')) offset[0] = code_value();
@@ -1291,23 +1291,22 @@ void prepare_arc_move(char isclockwise) {
void manage_inactivity(byte debug)
{
- if( (millis()-previous_millis_cmd) > max_inactive_time )
+ if( (millis() - previous_millis_cmd) > max_inactive_time )
if(max_inactive_time)
kill();
- if(stepper_inactive_time)
- if( (millis()-last_stepperdisabled_time) > stepper_inactive_time )
- {
- if(previous_millis_cmd>last_stepperdisabled_time)
- last_stepperdisabled_time=previous_millis_cmd;
- else
+ if(stepper_inactive_time) {
+ if( (millis() - previous_millis_cmd) > stepper_inactive_time )
{
- if( (X_ENABLE_ON && (READ(X_ENABLE_PIN)!=0)) || (!X_ENABLE_ON && READ(X_ENABLE_PIN)==0) )
- enquecommand(DEFAULT_STEPPER_DEACTIVE_COMMAND);
- last_stepperdisabled_time=millis();
+ disable_x();
+ disable_y();
+ disable_z();
+ disable_e0();
+ disable_e1();
+ disable_e2();
}
}
#ifdef EXTRUDER_RUNOUT_PREVENT
- if( (millis()-previous_millis_cmd) > EXTRUDER_RUNOUT_SECONDS*1000 )
+ if( (millis() - previous_millis_cmd) > EXTRUDER_RUNOUT_SECONDS*1000 )
if(degHotend(active_extruder)>EXTRUDER_RUNOUT_MINTEMP)
{
bool oldstatus=READ(E0_ENABLE_PIN);
@@ -1321,7 +1320,6 @@ void manage_inactivity(byte debug)
destination[E_AXIS]=oldedes;
plan_set_e_position(oldepos);
previous_millis_cmd=millis();
- //enquecommand(DEFAULT_STEPPER_DEACTIVE_COMMAND);
st_synchronize();
WRITE(E0_ENABLE_PIN,oldstatus);
}
View
11 Marlin/MarlinSerial.cpp
@@ -23,20 +23,15 @@
#include "Marlin.h"
#include "MarlinSerial.h"
+#if MOTHERBOARD != 8 // !teensylu
// this next line disables the entire HardwareSerial.cpp,
// this is so I can support Attiny series and any other chip without a uart
#if defined(UBRRH) || defined(UBRR0H) || defined(UBRR1H) || defined(UBRR2H) || defined(UBRR3H)
-
-
-
-
-
#if defined(UBRRH) || defined(UBRR0H)
ring_buffer rx_buffer = { { 0 }, 0, 0 };
#endif
-
FORCE_INLINE void store_char(unsigned char c)
{
int i = (unsigned int)(rx_buffer.head + 1) % RX_BUFFER_SIZE;
@@ -324,11 +319,11 @@ void MarlinSerial::printFloat(double number, uint8_t digits)
remainder -= toPrint;
}
}
-
// Preinstantiate Objects //////////////////////////////////////////////////////
-MarlinSerial MSerial;
+MarlinSerial MSerial;
#endif // whole file
+#endif //teensylu
View
7 Marlin/MarlinSerial.h
@@ -31,7 +31,7 @@
#define BYTE 0
-
+#if MOTHERBOARD != 8 // ! teensylu
// Define constants and variables for buffering incoming serial data. We're
// using a ring buffer (I think), in which rx_buffer_head is the index of the
// location to which to write the next incoming character and rx_buffer_tail
@@ -144,8 +144,7 @@ class MarlinSerial //: public Stream
void println(void);
};
-#if defined(UBRRH) || defined(UBRR0H)
- extern MarlinSerial MSerial;
-#endif
+extern MarlinSerial MSerial;
+#endif // ! teensylu
#endif
View
48 Marlin/SdBaseFile.cpp
@@ -18,8 +18,6 @@
* <http://www.gnu.org/licenses/>.
*/
-#define SERIAL MSerial
-
#include "Marlin.h"
#ifdef SDSUPPORT
@@ -345,38 +343,38 @@ int8_t SdBaseFile::lsPrintNext( uint8_t flags, uint8_t indent) {
&& DIR_IS_FILE_OR_SUBDIR(&dir)) break;
}
// indent for dir level
- for (uint8_t i = 0; i < indent; i++) MSerial.write(' ');
+ for (uint8_t i = 0; i < indent; i++) MYSERIAL.write(' ');
// print name
for (uint8_t i = 0; i < 11; i++) {
if (dir.name[i] == ' ')continue;
if (i == 8) {
- MSerial.write('.');
+ MYSERIAL.write('.');
w++;
}
- MSerial.write(dir.name[i]);
+ MYSERIAL.write(dir.name[i]);
w++;
}
if (DIR_IS_SUBDIR(&dir)) {
- MSerial.write('/');
+ MYSERIAL.write('/');
w++;
}
if (flags & (LS_DATE | LS_SIZE)) {
- while (w++ < 14) MSerial.write(' ');
+ while (w++ < 14) MYSERIAL.write(' ');
}
// print modify date/time if requested
if (flags & LS_DATE) {
- MSerial.write(' ');
+ MYSERIAL.write(' ');
printFatDate( dir.lastWriteDate);
- MSerial.write(' ');
+ MYSERIAL.write(' ');
printFatTime( dir.lastWriteTime);
}
// print size if requested
if (!DIR_IS_SUBDIR(&dir) && (flags & LS_SIZE)) {
- MSerial.write(' ');
- MSerial.print(dir.fileSize);
+ MYSERIAL.write(' ');
+ MYSERIAL.print(dir.fileSize);
}
- MSerial.println();
+ MYSERIAL.println();
return DIR_IS_FILE(&dir) ? 1 : 2;
}
//------------------------------------------------------------------------------
@@ -947,26 +945,26 @@ void SdBaseFile::printDirName(const dir_t& dir,
for (uint8_t i = 0; i < 11; i++) {
if (dir.name[i] == ' ')continue;
if (i == 8) {
- MSerial.write('.');
+ MYSERIAL.write('.');
w++;
}
- MSerial.write(dir.name[i]);
+ MYSERIAL.write(dir.name[i]);
w++;
}
if (DIR_IS_SUBDIR(&dir) && printSlash) {
- MSerial.write('/');
+ MYSERIAL.write('/');
w++;
}
while (w < width) {
- MSerial.write(' ');
+ MYSERIAL.write(' ');
w++;
}
}
//------------------------------------------------------------------------------
// print uint8_t with width 2
static void print2u( uint8_t v) {
- if (v < 10) MSerial.write('0');
- MSerial.print(v, DEC);
+ if (v < 10) MYSERIAL.write('0');
+ MYSERIAL.print(v, DEC);
}
//------------------------------------------------------------------------------
/** %Print a directory date field to Serial.
@@ -985,10 +983,10 @@ static void print2u( uint8_t v) {
* \param[in] fatDate The date field from a directory entry.
*/
void SdBaseFile::printFatDate(uint16_t fatDate) {
- MSerial.print(FAT_YEAR(fatDate));
- MSerial.write('-');
+ MYSERIAL.print(FAT_YEAR(fatDate));
+ MYSERIAL.write('-');
print2u( FAT_MONTH(fatDate));
- MSerial.write('-');
+ MYSERIAL.write('-');
print2u( FAT_DAY(fatDate));
}
@@ -1002,9 +1000,9 @@ void SdBaseFile::printFatDate(uint16_t fatDate) {
*/
void SdBaseFile::printFatTime( uint16_t fatTime) {
print2u( FAT_HOUR(fatTime));
- MSerial.write(':');
+ MYSERIAL.write(':');
print2u( FAT_MINUTE(fatTime));
- MSerial.write(':');
+ MYSERIAL.write(':');
print2u( FAT_SECOND(fatTime));
}
//------------------------------------------------------------------------------
@@ -1016,7 +1014,7 @@ void SdBaseFile::printFatTime( uint16_t fatTime) {
bool SdBaseFile::printName() {
char name[13];
if (!getFilename(name)) return false;
- MSerial.print(name);
+ MYSERIAL.print(name);
return true;
}
//------------------------------------------------------------------------------
@@ -1790,4 +1788,4 @@ void (*SdBaseFile::oldDateTime_)(uint16_t& date, uint16_t& time) = 0; // NOLINT
#endif // ALLOW_DEPRECATED_FUNCTIONS
-#endif
+#endif
View
4 Marlin/SdFatUtil.cpp
@@ -48,7 +48,7 @@ int SdFatUtil::FreeRam() {
* \param[in] str Pointer to string stored in flash memory.
*/
void SdFatUtil::print_P( PGM_P str) {
- for (uint8_t c; (c = pgm_read_byte(str)); str++) MSerial.write(c);
+ for (uint8_t c; (c = pgm_read_byte(str)); str++) MYSERIAL.write(c);
}
//------------------------------------------------------------------------------
/** %Print a string in flash memory followed by a CR/LF.
@@ -58,7 +58,7 @@ void SdFatUtil::print_P( PGM_P str) {
*/
void SdFatUtil::println_P( PGM_P str) {
print_P( str);
- MSerial.println();
+ MYSERIAL.println();
}
//------------------------------------------------------------------------------
/** %Print a string in flash memory to Serial.
View
5 Marlin/cardreader.pde → Marlin/cardreader.cpp
@@ -1,5 +1,8 @@
#include "Marlin.h"
#include "cardreader.h"
+#include "ultralcd.h"
+#include "stepper.h"
+#include "temperature.h"
#ifdef SDSUPPORT
@@ -444,7 +447,9 @@ void CardReader::printingHasFinished()
st_synchronize();
quickStop();
sdprinting = false;
+ #ifdef STOP_HEATING_WAIT_FOR_SD_PRINTING
stop_heating_wait=true;
+ #endif
if(SD_FINISHED_STEPPERRELEASE)
{
//finishAndDisableSteppers();
View
2 Marlin/fastio.h
@@ -1928,7 +1928,7 @@ pins
#endif
-#if defined (__AVR_AT90USB1287__)
+#if defined (__AVR_AT90USB1287__) || defined (__AVR_AT90USB1286__)
// SPI
#define SCK DIO9
#define MISO DIO11
View
2 Marlin/motion_control.cpp
@@ -45,7 +45,7 @@ void mc_arc(float *position, float *target, float *offset, uint8_t axis_0, uint8
if (isclockwise) { angular_travel -= 2*M_PI; }
float millimeters_of_travel = hypot(angular_travel*radius, fabs(linear_travel));
- if (millimeters_of_travel == 0.0) { return; }
+ if (millimeters_of_travel < 0.001) { return; }
uint16_t segments = floor(millimeters_of_travel/MM_PER_ARC_SEGMENT);
/*
// Multiply inverse feed_rate to compensate for the fact that this movement is approximated
View
183 Marlin/pins.h
@@ -1,6 +1,49 @@
#ifndef PINS_H
#define PINS_H
+#if MOTHERBOARD == 99
+#define KNOWN_BOARD 1
+
+#define X_STEP_PIN 2
+#define X_DIR_PIN 3
+#define X_ENABLE_PIN -1
+#define X_MIN_PIN -1
+#define X_MAX_PIN 16
+
+#define Y_STEP_PIN 5
+#define Y_DIR_PIN 6
+#define Y_ENABLE_PIN -1
+#define Y_MIN_PIN 67
+#define Y_MAX_PIN -1
+
+#define Z_STEP_PIN 62
+#define Z_DIR_PIN 63
+#define Z_ENABLE_PIN -1
+#define Z_MIN_PIN 59
+#define Z_MAX_PIN -1
+
+#define E0_STEP_PIN 65
+#define E0_DIR_PIN 66
+#define E0_ENABLE_PIN -1
+
+#define SDPOWER -1
+#define SDSS 53
+#define LED_PIN -1
+#define FAN_PIN -1
+#define PS_ON_PIN 9
+#define KILL_PIN -1
+
+#define HEATER_0_PIN 13
+#define HEATER_1_PIN -1
+#define HEATER_2_PIN -1
+#define TEMP_0_PIN 6 // MUST USE ANALOG INPUT NUMBERING NOT DIGITAL OUTPUT NUMBERING!!!!!!!!!
+#define TEMP_1_PIN -1 // MUST USE ANALOG INPUT NUMBERING NOT DIGITAL OUTPUT NUMBERING!!!!!!!!!
+#define TEMP_2_PIN -1 // MUST USE ANALOG INPUT NUMBERING NOT DIGITAL OUTPUT NUMBERING!!!!!!!!!
+#define HEATER_BED_PIN 4
+#define TEMP_BED_PIN 10
+
+#endif /* 99 */
+
/****************************************************************************************
* Arduino pin assignment
*
@@ -331,16 +374,17 @@
// SPI for Max6675 Thermocouple
#ifndef SDSUPPORT
-// these pins are defined in the SD library if building with SD support #define SCK_PIN 52
- #define MISO_PIN 50
- #define MOSI_PIN 51
+// these pins are defined in the SD library if building with SD support