Don't return early on a command error - continue to process remaining
commands and pop commands from the queue.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Use the generic spi send/receive code on Linux. Update the replicape
code to use the updated command format.
Also, update the replicape code to turn off the stepper motors on a
shutdown event.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Improve the SPI message transmit system. Add support for bus speed
and bus mode. Add support for sending SPI messages on shutdown.
Signed-off-by: Petri Honkala <cruwaller@gmail.com>
Signed-off-by: Douglas Hammond <wizhippo@gmail.com>
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
In order to properly delay BACKGROUND_PRIORITY_CLOCK messages, they
must be 5ms beyond the minimum defined by MIN_REQTIME_DELTA. So, add
both MIN_REQTIME_DELTA and MIN_BACKGROUND_DELTA to the timing of these
messages.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
If the clock querying messages occur at a similar frequency to other
events on the micro-controller or host, then it's possible for the
load created by those other events to skew the clock synchronization.
In particular, the 500ms lcd screen update could resonate with the 1
second clock query. Use an unusual clock querying frequency to avoid
this issue.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Move the C code out of the main klippy/ directory and into its own
directory. This reduces the clutter in the main klippy directory.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Add a set_shutdown_speed() method so that the heater_fan code does not
need to peek into the fan object's internal members.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
The M206 command is confusing (it uses negative offsets) and isn't
very flexible. Add a new SET_GCODE_OFFSET command to make it easier
to add virtual offsets to gcode commands.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
The M206 command is confusing as positive values in that command
result in negative offsets to future g-code commands. Perform the
parameter negation in the M206 command instead of storing it that way
internally.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
When using an automatic probe, limit the Z lift speed to be no greater
than the Z probing speed. This can reduce Z jerks during probing.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
If the fan's max power is limited by the config, then scale speed
requests between 0 and max_power. This makes more sense for typical
g-code fan speeds.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
If max_accel_to_decel is greater than max_accel in the config, then
just internally limit max_accel_to_decel to max_accel. This makes it
easier to completely disable the max_accel_to_decel feature (as it can
just be set to a high value in the config).
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Add a fully functional STM32F1 port, currently mostly targeting STM32F103
microcontrollers. This requires an 8 MHz XTAL. The maximum possible step rate
is around 282K steps per second.
This uses stm32flash to burn the firmware. The bootloader needs to be started
by setting BOOT0 to 1 and resetting the MCU. There is no automatic bootloader,
unlike on Arduino.
Signed-off-by: Grigori Goronzy <greg@kinoho.net>
Instead of supporting a single linear range for the temperature
lookup, allow multiple ranges to be defined. This makes the lookup
more accurate when a full lookup table is available.
Update the AD595 sensor to use the full table defined in its spec.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
If the c3 coefficient is negative it can cause the adc calculations to
fail. The c3 shouldn't be negative in practice, so fallback to a
simple beta calculation in that case.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Move the Thermistor code to a new thermistor.py module. Move the
Linear code to a new adc_temperature.py module. This simplifies the
heater.py code.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
The Thermistor (and Linear) class should handle all the details of
reading the ADC values and converting them to temperatures. So, move
that logic out of the Heater() class.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Add a PrinterHeaters class that can stores references to available
temperature sensors and stores references to instantiated heaters.
Add a extras/heater_bed.py file and delay instantiation of the
heater_bed object. This allows the heater.py module to be imported
earlier during the setup phase, and allows the PrinterHeaters class to
be available for registering sensors and heaters.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Most callers did a lookup of the pins module via
printer.lookup_object("pins"). Use that as the standard method and
remove these less frequently used methods.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
The existing junction algorithm limits the speed between two moves by
determining the maximum speed an arc between those two moves would
have if the cetripetal acceleration of that arc did not exceed the
printer's maximum acceleration.
However, should the slicer send an actual arc to the printer, then the
existing junction algorithm would not impose any significant limit on
the travel speed of that arc. This would permit the head to travel in
a circle at high velocity and with a greater centripetal acceleration
than the printer's maximum acceleration. To avoid this, impose a
limit on the junction velocity of short moves so that an approximate
centripetal acceleration of that move does not exceed the move's
acceleration limit.
Suggested by Michael Barbour.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Apply the bed tilt settings immediately after finding them. This
makes it easier for users to perform automatic tilt calibration at the
start of every print.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Automatically clear the information printed at the start of each log
file rollover on a klippy internal restart.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Drop support for M303 and PID_TUNE, and replace it with a new
PID_CALIBRATE command. Move the logic for this command from heater.py
to a new pid_calibrate.py file in the extras/ directory.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Move the probe_z_offset parameter from delta_calibrate and
bed_tilt_calibrate to a z_offset parameter within the probe config
section. It's easier to understand the z offset setting when it is in
the probe config section.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
If a z_virtual_endstop is in use, then record the last XY position
that is used when the Z is homed. Use that XY position to report what
change is needed to the z position_endstop.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Rename the digital_output, pwm_output, and static_pwm_output config
sections to output_pin and move to a new module in the extras/
directory.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Move the code for the static_digital_output config section from
chipmisc.py to a new file in the extras/ directory.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
It looks like OctoPrint is expecting the result from M114 to be
relative to the last G92 command. Also, introduce GET_POSITION to
report the actual location that the printer is at.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Commit 9bc4239e now emphasizes the first line of a multi-line error
message, so rework startup_message to conform to that.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Report the first line of a multi-line error message twice - once as
part of the informational content, and once with the "!!" error
prefix.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
If a heater falls out of the target range, accumulate the temperature
differences to determine if an error should be raised. This should
make it less likely to report an error for heaters that drift slightly
out of range, and it should make error reporting faster for heaters
that rapidly fall out of range.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
A default of 4 degrees and 10 seconds may be too aggressive - change
the default to 10 degrees and 15 seconds.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Add support for additional carriages on cartesian printers. This is
used by some printers to handle multiple extruders.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Separate out the hd44780 screen drawing from the st7920 code. Use a
layout that takes advantage of the 20 columns. Add custom hd44780
fonts.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Add support for displaying basic status information on ST7920 and
HD44780 based LCDs that are attached directly to a micro-controller.
Signed-off-by: Marcio Teixeira <marcio@alephobjects.com>
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Support low-priority message transmits. This may be useful for bulk
commands that should be delayed util the comms are otherwise idle.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Add a lookup_command() method to the SerialReader class that provides
a wrapper that stores the serial and commandqueue references. This
makes it easier to run the send() method.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Add --always flag to "git describe" command to get a build identifier
even if one checks out the repo with a depth parameter that prunes out
the last tagged version.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
The multi-mcu clock syncing code relies on the ability to periodically
update the mcu clock adjustments. If a series of very long moves are
submitted then it is possible the adjustments could become unstable.
For example, if an adjustment is made to reduce a clock error over the
next couple of seconds, but it is applied to a longer period because
the next move lasts many seconds, then this would result in a bigger
adjustment for the following move, which would result in an even
bigger error when that move lasts many seconds. This can repeat until
the system destabilizes.
Check for cases where the print_time is far in the future of the
current estimated print time and average over a longer period in that
case. That should reduce the possibility of the adjustment code
becoming unstable.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Add support for directly printing from a local file on the host. This
may be useful if the host cpu is not fast enough to run OctoPrint
well.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
The bed_tilt_calibrate command determines the tilt of the bed.
However, we need to report the tilt compensation which is the negative
of the bed tilt.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Instead of using the toolhead class to determine if stats should be
reported, allow every printer object with a stats() callback to
determine if stats are needed.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Average clock sync times over approximately 30 seconds instead of 120
seconds so that the clock prediction responds to changes faster.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Use both load_config() and load_config_prefix() functions when
dynamically loading a module from the extras directory - if the config
section name has parameters in it then use load_config_prefix().
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
OctoPrint (and other software) will sometimes send additional commands
even if the previous command has not yet responded with an "ok".
Change the g-code input reading code to keep reading input so that an
M112 can be detected (and processed out-of-order). To avoid the
extreme case where one writes an entire g-code file to the input
without any pacing, disable the input reading if more than 20 commands
are pending.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
If the script being run raises an error, then stop running that script
and return the error to the caller.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Specify hardware pwm cycle times using the same method as software pwm
(in seconds, not clock ticks). Allow the fan code to be configured
with an explicit cycle time even when using software pwm.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
If the mcu supports command restarts and it does not appear to use a
real serial port, then default the restart method to 'command'. This
is a better default on boards with native USB support.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Report the current temperature, current pwm setting, and target
temperature as statistics in the log.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Add support for disabling homing checks via the homing_override
mechanism. This may be useful to move an axis prior to homing it.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Create a virtual pin that may be used as the z endstop pin on
cartesian printers that use the probe in place of a z endstop.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Allow a set of g-code scripts to be run on each probe invocation.
This may be useful for probes that need to be setup before they are
useful (eg, with servo actuated probes).
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Allow users to override the behavior of G28 using a new
"homing_override" config section. This may be used on printers that
require specific steps during the homing process.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>