PWM未在atmega8中更新

时间:2014-10-30 19:24:38

标签: avr

我正在尝试在atmega 8的PB1和PB2上使用硬件PWM。但是在代码中,这些引脚的输出值在发生情况时不会更新。请指导。

#include <avr/io.h>
#include <util/delay.h>
void init_pwmA(uint8_t a)
{

    TCCR1A|=(1<<COM1A1)|(1<<WGM11);
    TCCR1B|=(1<<WGM12) |(1<<WGM13)| (1<<CS10)|(1<<CS11);
    ICR1=a;
    OCR1A=0;

}
void init_pwmB(uint8_t a)
{

    TCCR1A|= (1<<WGM11)|(1<<COM1B1);
    TCCR1B|=(1<<WGM12) |(1<<WGM13)| (1<<CS10)|(1<<CS11);
    ICR1=a;
    OCR1B=0;
}


int main()
{ 

    DDRD=0x00;
    DDRB=0xFF;
    PORTB=0x00;
    while(1)
    {
        if(PIND&(0x01) == 0x01)  
        {
            //PORTB=0b00000110;
                init_pwmB(0);
                init_pwmA(0);

        }
        if(PIND&(0x02) == 0x02)
        {

            init_pwmA(255);


        }
    }
    return 0;
}

1 个答案:

答案 0 :(得分:0)

ICR1中的

是最高值(100%PWM的值),在OCR1A中是所需的PWM值。

所以将代码更改为:

ICR1=0xff; //assuming, you want 255 to be your top value
OCR1A=a; //your PWM value

参见表39. Mega8手册中的波形生成模式位描述。