[new] Added a default configuration for the parking override control
upon a reset or power-up. By default, parking is enabled, but this may
be disabled via a config.h option.
[fix] Parking override control should be checking if the command word
is passed, rather than the value.
[ver] v1.1f update due to tweaks to interface from new parking override
control.
[new] Parking motion override control via new `M56 P0` and `M56 P1`
command, which disables and enables the parking motion, respectively.
Requires ENABLE_PARKING_OVERRIDE_CONTROL and PARKING_ENABLE enabled in
config.h. Primarily for OEMs.
[new] `M56` appears in the $G report when enabled.
[new] Five new build info identification letters. Some were missing and
a couple are new. Updated the CSV and documentation to reflect these
new items.
[new] Spindle enable pin configuration option to alter its behavior
based on how certain lasers work. By default, Grbl treats the enable
pin separately and leaves it on when S is 0. The new option turns the
enable pin on and off with S>0 and S=0. This only is in effect when a
user enables the USE_SPINDLE_DIR_AS_ENABLE_PIN option.
[fix] M4 is now allowed to work when USE_SPINDLE_DIR_AS_ENABLE_PIN is
enabled. Previously this was blocked and was problematic for laser
folks using M4.
[fix] Properly declared system variables as extern. Not sure how that
went unnoticed or why it worked up until now but it has.
[fix] EXTREMELY RARE. When AMASS is intentionally disabled and sent a
motion command that is _one step_ in length, Grbl would not actuate the
step due to numerical round-off. Applied a fix to prevent the round-off
issue.
[fix] Added a compile-time check for AMASS settings to make sure that
the numerical round-off issue doesn’t effect it. This would only happen
if someone set AMASS max levels to zero. It does not effect AMASS with
its current defaults.
[fix] Wrapped the mc_parking_motion() function in an ifdef for porting
purposes.
[fix] Fixed an issue when in inverse time mode and G0’s would require a
F word. This was not correct.
[fix] Added a note in the defaults.h file that MAX_TRAVEL values must
be positive. Some users were setting this negative and it was causing
issues.
- [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.
- [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.
- [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.
- [fix] Spindle PWM minimum value had some typos. Fixed the macros to
compile correctly. Only effects users that enable SPINDLE_MINIMUM_PWM.
The name changed to SPINDLE_PWM_MIN_VALUE for consistency sake.
- Updated the laser documentation.
- [config] Permanently removed classic GUI interface support. This
unintentionally created a problem where some users/GUI devs used this
compatibility mode and did not update to the new interface. So, there
were two interfaces in use, rather than just one like it was intended.
This removal should help everyone by forcing all GUIs to update and
updated GUI not having to support yet another interface.
- Fixed typo with line number support in jog mode.
- [laser] Tested a working version and pushed the wrong one for the
last! 20161203 was pausing upon every spindle speed change. That’s not
right. Fixed so nearly all motions are passed through and does not stop.
- Minimum spindle speed override lower from 50% to 10%. Lasers could
use the lower speeds.
- Fixed a very minor bug related to G80 error checking. Allowed no
error with non-modal motions with axis words. Not correct and fixed.
- Fixed a compile error when disabling VARIABLE_SPINDLE
- [doc] Updated some obsolete documentation.
- [doc] Started a “Laser Mode” document that summarizes how Grbl’s new
laser mode works.
- Increment to v1.1e due to new laser features.
- After several discussions with some prominent laser people, a few
tweaks to the new laser mode has been installed.
- LASER: M3 behaves in a constant power mode.
- LASER: M4 behaves in a dynamic power mode, where the laser power is
automatically adjusted based on how fast Grbl is moving relative to the
programmed feed rate. This is the same as the CONSTANT_POWER_PER_RATE
config.h option in the last version. NOTE: When not in motion in M4,
Grbl automatically turns off the laser. Again, it only operates while
moving!
- LASER: Only G1, G2, and G3 motion modes will turn on the laser. So,
this means that G0, G80 motion modes will always keep the laser
disabled. No matter if M3/M4 are active!
- LASER: A spindle stop override is automatically invoked when a laser
is put in a feed hold. This behavior may be disabled by a config.h
option.
- Lots of little tweaks to the g-code parser to help streamline it a
bit. It should no effect how it operates. Generally just added a parser
flag to track and execute certain scenarios a little more clearly.
- Jog motions now allow line numbers to be passed to it and will be
displayed in the status reports.
- Fixed a CoreXY homing bug.
- Fixed an issue when $13 is changed, WCO isn’t sent immediately.
- Altered how spindle PWM is set in the stepper ISR. Updated on a step
segment basis now. May need to change this back if there are any
oddities from doing this.
- Updated some documentation. Clarified why M0 no longer showing up in
$G and why a `1.` floating point values are shown with no decimals,
like so `1`.
- The PWM calculation was a little bit off and has been corrected.
- Edited the unused settings strings to be smaller and just show what
the settings are, rather than include units. May include this in the
master build, if it fits.
- The minimum spindle PWM define in config.h needed to be update for
cpu map compatibilty.
- G-code parser refactoring in the last commit wasn’t tested. Found and
fixed issues with G28.1/30.1 and G38.x probe commands. They were not
being accepted due to a borked mantissa check.
- NOTE: This commit has largely been untested.
- Constant laser power per rate mode has been improved. Altered its
implementation to be more responsive and accurate.
- Based on LaserWeb dev feedback, only G1, G2, and G3 moves operate
with constant laser power mode. Meaning that G0, G38.x, and $J jogging
motions operate without it and will keep a constant power output. This
was specifically requested as a way to focus the laser by keeping the
laser on when not moving. Operationally, this shouldn’t alter how the
laser mode operates.
- Re-factored parts of the g-code parser and g-code state reports to
save a few hundred bytes of flash. What was done makes the code a bit
more unreadable (bad), but the flash space was in dire need. So, I’m
willing to live with it for now.
- Fixed a problem with $G g-code state reports. Showed `M0` program
pause during a run state. Now fixed to show nothing during a run state.
Also, `M30` program end was shown as `M2`. This was also corrected.
- Improved spindle stop override responsiveness by removing the
enforced spindle restoring delay. It’s not needed for a feature that is
user controlled.
- Fixed a bug with G2/3 arcs in inverse time mode.
- Updated the interface.md document to make it more clear how WPos: or
MPos: can be calculated from WCO:. Some GUI devs have failed to catch
this in the documentation.
- Spindle speed overrides now update immediately if they are changed
while in a HOLD state. Previously, they would update after exiting the
HOLD, which isn’t correct.
- New experimental dynamic laser power mode that adjusts laser power
based on current machine speed. Enabled by uncommenting
LASER_CONSTANT_POWER_PER_RATE in config.h
- It assumes the programmed rate is the intended power/rate for the
motion.
- Feed rate overrides (FRO) do not effect the power/rate. Meaning
that spindle PWM will automatically lower with lower FRO and increase
with higher FRO to keep it the same.
- Spindle speed overrides (SSO) will directly increase and decrease
the power/rate. So 150% SSO will increase the PWM output by 150% for
the same speed.
- The combination of FRO and SSO behaviors should allow for subtle
and highly flexible tuning of how the laser cutter is operating in
real-time and during the job.
- Re-factored planner block rapid rate handling for the dynamic laser
power feature. Should have had no effect on how Grbl operates.
- Some laser controllers were reported to need a very high PWM
frequency. Added a line to enable this in cpu_map.h, if needed.
- Cleaned up some of the parking code. Mostly just editing the comments.
- Moved the accessory state resetting after the initial parking
retract. Should ensure the accessory state is properly handled upon an
aborted parking restore. Not certain if this was a problem before
though. Just to be sure.
- For repeatability reasons, all G38.x probe cycles ignore feed rate
overrides and move at their programmed speed.
- The mandate can be removed with a new config.h option.
- Updated the documentation to reflect the change.
- Yikes. Totally borked the last parking “fix”. Testing shows that all
accessories are now properly handled when retracting and restoring. It
was caused by not accounting for the planner re-factoring correctly in
the parking code.
- Altered the report counters to be count down, rather than count up.
Simplified some of the logic.
- Fixed an issue with parking restore. The spindle state would disable
then reenable.
- Clarified some of the config.h descriptions.
- Moved the compile-time checks from config.h to grbl.h. They don’t
belong in the config.h file.
- Refactored the initialization of the system variables in main.c.
System position and probe position were undefined when power cycled,
but were zero anyway. Added clear vector code to make it explicit.
- When spindle speed is close to the minimum rpm, the PWM value would
be zero or lower than allowed. The computation error was caused by
setting the minimum PWM value to zero, when it should have been 1.
- Added a compiler check for minimum PWM to be greater than zero.
- Moved some of the spindle PWM macros to a more appropriate place in
the cpu_map.h.
- Addressed an issue with backward compatibility with Grbl v0.9-style
GUIs.
- It still may not work due to new data and states coming back from
Grbl v1.1. Regardless, DO NOT TRY TO USE THE COMPATIBILITY MODE UNTIL
THERE IS A REALLY GOOD REASON TO.
- v0.9 GUI compatibility mode will be removed in future versions.
You’ve been warned. It’s highly recommended for GUIs to update to the
new v1.1 interface.
- Compability mode will only fit on an Arduino Uno due to size
increases.
- Removed the REPORT_GUI_MODE compile option since it’s part of the
v1.1 interface standard.
- Updated the documentation to better describe the compatibility mode
build option.
- Increment to v1.1d due to interface tweaks.
- Based on GUI dev feedback, the toggle overrides report was removed
and replace with showing “accessory state”. This shows a character if a
particular accessory is enabled, like the spindle or flood coolant.
These can be directly altered by the toggle overrides, so when they
execute, a GUI will be able to observe the state altering as feedback.
- Altered the real-time feed rate to show real-time spindle speed as
well. It was an over-sight on my part. It’s needed because it’s hard to
know what the current spindle speed is when overrides are altering it.
Especially during something like a laser cutting job when its important
to know how spindle speed overrides are effecting things.
- Real-time spindle speed is not shown if VARIABLE_SPINDLE is disabled.
The old real-time feed rate data field will show instead.
- Compile-time option data is now included in another message
immediately following the build info version string, starting with
`[OPT:`. A character code follows the data type name with each
indicating a particular option enabled or disabled. This will help
immensely with debugging Grbl as well as help GUIs know exactly how
Grbl was compiled.
- These interface changes are detailed in the updated documentation.
- Reduced the default planner buffer size from 17 to 16. Needed to free
up some memory…
- For increasing the serial TX buffer size from 90 to 104 bytes. The
addition of real-time spindle speeds and accessory enable data required
a bigger buffer. This is to ensure Grbl is performing at optimal levels.
- Refactored parts of the spindle and coolant control code to make it
more consistent to each other and how it was called. It was a little
messy. The changes made it easier to track what each function call was
doing based on what was calling it.
- Created a couple of new get_state functions for the spindle and
coolant. These are called by the accessory state report to look
directly at the pin state, rather than track how it was set. This
guarantees that the state is reported correctly.
- Updated the g-code parser, parking motion, sleep mode, and spindle
stop calls to refactored spindle and coolant code.
- Added a compile-time option to enable homing individual axes, rather
than having only the main homing cycle. The actual use case for this is
pretty rare. It’s not recommended you enable this, unless you have a
specific application for it. Otherwise, just alter the homing cycle
itself.
- Refactored the printFloat() function to not show a decimal point if
there are no trailing values after it. For example, `1.` now shows `1`.
- Fixed an issue regarding spindle speed overrides no being applied to
blocks without motions.
- Removed the toggle_ovr_mask system variable and replaced with
spindle_stop_ovr system variable. Coolant toggles don’t need to be
tracked.
- Updated README
- Added v1.1 settings documentation to the markdown folder.
- Fixed a very minor bug in the step direction handling upon wakeup.
The direction mask would temporarily go back to default mask for about
a millisecond when moving in the same non-default direction. It did not
effect Grbl behavior before, but fixed for consistency.
- Spindle speed updating wasn’t working in the g-code parser due to
some borked up logic on my part. Fixed it and should be operating as
intended for both normal and laser spindle modes.
- Elaborated a little more on the new sleep mode in the documentation.
- New $SLP sleep mode that will disable spindle, coolant, and stepper
enable pins. Allows users to disable their steppers without having to
alter their settings. A reset is required to exit and re-initializes in
alarm state.
- Laser mode wasn’t updating the spindle PWM correctly (effected
spindle speed overrides) and not checking for modal states either.
Fixed both issues.
- While in laser mode, parking motions are ignored, since the power off
delay with the retract motion would burn the material. It will just
turn off and not move. A restore immediately powers up and resumes. No
delays.
- Changing rpm max and min settings did not update the spindle PWM
calculations. Now fixed.
- Increased default planner buffer from 16 to 17 block. It seems to be
stable, but need to monitor this carefully.
- Removed software debounce routine for limit pins. Obsolete.
- Fixed a couple parking motion bugs. One related to restoring
incorrectly and the other the parking rate wasn’t compatible with the
planner structs.
- Fixed a bug caused by refactoring the critical alarms in a recent
push. Soft limits weren’t invoking a critical alarm.
- Updated the documentation with the new sleep feature and added some
more details to the change summary.
- Added a new jog cancel real-time command. Rather than depending on a
feed hold to cancel a jogging motion, this realtime command can be used
instead. The main advantage is if a feed hold is used, you can
accidentally hold the machine right when Grbl returns to IDLE after
completing a jog. And the GUI doesn’t have to worry about tracking this
either.
- Fixed a typo in the g-code parser edits from the last push. Was
causing the G10 set coordinate system command to not work correctly.
- Updated the documentation with the jog cancel command.
- Freed up another 60 bytes of flash and 12-24 bytes of stack RAM by
using the pre-allocated IJK arc offset vector that is guaranteed to be
not in use. Only G10 and G28/30 require fetching from EEPROM and
retaining extra data. Both commands use axis words, which rules out
G2/3 arcs using IJK offsets existing in same block. Not ideal, but
every byte helps.
- Edited README.
- Increment to v1.1b due to status report tweak.
- Tweaked the buffer state status reports to show bytes and blocks
available, rather than in use. This does not require knowing the buffer
sizes beforehand. It’s implicit.
- Also, since buffer states are not used by most devs (after
inquiries), it is no longer enabled by default and a status mask option
was added for this.
- Fixed some typos and updated for the report tweak in the
documentation.
- Wrote a joystick implementation concept in the jogging markdown
document. Outlines how to get a low-latency feel to a joystick (and
other input devices).
- Removed XON/XOFF support. It’s not used by anyone because of its
inherent problems. Remains in older versions for reference.
- Added a compile option on how to handle the probe position during a
check mode.
- Fixed a jogging bug. If G93 is the modal state before a jogging
motion, the feed rate did not get calculated correctly. Fixed the issue.
- Refactored some code to save another 160+ bytes. Included an improved
float vector comparison macro and reducing a few large and repetitive
function calls.
- Fixed a probing bug (existing in v0.9 too) where the target positions
were not set correct and error handling was improper.
- The newest Arduino IDE 1.6.12 has recently updated to avr-gcc v4.9.2.
Unfortunately, it produces a compiled size almost 0.7KB to 1KB larger
than prior versions! This can easily cause the base build to exceed the
Arduino Duemilanove/Nano flash limit of 30.5KB. The Arduino Uno seems
to be ok still with its 31.5KB flash limit.
- Makefile `-flto` compile flag added to cut down on the horrible flash
size when using the new avr-gcc. (Edit Makefile and remove comment on
COMPILE definition). This brings it in-line with what the IDE produces.
- Functionalized repetitive tasks in report.c to try to reduce overall
flash size. Successfully cut down about 160bytes.
- Removed printFloat_SettingValue() and printFloat_RPMValue()
functions. These aren’t required and can be replaced with a direct call
to printFloat() because they don’t require a unit conversion check.
- Reverted back the serial RX count function to how it was. The
variable type was unsigned and cause an integer underflow whenever the
calculation produced a negative number. The old way was the correct way.
- Lots of minor edits to the code CSVs and markdown documents.
- Expanded on explaining feedback messages and startup line execution
feedback.
- Created a new settings codes CSV to help GUIs import the values and
meanings.
- Incremented to v1.1a, rather than keep 1.0e. This is because there
are existing v1.0 installations. Don’t want to confuse people further.
- Certain version of the Arduino IDE did not like the `inline` in the
function header. Removed from spindle_control files to fix the problem.
- Tweaked the communication protocol slightly. Added message type
indicators for all `[]`bracketed feedback messages. It’s been
problematic for GUI dev to try to determine the context of a message
and how it should be handled. These indictors should help tremendously
to remove context all together.
- Also altered how `$N` startup lines are presented when executed. They
now start with an open chevron ‘>’ followed by the line and an ‘:ok’ to
indicate it executed. The ‘ok’ is on the same line intentionally so it
doesn’t mess up a streaming protocol counter.
- Managed to save a 100+KB from refactoring parts of report.c. (Thanks
Vasilis!) Freed up room to alter the protocol a little.
- Wrote a markdown document on interface messaging to make it clear how
it’s intended to work. See interface.md in /doc/markdown
- Started to pull in some Wiki pages from the old grbl site and
beginning to update them for v1.1.
- Created new commit log for v1.1.
- Mega2560 support has been moved to the Grbl-Mega
[project](http://github.com/gnea/grbl-Mega/) to clean up the code and
make future developments easier with increased flash and RAM. All new
developments between the 328p and Mega2560 will be synced when it makes
sense to.
- OEM single file compile configuration option. Before OEMs needed to
alter three files. Provided a way to just alter the config.h file to
contain everything for a particular Grbl build. See config.h for more
details.
- Removed defaults and cpu_map directories and reverted back to
defaults.h and cpu_map.h to contain all definitions. This should help
reduce some headaches and the previous implementation inadvertently
created. Also, it makes the single file config.h possible.
- Moved (and tweaked) the invert control pin mask define and placed
into config.h, rather than in the cpu_map.h file. Makes more sense
there.
- Soft limit errors were stuck in a feed hold without notifying the
user why it was in a hold. When resumed, the soft limit error would
kick in. Issue should be fixed to behave as intended to automatically
hold and issue a soft limit alarm once the machine has come to a stop.
- Soft limit errors were stuck in a feed hold without notifying the
user why it was in a hold. When resumed, the soft limit error would
kick in. Issue should be fixed to behave as intended. To automatically
hold and issue a soft limit alarm once the machine has come to a stop.
- Planner was under-estimating maximum speeds through straight
junctions in certain cases. The calculations have been updated to be
more accurate.
- Strange sizeof() bug in the most recent releases. Manifested as an
alarm upon a power up even when homing was disabled. Fixed by declaring
sizeof() with struct types, rather than variable names, even though
they were validated to give the same value.
- Spindle speed zero should disable the spindle. Now fixed.
- New configuration option for inverting certain limit pins. Handy for
mixed NO and NC switch machines. See config.h for details.
- New pin state realtime reporting feature. Instead of `Lim:000` for
limit state reports, the new feature shows `Pin:000|0|0000`, or
something similar. The `|` delimited fields indicate xyz limits, probe,
and control pin states, where 0 is always not triggered, and 1 is
triggered. Invert masks ARE accounted for.
Each field may be enabled or disabled via the `$10` status report
setting. The probe and control pin flags are bits 5 and 6, respectively.
- Remove the now deprecated `REPORT_CONTROL_PIN_STATE` option in
config.h
- The old limit pin reports `Lim:000` may be re-enabled by commenting
out `REPORT_ALL_PIN_STATES` in config.h.
- Incremented the version letter (v1.0c) to indicate the change in
reporting style.
- Replaced all bit_true_atomic and bit_false_atomic macros with
function calls. This saved a couple hundred bytes of flash.
- G38.x was not printing correctly in the $G g-code state reports. Now
fixed.
- When investigating the above issue, it was noticed that G38.x
wouldn’t show at all, but instead a G0 would be printed. This was
unlike the v0.9j master build. It turned out volatile variables do not
like to be defined inside a C struct. These are undefined on how to be
handled. Once pulled out, all weird issues went away.
- Also changed two ‘sizeof()’ statements in the mc_probe() and
probe_state_monitor() functions to be more robust later on.
- Updated the commit logs to individual files for each minor release.
Forgot to update the generating script to account for this.
- G38.x was not printing correctly in the $G g-code state reports. Now
fixed.
- Potential bug regarding volatile variables inside a struct. It has
never been a problem in v0.9, but ran into this during v1.0
development. Just to be safe, the fixes are applied here.
- Updated pre-built firmwares with these two bug fixes.
- G28 and G30’s behavior has been updated from the old NIST g-code
standard to LinuxCNC’s. Previously when an intermediate motion was
programmed, the NIST standard would move all axes to the final G28/30
stored coordinates. LinuxCNC states it only moves the axes specified in
the command.
For example, suppose G28’s stored position is (x,y,z) = (1,2,3) for
simplicity, and we want to do an automated z-axis tool retraction and
then park at the x,y location. `G28 G91 Z5` will first move the Z axis
5mm(or inches) up, then move Z to position 3 in machine coordinates.
Next, the command `G28 G91 X0 Y0` would skip the intermediate move
since distance is zero, but then move only the x and y axes to machine
coordinates 1 and 2, respectively. The z-axis wouldn’t move in this
case, since it wasn’t specified.
This change is intended to make Grbl more LinuxCNC compatible while
making commands, like the shown tool retraction, much easier to
implement.
- Version bump requested by OEMs to easily determine whether the
firmware supports the new EEPROM reset feature. Other than that, no
significant changes.
- Tweaked the previous EEPROM restore implementation and added new
functionality.
- `$RST=$` restores the `$$` grbl settings back to firmware defaults,
which are set when compiled.
- `$RST=#` restores the `$#` parameters in EEPROM. At times it’s useful
to clear these and start over, rather than manually writing each entry.
-`$RST=*` wipe all of the data in EEPROM that Grbl uses and restores
them to defaults. This includes `$$` settings, `$#` parameters, `$N`
startup lines, and `$i` build info string.
NOTE: This doesn’t write zeros throughout the EEPROM. It only writes
where Grbl looks for data. For a complete wipe, please use the Arduino
IDE’s EEPROM clear example.
- Refactored the restore and wipe functions in settings.c to
accommodate the new commands.
- New restore setting defaults command. Only wipes ‘$$’ setting in
EEPROM and reloads them based on the defaults used when Grbl was
compiled. Used with a `$RST` command
NOTE: `$RST` is intentionally not listed in the Grbl ‘$’ help message.