aboutsummaryrefslogtreecommitdiffstats
path: root/klippy
diff options
context:
space:
mode:
authorKevin O'Connor <kevin@koconnor.net>2020-09-27 18:09:53 -0400
committerKevin O'Connor <kevin@koconnor.net>2020-09-27 18:09:53 -0400
commit4d0d219716afb1143119d7e919fa1e896a896f11 (patch)
tree5d67bc01b011421b1b1bcdc39b9ea3e28f3a1154 /klippy
parent55e20f2c198ae45485d714b4588fcf6768bc6165 (diff)
downloadkutter-4d0d219716afb1143119d7e919fa1e896a896f11.tar.gz
kutter-4d0d219716afb1143119d7e919fa1e896a896f11.tar.xz
kutter-4d0d219716afb1143119d7e919fa1e896a896f11.zip
mcu: Fix set_pwm() for hard pwm
Must use self._pwm_max to calculate range for hard pwm updates. Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Diffstat (limited to 'klippy')
-rw-r--r--klippy/mcu.py24
1 files changed, 13 insertions, 11 deletions
diff --git a/klippy/mcu.py b/klippy/mcu.py
index 53d1ff74..8e819191 100644
--- a/klippy/mcu.py
+++ b/klippy/mcu.py
@@ -250,21 +250,23 @@ class MCU_pwm:
"schedule_soft_pwm_out oid=%c clock=%u on_ticks=%u off_ticks=%u",
cq=cmd_queue)
def set_pwm(self, print_time, value, cycle_time=None):
- if cycle_time is None:
- cycle_time = self._cycle_time
- cycle_ticks = self._mcu.seconds_to_clock(cycle_time)
clock = self._mcu.print_time_to_clock(print_time)
+ minclock = self._last_clock
+ self._last_clock = clock
if self._invert:
value = 1. - value
- on_ticks = int(max(0., min(1., value)) * float(cycle_ticks) + 0.5)
if self._hardware_pwm:
- self._set_cmd.send([self._oid, clock, on_ticks],
- minclock=self._last_clock, reqclock=clock)
- else:
- off_ticks = cycle_ticks - on_ticks
- self._set_cmd.send([self._oid, clock, on_ticks, off_ticks],
- minclock=self._last_clock, reqclock=clock)
- self._last_clock = clock
+ v = int(max(0., min(1., value)) * self._pwm_max + 0.5)
+ self._set_cmd.send([self._oid, clock, v],
+ minclock=minclock, reqclock=clock)
+ return
+ # Soft pwm update
+ if cycle_time is None:
+ cycle_time = self._cycle_time
+ cycle_ticks = self._mcu.seconds_to_clock(cycle_time)
+ on_ticks = int(max(0., min(1., value)) * float(cycle_ticks) + 0.5)
+ self._set_cmd.send([self._oid, clock, on_ticks, cycle_ticks - on_ticks],
+ minclock=minclock, reqclock=clock)
class MCU_adc:
def __init__(self, mcu, pin_params):