极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 10768|回复: 1

求助:请AVR的高手帮忙写个8MRC的PWM配置

[复制链接]
发表于 2015-7-13 16:42:25 | 显示全部楼层 |阅读模式
ATMEGA328P,内部8MRC,想做个490Hz的PWM输出,这个频率我一直写不出来。
请高手帮忙写下,最好能有4路输出。
回复

使用道具 举报

 楼主| 发表于 2015-7-14 09:30:58 | 显示全部楼层
自己折腾出来了,自己答下吧
因为是8M的RC,所以用8分频,CS11。WGM12和WGM10是采用Fast PWM。
这里写了4个通道的PWM。
185是随便的一个占空比。

void setupPWM9() // OC1A
{
    pinMode(9, OUTPUT);
    TCCR1A = 0;
    TCCR1B = 0;
    TCCR1B |= _BV(CS11) | _BV(WGM12);
    TCCR1A |= _BV(COM1A1) | _BV(WGM10);
    OCR1A = 185;
}

void setupPWM5() // OC0B
{
    pinMode(5, OUTPUT);
    TCCR0A = 0;
    TCCR0B = 0;
   
    TCCR0B |= _BV(CS01);
    TCCR0A |= _BV(COM0B1) |  _BV(WGM01) | _BV(WGM00);

    OCR0B = 185;   
}

void setupPWM6() // OC0A
{
    pinMode(6, OUTPUT);
    TCCR0A = 0;
    TCCR0B = 0;
   
    TCCR0B |= _BV(CS01);
    TCCR0A |= _BV(COM0A1) |  _BV(WGM01) | _BV(WGM00);
    OCR0A = 185;
}

void setupPWM3() // OC2B
{
    pinMode(3, OUTPUT);
    TCCR2A = 0;
    TCCR2B = 0;
   
    TCCR2B |= _BV(CS21);
    TCCR2A |= _BV(COM2B1) | _BV(WGM21) | _BV(WGM20);
    OCR2B = 185;
}
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-16 10:38 , Processed in 0.034052 second(s), 17 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表