<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Recent changes to Atmega microsecond delay</title><link>https://sourceforge.net/p/flashforth/wiki/Atmega%2520microsecond%2520delay/</link><description>Recent changes to Atmega microsecond delay</description><atom:link href="https://sourceforge.net/p/flashforth/wiki/Atmega%20microsecond%20delay/feed" rel="self"/><language>en</language><lastBuildDate>Thu, 13 Jan 2022 06:54:49 -0000</lastBuildDate><atom:link href="https://sourceforge.net/p/flashforth/wiki/Atmega%20microsecond%20delay/feed" rel="self" type="application/rss+xml"/><item><title>Atmega microsecond delay modified by Mikael Nordman</title><link>https://sourceforge.net/p/flashforth/wiki/Atmega%2520microsecond%2520delay/</link><description>&lt;div class="markdown_content"&gt;&lt;pre&gt;--- v2
+++ v3
@@ -1,4 +1,4 @@
-~~~~~
+~~~
 \ microseconds delay for Atmega
 -us
 marker -us
@@ -35,4 +35,4 @@

 decimal
 1000 us-cal
-~~~~~
+~~~
&lt;/pre&gt;
&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Mikael Nordman</dc:creator><pubDate>Thu, 13 Jan 2022 06:54:49 -0000</pubDate><guid>https://sourceforge.net8ec9ae64abfd6d431d83bcfeea67ecd7926d5c80</guid></item><item><title>Atmega microsecond delay modified by Mikael Nordman</title><link>https://sourceforge.net/p/flashforth/wiki/Atmega%2520microsecond%2520delay/</link><description>&lt;div class="markdown_content"&gt;&lt;pre&gt;--- v1
+++ v2
@@ -12,18 +12,15 @@
 \ clear watchdog
 : cwd [ wdr, ] ; inlined

-\ Clear watchdog (wdr instruction) takes one clock cycle
-\ Adjust the number of CWD to achieve a two us delay
-\ 6 CWD is needed for Atmega2560 @ 16MHz.
-\ 9 CWD is needed for Atmega328 @ 16MHz.
-\ NEXT execution time is longer on 2560 than on smaller chips
-\ The overhead of NEXT is too big for 1 us accuracy
-: 2us ( u -- ) \ busy wait for u times 2 microseconds
-  di 
-  for 
-   cwd cwd cwd cwd cwd cwd \ cwd cwd cwd
-  next
-  ei 
+\ Clear watchdog (wdr instruction) takes one clock cycle.
+\ Adjust the number of CWD to achieve a one us delay.
+\ 9 CWD is needed @ 16MHz.
+: us ( u -- ) \ busy wait for u microseconds
+  begin
+    cwd cwd cwd cwd cwd cwd cwd cwd cwd
+    1- dup 
+  0= until
+  drop 
 ;

 \ Helper word for calibrating the us loop
@@ -31,7 +28,7 @@
 marker -us-cal
 : us-cal ( u -- ) \ give target delay in ms
   ticks &amp;gt;r
-  for #500 2us next 
+  for #1000 us next 
   ticks r&amp;gt; - #1000 um* 
   cr d. ."  microseconds"
 ;
&lt;/pre&gt;
&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Mikael Nordman</dc:creator><pubDate>Fri, 26 Dec 2014 08:03:24 -0000</pubDate><guid>https://sourceforge.nete705bbf4831849fdfc4ab6556bd43805730a46d1</guid></item><item><title>Atmega microsecond delay modified by Mikael Nordman</title><link>https://sourceforge.net/p/flashforth/wiki/Atmega%2520microsecond%2520delay/</link><description>&lt;div class="markdown_content"&gt;&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="err"&gt;\&lt;/span&gt; &lt;span class="n"&gt;microseconds&lt;/span&gt; &lt;span class="n"&gt;delay&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;Atmega&lt;/span&gt;
&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;us&lt;/span&gt;
&lt;span class="n"&gt;marker&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;us&lt;/span&gt;

