summaryrefslogtreecommitdiff
path: root/digital/mimot
diff options
context:
space:
mode:
Diffstat (limited to 'digital/mimot')
-rw-r--r--digital/mimot/src/dirty/pwm.h5
-rw-r--r--digital/mimot/src/dirty/pwm_ocr.avr.c8
2 files changed, 8 insertions, 5 deletions
diff --git a/digital/mimot/src/dirty/pwm.h b/digital/mimot/src/dirty/pwm.h
index a751ee9e..b4f12d0d 100644
--- a/digital/mimot/src/dirty/pwm.h
+++ b/digital/mimot/src/dirty/pwm.h
@@ -25,8 +25,11 @@
*
* }}} */
+/** Offset to compensate for H-bridge dead zone at low PWM values. */
+#define PWM_OFFSET 0x40
+
/** Define the absolute maximum PWM value. */
-#define PWM_MAX 0x3ff
+#define PWM_MAX (0x3ff - PWM_OFFSET)
/** PWM control state. */
struct pwm_t
diff --git a/digital/mimot/src/dirty/pwm_ocr.avr.c b/digital/mimot/src/dirty/pwm_ocr.avr.c
index c4cd5279..a1d98c25 100644
--- a/digital/mimot/src/dirty/pwm_ocr.avr.c
+++ b/digital/mimot/src/dirty/pwm_ocr.avr.c
@@ -94,12 +94,12 @@ pwm_ocr_update (void)
IO_SET (PWM1_BRK_IO);
if (PWM_VALUE (PWM1) < 0)
{
- pwm1 = -PWM_VALUE (PWM1);
+ pwm1 = -PWM_VALUE (PWM1) + PWM_OFFSET;
}
else
{
dir_d |= _BV (PWM1_DIR);
- pwm1 = PWM_VALUE (PWM1);
+ pwm1 = PWM_VALUE (PWM1) + PWM_OFFSET;
}
}
# endif /* PWM1 */
@@ -115,12 +115,12 @@ pwm_ocr_update (void)
IO_SET (PWM2_BRK_IO);
if (PWM_VALUE (PWM2) < 0)
{
- pwm2 = -PWM_VALUE (PWM2);
+ pwm2 = -PWM_VALUE (PWM2) + PWM_OFFSET;
}
else
{
dir_d |= _BV (PWM2_DIR);
- pwm2 = PWM_VALUE (PWM2);
+ pwm2 = PWM_VALUE (PWM2) + PWM_OFFSET;
}
}
# endif /* PWM2 */