<?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: Stopping the PWM-Output? HC908QY4 on the SofTec NitronKit</title>
    <link>https://community.nxp.com/t5/8-bit-Microcontrollers/Stopping-the-PWM-Output-HC908QY4-on-the-SofTec-NitronKit/m-p/142765#M6382</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;Hi, Sming:&lt;BR /&gt;&lt;BR /&gt;The PTA register will not affect your output as long as the timer is in the PWM mode. What you are seeing on the output is the state that the pin was in when you stopped and reset the timer. Just stopping and reseting the timer does not take it out of PWM mode.&lt;BR /&gt;&lt;BR /&gt;But the solution is easier than you think. First, the PWM should be a solid low when you set it to 0. So you should not need to treat zero as a special case.&lt;BR /&gt;&lt;BR /&gt;For the "high" output, there is a bit in the TSC0 register called CH0MAX (bit 0). When you set this bit, the PWM will go to a solid high.&lt;BR /&gt;&lt;BR /&gt;So something like this should work:&lt;PRE&gt;
   if (ADR &amp;gt; 0x9F)        
      TSC0 = 0x1B;

   if (ADR &amp;lt;= 0x9F)
      TSC0 = 0x1A;&lt;/PRE&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Thu, 29 Oct 2020 08:43:02 GMT</pubDate>
    <dc:creator>rocco</dc:creator>
    <dc:date>2020-10-29T08:43:02Z</dc:date>
    <item>
      <title>Stopping the PWM-Output? HC908QY4 on the SofTec NitronKit</title>
      <link>https://community.nxp.com/t5/8-bit-Microcontrollers/Stopping-the-PWM-Output-HC908QY4-on-the-SofTec-NitronKit/m-p/142764#M6381</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt; &lt;/DIV&gt;&lt;DIV&gt; &lt;/DIV&gt;&lt;DIV&gt;Hello there&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;I've got the Nitron-Kit from SofTec with the HC908QY4 and USB to MON08 Interface.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Now I wrote a little program wich generates a PWM-Signal on the channel 0. The dutycycle can be changed with the value from de ADC. If the value from the ADC is 0x00, i want to stop and set the PWM-Output to 0x00, so there is a clean "0" on the PTA0. Otherwise, if the ADC reaches the value for a 100% dutycycle, i want to set the PWM-Output to 0x01, so there is a clean "1" on the PTA0.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;With my solution, setting the PWM-Output to "1" doesn't work very good. Sometimes it will be set to "1", sometimes it will be set to "0".... Any solutions?&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Heres my Code:&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN class="msg_source_code"&gt;&lt;SPAN class="text_smallest"&gt;Code:&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;PRE&gt;Initialize--------------void pwm_init(){ TSC = 0x30;&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; //Timer stoppen und zurücksetzen TMODH = 0x00;&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; //PWM-Grundfrequenz setzen (ca. 20kHz) TMODL = 0xA0;&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; //PWM-Grundfrequenz setzen (ca. 20kHz) TCH0H = 0x00;&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; //PWM-DutyCycle setzen TCH0L = 0x00;&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; //PWM-DutyCycle setzen TSC0 = 0x1A;&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; //PWM-Generator konfigurieren //TSC = 0x00;&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; //Timer starten}Main-program------------------&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; //BETRIEBSART POTI&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; //Falls Poti in Nullstellung ist&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; while (TRUE){&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (ADR == 0x00)&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; TSC = 0x30;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Timer stoppen und zurücksetzen&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PTA = 0x00;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //PWM-Port löschen&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ADR = 0x00;&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;&amp;nbsp;&amp;nbsp; //Falls Poti in Maximalstellung (0xA0 = Maximum weil PWM Grundfrequenz!)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (ADR &amp;gt; 0x9F)&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;&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; TSC = 0x30;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Timer stoppen und zurücksetzen&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PTA = 0x01;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //PWM-Port immer setzen&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ADR = 0x00;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Falls Poti in gültiger Stellung ist&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if ((ADR &amp;gt; 0x00) &amp;amp;&amp;amp; (ADR &amp;lt;= 0x9F))&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; TSC = 0x00;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Timer starten&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; TCH0L = ADR;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //PWM-DutyCycle (lowerByte) fix einstellen&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/PRE&gt;&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;Thank you very much!&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="font-size: 1;"&gt;(Alban: code format - SRC button)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;P&gt;Message Edited by Alban on &lt;SPAN class="date_text"&gt;2007-01-15&lt;/SPAN&gt; &lt;SPAN class="time_text"&gt;12:06 PM&lt;/SPAN&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 29 Oct 2020 08:43:00 GMT</pubDate>
      <guid>https://community.nxp.com/t5/8-bit-Microcontrollers/Stopping-the-PWM-Output-HC908QY4-on-the-SofTec-NitronKit/m-p/142764#M6381</guid>
      <dc:creator>sming</dc:creator>
      <dc:date>2020-10-29T08:43:00Z</dc:date>
    </item>
    <item>
      <title>Re: Stopping the PWM-Output? HC908QY4 on the SofTec NitronKit</title>
      <link>https://community.nxp.com/t5/8-bit-Microcontrollers/Stopping-the-PWM-Output-HC908QY4-on-the-SofTec-NitronKit/m-p/142765#M6382</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;Hi, Sming:&lt;BR /&gt;&lt;BR /&gt;The PTA register will not affect your output as long as the timer is in the PWM mode. What you are seeing on the output is the state that the pin was in when you stopped and reset the timer. Just stopping and reseting the timer does not take it out of PWM mode.&lt;BR /&gt;&lt;BR /&gt;But the solution is easier than you think. First, the PWM should be a solid low when you set it to 0. So you should not need to treat zero as a special case.&lt;BR /&gt;&lt;BR /&gt;For the "high" output, there is a bit in the TSC0 register called CH0MAX (bit 0). When you set this bit, the PWM will go to a solid high.&lt;BR /&gt;&lt;BR /&gt;So something like this should work:&lt;PRE&gt;
   if (ADR &amp;gt; 0x9F)        
      TSC0 = 0x1B;

   if (ADR &amp;lt;= 0x9F)
      TSC0 = 0x1A;&lt;/PRE&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 29 Oct 2020 08:43:02 GMT</pubDate>
      <guid>https://community.nxp.com/t5/8-bit-Microcontrollers/Stopping-the-PWM-Output-HC908QY4-on-the-SofTec-NitronKit/m-p/142765#M6382</guid>
      <dc:creator>rocco</dc:creator>
      <dc:date>2020-10-29T08:43:02Z</dc:date>
    </item>
    <item>
      <title>Re: Stopping the PWM-Output? HC908QY4 on the SofTec NitronKit</title>
      <link>https://community.nxp.com/t5/8-bit-Microcontrollers/Stopping-the-PWM-Output-HC908QY4-on-the-SofTec-NitronKit/m-p/142766#M6383</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;Hello,&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;Further to Rocco's comments, since you have set TMOD to a value of 0x00A0,&amp;nbsp; the PWM period will actually be 161 cycles (not 160 cycles as you might have intended).&amp;nbsp; This is because the counter does not&amp;nbsp;roll over&amp;nbsp;to zero until one timer clock cycle after the count reaches the TMOD value.&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;Another&amp;nbsp;effect is that,&lt;/FONT&gt; &lt;FONT size="2"&gt;when TCH0 register is set to 0x0000, the PWM pulse width will remain at approximately one cycle -&amp;nbsp;because the PWM output toggles (high)&amp;nbsp;when the timer count reaches 0x00A0, but does not return low until the OC occurs,&amp;nbsp;after the counter&amp;nbsp;overflows to&amp;nbsp;zero.&amp;nbsp; This is why special treatment of the zero duty cycle case is necessary&amp;nbsp;(contrary to Rocco's comment) - simply clear the TOV0 bit within TCS0 register.&amp;nbsp;&lt;/FONT&gt; &lt;FONT size="2"&gt;This also has the consequence that the TCH0 value should be set one less than the desired duty cycle.&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;See what happens if you set TCH0 to the same value as TMOD - it will depend on whether&amp;nbsp;"toggle on overflow" or&amp;nbsp;OC actually occurs first within the device.&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;To smoothly change the duty cycle, without glitching the PWM output, the OC interrupt should be enabled prior to making the change, and the new value for TCH0 entered during the ISR processing.&amp;nbsp; The OC interrupt can then be disabled prior to leaving the ISR, until the next change is required.&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;Regards,&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;Mac&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;&lt;P&gt;Message Edited by bigmac on &lt;SPAN class="date_text"&gt;2007-01-15&lt;/SPAN&gt;&lt;SPAN class="time_text"&gt;03:20 PM&lt;/SPAN&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 15 Jan 2007 13:11:55 GMT</pubDate>
      <guid>https://community.nxp.com/t5/8-bit-Microcontrollers/Stopping-the-PWM-Output-HC908QY4-on-the-SofTec-NitronKit/m-p/142766#M6383</guid>
      <dc:creator>bigmac</dc:creator>
      <dc:date>2007-01-15T13:11:55Z</dc:date>
    </item>
  </channel>
</rss>