&lt;span class="err"&gt;\&lt;/span&gt; &lt;span class="n"&gt;Opcode&lt;/span&gt; &lt;span class="n"&gt;only&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="n"&gt;flash&lt;/span&gt;
&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;op&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;opcode&lt;/span&gt; &lt;span class="o"&gt;--&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;flash&lt;/span&gt; &lt;span class="n"&gt;create&lt;/span&gt; &lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ram&lt;/span&gt; &lt;span class="n"&gt;does&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="err"&gt;@&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="err"&gt;\&lt;/span&gt; &lt;span class="n"&gt;Atmega&lt;/span&gt; &lt;span class="n"&gt;wdr&lt;/span&gt; &lt;span class="n"&gt;instruction&lt;/span&gt;
&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="mi"&gt;95&lt;/span&gt;&lt;span class="n"&gt;a8&lt;/span&gt; &lt;span class="n"&gt;op&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;wdr&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;

&lt;span class="err"&gt;\&lt;/span&gt; &lt;span class="n"&gt;clear&lt;/span&gt; &lt;span class="n"&gt;watchdog&lt;/span&gt;
&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;cwd&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="n"&gt;wdr&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;inlined&lt;/span&gt; 

&lt;span class="err"&gt;\&lt;/span&gt; &lt;span class="n"&gt;Clear&lt;/span&gt; &lt;span class="n"&gt;watchdog&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;wdr&lt;/span&gt; &lt;span class="n"&gt;instruction&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;takes&lt;/span&gt; &lt;span class="n"&gt;one&lt;/span&gt; &lt;span class="n"&gt;clock&lt;/span&gt; &lt;span class="n"&gt;cycle&lt;/span&gt;
&lt;span class="err"&gt;\&lt;/span&gt; &lt;span class="n"&gt;Adjust&lt;/span&gt; &lt;span class="n"&gt;the&lt;/span&gt; &lt;span class="n"&gt;number&lt;/span&gt; &lt;span class="n"&gt;of&lt;/span&gt; &lt;span class="n"&gt;CWD&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="n"&gt;achieve&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="n"&gt;two&lt;/span&gt; &lt;span class="n"&gt;us&lt;/span&gt; &lt;span class="n"&gt;delay&lt;/span&gt;
&lt;span class="err"&gt;\&lt;/span&gt; &lt;span class="mi"&gt;6&lt;/span&gt; &lt;span class="n"&gt;CWD&lt;/span&gt; &lt;span class="n"&gt;is&lt;/span&gt; &lt;span class="n"&gt;needed&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;Atmega2560&lt;/span&gt; &lt;span class="err"&gt;@&lt;/span&gt; &lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="n"&gt;MHz&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;
&lt;span class="err"&gt;\&lt;/span&gt; &lt;span class="mi"&gt;9&lt;/span&gt; &lt;span class="n"&gt;CWD&lt;/span&gt; &lt;span class="n"&gt;is&lt;/span&gt; &lt;span class="n"&gt;needed&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;Atmega328&lt;/span&gt; &lt;span class="err"&gt;@&lt;/span&gt; &lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="n"&gt;MHz&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;
&lt;span class="err"&gt;\&lt;/span&gt; &lt;span class="n"&gt;NEXT&lt;/span&gt; &lt;span class="n"&gt;execution&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt; &lt;span class="n"&gt;is&lt;/span&gt; &lt;span class="n"&gt;longer&lt;/span&gt; &lt;span class="n"&gt;on&lt;/span&gt; &lt;span class="mi"&gt;2560&lt;/span&gt; &lt;span class="n"&gt;than&lt;/span&gt; &lt;span class="n"&gt;on&lt;/span&gt; &lt;span class="n"&gt;smaller&lt;/span&gt; &lt;span class="n"&gt;chips&lt;/span&gt;
&lt;span class="err"&gt;\&lt;/span&gt; &lt;span class="n"&gt;The&lt;/span&gt; &lt;span class="n"&gt;overhead&lt;/span&gt; &lt;span class="n"&gt;of&lt;/span&gt; &lt;span class="n"&gt;NEXT&lt;/span&gt; &lt;span class="n"&gt;is&lt;/span&gt; &lt;span class="n"&gt;too&lt;/span&gt; &lt;span class="n"&gt;big&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="n"&gt;us&lt;/span&gt; &lt;span class="n"&gt;accuracy&lt;/span&gt;
&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;2u&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;u&lt;/span&gt; &lt;span class="o"&gt;--&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;\&lt;/span&gt; &lt;span class="n"&gt;busy&lt;/span&gt; &lt;span class="n"&gt;wait&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;u&lt;/span&gt; &lt;span class="n"&gt;times&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="n"&gt;microseconds&lt;/span&gt;
  &lt;span class="n"&gt;di&lt;/span&gt; 
  &lt;span class="k"&gt;for&lt;/span&gt; 
   &lt;span class="n"&gt;cwd&lt;/span&gt; &lt;span class="n"&gt;cwd&lt;/span&gt; &lt;span class="n"&gt;cwd&lt;/span&gt; &lt;span class="n"&gt;cwd&lt;/span&gt; &lt;span class="n"&gt;cwd&lt;/span&gt; &lt;span class="n"&gt;cwd&lt;/span&gt; &lt;span class="err"&gt;\ &lt;/span&gt;&lt;span class="n"&gt;cwd&lt;/span&gt; &lt;span class="n"&gt;cwd&lt;/span&gt; &lt;span class="n"&gt;cwd&lt;/span&gt;
  &lt;span class="n"&gt;next&lt;/span&gt;
  &lt;span class="n"&gt;ei&lt;/span&gt; 
