Commit Graph

37 Commits

Author SHA1 Message Date
Markus Hitter 26fb18d178 Define acceleration in mm/s^2 instead of some unspecified value.
This units thing nicely covers the fact we need the ACCELERATION
to precalculate ramping steps later.
2011-05-15 13:10:32 +02:00
Jim McGee 408718d2bb Limit effect on dda->c when computing reprap style acceleration.
This fix is really a hack to protect from overflow/underflows
in the acceleration code due to the limited precision of the
fixed point calculations. It does, however, protect the code
from accidently turning off the step timer or setting the
timer interval value outside of the range defined by the current
interval and the ultimate endpoint interval.

This is a cleanup replacement for the code posted on the reprap forum:
http://forums.reprap.org/read.php?147,33082,83467#msg-83467
2011-05-15 09:56:33 +10:00
Jim McGee 5dc0c80f0b Defer enabling of timer1_compa interrupt the end of the interrupt handler.
Specifically, disable interrupts just before returning and then enable
the timer interrupt if appropriate. This means that the timer interrupt
cannot actually fire until after the RETI, so the function cannot be
entered recursively.
2011-05-15 09:56:33 +10:00
Jim McGee 85a9f63dfb Pretest DEBUG_X constants for non-zero and && the test with all existing
& tests of the debug_flags. Currently the compiler is able to eliminate
the block and the & operation when the constant is zero, but since
the debug_flags variable is a volatile the compiler does not eliminate
the load of the variable. By pretesting and shortcutting the load is
eliminated. Saves a small number of bytes when the debug build is
disabled and costs nothing when it is enabled.
2011-05-15 09:56:33 +10:00
Jim McGee 1e198e16ea Fix handling of the steptimeout variable.
Steptimeout is used both inside and outside
of interrupts, and as such it needs special attention.
Specifically, the increment outside of the interrupt
context needs to occur when interrupts are disabled,
or a clear of the variable can be missed.

The variable was also made volatile. This is not strictly necessary
given the current code, but it is the more conservative approach
to dealing with the variable (and costs nothing in the current code).
2011-05-15 09:56:32 +10:00
Michael Moon 1b1aea7f41 try to prevent queue locking due to non-atomic accesses and interrupt mismanagement 2011-05-10 12:43:27 +10:00
Michael Moon 74e03b7df1 allow G92 to work again after 0389289 2011-04-26 18:19:00 +10:00
Michael Moon 03892894ed remove ACCELERATION_TEMPORAL, update current_position from main loop instead of step interrupt 2011-04-26 14:45:32 +10:00
Markus Amsler 4b7f8fba48 Fix absolute E positioning.
Now also works with M101/M103
2011-04-12 01:36:57 +02:00
Michael Moon 0dc7d77885 Massive Doxygen documentation addition
'make doc' then point your browser at doc/html/

Needs plenty of cleanup and polishing, but the main bulk is here

even documents your configuration! ;)
2011-03-22 01:34:36 +11:00
Markus Hitter 12516be978 dda.c: get rid of duplicate power_on() & friends. 2011-03-02 00:59:48 +01:00
Markus Amsler d85f821872 Disable z stepper after each move.
All z-axis I'm aware off hold their positions with powered down stepper.
2011-02-27 22:15:15 +01:00
Markus Amsler d2c0a84da7 Arduino ide doesn't like definitions in for loops. 2011-02-27 22:11:13 +01:00
Stephan Walter 8acb072e0b Actually set extruder enable pin if defined 2011-02-27 00:55:14 +11:00
Michael Moon 4aefda6f17 added integer square root algorithm for future use 2011-02-24 18:49:28 +11:00
John Gilmore fe034d5e35 graycode stepper operation, distilled to one line in dda.c
Which includes a seperate file (graycode.c) with the defines and additional variable declaration.
I went with the "graycode" spelling, as there's about ten times as many hits for that as for "greycode" on google. I've read that both spellings are acceptable, but whatever.

