succeedli 发表于 2006-7-17 11:37:33

用atmega8产生双路pwm方波

大家好,我使用atmega8输出频率为50,占空比为50%的双路互补方波,设置如下:

DDRB=0x06;

PORTB=0xf9;//设置OC1A,OC1B为输出口,初始输出为0

TCCR1A=(1<<COM1A1)|(1<<COM1A0)|(1<<COM1B1)|(1<<WGM11);

TCCR1B=(1<<WGM13)|(1<<WGM12);   //设置为快速pwm方式,A和B输出互补

ICR1=624;   

OCR1A=312;

OCR1B=312;   //根据公式计算的频率为50,TOP值为624,占空比为为50%,OCR1A为312,OCR1B为312

TCCR1B|=(1<<CS11)|(1<<CS10);//启动定时器1

但按照这个设置后,OC1A和OC1B输出永为0,没有方波输出,也不知道为什么,请高手给以指点,以前没用过PWM。

david1234 发表于 2006-7-17 15:11:06

cs12,cs11,cs10=0; 没有时钟加到PWM上。

改为: TCCR1B=(1<<WGM13)|(1<<WGM12)|(1<<CS10)

succeedli 发表于 2006-7-17 20:39:23

我在stduio里调试过了,时钟我已经加上了,TCCR1B|=(1<<CS11)|(1<<CS10)后,我观察输出cs12,cs11,cs10=011;(1<<WGM13)|(1<<WGM12)应该没问题,但就是没反应

lxwm1983 发表于 2006-7-18 10:48:42

你的定时器设置是错误的啊!你现在的模式是CTC啊!!你改一下WGM的设置!

skype 发表于 2018-2-21 22:09:29

MARK,知道了互补PWM模式
页: [1]
查看完整版本: 用atmega8产生双路pwm方波