- can be augmented in the future to enable for other leveling systems
Quite simple, but did not want to modify `G1` as the additional checking would slow it down.
Tested & working.
- fix broken `M421` due to less-than-careful optimization
- add HOME_AFTER_DEACTIVATE define to advanced config so not everyone has to rehome after steppers are deactivated
- misc. cleanups (remove unused label, unused variables)
- Add crc16 utility function
- Implement CRC16 for config store, remove old checksum, increment layout version
- Move UBL mesh store/load to MarlinSettings; increment UBL_VERSION
- Begin to lay out MAT structure, prototype functions, etc.
- Rename ubl.state.eeprom_storage_slot to .storage_slot
- Misc. optimization
- Cleanup/standardize/improve some messages
This is a work in progress!
* UBL_DELTA post merge cleanup:
fix fade_height, lost during some previous merge
fix float cx,cy which are not const
move repeated z_cxcy calc line inside loop
style fixes and comment fixes/alignment
* Update ubl_motion.cpp
remove unnecessary parentheses
* Update Conditionals_post.h
Change name of define to more accurate meaning:
UBL_GRANULAR_SEGMENTATION_FOR_CARTESIAN
which is not and should not be the default for cartesians with UBL.
Adding the capability to specify ahead of time how much of the validation pattern to print made it so by default G26 only did one circle and no connecting lines.
It is more natural for the unsophisticated user to just do the entire mesh (bed). We default the repetition count to GRID_MAX_POINTS+1 to insure we get every last one of them!
UltiPanel was enabled, but technically, it is a REPRAP_DISCOUNT_SMART_CONTROLLER
Either configuration works on the machine. But we want it 'Right'.
Setup the Proportional Font spacing so columns line up nicer on PronterFace and Repetier Host.
* M421 Mesh Point Offset and misc. UBL clean up
Allow M421 to accept an offset as well as absolute value for a specified
mesh point.
And misc. UBL clean up to reduce redundent code.
* Better error checking for M421
* Fix M421 Y index bug
I just noticed.... We've had a Y index bug for who knows how long?
- Allows for specifying number of points to print/validate, using 'R' code like with G29 P4 Rx
- Moved the code for Random to 'M' so we could be consistent with G29 P4
- G26 instructions indenting/cleanup
I think I forgot to Sync before I committed last time. Some UBL
changes did not stick.
Also, update the gMax configuaration.h file so other than unique numbers
and settings, it exactly matches the default configuration.h file.
* Restore LSF functionality
Some of the typo's persisted... Hopefully this gets them all fixed.
* Restore user's expectations of how G28 should behave
* Allow Nozzle size control with ornery host programs
- rename to PROBING_HEATERS_OFF
- move heater pausing functionality into thermalManager
- add variables, pause(), ispaused(), other functions
- add fan pausing functionality -> PROBING_FANS_OFF
- add probing_pause() wrapper
- move pausing into do_homing_move() and do_probe_move() to minimize quiet time and so other probe types can benefit
- example configs
- move platformio.ini out of source directory to be more consistent with 'normal' PlatformIO usage
- facilitates IDE integration
- add related .gitignores
When both lowering and recovery are performed using the same "prepare_move_to_destination()" the extruder recovery feedrate ends up being ignored and, instead, is only capped by either the maximum e-speed or the time it takes to perform the z-lowering.
Performing the two moves separately from each other ensures a correct recovery feedrate.
add BLTouch-related messages in english and (rusty) french;
add missing endstops.h in ultralcd.cpp;
fix misc. compiler warnings;
fix lsf_reset - ZERO macro can't handle a pointer as it would only memset the size of the pointer, not the size of the entire struct
Right now G26 doesn't send a notice to the host that it's running. It's
not until the heaters are at temperature that you know for sure if it's
running or not.
Added host temperature prints so that someone watching the host
interface will see the temperatures change during the warm up period.
Updates are sent every 5 seconds.
* Correct over optimization of pre-initialized variables
NEAR_ZERO() works most of the time... But it leaves corner cases
uncovered. We need to explicitly check if these variables are +/-
infinity.
* Correct over optimization of pre-initialized variables
This is what I did yesterday:
- basicly gave the tests more comprehensive names; put all the
declarations at the top; got rid of the magic negative C-value (renamed
to P + A, O, T)
- "cos(RADIANS(180 + 30 * axis)) * (1 + circles * 0.1 * ((zig_zag) ? 1 :
-1)) * delta_calibration_radius" compiles wrong is zig_zag statement is
without brackets
- DELTA_TOWER_ANGLE_TRIM reset to 3 values (the calcs use the 3th value
to normalize will not compile otherwise)
-Wrote 3 dummies to keep EEPROM lenght the same
-Reset the configs to the 'original' with autocal + menu disabled (but
can be enabled of course)
The Configuration.h file entries for BL-Touch have been updated to:
```cpp
//#define BLTOUCH
//#define BLTOUCH_DELAY 375 // (ms) Enable and increase if needed
//#define BLTOUCH_HEATERS_OFF // if defined the printer's heaters are
turned off during probe event
```
The electro-magnetic interference from the bed and nozzle are affecting
the BL-Touch repeatability for some users. This problem can be helped
by shutting down the heaters during the actual probe event and then
quickly turning them back on.
Because this code is messing with the heaters, it is written in a
paranoid manner. It only turns the heaters back on if everything is
EXACTLY as it expects things to be. The BL-Touch probe must have been
put into a deployed state less than 20 seconds prior, or the stow()
function will NOT turn the heaters on.
This code has been tested and works for both G28 and probing functions.
Giving a negative number of probe points disables the tower angle
correction calibration ('4point' instead of '7point' solution)
EEPROM version updated
These are my two 'Nice' machines. Both are good example machines. The
FolgerTech i3-2020 is probably the best value kit on the market right
now. And it has developed a 'Cult Following' of hobbiests. I'll always
have an up to date Configuration.h file set for it, so it may as well be
an example configuration.
And the gCreate gMax 1.5+ is the best printer I've ever seen that runs
Marlin. For sure, I'll always have up to the minute Configuration.h
files for this printer also. I've moved over to using the gMax as my
primary development machine for Marlin. So... Besides being a good
machine, it is a nice convienience for me to have this Configuration.h
file as an 'Example'.
Also... The memory corruption issue may be fixed. The GCC compiler
was inlining static functions and this caused the G29() stack frame to
become much larger than the AVR could handle.
* relocated ubl state to config. store:
* removed a number of ubl state variables and padding which were largely unused - saved 58 bytes of both SRAM and EEPROM;
* modified ubl sanity_check - no longer checks removed state variables that were otherwise unused, where checking didn't seem to accomplish anything, ultimately;
* removed pre_initialized state, saving 64 bytes of SRAM;
* removed automatic saving of UBL state after UBL activation/deactivation;
* consolidated multiple GRID_MAX_POINTS_X/Y to 'Global Leveling' section of EEPROM;
* minor update to G29 Sx notes/instructions;
* renamed mesh load and save parameter to 'slot' from 'm' for clarity;
- Making M665 compatible with repetier (see
http://reprap.org/wiki/G_code#M665:_Set_delta_configuration)
- M665 B also sets the radius for manual calibration menu
- Converting tower ajustment definitions to arrays - tower angle
corrections compatible with Esher 3D wizzard
- Only tower angles need to be adjustable with M665 and stored to EEPROM
- tower radius and diag rod can be adjusted in the FW only with #define
This data corruption problem is very difficult. Just changing the code
a little bit changes whether the problem even happens and what is
affected. I need these changes in the main branch so I can operate with
the extra debug code always available and turned on.
Everything is setup such that if M100 is turned off or DEBUG(ECHO) is
turned off, the code is not affected. M100 has been made a little bit
more inteligent so it can display the serial command buffers in a more
meaningful way (because the data corruption seems to often times end up
in that area).
Configuration_store.cpp - changed a couple of print statements so the
values were printed. The old method resulted in the formula being
printed.
ubl_G29
1) added support for R option to P4. Now probes all points unless R is
present and the number is greater than 0.
2) P2 - moved map print statement so it showed the point that was
currently being probed, The old location did this only for the first
point.
3) P4 - Moved the map print for the same reason.
ultralcd.cpp - changed "Mesh Editor :" to "Mesh Editor" because the LCD
draw routine puts a ":" in automatically so you end up with an extra ":"
using the old message.
- On `DELTA` the `M665 H` option supplants `M206`
- On `DELTA` `NO_WORKSPACE_OFFSETS` only reverts `G92` behavior
- Spawn 4 conditionals based on `NO_WORKSPACE_OFFSETS`
- Optimize coordinate space conversion for `DELTA` workspace
- To keep EEPROM version, retain `home_offset[XYZ]`, just ignore XY
===============================================
make changes requested by reviewers
===============================================
add M43 test to Travis, fix EOL, remove trailing spaces
1. The CORExx printers were checking more endstop axis than needed.
2. Removed all the CORE_xx_NOT logic. The motor_direction(xx) routine
always returns the correct data so it is not needed. It was actually
cause the wrong direction to be checked in some cases.
3. Made the logic/defines for X, Y & Z axis all the same. The old logic
checked inappropriate configurations for Y and didn't check all the
correct configurations on Z.
4. Added a check for zero steps before the X, Y & Z axis. Previously
would check the they axis even if there were no movement.
All the memory accesses need to be unsigned char in order to avoid
false errors being detected. Two new features are available for
developers to call into the M100 functionality to look for data
corruption.
I use the movement options via LCD quite often. Especially to get the nozzle out of the way. I see no reason, why the 10mm option is disabled for the Z-Axis, this is why i always delete this line when i compile a new version.
If this is unwanted, please just close this PR
M100 had numerious changes and quit working. Part of the problem is
the overloading of the SERIAL_PROTOCOL functions. Also, some of the
address arithmatic was changed to use char *ptr and passing ptr into the
SERIAL_PROTOCOL functions caused them to try to print a string instead
of a number. M100 is working again. Let's keep it that way!
M100 has been expanded to now have a function int
free_memory_is_corrupted() that can be called from other code to see if
the free space is still contiguous. It may make sense to add a flag to
control its verbose nature but right now, the extra chit chat is very
helpful to know int free_memory_is_corrupted() is doing the right thing
and what it found at various points when it was called. A 'Show &
Tell' is coming up with int free_memory_is_corrupted().
Firmware was forgetting the z_fade_height in Planner, set by M420 Z<f>,
after each reset or loading settings from EEPROM. Added the float
z_fade_height to EEPROM-Storage, now remembers the value.
Pretty much... The code is in place. Still more work to do. But it
has a lot of hooks and variables in other code, so commit and merge
before I pick up a million 'Conflicts'.
# This is the 1st commit message:
MCP4728 consistency & fix ultralcd.cpp
The MCP4728 DAC controls the stepper motor current strenth on the
PRINTRBOARD Rev F and RIGIDBOARD V2 boards.
PR #5792 on 9 FEB 2017 implemented default drive percentages but only on
the RIGIDBOARD V2.
This change moves the default settings to Configuration_adv.h.
Also, ultralcd.cpp won't compile because of a type def conflict.
Changed it to match the one in stepper_dac.cpp
===========================================================
reword stepper curent section for clarity
===========================================================
change name & improve comments
===========================================================
changed name from A4JP to SCOOVO_X9H per PR #6139
# This is the commit message #2:
fix typo
==============================================
clarified BLTouch calculation & changed comment delimitters/flags
I found it hard to pickout the various sections in this area so I
changed most comments from // style to /** ... */
Made the BLTouch calculation simpler and clarified the units of measure
for the result.
============================================
add changes to example configurations
============================================
add TinyBoy2 to this PR & add BLTouch Delay
I've just uploaded a major change to pinsDebug.
The big change was creating an array in FLASH that contained every
active pin definition. That reduced the RAM memory usage considerably
but increased the FLASH usage.
Creating the array requires going through the pin list twice. Rather
than having two copies of it in the code I moved the list out to another
file (pinsDebug_list.h) and then just did two #includes.
From the user’s view they’ll see the following changes:
1. Now reports all the names assigned to a pin
2. The port is now reported in addition to the pin number.
3. When PWM0A & PWM1C share a pin, both PWMs are reported
4. More PWM/Timer info is reported
One new item that may cause some concern is the usage of the LINE
predefined preprocessor macro. It may not be available if the Arduino
IDE goes to a different compiler.
Includes support for 1284 & 1286 families.
Memory usage changes when enabling PINS_DEBUGGING:
ATmega2560
FLASH
. without 52576
. with new 64592
. with old 62826
. new-out 12016
. old-out 10250
. new-old 1766
.
RAM
. without 2807
. with new 2875
. with old 3545
. new-out 68
. old-out 738
. new-old -670
==================================================================
minor changes - mostly formatting
1) added newline to end of teensyduino file
2) changed flag name from TEENSYDUINO to TEENSYDUINO_IDE. Got warnings
about redefining TEENSYDUINO
3) removed some trailing spaces
reduce PROGMEM size & update pin list
Reduced PROGMEM usage by
1) converting often used macro to a function
2) moved as much as possible into the function
This required creating two arrays of address pointers for the PWM
registers.
==================================================================
update with new M3, M4, M5 pin names
==================================================================
report I/O status for unused/unknown pins
The offset for Z_DUAL_ENDSTOP (z_endstop_adj) is already in Marlin.
This PR just makes it a configuration item.
z_endstop_adj is initialized in two places so both had to be modified.
I've just uploaded a major change to pinsDebug.
The big change was creating an array in FLASH that contained every
active pin definition. That reduced the RAM memory usage considerably
but increased the FLASH usage.
Creating the array requires going through the pin list twice. Rather
than having two copies of it in the code I moved the list out to another
file (pinsDebug_list.h) and then just did two #includes.
From the user’s view they’ll see the following changes:
1. Now reports all the names assigned to a pin
2. The port is now reported in addition to the pin number.
3. When PWM0A & PWM1C share a pin, both PWMs are reported
4. More PWM/Timer info is reported
One new item that may cause some concern is the usage of the LINE
predefined preprocessor macro. It may not be available if the Arduino
IDE goes to a different compiler.
Includes support for 1284 & 1286 families.
Memory usage changes when enabling PINS_DEBUGGING:
ATmega2560
FLASH
. without 52576
. with new 64592
. with old 62826
. new-out 12016
. old-out 10250
. new-old 1766
.
RAM
. without 2807
. with new 2875
. with old 3545
. new-out 68
. old-out 738
. new-old -670
==================================================================
minor changes - mostly formatting
1) added newline to end of teensyduino file
2) changed flag name from TEENSYDUINO to TEENSYDUINO_IDE. Got warnings
about redefining TEENSYDUINO
3) removed some trailing spaces
reduce PROGMEM size & update pin list
Reduced PROGMEM usage by
1) converting often used macro to a function
2) moved as much as possible into the function
This required creating two arrays of address pointers for the PWM
registers.
==================================================================
update with new M3, M4, M5 pin names
==================================================================
report I/O status for unused/unknown pins
The fix in #6251 for bilinear Z offset was flawed and broke the Z parameter of G29 for bilinear levelling. This is reverted and a different fix is used for the double-addition of the Z-probe offset to the bilinear correction grid.