maxims 发表于 2015-7-31 21:43:06

【快速PWM】快速PWM配置求助

本帖最后由 maxims 于 2015-7-31 23:42 编辑

void setup() {
pinMode(3, OUTPUT);
pinMode(11, OUTPUT);
TCCR2A = _BV(COM2A1) | _BV(COM2B1) | _BV(WGM21) | _BV(WGM20);
TCCR2B = _BV(CS22);
OCR2A = 127;
OCR2B = 127;

pinMode(9, OUTPUT);
pinMode(10, OUTPUT);
TCCR1A = _BV(COM1A1) | _BV(COM1B1) | _BV(WGM21) | _BV(WGM20);
TCCR1B = _BV(CS21);
OCR1A = 127;
OCR1B = 127;
}

void loop() {
// put your main code here, to run repeatedly:

}
D3/D11引脚设置、输出正常。

但是D9/D10老设置不对,麻烦给个参数,谢谢。

需求:
4组PWM输出,频率1K,占空比可调,谢谢

感谢群里的“冷场王-小易”大半夜的陪我调试
void setup() {
pinMode(9, OUTPUT);
pinMode(10, OUTPUT);
TCCR1A = _BV(COM1A1)|_BV(COM1B1)|_BV(WGM10);
TCCR1B = 0x0B;
OCR1A = 50;
OCR1B = 50;
pinMode(3, OUTPUT);
pinMode(11, OUTPUT);
TCCR2A = _BV(COM2A1) | _BV(COM2B1) | _BV(WGM21) | _BV(WGM20);
TCCR2B = TCCR2B & 0b11111000 | 4;
OCR2A = 50;
OCR2B = 50;
}

seagatecm 发表于 2015-7-31 23:29:13

D9/D10的分频寄存器写错了,不是CS21,是CS11.

seagatecm 发表于 2015-7-31 23:31:11

WGM21和WGM20也要改成WGM11和WGM10

maxims 发表于 2015-7-31 23:47:15

seagatecm 发表于 2015-7-31 23:31 static/image/common/back.gif
WGM21和WGM20也要改成WGM11和WGM10

第二段代码是能达到我的目的的。
能否帮忙把不是同一规范写法的变换一下吗?

seagatecm 发表于 2015-8-1 00:07:21

TCCR1B = 0x0B;
换成位写法是
TCCR1B = _BV(WGM12) | _BV(CS11) | _BV(CS10);

这个可以通过查文档得到。

maxims 发表于 2015-8-1 00:25:13

seagatecm 发表于 2015-8-1 00:07 static/image/common/back.gif
TCCR1B = 0x0B;
换成位写法是
TCCR1B = _BV(WGM12) | _BV(CS11) | _BV(CS10);


TCCR1B = 0x0B;还有这个呢?
谢谢

seagatecm 发表于 2015-8-1 01:01:16

TCCR2B = TCCR2B & 0b11111000 | 4;
这个应该是TCCR2B = 0b1111110; ?
换个写法你测下吧
TCCR2B = _BV(WGM22) | _BV(CS21) | _BV(CS20);

maxims 发表于 2015-8-1 18:12:06

seagatecm 发表于 2015-8-1 01:01 static/image/common/back.gif
TCCR2B = TCCR2B & 0b11111000 | 4;
这个应该是TCCR2B = 0b1111110; ?
换个写法你测下吧


好的,谢谢
页: [1]
查看完整版本: 【快速PWM】快速PWM配置求助