打印

mega88的PWM求解

[复制链接]
999|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
elelevi|  楼主 | 2018-7-5 14:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
请问各位:
     最近调试AVR mega88的两路PWM,使用快速模式,不是很明白,请了解的朋友不吝赐教,这个OC1A,OC1B在使用的时候需要注意什么?
     我想先使用OC1A,然后更改寄存器使用OC1B,分别控制不同颜色的LED,为什么不能实现? 在使用呢PWM的时候不可以两个通道进行切换么?
     以下是我的测试程序,希望大家指正
           void timer_init(void)
{
    TCCR1A=0x82;定时器/计数器1 两路PWM,匹配清零
    //0x82中A是指COM1A1:COM1A0置为10,COM1B1:COM1B0置10,即比较匹配时OCn置0;
    //0x82中2是指WGM11 WGM10置为10与下方控制寄存器A一同控制选择快速PWM模式6

    TCCR1B|=0x09;//定时器/计数器1的控制寄存器B;
    //0x02中0是指将WGM13 WGM12置为01,CS12 CS11 CS10置为010
    //WGM13 WGM12 WGM11 WGM10为0110时,选择快速PWM格式;
    //CS12 CS11 CS10置为001表示选择1分频模式;
    MCUCR=0x00;
   
}

void main()
{
    port_init();
    timer_init();

    while(1)
    {
        
        for(count=0;count<512;count++) //OCR=0时,LED最亮,然后逐渐变暗
        {
            OCR1A=count; //比较匹配寄存器赋值
            
            _delay_ms(5); //延时一段时间,以观察效果
        }
        _delay_ms(1500); // LED最暗时,延时一段时间
        
        TCCR1A=0x22;        
        for(count=0;count<512;count++) //OCR=512时,LED最暗,然后逐渐变亮
        {
            OCR1B=512-count;
            _delay_ms(5);
        }
        _delay_ms(1500); //LED最亮时,延时一段时间
        
        
    }
   
}
      调试的时候,在初始化的时候对TCCR1A进行设定的值,可以改变OC1A或者OC1B输出,但是在主循环中更改输出通道无法实现,不明白,当实现PWM之后,为什么改变这个寄存器的值,没有反应?就是我标注的部分。

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

30

帖子

0

粉丝