Arduino IDE compatibility and minor homing fixes

- Added an include in the right spot, if a user tries to compile and
upload Grbl through the Arduino IDE with the old way.

- Fixed a minor bug with homing max travel calculations. It was causing
simultaneous axes homing to move slow than it did before.
This commit is contained in:
Sonny Jeon 2015-03-04 06:50:26 -07:00
parent 85b0c7a8b4
commit 76730176da
5 changed files with 22 additions and 12 deletions

View File

@ -82,5 +82,5 @@ List of Supported G-Codes in Grbl v0.9
------------- -------------
Grbl is an open-source project and fueled by the free-time of our intrepid administrators and altruistic users. If you'd like to donate, all proceeds will be used to help fund supporting hardware and testing equipment. Thank you! Grbl is an open-source project and fueled by the free-time of our intrepid administrators and altruistic users. If you'd like to donate, all proceeds will be used to help fund supporting hardware and testing equipment. Thank you!
[![Donate](https://www.paypalobjects.com/en_US/i/btn/btn_donate_LG.gif)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=EBQWAWQAAT878) [![Donate](https://www.paypalobjects.com/en_US/i/btn/btn_donate_LG.gif)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=CUGXJHXA36BYW)

View File

@ -27,6 +27,7 @@
#ifndef config_h #ifndef config_h
#define config_h #define config_h
#include "grbl.h" // For Arduino IDE compatibility.
// Default settings. Used when resetting EEPROM. Change to desired name in defaults.h // Default settings. Used when resetting EEPROM. Change to desired name in defaults.h

View File

@ -23,7 +23,7 @@
// Grbl versioning system // Grbl versioning system
#define GRBL_VERSION "0.9i" #define GRBL_VERSION "0.9i"
#define GRBL_VERSION_BUILD "20150223" #define GRBL_VERSION_BUILD "20150302"
// Define standard libraries used by Grbl. // Define standard libraries used by Grbl.
#include <avr/io.h> #include <avr/io.h>

View File

@ -134,7 +134,8 @@ void limits_go_home(uint8_t cycle_mask)
float target[N_AXIS]; float target[N_AXIS];
uint8_t limit_pin[N_AXIS], step_pin[N_AXIS]; uint8_t limit_pin[N_AXIS], step_pin[N_AXIS];
float max_travel;
float max_travel = 0.0;
for (idx=0; idx<N_AXIS; idx++) { for (idx=0; idx<N_AXIS; idx++) {
// Initialize limit and step pin masks // Initialize limit and step pin masks
limit_pin[idx] = get_limit_pin_mask(idx); limit_pin[idx] = get_limit_pin_mask(idx);
@ -142,6 +143,13 @@ void limits_go_home(uint8_t cycle_mask)
#ifdef COREXY #ifdef COREXY
if ((idx==A_MOTOR)||(idx==B_MOTOR)) { step_pin[idx] = (get_step_pin_mask(X_AXIS)|get_step_pin_mask(Y_AXIS)); } if ((idx==A_MOTOR)||(idx==B_MOTOR)) { step_pin[idx] = (get_step_pin_mask(X_AXIS)|get_step_pin_mask(Y_AXIS)); }
#endif #endif
if (bit_istrue(cycle_mask,bit(idx))) {
// Set target based on max_travel setting. Ensure homing switches engaged with search scalar.
// NOTE: settings.max_travel[] is stored as a negative value.
max_travel = max(max_travel,(-HOMING_AXIS_SEARCH_SCALAR)*settings.max_travel[idx]);
}
} }
plan_reset(); // Reset planner buffer to zero planner current position and to clear previous motions. plan_reset(); // Reset planner buffer to zero planner current position and to clear previous motions.
@ -153,24 +161,21 @@ void limits_go_home(uint8_t cycle_mask)
else { invert_pin = !approach; } else { invert_pin = !approach; }
// Initialize and declare variables needed for homing routine. // Initialize and declare variables needed for homing routine.
uint8_t n_active_axis = 0;
uint8_t axislock = 0; uint8_t axislock = 0;
uint8_t n_active_axis = 0;
system_convert_array_steps_to_mpos(target,sys.position); system_convert_array_steps_to_mpos(target,sys.position);
for (idx=0; idx<N_AXIS; idx++) { for (idx=0; idx<N_AXIS; idx++) {
// Set target location for active axes and setup computation for homing rate. // Set target location for active axes and setup computation for homing rate.
if (bit_istrue(cycle_mask,bit(idx))) { if (bit_istrue(cycle_mask,bit(idx))) {
n_active_axis++; n_active_axis++;
// Set target based on max_travel setting. Ensure homing switches engaged with search scalar.
// NOTE: settings.max_travel[] is stored as a negative value.
max_travel = (-HOMING_AXIS_SEARCH_SCALAR)*settings.max_travel[idx];
if (bit_istrue(settings.homing_dir_mask,bit(idx))) { max_travel = -max_travel; } if (bit_istrue(settings.homing_dir_mask,bit(idx))) { max_travel = -max_travel; }
if (!approach) { max_travel = -max_travel; } if (!approach) { max_travel = -max_travel; }
target[idx] += max_travel; target[idx] += max_travel;
// Apply axislock to the step port pins active in this cycle.
axislock |= step_pin[idx];
} }
// Apply axislock to the step port pins active in this cycle.
if (bit_istrue(cycle_mask,bit(idx))) { axislock |= step_pin[idx]; }
} }
homing_rate *= sqrt(n_active_axis); // [sqrt(N_AXIS)] Adjust so individual axes all move at homing rate. homing_rate *= sqrt(n_active_axis); // [sqrt(N_AXIS)] Adjust so individual axes all move at homing rate.
sys.homing_axis_lock = axislock; sys.homing_axis_lock = axislock;
@ -197,9 +202,9 @@ void limits_go_home(uint8_t cycle_mask)
} }
sys.homing_axis_lock = axislock; sys.homing_axis_lock = axislock;
st_prep_buffer(); // Check and prep segment buffer. NOTE: Should take no longer than 200us. st_prep_buffer(); // Check and prep segment buffer. NOTE: Should take no longer than 200us.
// Check only for user reset. No time to run protocol_execute_realtime() in this loop.
// Exit routines: User abort homing and alarm upon safety door or no limit switch found. // Exit routines: User abort homing and alarm upon safety door or no limit switch found.
// No time to run protocol_execute_realtime() in this loop.
if (sys.rt_exec_state & (EXEC_SAFETY_DOOR | EXEC_RESET | EXEC_CYCLE_STOP)) { if (sys.rt_exec_state & (EXEC_SAFETY_DOOR | EXEC_RESET | EXEC_CYCLE_STOP)) {
if (sys.rt_exec_state & (EXEC_SAFETY_DOOR | EXEC_CYCLE_STOP)) { mc_reset(); } if (sys.rt_exec_state & (EXEC_SAFETY_DOOR | EXEC_CYCLE_STOP)) { mc_reset(); }
protocol_execute_realtime(); protocol_execute_realtime();

View File

@ -206,6 +206,10 @@ void protocol_execute_realtime()
// to do what is needed before resetting, like killing the incoming stream. The // to do what is needed before resetting, like killing the incoming stream. The
// same could be said about soft limits. While the position is not lost, the incoming // same could be said about soft limits. While the position is not lost, the incoming
// stream could be still engaged and cause a serious crash if it continues afterwards. // stream could be still engaged and cause a serious crash if it continues afterwards.
// if (sys.rt_exec_state & EXEC_STATUS_REPORT) {
// report_realtime_status();
// bit_false_atomic(sys.rt_exec_state,EXEC_STATUS_REPORT);
// }
} while (bit_isfalse(sys.rt_exec_state,EXEC_RESET)); } while (bit_isfalse(sys.rt_exec_state,EXEC_RESET));
} }
bit_false_atomic(sys.rt_exec_alarm,0xFF); // Clear all alarm flags bit_false_atomic(sys.rt_exec_alarm,0xFF); // Clear all alarm flags