We can use the function analogWrite(int x) for digital pins which support PWM because any microcontroller has a built in PWM generator.For given x and for Arduino Uno which is the formula to calculate the duty cycle of the generated PWM signal?Thanks

  • x/255 (Now padding up to 30 characters....)
    – user95861
    Mar 5 at 14:14

2 Answers 2


On pins 5 and 6 (those controlled by Timer 0):

  • duty cycle = (x+1)/256, except for x = 0, which gives a duty cycle of 0.

On the other PWM pins:

  • duty cycle = x/255

The difference comes from the fact that Timer 0, which provides the timing for millis(), micros() and delay(), is configured in “fast PWM” mode, while the other timers are in “phase correct PWM”


Duty Cycle= (x/255)×100%

x is the value passed to the analogWrite() function, ranging from 0 to 255. Duty Cycle is expressed as a percentage, representing the fraction of time the signal is on compared to the total period of the PWM signal.

  • 1
    Not on all pins. Try analogWrite(5, 1) on an Uno and see what comes out. Mar 9 at 11:36

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.