diff --git a/Grbl/cpu_map/cpu_map_atmega2560.h b/Grbl/cpu_map/cpu_map_atmega2560.h
new file mode 100644
index 0000000..8c2cebc
--- /dev/null
+++ b/Grbl/cpu_map/cpu_map_atmega2560.h
@@ -0,0 +1,137 @@
+/*
+ cpu_map_atmega2560.h - CPU and pin mapping configuration file
+ Part of Grbl
+
+ Copyright (c) 2012-2015 Sungeun K. Jeon
+
+ Grbl is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ Grbl is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Grbl. If not, see .
+*/
+
+/* This cpu_map file serves as a central pin mapping settings file for AVR Mega 2560 */
+
+
+#ifdef GRBL_PLATFORM
+#error "cpu_map already defined: GRBL_PLATFORM=" GRBL_PLATFORM
+#endif
+
+
+#define GRBL_PLATFORM "Atmega2560"
+
+// Serial port pins
+#define SERIAL_RX USART0_RX_vect
+#define SERIAL_UDRE USART0_UDRE_vect
+
+// Increase Buffers to make use of extra SRAM
+//#define RX_BUFFER_SIZE 256
+//#define TX_BUFFER_SIZE 128
+//#define BLOCK_BUFFER_SIZE 36
+//#define LINE_BUFFER_SIZE 100
+
+// Define step pulse output pins. NOTE: All step bit pins must be on the same port.
+#define STEP_DDR DDRA
+#define STEP_PORT PORTA
+#define STEP_PIN PINA
+#define X_STEP_BIT 2 // MEGA2560 Digital Pin 24
+#define Y_STEP_BIT 3 // MEGA2560 Digital Pin 25
+#define Z_STEP_BIT 4 // MEGA2560 Digital Pin 26
+#define STEP_MASK ((1<.
+*/
+
+/* Grbl officially supports the Arduino Uno, but the other supplied pin mappings are
+ supplied by users, so your results may vary. This cpu_map file serves as a central
+ pin mapping settings file for AVR 328p used on the Arduino Uno. */
+
+#ifdef GRBL_PLATFORM
+#error "cpu_map already defined: GRBL_PLATFORM=" GRBL_PLATFORM
+#endif
+
+
+#define GRBL_PLATFORM "Atmega328p"
+
+// Define serial port pins and interrupt vectors.
+#define SERIAL_RX USART_RX_vect
+#define SERIAL_UDRE USART_UDRE_vect
+
+// Define step pulse output pins. NOTE: All step bit pins must be on the same port.
+#define STEP_DDR DDRD
+#define STEP_PORT PORTD
+#define X_STEP_BIT 2 // Uno Digital Pin 2
+#define Y_STEP_BIT 3 // Uno Digital Pin 3
+#define Z_STEP_BIT 4 // Uno Digital Pin 4
+#define STEP_MASK ((1<.
*/
-/* The cpu_map.h file serves as a central pin mapping settings file for different processor
- types, i.e. AVR 328p or AVR Mega 2560. Grbl officially supports the Arduino Uno, but the
+/* The cpu_map.h files serve as a central pin mapping selection file for different processor
+ types, i.e. AVR 328p or AVR Mega 2560. Each processor has its own pin mapping file.
+ (i.e. cpu_map_atmega328p.h) Grbl officially supports the Arduino Uno, but the
other supplied pin mappings are supplied by users, so your results may vary. */
-// NOTE: This is still a work in progress. We are still centralizing the configurations to
-// this file, so your success may vary for other CPUs.
+// NOTE: With new processors, only add the define name and filename to use.
#ifndef cpu_map_h
#define cpu_map_h
-//----------------------------------------------------------------------------------------
-
#ifdef CPU_MAP_ATMEGA328P // (Arduino Uno) Officially supported by Grbl.
-
- // Define serial port pins and interrupt vectors.
- #define SERIAL_RX USART_RX_vect
- #define SERIAL_UDRE USART_UDRE_vect
-
- // Define step pulse output pins. NOTE: All step bit pins must be on the same port.
- #define STEP_DDR DDRD
- #define STEP_PORT PORTD
- #define X_STEP_BIT 2 // Uno Digital Pin 2
- #define Y_STEP_BIT 3 // Uno Digital Pin 3
- #define Z_STEP_BIT 4 // Uno Digital Pin 4
- #define STEP_MASK ((1<.
*/
-/* The defaults.h file serves as a central default settings file for different machine
- types, from DIY CNC mills to CNC conversions of off-the-shelf machines. The settings
- here are supplied by users, so your results may vary. However, this should give you
- a good starting point as you get to know your machine and tweak the settings for your
- our nefarious needs. */
+/* The defaults.h file serves as a central default settings selector for different machine
+ types, from DIY CNC mills to CNC conversions of off-the-shelf machines. The settings
+ files listed here are supplied by users, so your results may vary. However, this should
+ give you a good starting point as you get to know your machine and tweak the settings for
+ your nefarious needs.
+ Ensure one and only one of these DEFAULTS_XXX values is defined in config.h */
#ifndef defaults_h
-#define defaults_h
+
+// Only define the DEFAULT_XXX with where to find the corresponding default_XXX.h file.
+// Don't #define defaults_h here, let the selected file do it. Prevents including more than one.
#ifdef DEFAULTS_GENERIC
// Grbl generic default settings. Should work across different machines.
- #define DEFAULT_X_STEPS_PER_MM 250.0
- #define DEFAULT_Y_STEPS_PER_MM 250.0
- #define DEFAULT_Z_STEPS_PER_MM 250.0
- #define DEFAULT_X_MAX_RATE 500.0 // mm/min
- #define DEFAULT_Y_MAX_RATE 500.0 // mm/min
- #define DEFAULT_Z_MAX_RATE 500.0 // mm/min
- #define DEFAULT_X_ACCELERATION (10.0*60*60) // 10*60*60 mm/min^2 = 10 mm/sec^2
- #define DEFAULT_Y_ACCELERATION (10.0*60*60) // 10*60*60 mm/min^2 = 10 mm/sec^2
- #define DEFAULT_Z_ACCELERATION (10.0*60*60) // 10*60*60 mm/min^2 = 10 mm/sec^2
- #define DEFAULT_X_MAX_TRAVEL 200.0 // mm
- #define DEFAULT_Y_MAX_TRAVEL 200.0 // mm
- #define DEFAULT_Z_MAX_TRAVEL 200.0 // mm
- #define DEFAULT_STEP_PULSE_MICROSECONDS 10
- #define DEFAULT_STEPPING_INVERT_MASK 0
- #define DEFAULT_DIRECTION_INVERT_MASK 0
- #define DEFAULT_STEPPER_IDLE_LOCK_TIME 25 // msec (0-254, 255 keeps steppers enabled)
- #define DEFAULT_STATUS_REPORT_MASK ((BITFLAG_RT_STATUS_MACHINE_POSITION)|(BITFLAG_RT_STATUS_WORK_POSITION))
- #define DEFAULT_JUNCTION_DEVIATION 0.02 // mm
- #define DEFAULT_ARC_TOLERANCE 0.002 // mm
- #define DEFAULT_REPORT_INCHES 0 // false
- #define DEFAULT_AUTO_START 1 // true
- #define DEFAULT_INVERT_ST_ENABLE 0 // false
- #define DEFAULT_INVERT_LIMIT_PINS 0 // false
- #define DEFAULT_SOFT_LIMIT_ENABLE 0 // false
- #define DEFAULT_HARD_LIMIT_ENABLE 0 // false
- #define DEFAULT_HOMING_ENABLE 0 // false
- #define DEFAULT_HOMING_DIR_MASK 0 // move positive dir
- #define DEFAULT_HOMING_FEED_RATE 25.0 // mm/min
- #define DEFAULT_HOMING_SEEK_RATE 500.0 // mm/min
- #define DEFAULT_HOMING_DEBOUNCE_DELAY 250 // msec (0-65k)
- #define DEFAULT_HOMING_PULLOFF 1.0 // mm
+ #include "defaults/defaults_generic.h"
#endif
-
-
#ifdef DEFAULTS_SHERLINE_5400
// Description: Sherline 5400 mill with three NEMA 23 Keling KL23H256-21-8B 185 oz-in stepper motors,
// driven by three Pololu A4988 stepper drivers with a 30V, 6A power supply at 1.5A per winding.
- #define MICROSTEPS 2
- #define STEPS_PER_REV 200.0
- #define MM_PER_REV (0.050*MM_PER_INCH) // 0.050 inch/rev leadscrew
- #define DEFAULT_X_STEPS_PER_MM (STEPS_PER_REV*MICROSTEPS/MM_PER_REV)
- #define DEFAULT_Y_STEPS_PER_MM (STEPS_PER_REV*MICROSTEPS/MM_PER_REV)
- #define DEFAULT_Z_STEPS_PER_MM (STEPS_PER_REV*MICROSTEPS/MM_PER_REV)
- #define DEFAULT_X_MAX_RATE 635.0 // mm/min (25 ipm)
- #define DEFAULT_Y_MAX_RATE 635.0 // mm/min
- #define DEFAULT_Z_MAX_RATE 635.0 // mm/min
- #define DEFAULT_X_ACCELERATION (50.0*60*60) // 50*60*60 mm/min^2 = 50 mm/sec^2
- #define DEFAULT_Y_ACCELERATION (50.0*60*60) // 50*60*60 mm/min^2 = 50 mm/sec^2
- #define DEFAULT_Z_ACCELERATION (50.0*60*60) // 50*60*60 mm/min^2 = 50 mm/sec^2
- #define DEFAULT_X_MAX_TRAVEL 225.0 // mm
- #define DEFAULT_Y_MAX_TRAVEL 125.0 // mm
- #define DEFAULT_Z_MAX_TRAVEL 170.0 // mm
- #define DEFAULT_STEP_PULSE_MICROSECONDS 10
- #define DEFAULT_STEPPING_INVERT_MASK 0
- #define DEFAULT_DIRECTION_INVERT_MASK ((1<.
+*/
+
+/* The defaults.h file serves as a central default settings file for different machine
+ types, from DIY CNC mills to CNC conversions of off-the-shelf machines. The settings
+ here are supplied by users, so your results may vary. However, this should give you
+ a good starting point as you get to know your machine and tweak the settings for your
+ nefarious needs. */
+
+#ifndef defaults_h
+#define defaults_h
+
+ // Grbl generic default settings. Should work across different machines.
+ #define DEFAULT_X_STEPS_PER_MM 250.0
+ #define DEFAULT_Y_STEPS_PER_MM 250.0
+ #define DEFAULT_Z_STEPS_PER_MM 250.0
+ #define DEFAULT_X_MAX_RATE 500.0 // mm/min
+ #define DEFAULT_Y_MAX_RATE 500.0 // mm/min
+ #define DEFAULT_Z_MAX_RATE 500.0 // mm/min
+ #define DEFAULT_X_ACCELERATION (10.0*60*60) // 10*60*60 mm/min^2 = 10 mm/sec^2
+ #define DEFAULT_Y_ACCELERATION (10.0*60*60) // 10*60*60 mm/min^2 = 10 mm/sec^2
+ #define DEFAULT_Z_ACCELERATION (10.0*60*60) // 10*60*60 mm/min^2 = 10 mm/sec^2
+ #define DEFAULT_X_MAX_TRAVEL 200.0 // mm
+ #define DEFAULT_Y_MAX_TRAVEL 200.0 // mm
+ #define DEFAULT_Z_MAX_TRAVEL 200.0 // mm
+ #define DEFAULT_STEP_PULSE_MICROSECONDS 10
+ #define DEFAULT_STEPPING_INVERT_MASK 0
+ #define DEFAULT_DIRECTION_INVERT_MASK 0
+ #define DEFAULT_STEPPER_IDLE_LOCK_TIME 25 // msec (0-254, 255 keeps steppers enabled)
+ #define DEFAULT_STATUS_REPORT_MASK ((BITFLAG_RT_STATUS_MACHINE_POSITION)|(BITFLAG_RT_STATUS_WORK_POSITION))
+ #define DEFAULT_JUNCTION_DEVIATION 0.02 // mm
+ #define DEFAULT_ARC_TOLERANCE 0.002 // mm
+ #define DEFAULT_REPORT_INCHES 0 // false
+ #define DEFAULT_AUTO_START 1 // true
+ #define DEFAULT_INVERT_ST_ENABLE 0 // false
+ #define DEFAULT_INVERT_LIMIT_PINS 0 // false
+ #define DEFAULT_SOFT_LIMIT_ENABLE 0 // false
+ #define DEFAULT_HARD_LIMIT_ENABLE 0 // false
+ #define DEFAULT_HOMING_ENABLE 0 // false
+ #define DEFAULT_HOMING_DIR_MASK 0 // move positive dir
+ #define DEFAULT_HOMING_FEED_RATE 25.0 // mm/min
+ #define DEFAULT_HOMING_SEEK_RATE 500.0 // mm/min
+ #define DEFAULT_HOMING_DEBOUNCE_DELAY 250 // msec (0-65k)
+ #define DEFAULT_HOMING_PULLOFF 1.0 // mm
+
+#endif
diff --git a/grbl/defaults/defaults_oxcnc.h b/grbl/defaults/defaults_oxcnc.h
new file mode 100644
index 0000000..4e7d56f
--- /dev/null
+++ b/grbl/defaults/defaults_oxcnc.h
@@ -0,0 +1,64 @@
+/*
+ defaults_oxcnc.h - defaults settings configuration file
+ Part of Grbl
+
+ Copyright (c) 2012-2015 Sungeun K. Jeon
+
+ Grbl is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ Grbl is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Grbl. If not, see .
+*/
+
+/* The defaults.h file serves as a central default settings file for different machine
+ types, from DIY CNC mills to CNC conversions of off-the-shelf machines. The settings
+ here are supplied by users, so your results may vary. However, this should give you
+ a good starting point as you get to know your machine and tweak the settings for your
+ nefarious needs. */
+
+#ifndef defaults_h
+#define defaults_h
+
+ // Grbl settings for OpenBuilds OX CNC Machine
+ // http://www.openbuilds.com/builds/openbuilds-ox-cnc-machine.341/
+ #define DEFAULT_X_STEPS_PER_MM 26.670
+ #define DEFAULT_Y_STEPS_PER_MM 26.670
+ #define DEFAULT_Z_STEPS_PER_MM 50
+ #define DEFAULT_X_MAX_RATE 500.0 // mm/min
+ #define DEFAULT_Y_MAX_RATE 500.0 // mm/min
+ #define DEFAULT_Z_MAX_RATE 500.0 // mm/min
+ #define DEFAULT_X_ACCELERATION (10.0*60*60) // 10*60*60 mm/min^2 = 10 mm/sec^2
+ #define DEFAULT_Y_ACCELERATION (10.0*60*60) // 10*60*60 mm/min^2 = 10 mm/sec^2
+ #define DEFAULT_Z_ACCELERATION (10.0*60*60) // 10*60*60 mm/min^2 = 10 mm/sec^2
+ #define DEFAULT_X_MAX_TRAVEL 500.0 // mm
+ #define DEFAULT_Y_MAX_TRAVEL 750.0 // mm
+ #define DEFAULT_Z_MAX_TRAVEL 80.0 // mm
+ #define DEFAULT_STEP_PULSE_MICROSECONDS 10
+ #define DEFAULT_STEPPING_INVERT_MASK 0
+ #define DEFAULT_DIRECTION_INVERT_MASK 0
+ #define DEFAULT_STEPPER_IDLE_LOCK_TIME 25 // msec (0-254, 255 keeps steppers enabled)
+ #define DEFAULT_STATUS_REPORT_MASK ((BITFLAG_RT_STATUS_MACHINE_POSITION)|(BITFLAG_RT_STATUS_WORK_POSITION))
+ #define DEFAULT_JUNCTION_DEVIATION 0.02 // mm
+ #define DEFAULT_ARC_TOLERANCE 0.002 // mm
+ #define DEFAULT_REPORT_INCHES 0 // false
+ #define DEFAULT_AUTO_START 1 // true
+ #define DEFAULT_INVERT_ST_ENABLE 0 // false
+ #define DEFAULT_INVERT_LIMIT_PINS 0 // false
+ #define DEFAULT_SOFT_LIMIT_ENABLE 0 // false
+ #define DEFAULT_HARD_LIMIT_ENABLE 0 // false
+ #define DEFAULT_HOMING_ENABLE 0 // false
+ #define DEFAULT_HOMING_DIR_MASK 0 // move positive dir
+ #define DEFAULT_HOMING_FEED_RATE 25.0 // mm/min
+ #define DEFAULT_HOMING_SEEK_RATE 500.0 // mm/min
+ #define DEFAULT_HOMING_DEBOUNCE_DELAY 250 // msec (0-65k)
+ #define DEFAULT_HOMING_PULLOFF 1.0 // mm
+
+#endif
diff --git a/grbl/defaults/defaults_shapeoko.h b/grbl/defaults/defaults_shapeoko.h
new file mode 100644
index 0000000..aaa9834
--- /dev/null
+++ b/grbl/defaults/defaults_shapeoko.h
@@ -0,0 +1,71 @@
+/*
+ defaults_shapeoko.h - defaults settings configuration file
+ Part of Grbl
+
+ Copyright (c) 2012-2015 Sungeun K. Jeon
+
+ Grbl is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ Grbl is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Grbl. If not, see .
+*/
+
+/* The defaults.h file serves as a central default settings file for different machine
+ types, from DIY CNC mills to CNC conversions of off-the-shelf machines. The settings
+ here are supplied by users, so your results may vary. However, this should give you
+ a good starting point as you get to know your machine and tweak the settings for your
+ nefarious needs. */
+
+#ifndef defaults_h
+#define defaults_h
+
+
+ // Description: Shapeoko CNC mill with three NEMA 17 stepper motors, driven by Synthetos
+ // grblShield with a 24V, 4.2A power supply.
+ #define MICROSTEPS_XY 8
+ #define STEP_REVS_XY 400
+ #define MM_PER_REV_XY (0.08*18*MM_PER_INCH) // 0.08 in belt pitch, 18 pulley teeth
+ #define MICROSTEPS_Z 2
+ #define STEP_REVS_Z 400
+ #define MM_PER_REV_Z 1.250 // 1.25 mm/rev leadscrew
+ #define DEFAULT_X_STEPS_PER_MM (MICROSTEPS_XY*STEP_REVS_XY/MM_PER_REV_XY)
+ #define DEFAULT_Y_STEPS_PER_MM (MICROSTEPS_XY*STEP_REVS_XY/MM_PER_REV_XY)
+ #define DEFAULT_Z_STEPS_PER_MM (MICROSTEPS_Z*STEP_REVS_Z/MM_PER_REV_Z)
+ #define DEFAULT_X_MAX_RATE 1000.0 // mm/min
+ #define DEFAULT_Y_MAX_RATE 1000.0 // mm/min
+ #define DEFAULT_Z_MAX_RATE 1000.0 // mm/min
+ #define DEFAULT_X_ACCELERATION (15.0*60*60) // 15*60*60 mm/min^2 = 15 mm/sec^2
+ #define DEFAULT_Y_ACCELERATION (15.0*60*60) // 15*60*60 mm/min^2 = 15 mm/sec^2
+ #define DEFAULT_Z_ACCELERATION (15.0*60*60) // 15*60*60 mm/min^2 = 15 mm/sec^2
+ #define DEFAULT_X_MAX_TRAVEL 200.0 // mm
+ #define DEFAULT_Y_MAX_TRAVEL 200.0 // mm
+ #define DEFAULT_Z_MAX_TRAVEL 200.0 // mm
+ #define DEFAULT_STEP_PULSE_MICROSECONDS 10
+ #define DEFAULT_STEPPING_INVERT_MASK 0
+ #define DEFAULT_DIRECTION_INVERT_MASK ((1<.
+*/
+
+/* The defaults.h file serves as a central default settings file for different machine
+ types, from DIY CNC mills to CNC conversions of off-the-shelf machines. The settings
+ here are supplied by users, so your results may vary. However, this should give you
+ a good starting point as you get to know your machine and tweak the settings for your
+ nefarious needs. */
+
+#ifndef defaults_h
+#define defaults_h
+
+ // Description: Shapeoko CNC mill with three NEMA 17 stepper motors, driven by Synthetos
+ // grblShield at 28V.
+ #define MICROSTEPS_XY 8
+ #define STEP_REVS_XY 200
+ #define MM_PER_REV_XY (2.0*20) // 2mm belt pitch, 20 pulley teeth
+ #define MICROSTEPS_Z 2
+ #define STEP_REVS_Z 200
+ #define MM_PER_REV_Z 1.250 // 1.25 mm/rev leadscrew
+ #define DEFAULT_X_STEPS_PER_MM (MICROSTEPS_XY*STEP_REVS_XY/MM_PER_REV_XY)
+ #define DEFAULT_Y_STEPS_PER_MM (MICROSTEPS_XY*STEP_REVS_XY/MM_PER_REV_XY)
+ #define DEFAULT_Z_STEPS_PER_MM (MICROSTEPS_Z*STEP_REVS_Z/MM_PER_REV_Z)
+ #define DEFAULT_X_MAX_RATE 5000.0 // mm/min
+ #define DEFAULT_Y_MAX_RATE 5000.0 // mm/min
+ #define DEFAULT_Z_MAX_RATE 500.0 // mm/min
+ #define DEFAULT_X_ACCELERATION (250.0*60*60) // 25*60*60 mm/min^2 = 25 mm/sec^2
+ #define DEFAULT_Y_ACCELERATION (250.0*60*60) // 25*60*60 mm/min^2 = 25 mm/sec^2
+ #define DEFAULT_Z_ACCELERATION (50.0*60*60) // 25*60*60 mm/min^2 = 25 mm/sec^2
+ #define DEFAULT_X_MAX_TRAVEL 290.0 // mm
+ #define DEFAULT_Y_MAX_TRAVEL 290.0 // mm
+ #define DEFAULT_Z_MAX_TRAVEL 100.0 // mm
+ #define DEFAULT_STEP_PULSE_MICROSECONDS 10
+ #define DEFAULT_STEPPING_INVERT_MASK 0
+ #define DEFAULT_DIRECTION_INVERT_MASK ((1<.
+*/
+
+/* The defaults.h file serves as a central default settings file for different machine
+ types, from DIY CNC mills to CNC conversions of off-the-shelf machines. The settings
+ here are supplied by users, so your results may vary. However, this should give you
+ a good starting point as you get to know your machine and tweak the settings for your
+ nefarious needs. */
+
+#ifndef defaults_h
+#define defaults_h
+
+ // Description: Shapeoko CNC mill with three NEMA 23 stepper motors, driven by CarbideMotion
+ #define MICROSTEPS_XY 8
+ #define STEP_REVS_XY 200
+ #define MM_PER_REV_XY (2.0*20) // 2mm belt pitch, 20 pulley teeth
+ #define MICROSTEPS_Z 8
+ #define STEP_REVS_Z 200
+ #define MM_PER_REV_Z (2.0*20) // 2mm belt pitch, 20 pulley teeth
+ #define DEFAULT_X_STEPS_PER_MM (MICROSTEPS_XY*STEP_REVS_XY/MM_PER_REV_XY)
+ #define DEFAULT_Y_STEPS_PER_MM (MICROSTEPS_XY*STEP_REVS_XY/MM_PER_REV_XY)
+ #define DEFAULT_Z_STEPS_PER_MM (MICROSTEPS_Z*STEP_REVS_Z/MM_PER_REV_Z)
+ #define DEFAULT_X_MAX_RATE 5000.0 // mm/min
+ #define DEFAULT_Y_MAX_RATE 5000.0 // mm/min
+ #define DEFAULT_Z_MAX_RATE 5000.0 // mm/min
+ #define DEFAULT_X_ACCELERATION (400.0*60*60) // 400*60*60 mm/min^2 = 400 mm/sec^2
+ #define DEFAULT_Y_ACCELERATION (400.0*60*60) // 400*60*60 mm/min^2 = 400 mm/sec^2
+ #define DEFAULT_Z_ACCELERATION (400.0*60*60) // 400*60*60 mm/min^2 = 400 mm/sec^2
+ #define DEFAULT_X_MAX_TRAVEL 425.0 // mm
+ #define DEFAULT_Y_MAX_TRAVEL 465.0 // mm
+ #define DEFAULT_Z_MAX_TRAVEL 80.0 // mm
+ #define DEFAULT_STEP_PULSE_MICROSECONDS 10
+ #define DEFAULT_STEPPING_INVERT_MASK 0
+ #define DEFAULT_DIRECTION_INVERT_MASK ((1<.
+*/
+
+/* The defaults.h file serves as a central default settings file for different machine
+ types, from DIY CNC mills to CNC conversions of off-the-shelf machines. The settings
+ here are supplied by users, so your results may vary. However, this should give you
+ a good starting point as you get to know your machine and tweak the settings for your
+ nefarious needs. */
+
+#ifndef defaults_h
+#define defaults_h
+
+ // Description: Sherline 5400 mill with three NEMA 23 Keling KL23H256-21-8B 185 oz-in stepper motors,
+ // driven by three Pololu A4988 stepper drivers with a 30V, 6A power supply at 1.5A per winding.
+ #define MICROSTEPS 2
+ #define STEPS_PER_REV 200.0
+ #define MM_PER_REV (0.050*MM_PER_INCH) // 0.050 inch/rev leadscrew
+ #define DEFAULT_X_STEPS_PER_MM (STEPS_PER_REV*MICROSTEPS/MM_PER_REV)
+ #define DEFAULT_Y_STEPS_PER_MM (STEPS_PER_REV*MICROSTEPS/MM_PER_REV)
+ #define DEFAULT_Z_STEPS_PER_MM (STEPS_PER_REV*MICROSTEPS/MM_PER_REV)
+ #define DEFAULT_X_MAX_RATE 635.0 // mm/min (25 ipm)
+ #define DEFAULT_Y_MAX_RATE 635.0 // mm/min
+ #define DEFAULT_Z_MAX_RATE 635.0 // mm/min
+ #define DEFAULT_X_ACCELERATION (50.0*60*60) // 50*60*60 mm/min^2 = 50 mm/sec^2
+ #define DEFAULT_Y_ACCELERATION (50.0*60*60) // 50*60*60 mm/min^2 = 50 mm/sec^2
+ #define DEFAULT_Z_ACCELERATION (50.0*60*60) // 50*60*60 mm/min^2 = 50 mm/sec^2
+ #define DEFAULT_X_MAX_TRAVEL 225.0 // mm
+ #define DEFAULT_Y_MAX_TRAVEL 125.0 // mm
+ #define DEFAULT_Z_MAX_TRAVEL 170.0 // mm
+ #define DEFAULT_STEP_PULSE_MICROSECONDS 10
+ #define DEFAULT_STEPPING_INVERT_MASK 0
+ #define DEFAULT_DIRECTION_INVERT_MASK ((1<.
+*/
+
+/* The defaults.h file serves as a central default settings file for different machine
+ types, from DIY CNC mills to CNC conversions of off-the-shelf machines. The settings
+ here are supplied by users, so your results may vary. However, this should give you
+ a good starting point as you get to know your machine and tweak the settings for your
+ nefarious needs. */
+
+#ifndef defaults_h
+#define defaults_h
+
+ // Settings only for Grbl Simulator (www.github.com/grbl/grbl-sim)
+ // Grbl generic default settings. Should work across different machines.
+ #define DEFAULT_X_STEPS_PER_MM 1000.0
+ #define DEFAULT_Y_STEPS_PER_MM 1000.0
+ #define DEFAULT_Z_STEPS_PER_MM 1000.0
+ #define DEFAULT_X_MAX_RATE 1000.0 // mm/min
+ #define DEFAULT_Y_MAX_RATE 1000.0 // mm/min
+ #define DEFAULT_Z_MAX_RATE 1000.0 // mm/min
+ #define DEFAULT_X_ACCELERATION (100.0*60*60) // 10*60*60 mm/min^2 = 10 mm/sec^2
+ #define DEFAULT_Y_ACCELERATION (100.0*60*60) // 10*60*60 mm/min^2 = 10 mm/sec^2
+ #define DEFAULT_Z_ACCELERATION (100.0*60*60) // 10*60*60 mm/min^2 = 10 mm/sec^2
+ #define DEFAULT_X_MAX_TRAVEL 1000.0 // mm
+ #define DEFAULT_Y_MAX_TRAVEL 1000.0 // mm
+ #define DEFAULT_Z_MAX_TRAVEL 1000.0 // mm
+ #define DEFAULT_STEP_PULSE_MICROSECONDS 10
+ #define DEFAULT_STEPPING_INVERT_MASK 0
+ #define DEFAULT_DIRECTION_INVERT_MASK 0
+ #define DEFAULT_STEPPER_IDLE_LOCK_TIME 25 // msec (0-254, 255 keeps steppers enabled)
+ #define DEFAULT_STATUS_REPORT_MASK ((BITFLAG_RT_STATUS_MACHINE_POSITION)|(BITFLAG_RT_STATUS_WORK_POSITION))
+ #define DEFAULT_JUNCTION_DEVIATION 0.02 // mm
+ #define DEFAULT_ARC_TOLERANCE 0.002 // mm
+ #define DEFAULT_REPORT_INCHES 0 // false
+ #define DEFAULT_AUTO_START 1 // true
+ #define DEFAULT_INVERT_ST_ENABLE 0 // false
+ #define DEFAULT_INVERT_LIMIT_PINS 0 // false
+ #define DEFAULT_SOFT_LIMIT_ENABLE 0 // false
+ #define DEFAULT_HARD_LIMIT_ENABLE 0 // false
+ #define DEFAULT_HOMING_ENABLE 0 // false
+ #define DEFAULT_HOMING_DIR_MASK 0 // move positive dir
+ #define DEFAULT_HOMING_FEED_RATE 25.0 // mm/min
+ #define DEFAULT_HOMING_SEEK_RATE 500.0 // mm/min
+ #define DEFAULT_HOMING_DEBOUNCE_DELAY 250 // msec (0-65k)
+ #define DEFAULT_HOMING_PULLOFF 1.0 // mm
+
+#endif
diff --git a/grbl/defaults/defaults_zen_toolworks_7x7.h b/grbl/defaults/defaults_zen_toolworks_7x7.h
new file mode 100644
index 0000000..a6e8787
--- /dev/null
+++ b/grbl/defaults/defaults_zen_toolworks_7x7.h
@@ -0,0 +1,69 @@
+/*
+ defaults_zen_toolworks_7x7.h - defaults settings configuration file
+ Part of Grbl
+
+ Copyright (c) 2012-2015 Sungeun K. Jeon
+
+ Grbl is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ Grbl is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Grbl. If not, see .
+*/
+
+/* The defaults.h file serves as a central default settings file for different machine
+ types, from DIY CNC mills to CNC conversions of off-the-shelf machines. The settings
+ here are supplied by users, so your results may vary. However, this should give you
+ a good starting point as you get to know your machine and tweak the settings for your
+ nefarious needs. */
+
+#ifndef defaults_h
+#define defaults_h
+
+ // Description: Zen Toolworks 7x7 mill with three Shinano SST43D2121 65oz-in NEMA 17 stepper motors.
+ // Leadscrew is different from some ZTW kits, where most are 1.25mm/rev rather than 8.0mm/rev here.
+ // Driven by 30V, 6A power supply and TI DRV8811 stepper motor drivers.
+ #define MICROSTEPS 8
+ #define STEPS_PER_REV 200.0
+ #define MM_PER_REV 8.0 // 8 mm/rev leadscrew
+ #define DEFAULT_X_STEPS_PER_MM (STEPS_PER_REV*MICROSTEPS/MM_PER_REV)
+ #define DEFAULT_Y_STEPS_PER_MM (STEPS_PER_REV*MICROSTEPS/MM_PER_REV)
+ #define DEFAULT_Z_STEPS_PER_MM (STEPS_PER_REV*MICROSTEPS/MM_PER_REV)
+ #define DEFAULT_X_MAX_RATE 6000.0 // mm/min
+ #define DEFAULT_Y_MAX_RATE 6000.0 // mm/min
+ #define DEFAULT_Z_MAX_RATE 6000.0 // mm/min
+ #define DEFAULT_X_ACCELERATION (600.0*60*60) // 600*60*60 mm/min^2 = 600 mm/sec^2
+ #define DEFAULT_Y_ACCELERATION (600.0*60*60) // 600*60*60 mm/min^2 = 600 mm/sec^2
+ #define DEFAULT_Z_ACCELERATION (600.0*60*60) // 600*60*60 mm/min^2 = 600 mm/sec^2
+ #define DEFAULT_X_MAX_TRAVEL 190.0 // mm
+ #define DEFAULT_Y_MAX_TRAVEL 180.0 // mm
+ #define DEFAULT_Z_MAX_TRAVEL 150.0 // mm
+ #define DEFAULT_STEP_PULSE_MICROSECONDS 10
+ #define DEFAULT_STEPPING_INVERT_MASK 0
+ #define DEFAULT_DIRECTION_INVERT_MASK ((1<
diff --git a/grbl/limits.c b/grbl/limits.c
index 83d93d9..65869d1 100644
--- a/grbl/limits.c
+++ b/grbl/limits.c
@@ -22,9 +22,13 @@
#include "grbl.h"
-// Homing axis search distance multiplier. Computed by this value times the axis max travel.
-#define HOMING_AXIS_SEARCH_SCALAR 1.5 // Must be > 1 to ensure limit switch will be engaged.
-
+// Homing axis search distance multiplier. Computed by this value times the cycle travel.
+#ifndef HOMING_AXIS_SEARCH_SCALAR
+ #define HOMING_AXIS_SEARCH_SCALAR 1.5 // Must be > 1 to ensure limit switch will be engaged.
+#endif
+#ifndef HOMING_AXIS_LOCATE_SCALAR
+ #define HOMING_AXIS_LOCATE_SCALAR 5.0 // Must be > 1 to ensure limit switch is cleared.
+#endif
void limits_init()
{
@@ -51,6 +55,7 @@ void limits_init()
}
+// Disables hard limits.
void limits_disable()
{
LIMIT_PCMSK &= ~LIMIT_MASK; // Disable specific pins of the Pin Change Interrupt
@@ -58,6 +63,24 @@ void limits_disable()
}
+// Returns limit state as a bit-wise uint8 variable. Each bit indicates an axis limit, where
+// triggered is 1 and not triggered is 0. Invert mask is applied. Axes are defined by their
+// number in bit position, i.e. Z_AXIS is (1<<2) or bit 2, and Y_AXIS is (1<<1) or bit 1.
+uint8_t limits_get_state()
+{
+ uint8_t limit_state = 0;
+ uint8_t pin = (LIMIT_PIN & LIMIT_MASK);
+ if (bit_isfalse(settings.flags,BITFLAG_INVERT_LIMIT_PINS)) { pin ^= LIMIT_MASK; }
+ if (pin) {
+ uint8_t idx;
+ for (idx=0; idx 0);
-
+
// The active cycle axes should now be homed and machine limits have been located. By
// default, Grbl defines machine space as all negative, as do most CNCs. Since limit switches
// can be on either side of an axes, check and set axes machine zero appropriately. Also,
@@ -242,13 +275,16 @@ void limits_go_home(uint8_t cycle_mask)
for (idx=0; idx 0.0) {
- for (idx=0; idxsteps[A_MOTOR] = labs((target_steps[X_AXIS]-pl.position[X_AXIS]) - (target_steps[Y_AXIS]-pl.position[Y_AXIS]));
- block->steps[B_MOTOR] = labs((target_steps[X_AXIS]-pl.position[X_AXIS]) + (target_steps[Y_AXIS]-pl.position[Y_AXIS]));
+ block->steps[A_MOTOR] = labs((target_steps[X_AXIS]-pl.position[X_AXIS]) + (target_steps[Y_AXIS]-pl.position[Y_AXIS]));
+ block->steps[B_MOTOR] = labs((target_steps[X_AXIS]-pl.position[X_AXIS]) - (target_steps[Y_AXIS]-pl.position[Y_AXIS]));
#endif
for (idx=0; idxstep_event_count = max(block->step_event_count, block->steps[idx]);
if (idx == A_MOTOR) {
- delta_mm = ((target_steps[X_AXIS]-pl.position[X_AXIS]) - (target_steps[Y_AXIS]-pl.position[Y_AXIS]))/settings.steps_per_mm[idx];
- } else if (idx == B_MOTOR) {
delta_mm = ((target_steps[X_AXIS]-pl.position[X_AXIS]) + (target_steps[Y_AXIS]-pl.position[Y_AXIS]))/settings.steps_per_mm[idx];
+ } else if (idx == B_MOTOR) {
+ delta_mm = ((target_steps[X_AXIS]-pl.position[X_AXIS]) - (target_steps[Y_AXIS]-pl.position[Y_AXIS]))/settings.steps_per_mm[idx];
} else {
delta_mm = (target_steps[idx] - pl.position[idx])/settings.steps_per_mm[idx];
}
diff --git a/grbl/print.c b/grbl/print.c
index 1dd8d7b..f029c4f 100644
--- a/grbl/print.c
+++ b/grbl/print.c
@@ -60,38 +60,36 @@ void printPgmString(const char *s)
// }
-void print_uint8_base2(uint8_t n)
+// Prints an uint8 variable with base and number of desired digits.
+void print_unsigned_int8(uint8_t n, uint8_t base, uint8_t digits)
{
- unsigned char buf[8];
- uint8_t i = 0;
-
- for (; i < 8; i++) {
- buf[i] = n & 1;
- n >>= 1;
- }
-
- for (; i > 0; i--)
- serial_write('0' + buf[i - 1]);
-}
-
-
-void print_uint8_base10(uint8_t n)
-{
- if (n == 0) {
- serial_write('0');
- return;
- }
-
- unsigned char buf[3];
+ unsigned char buf[digits];
uint8_t i = 0;
- while (n > 0) {
- buf[i++] = n % 10 + '0';
- n /= 10;
+ for (; i < digits; i++) {
+ buf[i] = n % base ;
+ n /= base;
}
for (; i > 0; i--)
- serial_write(buf[i - 1]);
+ serial_write('0' + buf[i - 1]);
+}
+
+
+// Prints an uint8 variable in base 2.
+void print_uint8_base2(uint8_t n) {
+ print_unsigned_int8(n,2,8);
+}
+
+
+// Prints an uint8 variable in base 10.
+void print_uint8_base10(uint8_t n)
+{
+ uint8_t digits;
+ if (n < 10) { digits = 1; }
+ else if (n < 100) { digits = 2; }
+ else { digits = 3; }
+ print_unsigned_int8(n,10,digits);
}
@@ -119,7 +117,7 @@ void printInteger(long n)
{
if (n < 0) {
serial_write('-');
- print_uint32_base10((-n));
+ print_uint32_base10(-n);
} else {
print_uint32_base10(n);
}
@@ -194,12 +192,13 @@ void printFloat_RateValue(float n) {
void printFloat_SettingValue(float n) { printFloat(n,N_DECIMAL_SETTINGVALUE); }
-// Debug tool to print free memory in bytes at the called point. Not used otherwise.
-void printFreeMemory()
-{
- extern int __heap_start, *__brkval;
- uint16_t free; // Up to 64k values.
- free = (int) &free - (__brkval == 0 ? (int) &__heap_start : (int) __brkval);
- printInteger((int32_t)free);
- printString(" ");
-}
+// Debug tool to print free memory in bytes at the called point.
+// NOTE: Keep commented unless using. Part of this function always gets compiled in.
+// void printFreeMemory()
+// {
+// extern int __heap_start, *__brkval;
+// uint16_t free; // Up to 64k values.
+// free = (int) &free - (__brkval == 0 ? (int) &__heap_start : (int) __brkval);
+// printInteger((int32_t)free);
+// printString(" ");
+// }
diff --git a/grbl/print.h b/grbl/print.h
index 658e892..e6399aa 100644
--- a/grbl/print.h
+++ b/grbl/print.h
@@ -31,8 +31,13 @@ void printInteger(long n);
void print_uint32_base10(uint32_t n);
+// Prints uint8 variable with base and number of desired digits.
+void print_unsigned_int8(uint8_t n, uint8_t base, uint8_t digits);
+
+// Prints an uint8 variable in base 2.
void print_uint8_base2(uint8_t n);
+// Prints an uint8 variable in base 10.
void print_uint8_base10(uint8_t n);
void printFloat(float n, uint8_t decimal_places);
diff --git a/grbl/report.c b/grbl/report.c
index ed27e51..09ff1b8 100644
--- a/grbl/report.c
+++ b/grbl/report.c
@@ -136,6 +136,8 @@ void report_feedback_message(uint8_t message_code)
printPgmString(PSTR("Disabled")); break;
case MESSAGE_SAFETY_DOOR_AJAR:
printPgmString(PSTR("Check Door")); break;
+ case MESSAGE_PROGRAM_END:
+ printPgmString(PSTR("Pgm End")); break;
}
printPgmString(PSTR("]\r\n"));
}
@@ -420,7 +422,7 @@ void report_realtime_status()
// the system power on location (0,0,0) and work coordinate position (G54 and G92 applied). Eventually
// to be added are distance to go on block, processed block id, and feed rate. Also a settings bitmask
// for a user to select the desired real-time data.
- uint8_t i;
+ uint8_t idx;
int32_t current_position[N_AXIS]; // Copy current state of the system position variable
memcpy(current_position,sys.position,sizeof(sys.position));
float print_position[N_AXIS];
@@ -445,21 +447,21 @@ void report_realtime_status()
// Report machine position
if (bit_istrue(settings.status_report_mask,BITFLAG_RT_STATUS_MACHINE_POSITION)) {
printPgmString(PSTR(",MPos:"));
- for (i=0; i< N_AXIS; i++) {
- printFloat_CoordValue(print_position[i]);
- if (i < (N_AXIS-1)) { printPgmString(PSTR(",")); }
+ for (idx=0; idx< N_AXIS; idx++) {
+ printFloat_CoordValue(print_position[idx]);
+ if (idx < (N_AXIS-1)) { printPgmString(PSTR(",")); }
}
}
// Report work position
if (bit_istrue(settings.status_report_mask,BITFLAG_RT_STATUS_WORK_POSITION)) {
printPgmString(PSTR(",WPos:"));
- for (i=0; i< N_AXIS; i++) {
+ for (idx=0; idx< N_AXIS; idx++) {
// Apply work coordinate offsets and tool length offset to current position.
- print_position[i] -= gc_state.coord_system[i]+gc_state.coord_offset[i];
- if (i == TOOL_LENGTH_OFFSET_AXIS) { print_position[i] -= gc_state.tool_length_offset; }
- printFloat_CoordValue(print_position[i]);
- if (i < (N_AXIS-1)) { printPgmString(PSTR(",")); }
+ print_position[idx] -= gc_state.coord_system[idx]+gc_state.coord_offset[idx];
+ if (idx == TOOL_LENGTH_OFFSET_AXIS) { print_position[idx] -= gc_state.tool_length_offset; }
+ printFloat_CoordValue(print_position[idx]);
+ if (idx < (N_AXIS-1)) { printPgmString(PSTR(",")); }
}
}
@@ -492,14 +494,10 @@ void report_realtime_status()
printFloat_RateValue(st_get_realtime_rate());
#endif
- #ifdef REPORT_LIMIT_PIN_STATE
+ if (bit_istrue(settings.status_report_mask,BITFLAG_RT_STATUS_LIMIT_PINS)) {
printPgmString(PSTR(",Lim:"));
- uint8_t idx;
- for (idx=0; idxstep_event_count >> 1);
- st.counter_y = st.counter_x;
- st.counter_z = st.counter_x;
+ st.counter_x = st.counter_y = st.counter_z = (st.exec_block->step_event_count >> 1);
}
-
st.dir_outbits = st.exec_block->direction_bits ^ dir_port_invert_mask;
#ifdef ADAPTIVE_MULTI_AXIS_STEP_SMOOTHING
diff --git a/grbl/system.c b/grbl/system.c
index a31c5fe..11a71eb 100644
--- a/grbl/system.c
+++ b/grbl/system.c
@@ -252,8 +252,10 @@ float system_convert_axis_steps_to_mpos(int32_t *steps, uint8_t idx)
#ifdef COREXY
if (idx==A_MOTOR) {
pos = 0.5*((steps[A_MOTOR] + steps[B_MOTOR])/settings.steps_per_mm[idx]);
- } else { // (idx==B_MOTOR)
+ } else if (idx==B_MOTOR) {
pos = 0.5*((steps[A_MOTOR] - steps[B_MOTOR])/settings.steps_per_mm[idx]);
+ } else {
+ pos = steps[idx]/settings.steps_per_mm[idx];
}
#else
pos = steps[idx]/settings.steps_per_mm[idx];
diff --git a/grbl/system.h b/grbl/system.h
index a74f029..94f2143 100644
--- a/grbl/system.h
+++ b/grbl/system.h
@@ -71,7 +71,7 @@
typedef struct {
uint8_t abort; // System abort flag. Forces exit back to main loop for reset.
uint8_t state; // Tracks the current state of Grbl.
- uint8_t suspend; // System suspend flag. Allows only realtime commands. Used primarily for holds.
+ uint8_t suspend; // System suspend bitflag variable that manages holds, cancels, and safety door.
volatile uint8_t rt_exec_state; // Global realtime executor bitflag variable for state management. See EXEC bitmasks.
volatile uint8_t rt_exec_alarm; // Global realtime executor bitflag variable for setting various alarms.