<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: FTM0 Quadrature decoder in Kinetis Microcontrollers</title>
    <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/FTM0-Quadrature-decoder/m-p/365234#M18772</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi David,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Please refer to the FlexTimer section in Chapter 3 of your reference manual.&amp;nbsp; I don't believe FTM0 supports the Quadrature decoder feature (even though the control registers for that feature are present). &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Which means you will need to create your own quadrature decoder software functions or use the help of external hardware for the third decoder.&amp;nbsp; &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Regards,&lt;/P&gt;&lt;P&gt;Chris&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Mon, 24 Nov 2014 19:43:09 GMT</pubDate>
    <dc:creator>chris_brown</dc:creator>
    <dc:date>2014-11-24T19:43:09Z</dc:date>
    <item>
      <title>FTM0 Quadrature decoder</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/FTM0-Quadrature-decoder/m-p/365233#M18771</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi everybody!!&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I´m involved in a proyect with kinetis K60f120 to control 3 DC motors with encoder. I have used the FTM3 to generate PWM signals and the other 3 FTM modules (FTM0, FTM1 and FTM2) to connect the motor encoders. I have used the same code to initialize all FTM modules, but two of them work properly (FTM1 and FTM2) but the third (FTM0) dont work.&lt;/P&gt;&lt;P&gt;FTM0 is more general FTM module than the others, so could be necesary something else for correct initialization???&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;This is the code I have used:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;// enable the clock for FTM1&lt;/P&gt;&lt;P&gt;&amp;nbsp; SIM_SCGC6 |= SIM_SCGC6_FTM0_MASK;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; //enable the counter&lt;/P&gt;&lt;P&gt;&amp;nbsp; FTM0_MODE |= FTM_MODE_FTMEN_MASK;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp; FTM0_CONF |= FTM_CONF_BDMMODE(3); // counter running in BDM mode&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; FTM0_MOD = 3999;&lt;/P&gt;&lt;P&gt;&amp;nbsp; FTM0_CNTIN = 0;&lt;/P&gt;&lt;P&gt;&amp;nbsp; FTM0_CNT = 0;&lt;/P&gt;&lt;P&gt;&amp;nbsp; FTM0_QDCTRL |= FTM_QDCTRL_QUADEN_MASK | FTM_QDCTRL_QUADMODE_MASK; // configuring for quadrature mode&lt;/P&gt;&lt;P&gt;&amp;nbsp; // start the timer clock, source is the external clock&lt;/P&gt;&lt;P&gt;&amp;nbsp; FTM0_SC |= FTM_SC_CLKS(3); &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; //configuring the input pins:&lt;/P&gt;&lt;P&gt;&amp;nbsp; PORTC_PCR1 = PORT_PCR_MUX(4); // FTM0 CH0&lt;/P&gt;&lt;P&gt;&amp;nbsp; PORTC_PCR2 = PORT_PCR_MUX(4); // FTM0 CH1&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Any suggestion??????&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thanks in advance!!!!!!&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;David.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 24 Nov 2014 14:22:49 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/FTM0-Quadrature-decoder/m-p/365233#M18771</guid>
      <dc:creator>dcantero</dc:creator>
      <dc:date>2014-11-24T14:22:49Z</dc:date>
    </item>
    <item>
      <title>Re: FTM0 Quadrature decoder</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/FTM0-Quadrature-decoder/m-p/365234#M18772</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi David,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Please refer to the FlexTimer section in Chapter 3 of your reference manual.&amp;nbsp; I don't believe FTM0 supports the Quadrature decoder feature (even though the control registers for that feature are present). &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Which means you will need to create your own quadrature decoder software functions or use the help of external hardware for the third decoder.&amp;nbsp; &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Regards,&lt;/P&gt;&lt;P&gt;Chris&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 24 Nov 2014 19:43:09 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/FTM0-Quadrature-decoder/m-p/365234#M18772</guid>
      <dc:creator>chris_brown</dc:creator>
      <dc:date>2014-11-24T19:43:09Z</dc:date>
    </item>
    <item>
      <title>Re: FTM0 Quadrature decoder</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/FTM0-Quadrature-decoder/m-p/365235#M18773</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Christopher!!&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Unfortunately I think you are right!! Channels FTM0 and FTM3 dont integrate quadrature decoder. &lt;/P&gt;&lt;P&gt;I need to implerment a decoder by software. &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;has anybody an example of software implemented quadrature decoder for kinetis? &lt;/P&gt;&lt;P&gt;I´m looking for a code example or application note in freescale but I dont found anythig!!!&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thanks!!!!!!&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;David&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 25 Nov 2014 08:46:14 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/FTM0-Quadrature-decoder/m-p/365235#M18773</guid>
      <dc:creator>dcantero</dc:creator>
      <dc:date>2014-11-25T08:46:14Z</dc:date>
    </item>
    <item>
      <title>Re: FTM0 Quadrature decoder</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/FTM0-Quadrature-decoder/m-p/365236#M18774</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;What maximum edge rate (minimum width between edges) will you need to support?&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 26 Nov 2014 03:46:55 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/FTM0-Quadrature-decoder/m-p/365236#M18774</guid>
      <dc:creator>egoodii</dc:creator>
      <dc:date>2014-11-26T03:46:55Z</dc:date>
    </item>
    <item>
      <title>Re: FTM0 Quadrature decoder</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/FTM0-Quadrature-decoder/m-p/365237#M18775</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;The SAFEST way to handle quadrature-input decoding is a 'sampled' system, where the two inputs are simultaneously sampled and the 'difference' from a previous sample gives you the necessary counter-update info, like this, where ENC0_PT is defined as the encoder-GPIO port, and ENC0_A (and _B) are the associated bit-masks:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Diff_Enc0 = (ENC0_PT &amp;amp; (ENC0_A | ENC0_B)) ^ Last_Enc0;&amp;nbsp;&amp;nbsp; //Get encoder bit changes-must be atomic!&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if( Diff_Enc0 != 0 )&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if( (~Last_Enc0 &amp;amp; Diff_Enc &amp;amp; ENC0_A) ) //First look for A edges&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Last_Enc0 ^= Diff_Enc;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Update the 'current' pattern&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if( Last_Enc0 &amp;amp; ENC0_B )&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Steps0--;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Current 'B' state defines CW or CCW&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Steps0++;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Increments and decrements must be atomic&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }else if( (Last_Enc0 &amp;amp; Diff_Enc &amp;amp; ENC0_A) )&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Last_Enc0 ^= Diff_Enc;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Update the 'current' pattern&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if( Last_Enc0 &amp;amp; ENC0_B )&amp;nbsp;&amp;nbsp; //Opposite 'B' decode for CW or CCW&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Steps0++;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Steps0--;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }else if( (~Last_Enc0 &amp;amp; Diff_Enc &amp;amp; ENC0_B) ) //And now B edges&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Last_Enc0 ^= Diff_Enc;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Update the 'current' pattern&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if( Last_Enc0 &amp;amp; ENC0_A )&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Steps0++;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Current 'A' state defines CW or CCW&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Steps0--;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }else if( (Last_Enc0 &amp;amp; Diff_Enc &amp;amp; ENC0_B) )&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Last_Enc0 ^= Diff_Enc;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Update the 'current' pattern&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if( Last_Enc0 &amp;amp; ENC0_A )&amp;nbsp; //Opposite 'A' decode for CW or CCW&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Steps0--;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Steps0++;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }else&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Ignore any non-tested changes&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Last_Enc0 ^= Diff_Enc;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Update the 'current' pattern, ignoring confused change&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;The 'limitation' of this process is that there MUST be at most one 'useful' (not just bounce) edge-input changing per 'sample' -- otherwise no 'correct' change can be made, and the last 'else' clause kicks-in and just 'skips' the change.&amp;nbsp; The Kinetis FTM1 and/or FTM2 'quadrature mode' run this kind of state machine in hardware using the bus clock for sampling, and is thus capable of edge-rates up to 2/3rds of the bus clock (based on experiments and the datasheet parameter under 'General Switching Specs' called 'GPIO pin interrupt pulse width', and note 1, of 1.5 bus-clock-cycles 'minimum' pulse widths).&amp;nbsp; In software, you will be MUCH more limited in the rate you can stand -- I might see you running this on a 10KHz timer-interrupt, but personally I wouldn't expect to drive an interrupt rate much in excess of that, for a minimum of 100us between 'valid' edge changes.&amp;nbsp; This kind of sampling will ignore 'bounce' on any one input, as just one edge changing 'back and forth' at the sample-times will just increment and decrement the counter each time (and 'bounces' between samples ignored entirely!), and the final 'settled' value will be correct for the total step count.&amp;nbsp; And that is the 'fundamental advantage' over, say, just trying to 'interrupt' on either input-edge and decode THOSE, as the interrupt-turnaround time will define a 'window' where you may LOSE a fast edge change, and thus miscount.&amp;nbsp; This method CANNOT get lost on such bounces of any one edge at a time -- it is just limited in that the valid A/B/A/B/A... interleaved rising/falling edge sequences CANNOT occur faster than the sample-rate.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 02 Dec 2014 16:27:48 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/FTM0-Quadrature-decoder/m-p/365237#M18775</guid>
      <dc:creator>egoodii</dc:creator>
      <dc:date>2014-12-02T16:27:48Z</dc:date>
    </item>
  </channel>
</rss>