Signed-off-by: Michael Moon <triffid.hunter@gmail.com>
2011-02-06 16:42:08 +11:00
Michael Moon 096d7dfdf3 Merge release-candidate-triffid branch 2011-01-07 23:09:13 +11:00
Stephan Walter 3028b297f3 Add simulation code: use "make sim" 2010-10-21 11:05:55 +11:00
Michael Moon dd8a5cd377 UM_PER_STEP stayed floating a bit too long 2010-10-20 17:39:57 +11:00
Michael Moon 18565b776f attempt to fix precision underflow in UM_PER_STEP macros 2010-10-20 17:23:18 +11:00
Markus Hitter 468b212077 Move micrometer conversion from config.h(.dist) to
dda.c, where it's used.
2010-10-07 21:34:38 +02:00
Markus Hitter 4bddf3452f Move stepper macros from config.h(.dist) to dda.c, as they're not
meant to be configured by the user.
2010-10-07 21:34:29 +02:00
Markus Hitter 95939ecc22 Don't disable the stepper timer interrupt while stepping.
After lots of try and error the conclusion was, disabling this
interrupt makes the timer vulnerable to be messed up by
characters incoming over the serial line. So, now the
interrupt is enabled as a move starts and not disabled before
the move, and all subsequent moves are done.
2010-10-04 16:05:01 +02:00
Markus Hitter 94e0cce89b Don't set the timer on nullmoves, as dda->c isn't initialized, then. 2010-09-30 21:20:22 +02:00
Markus Hitter f6f2b7f44f Enhance ACCELERATION_RAMPING on short moves.
Problem was: For short moves, you have to ramp down before
reaching target speed. The point of return was set to half
of the number of total steps.

Now, what happens is there's an uneven number of steps? In
integer math, 3 / 2 = 1, so the move would ramp one step up,
one step down and ... well, one step even further down, resulting
in a really sloooow step. Slow, like a full second or so.

Adding one to the first half, the movement ramps two steps up,
one down and would do another step at minimum speed, if it wasn't
already at target position. This is about as accurate as we
can get it without introducing more code at interrupt time.
2010-09-25 18:11:45 +02:00
Markus Hitter 696baea16a Implement better machine speed limits checking. Do it for
each axis individually, as the combined speed of two or more
axes can be higher than the limit of a single one.

While this is tested to work well for all three acceleration
types, I'm not enthusiastic about the code, as it adds almost
500 bytes. Perhaps an efficient-coding-geek can help :-)
2010-09-24 16:08:11 +02:00
Michael Moon c1dbd869f5 minor fixes: comments, indenting, etc 2010-09-18 08:08:31 +10:00
Michael Moon 6ce5895819 Merge branch 'master' of github.com:triffid/FiveD_on_Arduino 2010-09-16 17:15:30 +10:00
Markus Hitter bd1e357c35 dda.c: remove ABSDELTA() and delta32() implementations as they're unused. 2010-09-14 19:45:23 +02:00
Michael Moon 004bc1b789 code cleaning
(cherry picked from commit c3333278beaca0d81023b7ee752530466b37f316)
2010-09-13 20:40:23 +10:00
Markus Hitter 2178ff4ac1 Implement acceleration ramping. Enjoy always smooth rides! 2010-09-10 02:09:04 +02:00
Markus Hitter 639f5237be Make acceleration, RepRap-style, disable-able. This is also
in preparation for introducing acceleration ramping.
2010-09-08 22:35:27 +02:00
Markus Hitter 548b79f3d6 dda.c: replaced can_step() with a more simple solution. This
saves a whopping 270 bytes in interrupt context.
2010-09-08 19:14:04 +02:00
Markus Hitter 0572687cb2 dda_create(): clear _all_ flags before proceeding. 2010-09-08 15:57:32 +02:00
Michael Moon 883c488107 fixed some mess from moving stuff around 2010-08-10 14:59:41 +10:00
Michael Moon 0b51c1d0ab Merge branch 'mendel-triffid'
Conflicts:
	dda.c
	gcode.c
	machine.h
	temp.c
2010-08-10 14:55:06 +10:00
Michael Moon 595b66a341 setting up new branch 2 2010-08-10 14:26:24 +10:00