<?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>8-bit MicrocontrollersのトピックRe: Regarding PWM generation on MC68HC908QY4A Microcontroller</title>
    <link>https://community.nxp.com/t5/8-bit-Microcontrollers/Regarding-PWM-generation-on-MC68HC908QY4A-Microcontroller/m-p/190004#M14505</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hello, and welcome to the forum.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;The&amp;nbsp;TMOD and TCH1 registers are both 16-bits.&amp;nbsp; However, I notice that you are not setting the high byte value in either case.&amp;nbsp; For the modulo register, the high byte will have value 0xFF, and for TCH1 the high byte has indeterminate value after a reset.&amp;nbsp; Additionally, a&amp;nbsp;value of 128 for TCH1 does not represent&amp;nbsp;50 percent duty - rather a duty of 128/160, or 80 percent.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Since there is a coherency mechanism for both registers, the high byte value requires to be written first, followed by the low byte.&amp;nbsp; Alternatively, if using the CW compiler, the following should also work correctly:&lt;/P&gt;&lt;P&gt;&lt;FONT face="courier new,courier"&gt;TMOD = 159;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT face="courier new,courier"&gt;TCH1 = 80;&amp;nbsp;&amp;nbsp; // 50% duty&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Note that, unless you trim the internal oscillator frequency, the tolerance for the PWM frequency may be up to +/-25 percent.&amp;nbsp; The internal oscillator frequency needs to be calibrated as part of the programming procedure, with the trim value normally&amp;nbsp;programmed to flash address 0xFFC0.&amp;nbsp; Your code will then need to transfer this value to the trim register.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;For the initialisation of TSC and TSC0 registers, it is much more efficient to simultaneously write all bits, rather than sequentially writing individual bits.&lt;/P&gt;&lt;P&gt;&lt;FONT face="courier new,courier"&gt;TSC&amp;nbsp; = 0x32;&amp;nbsp; // Stop and clear timer, prescale 4&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT face="courier new,courier"&gt;TSC0 = 0x1A;&amp;nbsp; // Unbuffered PWM mode&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Regards,&lt;/P&gt;&lt;P&gt;Mac&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Tue, 13 Dec 2011 22:28:50 GMT</pubDate>
    <dc:creator>bigmac</dc:creator>
    <dc:date>2011-12-13T22:28:50Z</dc:date>
    <item>
      <title>Regarding PWM generation on MC68HC908QY4A Microcontroller</title>
      <link>https://community.nxp.com/t5/8-bit-Microcontrollers/Regarding-PWM-generation-on-MC68HC908QY4A-Microcontroller/m-p/190003#M14504</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I using MC68HC908QY4A Microcontroller for motor control application using PWM. As per the data sheet of the device, I am writing the values in respective hardware registers but we are not getting the desired output. Following are the steps:&lt;BR /&gt;&lt;BR /&gt;1. Internal clock is selected, since there is no external crystal connected on the board.&lt;BR /&gt;&lt;BR /&gt;2. Prescalar value is selected for Internal bus clock/ 4.&lt;BR /&gt;&lt;BR /&gt;3.To generate 5KHz PWM signal with 50% duty cycle on TCH1 in unbuffered mode, registers TMODL = 159 and TCH1L = 128 are loaded.&lt;BR /&gt;&lt;BR /&gt;4. Toggle on overflow is enabled and Clear on output compare is selected.&lt;BR /&gt;&lt;BR /&gt;All the settings has been taken care of as mentioned in reference manual page 125. I am also attaching the code file for your reference.&lt;BR /&gt;&lt;BR /&gt;Also, if I clear the TOV1 bit and select toggle on compare, i am able to see PWM signal of close to 5.5Hz with PS[010](prescalar). At PS[000] PWM signal frequency is 22.7Hz (multiplied by 4).&lt;BR /&gt;&lt;BR /&gt;Please provide your valuable suggestions to help us in this regard. Also, if there is any sample code available for PWM generation for this microcontroller family, kindly share. &amp;nbsp;&lt;BR /&gt;&lt;BR /&gt;Regards,&lt;BR /&gt;Rakesh&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;/********************************* Code Begin **************************************/&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;#include &amp;lt;hidef.h&amp;gt; /* for EnableInterrupts macro */&lt;BR /&gt;#include "derivative.h" /* include peripheral declarations */&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;#define COP_ENABLE 0&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;// Enable Watchdog&lt;BR /&gt;#define STOP_INSTRUCTION_DISABLE 0&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;// Disable Stop instruction&lt;BR /&gt;#define STOP_RECOVERY_LONG 0&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;// Stop Mode Recovery after 4096 cycles&lt;BR /&gt;#define LVI_3V 0&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // 3V operating voltage of LVI module&lt;BR /&gt;#define LVIPWR_ENABLE 0&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; // Enable LVI Module Power&lt;BR /&gt;#define LVIRST_ENABLE 0&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;// Enable LVI Module Reset&lt;BR /&gt;#define LVISTOP_DISABLE 0&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;// Disable LVI during STOP-Mode&lt;BR /&gt;#define COP_LONG_RESETTIME 0&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;// Watchdog resets after 262128* BUSCLK*4&lt;BR /&gt;&lt;BR /&gt;#define RSTEN_ACTIVE 0x01&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; // Reset function active in pin&lt;BR /&gt;#define INTERNAL_OSC 0&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; // Internal oscillator&lt;BR /&gt;#define IRQ_ACTIVE 0x40&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; // Interrupt request function active&lt;BR /&gt;#define IRQ_PULLUP_CONNECT 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // IRQ pin pullup connected between IRQ pin and VDD&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;void Set_PWM_out_Param (void);&lt;BR /&gt;void SystemInit(void);&lt;BR /&gt;void PWM_out_Init (void);&lt;BR /&gt;void MCU_init(void); /* Device initialization function declaration */&lt;BR /&gt;&lt;BR /&gt;void main(void)&lt;BR /&gt;{&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp; /* Uncomment this function call after using Device Initialization&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; to use the generated code */&lt;BR /&gt;&amp;nbsp; /* MCU_init(); */&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp; //EnableInterrupts; /* enable interrupts */&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp; /* include your code here */&lt;BR /&gt;&amp;nbsp; SystemInit();&lt;BR /&gt;&amp;nbsp; PWM_out_Init();&lt;BR /&gt;&amp;nbsp; Set_PWM_out_Param();&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp; for(;&lt;A href="http://freescale.i.lithium.com/i/smilies/16x16_smiley-wink.gif"&gt;&lt;IMG alt=":smileywink:" class="emoticon emoticon-smileywink" src="http://freescale.i.lithium.com/i/smilies/16x16_smiley-wink.gif" title="Smiley Wink" /&gt;&lt;/A&gt; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp; }//__RESET_WATCHDOG(); /* feeds the dog */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* loop forever */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* please make sure that you never leave this function */&lt;BR /&gt;}&lt;BR /&gt;&lt;BR /&gt;void SystemInit(void)&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Write CONFIG1-Register (Write-Once-Register)&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;CONFIG1 = (&amp;nbsp;&amp;nbsp;&amp;nbsp; COP_ENABLE |&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; // Enable Watchdog&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;STOP_INSTRUCTION_DISABLE |&amp;nbsp;&amp;nbsp;&amp;nbsp; // Disable Stop instruction&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;STOP_RECOVERY_LONG |&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Stop Mode Recovery after 4096 cycles&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;LVI_3V |&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;&amp;nbsp;&amp;nbsp; // 5V operating voltage of LVI module&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;LVIPWR_ENABLE |&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; // Enable LVI Module Power&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;LVIRST_ENABLE |&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; // Enable LVI Module Reset&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;LVISTOP_DISABLE |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Disable LVI during STOP-Mode&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; COP_LONG_RESETTIME&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Watchdog resets after 262128* BUSCLK*4&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;&amp;nbsp;&amp;nbsp; );&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;// Write CONFIG2-Register (Write-Once-Register)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CONFIG2 = (&amp;nbsp;&amp;nbsp;&amp;nbsp; RSTEN_ACTIVE |&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; // Reset function active in pin&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; INTERNAL_OSC |&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; // Inernal Crystal oscillator&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; IRQ_ACTIVE&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; // Interrupt request function active&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; IRQ_PULLUP_CONNECT&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // IRQ pin pullup connected between IRQ pin and VDD&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;&amp;nbsp;&amp;nbsp; );&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //OSCTRIM = 0x19;&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; &amp;nbsp;&lt;BR /&gt;}&lt;BR /&gt;&lt;BR /&gt;void PWM_out_Init (void)&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp; TSC_TSTOP = 1;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Stop the TIM counter */&lt;BR /&gt;&amp;nbsp; TSC_TRST = 1;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Reset TIM counter. */&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;&amp;nbsp; DDRA_DDRA1 = 1;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Configuring PTA1 pin as output */&lt;BR /&gt;&amp;nbsp; PTA_PTA1 = 1;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Driving high */&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;&amp;nbsp; /* Setting the pre-scalar value as ÷ 4, i.e. 3.2MHz÷4 = 800KHz*/&lt;BR /&gt;&amp;nbsp; TSC_PS0 = 0;&lt;BR /&gt;&amp;nbsp; TSC_PS1 = 1;&lt;BR /&gt;&amp;nbsp; TSC_PS2 = 0;&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;}&lt;BR /&gt;&lt;BR /&gt;void Set_PWM_out_Param (void)&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /********** PWM signal Frequency Settings **********/&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Loading the values in appropriate registers */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; TMODL = 159;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Frequency 160 * (1/800 KHz) = 5KHz*/&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //TMODH = 10;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; TCH1L = 128;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* 50% Duty Cycle */&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; TSC1_MS1A = 1;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* for unbuffered output compare or PWM signals */&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; TSC1_TOV1 = 1;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* toggle-on-overflow */&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;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; TSC1_ELS1B = 1;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; TSC1_ELS1A = 0;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Clear the TCH1 on output compare */&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; TSC_TSTOP = 0;&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;/********************************* Code End **************************************/&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 13 Dec 2011 14:27:31 GMT</pubDate>
      <guid>https://community.nxp.com/t5/8-bit-Microcontrollers/Regarding-PWM-generation-on-MC68HC908QY4A-Microcontroller/m-p/190003#M14504</guid>
      <dc:creator>rakeshc4</dc:creator>
      <dc:date>2011-12-13T14:27:31Z</dc:date>
    </item>
    <item>
      <title>Re: Regarding PWM generation on MC68HC908QY4A Microcontroller</title>
      <link>https://community.nxp.com/t5/8-bit-Microcontrollers/Regarding-PWM-generation-on-MC68HC908QY4A-Microcontroller/m-p/190004#M14505</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hello, and welcome to the forum.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;The&amp;nbsp;TMOD and TCH1 registers are both 16-bits.&amp;nbsp; However, I notice that you are not setting the high byte value in either case.&amp;nbsp; For the modulo register, the high byte will have value 0xFF, and for TCH1 the high byte has indeterminate value after a reset.&amp;nbsp; Additionally, a&amp;nbsp;value of 128 for TCH1 does not represent&amp;nbsp;50 percent duty - rather a duty of 128/160, or 80 percent.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Since there is a coherency mechanism for both registers, the high byte value requires to be written first, followed by the low byte.&amp;nbsp; Alternatively, if using the CW compiler, the following should also work correctly:&lt;/P&gt;&lt;P&gt;&lt;FONT face="courier new,courier"&gt;TMOD = 159;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT face="courier new,courier"&gt;TCH1 = 80;&amp;nbsp;&amp;nbsp; // 50% duty&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Note that, unless you trim the internal oscillator frequency, the tolerance for the PWM frequency may be up to +/-25 percent.&amp;nbsp; The internal oscillator frequency needs to be calibrated as part of the programming procedure, with the trim value normally&amp;nbsp;programmed to flash address 0xFFC0.&amp;nbsp; Your code will then need to transfer this value to the trim register.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;For the initialisation of TSC and TSC0 registers, it is much more efficient to simultaneously write all bits, rather than sequentially writing individual bits.&lt;/P&gt;&lt;P&gt;&lt;FONT face="courier new,courier"&gt;TSC&amp;nbsp; = 0x32;&amp;nbsp; // Stop and clear timer, prescale 4&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT face="courier new,courier"&gt;TSC0 = 0x1A;&amp;nbsp; // Unbuffered PWM mode&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Regards,&lt;/P&gt;&lt;P&gt;Mac&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 13 Dec 2011 22:28:50 GMT</pubDate>
      <guid>https://community.nxp.com/t5/8-bit-Microcontrollers/Regarding-PWM-generation-on-MC68HC908QY4A-Microcontroller/m-p/190004#M14505</guid>
      <dc:creator>bigmac</dc:creator>
      <dc:date>2011-12-13T22:28:50Z</dc:date>
    </item>
    <item>
      <title>Re: Regarding PWM generation on MC68HC908QY4A Microcontroller</title>
      <link>https://community.nxp.com/t5/8-bit-Microcontrollers/Regarding-PWM-generation-on-MC68HC908QY4A-Microcontroller/m-p/190005#M14506</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Dear Mac,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thank you very much for your suggestions. It is working fine now.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Regards,&lt;/P&gt;&lt;P&gt;Rakesh&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 14 Dec 2011 19:53:01 GMT</pubDate>
      <guid>https://community.nxp.com/t5/8-bit-Microcontrollers/Regarding-PWM-generation-on-MC68HC908QY4A-Microcontroller/m-p/190005#M14506</guid>
      <dc:creator>rakeshc4</dc:creator>
      <dc:date>2011-12-14T19:53:01Z</dc:date>
    </item>
  </channel>
</rss>

