<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[SoliForum - 3D Printing Community — Slic3r]]></title>
		<link>https://www.soliforum.com/topic/92/slic3r/</link>
		<atom:link href="https://www.soliforum.com/feed/rss/topic/92/" rel="self" type="application/rss+xml" />
		<description><![CDATA[The most recent posts in Slic3r.]]></description>
		<lastBuildDate>Sun, 09 Sep 2012 19:10:27 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: Slic3r]]></title>
			<link>https://www.soliforum.com/post/1157/#p1157</link>
			<description><![CDATA[<p>I did a test by printing 2 cubes and reproduced the bug you described Ian. The Z was moving incredibly slowly as you suspected. It was due to bug I created when I adjusted the steps, but I didn&#039;t adjust the mm&#039;s. Both are provided to the stepper interrupt. So now I work out the mm&#039;s from the steps so they are always in sync. I tested it with a Z400 hysteresis value and it worked as expected. It&#039;s easier to give you the planner.cpp file rather than describe all of the changes.</p>]]></description>
			<author><![CDATA[null@example.com (Jinja)]]></author>
			<pubDate>Sun, 09 Sep 2012 19:10:27 +0000</pubDate>
			<guid>https://www.soliforum.com/post/1157/#p1157</guid>
		</item>
		<item>
			<title><![CDATA[Re: Slic3r]]></title>
			<link>https://www.soliforum.com/post/1110/#p1110</link>
			<description><![CDATA[<p>What you are describing is unexpected. What I&#039;d expect is for the code to attempt to move 0.5mm by turning for 0.68mm. It might take 36% longer to perform the move, but not as much as 2 seconds.</p><p>I&#039;ll take a closer look at the code to see if I&#039;ve missed something that could cause this.</p><p>Did you get the M99 to work?</p>]]></description>
			<author><![CDATA[null@example.com (Jinja)]]></author>
			<pubDate>Fri, 07 Sep 2012 19:23:08 +0000</pubDate>
			<guid>https://www.soliforum.com/post/1110/#p1110</guid>
		</item>
		<item>
			<title><![CDATA[Re: Slic3r]]></title>
			<link>https://www.soliforum.com/post/1108/#p1108</link>
			<description><![CDATA[<p>I was starting a print before work this morning, and had to turn the hysteresis off.&nbsp; I enabled Z lift in Slic3r which drops the bed slightly when retraction happens, for a print with a lot of retraction in it.&nbsp; It looked like every time it was doing the lift, it was stopping for a couple of seconds.&nbsp; I don&#039;t know if it was being really slow at calculating, or if it was moving Z really slowly.&nbsp; The rod might have been turning during the pauses, but when you spread .5mm over a couple of seconds, that motion can be hard to spot.</p><p>I didn&#039;t have time to investigate, so I just set it to 0 which made it go back to normal behavior.&nbsp; I had set the Z lift to .5, so the actual lift would be .32 which should be enough most of the time for a .1mm print.</p>]]></description>
			<author><![CDATA[null@example.com (IanJohnson)]]></author>
			<pubDate>Fri, 07 Sep 2012 17:47:31 +0000</pubDate>
			<guid>https://www.soliforum.com/post/1108/#p1108</guid>
		</item>
		<item>
			<title><![CDATA[Re: Slic3r]]></title>
			<link>https://www.soliforum.com/post/1107/#p1107</link>
			<description><![CDATA[<p>Glad to hear the Z works now.</p><p>I used repetier to send M99 commands about a dozen times and I didn&#039;t notice any failed sends. You can add the following bit of code to see if the M99 command is managing to change the values. In Marlin.pde, search for SERIAL_PROTOCOL(getHeaterPower(tmp_extruder)); </p><p>After that line there&#039;s an #endif, after the #endif insert the following...</p><div class="codebox"><pre><code>        SERIAL_PROTOCOLPGM(&quot; H:X&quot;);
        SERIAL_PROTOCOL(hysteresis_steps_x);  
        SERIAL_PROTOCOLPGM(&quot; Y&quot;);
        SERIAL_PROTOCOL(hysteresis_steps_y);  
        SERIAL_PROTOCOLPGM(&quot; Z&quot;);
        SERIAL_PROTOCOL(hysteresis_steps_z);  
        SERIAL_PROTOCOLPGM(&quot; E&quot;);
        SERIAL_PROTOCOL(hysteresis_steps_e);  </code></pre></div><p>This will now report back the current hysteresis values. In repetier the printer output is returned in the console window at the bottom. I think in pronterface it appears in a separate command window. It should look something like this...</p><p>ok T:21.9 /3.0 B:22.1 /3.0 @:0 H:X0 Y0 Z0 E0</p><p>The last four values are your hysteresis values. If the M99 is not working, the problem is likely in Marlin.pde, so I&#039;ll attach mine so you can compare it to yours.</p>]]></description>
			<author><![CDATA[null@example.com (Jinja)]]></author>
			<pubDate>Fri, 07 Sep 2012 16:51:04 +0000</pubDate>
			<guid>https://www.soliforum.com/post/1107/#p1107</guid>
		</item>
		<item>
			<title><![CDATA[Re: Slic3r]]></title>
			<link>https://www.soliforum.com/post/1096/#p1096</link>
			<description><![CDATA[<p>The Z worked perfectly.&nbsp; I bring the bed up 10mm until it bumps the gauge, then zero it.&nbsp; Move up 10mm to something like 9.96.&nbsp; When I move down 10mm it goes right back to 0.00.&nbsp; Before it would stop at .18.</p><p>I couldn&#039;t get the M99 command to work however, I had to put the steps into the planner.cpp.&nbsp; I didn&#039;t double check my work on the M99 part.&nbsp; Also I&#039;m finding that Pronterface is better for sending gcodes by hand.&nbsp; Sometimes Repetier doesn&#039;t seem to send them.</p><p>I haven&#039;t messed with Y, I would rather get the M99 working first, since things are a little more fuzzy with that one.</p>]]></description>
			<author><![CDATA[null@example.com (IanJohnson)]]></author>
			<pubDate>Fri, 07 Sep 2012 14:15:54 +0000</pubDate>
			<guid>https://www.soliforum.com/post/1096/#p1096</guid>
		</item>
		<item>
			<title><![CDATA[Re: Slic3r]]></title>
			<link>https://www.soliforum.com/post/1088/#p1088</link>
			<description><![CDATA[<p>Don&#039;t do anything yet. I have a suspicion that we&#039;ve oversimplified the backlash problem. I&#039;m confident the Z axis fix is an improvement but we should wait on Ian&#039;s results before we decide whether or not to include the rest of it. </p><p>If it does work then we should try and get it submitted into the original Marlin firmware. There are other printers that will have worse backlash problems than the Solidoodle.</p>]]></description>
			<author><![CDATA[null@example.com (Jinja)]]></author>
			<pubDate>Fri, 07 Sep 2012 06:49:44 +0000</pubDate>
			<guid>https://www.soliforum.com/post/1088/#p1088</guid>
		</item>
		<item>
			<title><![CDATA[Re: Slic3r]]></title>
			<link>https://www.soliforum.com/post/1086/#p1086</link>
			<description><![CDATA[<p>My question:</p><p>Is this something that should be added to the Solidoodle firmware I have on Github?</p><p>If so please let me know and I&#039;ll put it in and credit you.</p>]]></description>
			<author><![CDATA[null@example.com (lawsy)]]></author>
			<pubDate>Fri, 07 Sep 2012 06:42:05 +0000</pubDate>
			<guid>https://www.soliforum.com/post/1086/#p1086</guid>
		</item>
		<item>
			<title><![CDATA[Re: Slic3r]]></title>
			<link>https://www.soliforum.com/post/1071/#p1071</link>
			<description><![CDATA[<p>By the way, once you&#039;ve discovered your good hysteresis values you should do one of two things. Either add the M99 gcode to your start gcode, or change the code in planner.cpp to use your values as default. </p><p>I&#039;d recommend the first one so it&#039;s easier to recognize what you&#039;re printing with.</p><p>If you&#039;d prefer to change planner.cpp, I can add extra information to be fed back to Repetier. At the moment Marlin reports the temperature of the bed and the nozzle, but I can add anything to that. I added the hysteresis values to that report so I could debug my code, but if anyone else can think of something useful that they&#039;d like to know about what&#039;s going on inside Marlin, I&#039;d be happy to add it.</p>]]></description>
			<author><![CDATA[null@example.com (Jinja)]]></author>
			<pubDate>Fri, 07 Sep 2012 02:37:07 +0000</pubDate>
			<guid>https://www.soliforum.com/post/1071/#p1071</guid>
		</item>
		<item>
			<title><![CDATA[Re: Slic3r]]></title>
			<link>https://www.soliforum.com/post/1069/#p1069</link>
			<description><![CDATA[<p>The Y needs to pause during the X correction, if it doesn&#039;t then you&#039;ll briefly get axis aligned motion instead of the desired diagonal motion. Remember, this is just required when the X changes direction. So when drawing a diamond the Y pause would occur twice, once each at the East and West points of the diamond. The X pauses would be at the North and South points of the diamond. The same four pauses would occur when drawing a circle despite it having hundreds of speed changes throughout. So it&#039;s not quite as bad as the Sprinter situation.</p><p>Are you sure your X/Y backlashes are as high as 0.3mm? We should be able to observe a flat 0.3mm surface on the North/East/South/West walls of the objects you&#039;ve been printing.</p>]]></description>
			<author><![CDATA[null@example.com (Jinja)]]></author>
			<pubDate>Fri, 07 Sep 2012 02:27:26 +0000</pubDate>
			<guid>https://www.soliforum.com/post/1069/#p1069</guid>
		</item>
		<item>
			<title><![CDATA[Re: Slic3r]]></title>
			<link>https://www.soliforum.com/post/1066/#p1066</link>
			<description><![CDATA[<p>Is that path based on X and Y moving at the same speeds?&nbsp; Can the speed of those extra steps be scaled up to happen within the time of the Y steps?&nbsp; This might make some jerky clicky movement from the motors at abrupt changes but around curves it might not need to be too extreme.</p><p>Would speeding up the added steps put all of the correction closer to a point near 5, across the duration of a few Y steps rather than spread all the way between 5 and 1? </p><p>Maybe Y could pause for a bit, and the steps can be sped up a bit to shorten the length of pause needed.&nbsp; I don&#039;t think it takes much pause at all for blobs to show.&nbsp; The pauses from running Sprinter without look ahead were very short, the the results were very evident.</p>]]></description>
			<author><![CDATA[null@example.com (IanJohnson)]]></author>
			<pubDate>Fri, 07 Sep 2012 02:03:44 +0000</pubDate>
			<guid>https://www.soliforum.com/post/1066/#p1066</guid>
		</item>
		<item>
			<title><![CDATA[Re: Slic3r]]></title>
			<link>https://www.soliforum.com/post/1064/#p1064</link>
			<description><![CDATA[<p>I&#039;ve thought of an issue with changing the hysteresis values for the X and Y. This isn&#039;t an issue for the Z because there is no extrusion during the Z motion.</p><p>If you want to fix hysteresis in the X and Y axis, then you must perform the hysteresis correction before performing the intended move. Imagine a zig-zag pattern where the X is going back and forth and the Y is advancing in one direction. The numbers are both positioned in the X axis and show their X position values</p><div class="codebox"><pre><code>1
 2
  3
   4
    5
   4
  3
 2
1
 2
  3
   4
    5</code></pre></div><p>with no hysteresis correction, some of the X backlash would be absorbed as shown below. This is what is happening on everyone&#039;s prints right now...</p><div class="codebox"><pre><code>1
 2
  3
   4
    5
    5
   4
  3
 2
 2
  3
   4
    5</code></pre></div><p>So we are seeing two problems.<br />1) The X is briefly static at the 5 and 2 positions while the hysteresis is occurring, because there is no hysteresis occurring in the Y.<br />2) Due to hysteresis, we don&#039;t even get back to x=1</p><p>My code adds hysteresis which adds extra steps to the motion, this will only fix problem 2. This is what will happen to prints that use my hysteresis code...</p><div class="codebox"><pre><code>1
 2
  3
   4
    5
    5
   4
  3
 2
1
1
 2
  3
   4
    5</code></pre></div><p>Problem 1 will still occur as the hysteresis motion is interpolated along with the non-hysteresis motion. In order to fix problem 1 then a more involved code fix needs to occur where the hysteresis error needs to be applied separately from the intended motion. With that kind of fix in place, then the exact intended path would be followed. However, there would be a slight pause in motion as the extruder remains motionless while the hysteresis is fixed. At 50mm/s, the pause would be 160th of a second, so shouldn&#039;t be noticable.</p><p>Hopefully I&#039;m making sense to people?</p>]]></description>
			<author><![CDATA[null@example.com (Jinja)]]></author>
			<pubDate>Fri, 07 Sep 2012 00:59:08 +0000</pubDate>
			<guid>https://www.soliforum.com/post/1064/#p1064</guid>
		</item>
		<item>
			<title><![CDATA[Re: Slic3r]]></title>
			<link>https://www.soliforum.com/post/1060/#p1060</link>
			<description><![CDATA[<p>By the way, I assumed that the Z hysteresis should be applied in both directions, but perhaps this is not the case?</p><p>Would gravity change things?</p><p>If you find that you need two separate Z hysteresis values for up and down motion then let me know and I&#039;ll add it.</p>]]></description>
			<author><![CDATA[null@example.com (Jinja)]]></author>
			<pubDate>Thu, 06 Sep 2012 23:50:31 +0000</pubDate>
			<guid>https://www.soliforum.com/post/1060/#p1060</guid>
		</item>
		<item>
			<title><![CDATA[Re: Slic3r]]></title>
			<link>https://www.soliforum.com/post/1059/#p1059</link>
			<description><![CDATA[<p>I found the bug in my code. The code snippet to insert in planner.cpp should be the following...</p><div class="codebox"><pre><code> // If there has been a change in direction, add any hysteresis to the steps
  if( block-&gt;direction_bits != previous_direction_bits )
  {
    if( (block-&gt;direction_bits &amp; (1&lt;&lt;X_AXIS)) != (previous_direction_bits &amp; (1&lt;&lt;X_AXIS)) )
    {
      block-&gt;steps_x += hysteresis_steps_x;
    }
    if( (block-&gt;direction_bits &amp; (1&lt;&lt;Y_AXIS)) != (previous_direction_bits &amp; (1&lt;&lt;Y_AXIS)) )
    {
      block-&gt;steps_y += hysteresis_steps_y;
    }
    if( (block-&gt;direction_bits &amp; (1&lt;&lt;Z_AXIS)) != (previous_direction_bits &amp; (1&lt;&lt;Z_AXIS)) )
    {
      block-&gt;steps_z += hysteresis_steps_z;
    }
    if( (block-&gt;direction_bits &amp; (1&lt;&lt;E_AXIS)) != (previous_direction_bits &amp; (1&lt;&lt;E_AXIS)) )
    {
      block-&gt;steps_e += hysteresis_steps_e;
    }
    block-&gt;step_event_count = max(block-&gt;steps_x, max(block-&gt;steps_y, max(block-&gt;steps_z, block-&gt;steps_e)));
  }
  previous_direction_bits = block-&gt;direction_bits;</code></pre></div><p>Also, if you want to be able to set the hysteresis values with a command that you can send from the repetier G-Code text box, then you need to add the following to Marlin.pde.</p><p>This first one is just a comment so isn&#039;t necessary, but for completeness. Add this comment amongst the similar command comments near the top of the file...</p><div class="codebox"><pre><code>// M99  - Set XYZE hysteresis values. To turn off hysteresis... (M99 X0 Y0 Z0 E0)</code></pre></div><br /><p>Search for M92 in the code to find the case statement that processes M commands. After M92, insert the following...</p><div class="codebox"><pre><code>    case 99: // M99
      {
        if(code_seen(&#039;X&#039;)) hysteresis_steps_x = code_value() ;
        if(code_seen(&#039;Y&#039;)) hysteresis_steps_y = code_value() ;
        if(code_seen(&#039;Z&#039;)) hysteresis_steps_z = code_value() ;
        if(code_seen(&#039;E&#039;)) hysteresis_steps_e = code_value() ;
      }
      break;</code></pre></div><p>Finally, we need to inform Marlin.pde of where the hysteresis variables are by adding the following to planner.h...</p><div class="codebox"><pre><code>extern long hysteresis_steps_x;
extern long hysteresis_steps_y;
extern long hysteresis_steps_z;
extern long hysteresis_steps_e;</code></pre></div><p>That&#039;s it. You can now change the hysteresis values from repetier like this...</p><p>M99 Z5000</p><p>That would add a 2mm hysteresis to the Z motion. Obviously way too much, but it lets you see that the code is working. You can set multiple values at the same time, for example, the following will turn off all hysteresis...</p><p>M99 X0 Y0 Z0 E0</p><p>Have fun with that. If you want me to explain anything in detail then I&#039;ll be happy to.</p>]]></description>
			<author><![CDATA[null@example.com (Jinja)]]></author>
			<pubDate>Thu, 06 Sep 2012 23:42:58 +0000</pubDate>
			<guid>https://www.soliforum.com/post/1059/#p1059</guid>
		</item>
		<item>
			<title><![CDATA[Re: Slic3r]]></title>
			<link>https://www.soliforum.com/post/1057/#p1057</link>
			<description><![CDATA[<p>I&#039;ve just added an M99 command to set the hysteresis values. I&#039;ve updated my arduino but I&#039;m not getting any hysteresis corrections when I use the manual controls to move the bed up and down.</p><p>So either my code isn&#039;t working or the commands to move the bed up and down are not going through plan_buffer_line.</p><p>I&#039;ll look into it some more.</p>]]></description>
			<author><![CDATA[null@example.com (Jinja)]]></author>
			<pubDate>Thu, 06 Sep 2012 23:09:00 +0000</pubDate>
			<guid>https://www.soliforum.com/post/1057/#p1057</guid>
		</item>
		<item>
			<title><![CDATA[Re: Slic3r]]></title>
			<link>https://www.soliforum.com/post/1054/#p1054</link>
			<description><![CDATA[<p>I have some values to add in to the X and Y axis too.&nbsp; My Y axis has about .3-.4 worth of slack.&nbsp; It varies a little bit, since there is more going on than Z.&nbsp; Z is exactly .18 every time.</p><p>It&#039;s a little nitpicky since it probably won&#039;t show in a print, but I would get some satisfaction in seeing the all the measurements be dead-on in the dial gauge.&nbsp; On the other hand, I&#039;m finding that my white PLA is really unforgiving in showing every little variation in thread placement in .1mm.&nbsp; </p><p>There is a biweekly printing contest at the RepRap forum, and I would like to get a print that is as good as the Solidoodle can possibly make.&nbsp; They like to choose challenging prints like this one - <a href="http://www.thingiverse.com/thing:29365">http://www.thingiverse.com/thing:29365</a> .</p>]]></description>
			<author><![CDATA[null@example.com (IanJohnson)]]></author>
			<pubDate>Thu, 06 Sep 2012 23:02:28 +0000</pubDate>
			<guid>https://www.soliforum.com/post/1054/#p1054</guid>
		</item>
	</channel>
</rss>