&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="err"&gt;\&lt;/span&gt; &lt;span class="n"&gt;Helper&lt;/span&gt; &lt;span class="n"&gt;word&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;calibrating&lt;/span&gt; &lt;span class="n"&gt;the&lt;/span&gt; &lt;span class="n"&gt;us&lt;/span&gt; &lt;span class="n"&gt;loop&lt;/span&gt;
&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;us&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;cal&lt;/span&gt;
&lt;span class="n"&gt;marker&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;us&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;cal&lt;/span&gt;
&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;us&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;cal&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;u&lt;/span&gt; &lt;span class="o"&gt;--&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;\&lt;/span&gt; &lt;span class="n"&gt;give&lt;/span&gt; &lt;span class="n"&gt;target&lt;/span&gt; &lt;span class="n"&gt;delay&lt;/span&gt; &lt;span class="n"&gt;in&lt;/span&gt; &lt;span class="n"&gt;ms&lt;/span&gt;
  &lt;span class="n"&gt;ticks&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt;
  &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="err"&gt;#&lt;/span&gt;&lt;span class="mi"&gt;500&lt;/span&gt; &lt;span class="mi"&gt;2u&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="n"&gt;next&lt;/span&gt; 
  &lt;span class="n"&gt;ticks&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="err"&gt;#&lt;/span&gt;&lt;span class="mi"&gt;1000&lt;/span&gt; &lt;span class="n"&gt;um&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; 
  &lt;span class="n"&gt;cr&lt;/span&gt; &lt;span class="n"&gt;d&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="s"&gt;"  microseconds"&lt;/span&gt;
&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="n"&gt;decimal&lt;/span&gt;
&lt;span class="mi"&gt;1000&lt;/span&gt; &lt;span class="n"&gt;us&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;cal&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Mikael Nordman</dc:creator><pubDate>Wed, 24 Dec 2014 09:14:18 -0000</pubDate><guid>https://sourceforge.net6c152d4ccbd4848217674d1b2faedbc9a41218a4</guid></item></channel></rss>