From 30c0f79afda7380a9c0c507ba84c5e05b6103684 Mon Sep 17 00:00:00 2001 From: Sonny Jeon Date: Tue, 3 Jan 2017 10:10:35 -0700 Subject: [PATCH 1/2] Spindle enable pin with variable spindle option fix. - [fix] When USE_SPINDLE_DIR_AS_ENABLE_PIN is enabled in config.h, the enable pin was not being set when spindle speed is zero. This behavior should now be fixed. --- doc/log/commit_log_v1.1.txt | 14 ++++++++++++++ grbl/grbl.h | 2 +- grbl/spindle_control.c | 15 ++++----------- 3 files changed, 19 insertions(+), 12 deletions(-) diff --git a/doc/log/commit_log_v1.1.txt b/doc/log/commit_log_v1.1.txt index 48a1260..ebb2439 100644 --- a/doc/log/commit_log_v1.1.txt +++ b/doc/log/commit_log_v1.1.txt @@ -1,3 +1,17 @@ +---------------- +Date: 2016-12-19 +Author: Sonny Jeon +Subject: Fixed homing fail alarm handling. Re-integrated software debouncing. + +- [bug] Fixed a homing fail issue, where the alarm was not being set +right, not cleared correctly. It would report the wrong code and enter +an infinite alarm loop. This was due to how alarm codes were altered a +while back. Now updated and fixed to show the right codes. + +- [feature] Re-installed optional software debouncing for hard limit +switches. By request. + + ---------------- Date: 2016-12-18 Author: Sonny Jeon diff --git a/grbl/grbl.h b/grbl/grbl.h index d23fd80..3121204 100644 --- a/grbl/grbl.h +++ b/grbl/grbl.h @@ -23,7 +23,7 @@ // Grbl versioning system #define GRBL_VERSION "1.1e" -#define GRBL_VERSION_BUILD "20161219" +#define GRBL_VERSION_BUILD "20170103" // Define standard libraries used by Grbl. #include diff --git a/grbl/spindle_control.c b/grbl/spindle_control.c index 2b66800..159b77d 100644 --- a/grbl/spindle_control.c +++ b/grbl/spindle_control.c @@ -115,19 +115,11 @@ void spindle_stop() // and stepper ISR. Keep routine small and efficient. void spindle_set_speed(uint8_t pwm_value) { + SPINDLE_OCR_REGISTER = pwm_value; // Set PWM output level. if (pwm_value == SPINDLE_PWM_OFF_VALUE) { - spindle_stop(); + SPINDLE_TCCRA_REGISTER &= ~(1< Date: Sat, 14 Jan 2017 13:54:14 -0700 Subject: [PATCH 2/2] Tool number bug fix. Updated documentation. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - [fix] Tool numbers were not being tracked and reported correctly. Now shows tool number values in $G when programmed. - [fix] Added a max tool number value check to the g-code parser. - [doc] Added a new error code for invalid tool number. Updated CSV and interface documents. - [doc] Added a implementation note for buffer state in status reports. Don’t rely on this data for streaming. --- doc/csv/error_codes_en_US.csv | 71 ++++++++++++++++++----------------- doc/log/commit_log_v1.1.txt | 10 +++++ doc/markdown/interface.md | 3 ++ grbl/cpu_map.h | 2 +- grbl/gcode.c | 6 ++- grbl/grbl.h | 2 +- grbl/report.h | 1 + 7 files changed, 57 insertions(+), 38 deletions(-) diff --git a/doc/csv/error_codes_en_US.csv b/doc/csv/error_codes_en_US.csv index a94caf2..411e4c2 100644 --- a/doc/csv/error_codes_en_US.csv +++ b/doc/csv/error_codes_en_US.csv @@ -1,35 +1,36 @@ -"Error Code in v1.1+ ","Error Message in v1.0-"," Error Description" -"1","Expected command letter","G-code words consist of a letter and a value. Letter was not found." -"2","Bad number format","Missing the expected G-code word value or numeric value format is not valid." -"3","Invalid statement","Grbl '$' system command was not recognized or supported." -"4","Value < 0","Negative value received for an expected positive value." -"5","Setting disabled","Homing cycle failure. Homing is not enabled via settings." -"6","Value < 3 usec","Minimum step pulse time must be greater than 3usec." -"7","EEPROM read fail. Using defaults","An EEPROM read failed. Auto-restoring affected EEPROM to default values." -"8","Not idle","Grbl '$' command cannot be used unless Grbl is IDLE. Ensures smooth operation during a job." -"9","G-code lock","G-code commands are locked out during alarm or jog state." -"10","Homing not enabled","Soft limits cannot be enabled without homing also enabled." -"11","Line overflow","Max characters per line exceeded. Received command line was not executed." -"12","Step rate > 30kHz","Grbl '$' setting value cause the step rate to exceed the maximum supported." -"13","Check Door","Safety door detected as opened and door state initiated." -"14","Line length exceeded","Build info or startup line exceeded EEPROM line length limit. Line not stored." -"15","Travel exceeded","Jog target exceeds machine travel. Jog command has been ignored." -"16","Invalid jog command","Jog command has no '=' or contains prohibited g-code." -"20","Unsupported command","Unsupported or invalid g-code command found in block." -"21","Modal group violation","More than one g-code command from same modal group found in block." -"22","Undefined feed rate","Feed rate has not yet been set or is undefined." -"23","Invalid gcode ID:23","G-code command in block requires an integer value." -"24","Invalid gcode ID:24","More than one g-code command that requires axis words found in block." -"25","Invalid gcode ID:25","Repeated g-code word found in block." -"26","Invalid gcode ID:26","No axis words found in block for g-code command or current modal state which requires them." -"27","Invalid gcode ID:27","Line number value is invalid." -"28","Invalid gcode ID:28","G-code command is missing a required value word." -"29","Invalid gcode ID:29","G59.x work coordinate systems are not supported." -"30","Invalid gcode ID:30","G53 only allowed with G0 and G1 motion modes." -"31","Invalid gcode ID:31","Axis words found in block when no command or current modal state uses them." -"32","Invalid gcode ID:32","G2 and G3 arcs require at least one in-plane axis word." -"33","Invalid gcode ID:33","Motion command target is invalid." -"34","Invalid gcode ID:34","Arc radius value is invalid." -"35","Invalid gcode ID:35","G2 and G3 arcs require at least one in-plane offset word." -"36","Invalid gcode ID:36","Unused value words found in block." -"37","Invalid gcode ID:37","G43.1 dynamic tool length offset is not assigned to configured tool length axis." +Error Code in v1.1+ ,Error Message in v1.0-, Error Description +1,Expected command letter,G-code words consist of a letter and a value. Letter was not found. +2,Bad number format,Missing the expected G-code word value or numeric value format is not valid. +3,Invalid statement,Grbl '$' system command was not recognized or supported. +4,Value < 0,Negative value received for an expected positive value. +5,Setting disabled,Homing cycle failure. Homing is not enabled via settings. +6,Value < 3 usec,Minimum step pulse time must be greater than 3usec. +7,EEPROM read fail. Using defaults,An EEPROM read failed. Auto-restoring affected EEPROM to default values. +8,Not idle,Grbl '$' command cannot be used unless Grbl is IDLE. Ensures smooth operation during a job. +9,G-code lock,G-code commands are locked out during alarm or jog state. +10,Homing not enabled,Soft limits cannot be enabled without homing also enabled. +11,Line overflow,Max characters per line exceeded. Received command line was not executed. +12,Step rate > 30kHz,Grbl '$' setting value cause the step rate to exceed the maximum supported. +13,Check Door,Safety door detected as opened and door state initiated. +14,Line length exceeded,Build info or startup line exceeded EEPROM line length limit. Line not stored. +15,Travel exceeded,Jog target exceeds machine travel. Jog command has been ignored. +16,Invalid jog command,Jog command has no '=' or contains prohibited g-code. +20,Unsupported command,Unsupported or invalid g-code command found in block. +21,Modal group violation,More than one g-code command from same modal group found in block. +22,Undefined feed rate,Feed rate has not yet been set or is undefined. +23,Invalid gcode ID:23,G-code command in block requires an integer value. +24,Invalid gcode ID:24,More than one g-code command that requires axis words found in block. +25,Invalid gcode ID:25,Repeated g-code word found in block. +26,Invalid gcode ID:26,No axis words found in block for g-code command or current modal state which requires them. +27,Invalid gcode ID:27,Line number value is invalid. +28,Invalid gcode ID:28,G-code command is missing a required value word. +29,Invalid gcode ID:29,G59.x work coordinate systems are not supported. +30,Invalid gcode ID:30,G53 only allowed with G0 and G1 motion modes. +31,Invalid gcode ID:31,Axis words found in block when no command or current modal state uses them. +32,Invalid gcode ID:32,G2 and G3 arcs require at least one in-plane axis word. +33,Invalid gcode ID:33,Motion command target is invalid. +34,Invalid gcode ID:34,Arc radius value is invalid. +35,Invalid gcode ID:35,G2 and G3 arcs require at least one in-plane offset word. +36,Invalid gcode ID:36,Unused value words found in block. +37,Invalid gcode ID:37,G43.1 dynamic tool length offset is not assigned to configured tool length axis. +38,Invalid gcode ID:38,Tool number greater than max supported value. \ No newline at end of file diff --git a/doc/log/commit_log_v1.1.txt b/doc/log/commit_log_v1.1.txt index ebb2439..f1cdcfc 100644 --- a/doc/log/commit_log_v1.1.txt +++ b/doc/log/commit_log_v1.1.txt @@ -1,3 +1,13 @@ +---------------- +Date: 2017-01-03 +Author: Sonny Jeon +Subject: Spindle enable pin with variable spindle option fix. + +- [fix] When USE_SPINDLE_DIR_AS_ENABLE_PIN is enabled in config.h, the +enable pin was not being set when spindle speed is zero. This behavior +should now be fixed. + + ---------------- Date: 2016-12-19 Author: Sonny Jeon diff --git a/doc/markdown/interface.md b/doc/markdown/interface.md index 5c642d7..51402ec 100644 --- a/doc/markdown/interface.md +++ b/doc/markdown/interface.md @@ -174,6 +174,7 @@ Every G-code block sent to Grbl and Grbl `$` system command that is terminated w | **`35`** | A `G2` or `G3` arc, traced with the offset definition, is missing the `IJK` offset word in the selected plane to trace the arc.| | **`36`** | There are unused, leftover G-code words that aren't used by any command in the block.| | **`37`** | The `G43.1` dynamic tool length offset command cannot apply an offset to an axis other than its configured axis. The Grbl default axis is the Z-axis.| +| **`38`** | Tool number greater than max supported value.| ---------------------- @@ -567,6 +568,8 @@ Feedback messages provide non-critical information on what Grbl is doing, what i - The usage of this data is generally for debugging an interface, but is known to be used to control some GUI-specific tasks. While this is disabled by default, GUIs should expect this data field to appear, but they may ignore it, if desired. + - IMPORTANT: Do not use this buffer data to control streaming. During a stream, the reported buffer will often be out-dated and may be incorrect by the time it has been received by the GUI. Instead, please use the streaming protocols outlined. They use Grbl's responses as a direct way to accurately determine the buffer state. + - NOTE: The buffer state values changed from showing "in-use" blocks or bytes to "available". This change does not require the GUI knowing how many block/bytes Grbl has been compiled with. - This data field appears: diff --git a/grbl/cpu_map.h b/grbl/cpu_map.h index cc8d0d1..0e2b25e 100644 --- a/grbl/cpu_map.h +++ b/grbl/cpu_map.h @@ -98,7 +98,7 @@ #define COOLANT_FLOOD_BIT 3 // Uno Analog Pin 3 #define COOLANT_MIST_DDR DDRC #define COOLANT_MIST_PORT PORTC - #define COOLANT_MIST_BIT 4 // Uno Analog Pin 3 + #define COOLANT_MIST_BIT 4 // Uno Analog Pin 4 // Define user-control controls (cycle start, reset, feed hold) input pins. // NOTE: All CONTROLs pins must be on the same port and not on a port with other input pins (limits). diff --git a/grbl/gcode.c b/grbl/gcode.c index e17bd77..172bced 100644 --- a/grbl/gcode.c +++ b/grbl/gcode.c @@ -25,6 +25,7 @@ // arbitrary value, and some GUIs may require more. So we increased it based on a max safe // value when converting a float (7.2 digit precision)s to an integer. #define MAX_LINE_NUMBER 10000000 +#define MAX_TOOL_NUMBER 255 // Limited by max unsigned 8-bit value #define AXIS_COMMAND_NONE 0 #define AXIS_COMMAND_NON_MODAL 1 @@ -310,7 +311,10 @@ uint8_t gc_execute_line(char *line) // case 'Q': // Not supported case 'R': word_bit = WORD_R; gc_block.values.r = value; break; case 'S': word_bit = WORD_S; gc_block.values.s = value; break; - case 'T': word_bit = WORD_T; break; // gc.values.t = int_value; + case 'T': word_bit = WORD_T; + if (value > MAX_TOOL_NUMBER) { FAIL(STATUS_GCODE_MAX_VALUE_EXCEEDED); } + gc_block.values.t = int_value; + break; case 'X': word_bit = WORD_X; gc_block.values.xyz[X_AXIS] = value; axis_words |= (1< diff --git a/grbl/report.h b/grbl/report.h index cdeacfa..cb811d9 100644 --- a/grbl/report.h +++ b/grbl/report.h @@ -57,6 +57,7 @@ #define STATUS_GCODE_NO_OFFSETS_IN_PLANE 35 #define STATUS_GCODE_UNUSED_WORDS 36 #define STATUS_GCODE_G43_DYNAMIC_AXIS_ERROR 37 +#define STATUS_GCODE_MAX_VALUE_EXCEEDED 38 // Define Grbl alarm codes. Valid values (1-255). 0 is reserved. #define ALARM_HARD_LIMIT_ERROR EXEC_ALARM_HARD_LIMIT