2 Replies Latest reply on Sep 30, 2016 10:47 PM by gaicher_1912301

    Probleme with PWM

    gaicher_1912301

      Hi,

         

      i made my first experiment with pwm on PSOC4 S Series Pioneer Kit and i want to create a breathing led.

         

      It works, but sometimes there is a flashing on the red led. Can somebody give me a hint, why the flashing occurs?

         


       

         

      I use a pwm with a period of 1000 and a clock frequency of 100kHz. The result is a pwm of 100Hz - this is ok!

         

      The red led is connected on port 3[4].

         

      This is my code:

         

      #include <project.h>

         

      uint32_t i=0;

         

      int main()
      {
          CyGlobalIntEnable; /* Enable global interrupts. */

         

          PWM_1_Start();

         

          for(;;)
          {
              for(i=0; i<999; i++)
              {
                  PWM_1_WriteCompare(i);
                  CyDelay(2);
              }
              for(i=999; i>1; i--)
              {
                  PWM_1_WriteCompare(i);
                  CyDelay(2);
              }
          }
      }

        • 1. Re: Probleme with PWM
          user_1377889

          Welcome in the forum.

             

          When you set the compare value to something that is actually larger than the current count, the counter will count down to zero and a new cycle is started. This will introduce flicker.

             

          Your loops are executing a lot faster than the PWM clock runs. I would suggest you to try making a breathe on or off in a fixed time given as 0.5 seconds using a 1ms timer with an interrupt. This would allow the CPU working on some other jobs in parallel.

             

           

             

          Bob

          • 2. Re: Probleme with PWM
            gaicher_1912301

            Thank's Bob!

               

            Now i increased the pwm-frequency and it works fine :-)

               

            Please can you explain exactly, how it should work with the timer interrupt? Do you have an example?

               

            Many thank's

               

            Heimo