<?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>Kinetis MicrocontrollersのトピックRe: MK66FX1M0 - Updating FTM MOD</title>
    <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/MK66FX1M0-Updating-FTM-MOD/m-p/1023618#M56320</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hello Christopher,&lt;/P&gt;&lt;P&gt;Thank you for updating the answer. Do you have further questions?&lt;/P&gt;&lt;P&gt;Best Regards,&lt;/P&gt;&lt;P&gt;Sabina&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Wed, 27 Nov 2019 03:02:31 GMT</pubDate>
    <dc:creator>Sabina_Bruce</dc:creator>
    <dc:date>2019-11-27T03:02:31Z</dc:date>
    <item>
      <title>MK66FX1M0 - Updating FTM MOD</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/MK66FX1M0-Updating-FTM-MOD/m-p/1023616#M56318</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hello,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I am using the Teensy 3.6 which comes with the MK66FX1M0. I use it to drive a piezo motor. The motor is driven in a pulsed state by using the internal Quadrature Decoder. Speed Control is given by a time interval and the motor turns off after the Encoder has read the needed pulses, and the FTM fires its ISR.&lt;/P&gt;&lt;P&gt;It works fine with the given MOD it is initialized with, but unfortunately I am completely unable to change this MOD once the uC is running. I tried many different found code bits, software triggers, even tried to re-initialize all registers but it is not working. I'm sure there is just one register which needs to be set or read, I am grasping at every straw available and would really appreciate some help.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;The code for the Decoder-subclass:&lt;/P&gt;&lt;BLOCKQUOTE class="jive_macro_quote jive-quote jive_text_macro"&gt;&lt;P&gt;#ifndef QUADDECODE_H&lt;BR /&gt;#define QUADDECODE_H&lt;BR /&gt;&lt;BR /&gt;#include &amp;lt;stdint.h&amp;gt;&lt;BR /&gt;#include "mk20dx128.h"&lt;BR /&gt;#include "core_pins.h"&lt;BR /&gt;&lt;BR /&gt;/*&lt;BR /&gt;* - MAGIE - &lt;BR /&gt;* &lt;A href="https://forum.pjrc.com/threads/26803-Hardware-Quadrature-Code-for-Teensy-3-x?p=90774&amp;amp;viewfull=1#post90774" target="test_blank"&gt;https://forum.pjrc.com/threads/26803-Hardware-Quadrature-Code-for-Teensy-3-x?p=90774&amp;amp;viewfull=1#post90774&lt;/A&gt;&lt;BR /&gt;*/&lt;BR /&gt;&lt;BR /&gt;class QuadDecode_t {&lt;BR /&gt;&amp;nbsp; public:&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; QuadDecode_t(int cts) {&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Pin Assignments&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // FTM2 Pins&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // K20 pin 41,42&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Bit 8-10 is Alt Assignment&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PORTB_PCR18 = 0x00000612;&amp;nbsp;&amp;nbsp; //Alt6-QD_FTM2,FilterEnable,Pulldown&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PORTB_PCR19 = 0x00000612;&amp;nbsp;&amp;nbsp; //Alt6-QD_FTM2,FilterEnable,Pulldown&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Set FTMEN to be able to write registers&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FTM2_MODE=0x04;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Write protect disable - reset value&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FTM2_MODE=0x05;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Set FTM Enable&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Set registers written in pins_teensy.c back to default&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FTM2_CNT = 0;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FTM2_MOD = 0;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FTM2_C0SC =0;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FTM2_C1SC =0;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FTM2_SC = 0x40;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //enable hardware trigger&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FTM2_FILTER=0x22;&amp;nbsp;&amp;nbsp; &amp;nbsp;// 2x4 clock filters on both channels&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FTM2_CNTIN=0;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FTM2_MOD=cts;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Maximum value of counter&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FTM2_CNT=0;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;// Updates counter with CNTIN&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FTM2_QDCTRL=0b11000001;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Quadrature control&lt;BR /&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; Filter enabled, QUADEN set&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Write Protect Enable&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FTM2_FMS=0x40;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;// Write Protect, WPDIS=1&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; NVIC_ENABLE_IRQ(IRQ_FTM2); &amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; void setCounter2( int16_t c ) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FTM2_CNT = c;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int16_t getCounter2( ) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int16_t c = FTM2_CNT;&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return c;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp; void call_changeCTS(int count){&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; FTM2_MOD = count;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Serial.println(count);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; FTM2_SYNC = 0x80;&lt;BR /&gt;&amp;nbsp; }&lt;BR /&gt;};&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;#endif&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;And the Main Code:&lt;/P&gt;&lt;BLOCKQUOTE class="jive_macro_quote jive-quote jive_text_macro"&gt;&lt;P&gt;#include "QuadDecode.h"&lt;BR /&gt;#include "AD9837.h"&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;#define pin_motor_direction 9 // for toggling the direction (left and right) of the motor&lt;BR /&gt;#define pin_enable_pushpull_converter 17 // to turn the push pull converters on and off&lt;BR /&gt;#define pin_test 20 // test pin for various debugging&lt;BR /&gt;&lt;BR /&gt;const long interval = 200000; //Intervall in MIKROSEKUNDEN!&lt;BR /&gt;const int cts = 49; //cts pro Intervall - 1 weniger als angegeben! (!!!Schon vorher prÃ¼fen?!!!)&lt;BR /&gt;&lt;BR /&gt;volatile bool motorTurning = false; &lt;BR /&gt;bool dutyCycleReached = true;&lt;BR /&gt;&lt;BR /&gt;const double minfrequency = 49000;&lt;BR /&gt;double frequency = 54000;&lt;BR /&gt;double initialfrequency;&lt;BR /&gt;float dutyCycle = 0.25;&lt;BR /&gt;&lt;BR /&gt;AD9837 ad9837(frequency*4);&lt;BR /&gt;QuadDecode_t QuadDecode(cts);&lt;BR /&gt;&lt;BR /&gt;IntervalTimer motorTimer; //Intervaltimer des Motors&lt;BR /&gt;IntervalTimer dutyCycleTimer; //Hilfsintervall zur ÃœberprÃ¼fung vom eingestellten Duty Cycle&lt;BR /&gt;&lt;BR /&gt;elapsedMillis elapsedTime;&lt;BR /&gt;bool switched = true;&lt;BR /&gt;&amp;nbsp; &lt;BR /&gt;void setup() {&lt;BR /&gt;&amp;nbsp; tone(2, 2000, 200);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // TURN OFF PUSH PULL CONVERTER&lt;BR /&gt;&amp;nbsp; pinMode(pin_enable_pushpull_converter,OUTPUT);&lt;BR /&gt;&amp;nbsp; digitalWrite(pin_enable_pushpull_converter, LOW);&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp; pinMode(pin_test, OUTPUT);&lt;BR /&gt;&amp;nbsp; digitalWrite(pin_test, LOW);&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // SETUP MOTOR DIRECTION&lt;BR /&gt;&amp;nbsp; pinMode(pin_motor_direction,OUTPUT); // set TOGGLE to OUTPUT&lt;BR /&gt;&amp;nbsp; digitalWrite(pin_motor_direction, LOW);&amp;nbsp; // set high for one motor direction&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp; Serial.begin(115200); &lt;BR /&gt;&amp;nbsp; delay(1000);&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;&amp;nbsp; ad9837.setfrequency(frequency * 4);&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // TURN ON PUSH PULL CONVERTER&lt;BR /&gt;&amp;nbsp; digitalWrite(pin_enable_pushpull_converter, HIGH);&lt;BR /&gt;&amp;nbsp; motorTurning = false;&lt;BR /&gt;&amp;nbsp; while(!motorTurning){&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(frequency &amp;lt; minfrequency){&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; frequency = 49000;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; frequency = frequency - 100;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ad9837.setfrequency(frequency * 4);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; delay(300);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Serial.println(frequency);&lt;BR /&gt;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp; digitalWrite(pin_enable_pushpull_converter, LOW);&lt;BR /&gt;&amp;nbsp; frequency = frequency - 1000;&lt;BR /&gt;&amp;nbsp; Serial.println(frequency);&lt;BR /&gt;&amp;nbsp; ad9837.setfrequency(frequency * 4);&lt;BR /&gt;&amp;nbsp; initialfrequency = frequency;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp; tone(2, 400, 200);&lt;BR /&gt;&amp;nbsp; delay(200);&lt;BR /&gt;&amp;nbsp; tone(2, 800, 200);&lt;BR /&gt;&amp;nbsp; delay(200);&lt;BR /&gt;&amp;nbsp; tone(2, 2000, 200);&lt;BR /&gt;&amp;nbsp; Serial.println("Start");&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp; digitalWrite(pin_enable_pushpull_converter, HIGH);&lt;BR /&gt;&amp;nbsp; motorTimer.begin(motorLoop, interval);&lt;BR /&gt;&amp;nbsp; dutyCycleTimer.begin(dutyCycleLoop, interval*dutyCycle);&lt;BR /&gt;&amp;nbsp; elapsedTime = 0;&lt;BR /&gt;}&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;void loop() {&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;if(elapsedTime &amp;gt; 10000){&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;if(switched){&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;QuadDecode.call_changeCTS(49);&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;else{&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;QuadDecode.call_changeCTS(99);&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;switched = !switched;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;elapsedTime = 0;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;BR /&gt;}&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;//ISR FUNKTIONEN&lt;BR /&gt;&lt;BR /&gt;//ISR Counter-Overflow: Erforderliche Anzahl Flanken erreicht&lt;BR /&gt;void ftm2_isr(void) {&lt;BR /&gt;&amp;nbsp; digitalWrite(pin_enable_pushpull_converter, LOW);&lt;BR /&gt;&amp;nbsp; motorTurning = true;&lt;BR /&gt;&amp;nbsp; // clear overflow flag&lt;BR /&gt;&amp;nbsp; FTM2_SC&amp;amp;=0x7F;&lt;BR /&gt;&amp;nbsp; digitalWrite(pin_test, LOW);&lt;BR /&gt;}&lt;BR /&gt;&lt;BR /&gt;//Duty Cycle ÃœberprÃ¼fung&lt;BR /&gt;void dutyCycleLoop(){&lt;BR /&gt;&amp;nbsp; if(motorTurning) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; dutyCycleReached = true;&lt;BR /&gt;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp; dutyCycleTimer.end();&lt;BR /&gt;}&lt;BR /&gt;&lt;BR /&gt;//Motor Cycle Loop&lt;BR /&gt;void motorLoop(){&lt;BR /&gt;&amp;nbsp; //falls Flanken NICHT erreicht!&lt;BR /&gt;&amp;nbsp; if(!motorTurning){&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Serial.println("Dreht nicht! Dreht zu langsam! Erreicht erforderliche Flanken nicht! Frequenz herabsetzen.");&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; frequency -= 250;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ad9837.setfrequency(frequency * 4);&lt;BR /&gt;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp; //falls Duty Cycle nicht erreicht!&lt;BR /&gt;&amp;nbsp; else if(!dutyCycleReached){&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Serial.println("Dreht, aber Duty Cycle wurde nicht erreicht! Frequenz herabsetzen.");&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; frequency -= 250;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ad9837.setfrequency(frequency * 4);&lt;BR /&gt;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp; //falls unter die Mindestfrequenz gerutscht - setze Duty Cycle rauf, nochmal von vorne!&lt;BR /&gt;&amp;nbsp; if(frequency &amp;lt;= minfrequency){&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Serial.println("Innerhalb des vorgegebenen Duty Cycle nicht mÃ¶glich! Erlaube hÃ¶heren Duty Cycle.");&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; frequency = initialfrequency;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; dutyCycle += 0.1;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ad9837.setfrequency(frequency * 4);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(dutyCycle &amp;gt; 0.95){&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(1){&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tone(2, 4500, 100);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; delay(200);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp; //ansonsten: "ganz normaler" Durchlauf, setze Variablen zurÃ¼ck, "starte" Motor erneut&lt;BR /&gt;&amp;nbsp; motorTurning = false;&lt;BR /&gt;&amp;nbsp; dutyCycleReached = false;&lt;BR /&gt;&amp;nbsp; dutyCycleTimer.begin(dutyCycleLoop, interval * dutyCycle);&lt;BR /&gt;&amp;nbsp; digitalWrite(pin_enable_pushpull_converter, HIGH);&lt;BR /&gt;&amp;nbsp; digitalWrite(pin_test, HIGH);&lt;BR /&gt;}&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 21 Nov 2019 10:01:53 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/MK66FX1M0-Updating-FTM-MOD/m-p/1023616#M56318</guid>
      <dc:creator>c_schweiker</dc:creator>
      <dc:date>2019-11-21T10:01:53Z</dc:date>
    </item>
    <item>
      <title>Re: MK66FX1M0 - Updating FTM MOD</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/MK66FX1M0-Updating-FTM-MOD/m-p/1023617#M56319</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Apparently one needs to look into the PWM registers to update although no PWM is used... &lt;/P&gt;&lt;P&gt;setting the LDOK bit in FTM_PWMLOAD after writing to MOD does the job.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;the updated ISR routine&lt;/P&gt;&lt;BLOCKQUOTE class="jive_macro_quote jive-quote jive_text_macro"&gt;&lt;P&gt;void ftm2_isr(void) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;if((FTM2_SC &amp;amp; FTM_SC_TOF) != 0){&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;FTM2_SC &amp;amp;= ~FTM_SC_TOF;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;BR /&gt;&amp;nbsp; digitalWrite(pin_enable_pushpull_converter, LOW);&lt;BR /&gt;&amp;nbsp; motorTurning = true;&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp; digitalWrite(pin_test, LOW);&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp; if(newMOD != 0){&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; Serial.println(newMOD);&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; FTM2_CNTIN = 0;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; FTM2_MOD = newMOD;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; FTM2_CNT = 0;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; FTM2_PWMLOAD = 0x200;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; newMOD = 0;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; Serial.println("MOD should be changed.");&lt;BR /&gt;&amp;nbsp; }&lt;BR /&gt;}&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 22 Nov 2019 12:34:05 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/MK66FX1M0-Updating-FTM-MOD/m-p/1023617#M56319</guid>
      <dc:creator>c_schweiker</dc:creator>
      <dc:date>2019-11-22T12:34:05Z</dc:date>
    </item>
    <item>
      <title>Re: MK66FX1M0 - Updating FTM MOD</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/MK66FX1M0-Updating-FTM-MOD/m-p/1023618#M56320</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hello Christopher,&lt;/P&gt;&lt;P&gt;Thank you for updating the answer. Do you have further questions?&lt;/P&gt;&lt;P&gt;Best Regards,&lt;/P&gt;&lt;P&gt;Sabina&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 27 Nov 2019 03:02:31 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/MK66FX1M0-Updating-FTM-MOD/m-p/1023618#M56320</guid>
      <dc:creator>Sabina_Bruce</dc:creator>
      <dc:date>2019-11-27T03:02:31Z</dc:date>
    </item>
  </channel>
</rss>

