Go Down

### Topic: Feature request: Adjustable PWM frequency (Read 34525 times)previous topic - next topic

#15

#### winmutt

#16
##### Sep 17, 2009, 04:20 pmLast Edit: Sep 17, 2009, 04:45 pm by winmutt Reason: 1
Bump. Anyone know if 140z is possible with the internal timer.

I may be misreading this but in fast pwm mode, OCR0A controls the period.
Quote

PWM with 2ms period and 10% duty

Configure timer 0 to generate a 2ms period with a 10% duty cycle.

The fast PWM mode where the period is controlled by OCRA has (WGM2,WGM1,WGM0) = (1,1,1). The compare match B output must be used and it should turn on at TOP and reset at match. This happens when (COM0B1,COM0B0) = (1,0). The prescaler is set to 64.

TCCR0A = _BV(COM0B1) | _BV(WGM01) | _BV(WGB00);
TCCR0B = _BV(WGB02) | _BV(CS01) | _BV(CS00);
OCR0A = 250;

The duty cycle (period the PWM is on) is controlled by OCR0B. The range of OCR0B is from 0 to OCR0A (or 250 in this case). If OCR0B exceeds OCR0A, then the PWM output will be alway on. A duty cycle of 10% is set by:

OCR0B = OCR0A * 10% = 250 * .1 = 25

The configuration is complete when OCR0B is assigned:

OCR0B = 25;

Changing the output compare control setting (COM0B1,COM0B0) = (0,1) inverts the waveframe (i.e., the output will be off for 10% and on for 90%).

What is the setting for a 75% duty cycle? How would the period be changed to 250 uS, and how would this affect the precison of the duty cycle?

#17
##### Jan 07, 2011, 05:41 pm
Nice....

Code: [Select]
`void setup() {     TCCR2B = (TCCR2B & 0xF8) | value;}`

This helps me a lot in my project.
To change PWM-frequency on pin9 and 10 i have noticed that TCCR1B works. (don't know what it is. trial and error.)
If I want to change frequency on pin5 and 6. How do I do that?

#18
##### Jan 07, 2011, 05:54 pm
A little bit more reading on this forum gave me the answer.....

TCCR0B is the timer for 5 and 6

Thanks any way

#### koyaanisqatsi

#19
##### Jan 07, 2011, 10:34 pmLast Edit: Jan 07, 2011, 10:42 pm by koyaanisqatsi Reason: 1
Be careful with TCCR0B.  delay() and millis() are based on it and their behavior changes when you change TCCR0B.  Earlier in this thread, I posted how to deal with it.  But there are some other little factors I haven't identified.  My sketch would not run with certain TCCR0B values.  So I generally stay away from that one and just use the other PWM pins if I need a different freq.

Liked again: http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1235060559/0
What about elevensies? Luncheon? Afternoon tea? Dinner? Supper?

Go Up

Please enter a valid email to subscribe