avr怎么调节pwm占空比

#include<iom16v.h>#include<macros.h>intflag_bell=0;/*端口初始化*/voidport_init(){DDRD|=(1<... #include <iom16v.h>
#include <macros.h>
int flag_bell=0;

/*端口初始化*/
void port_init()
{
DDRD|=(1<<DDD5); //配置PD5口为输出
PORTD|=(1<<PD5); //PD5口的初始值为"1"
}

/*PWM初始化*/
void pwm_init()
{
SREG=0x80; //使能全局中断
TIMSK=(1<<OCIE1A); //使能比较匹配中断
TCCR1A=0x63; //配置定时器工作在快速PWM模式
TCCR1B=0x19; //无分频
OCR1A=10000; //设置捕捉比较输出初值
OCR1B=750;

}

/*PWM中断服务程序*/
#pragma interrupt_handler pwm_int:7
void pwm_int()
{
flag_bell=flag_bell+1;
if(flag_bell==1)
{
flag_bell=0;
PORTD=~(PORTD);
}
}
void main()
{
port_init();
pwm_init();

while(1);
}
这个程序不能改变占空比那个大神 帮帮看看
展开
 我来答
温都斯基
推荐于2016-10-30 · TA获得超过225个赞
知道小有建树答主
回答量:72
采纳率:0%
帮助的人:129万
展开全部
定时器工作在模式15时PWM只能从OC1B(PD4)管脚输出,而不是OC1A(PD5),OC1A在该模式下只能输出方波。所以你只要在port_init() 函数中加上DDRD|=(1<<PD4)就可以在PD4管脚输出PWM,频率由OCR1A确定,占空比由OCR1B确定。具体可以从数据手册中查看或者继续追问我
追问
请问怎么多管脚输出pwm?
追答
如果是硬件PWM的话,Mega16最多可以输出四路(定时器0、2各1路,定时器1两路),如果是软件PWM的话那就随便几路了,你是需要哪种?
linzjay
2013-08-20 · TA获得超过257个赞
知道小有建树答主
回答量:286
采纳率:0%
帮助的人:251万
展开全部
你这里pd5输出口0和1 的变化是你要调节的,输出1的时间占一个周期的时间就是你的占空比,而你这个在代码里面是通过flag_bell这个参数来控制的,目前你的flag_bell只有0或者1,0的时候输出0,1的时候输出1,这样占空比是0.5;当然你可以根据自己的喜好设置占空比,通过flag_bell的值来设定,比如你把pwm中断服务程序给下:

/*PWM中断服务程序*/
#pragma interrupt_handler pwm_int:7
void pwm_int()
{
flag_bell=flag_bell+1;
if(flag_bell==9)//这里设置周期,周期为数字+1
{
flag_bell=0;
if(flag_bell==3)//这里设置什么时候开始为0,及占空比为(这个数字+1)/周期
PORTD=~(PORTD);
}
}
这样的话,周期是10,为1的时间是(0,1,2)三个时间单位,所以占空比是0.3,当然你可以随意改,希望你能理解,不理解的话继续问,这些嵌入式的东西就要自己好好玩,玩多了就会了
更多追问追答
追问
不行啊 大神 这样改 连它的频率也变了 而且出来的波也不对  是乱波
追答
这样的话频率确实会变的,波形按理说应该不会是乱波啊,看代码的话也就flag_bell这里可能可以改占空比了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ATF144X
2013-08-21 · TA获得超过1.2万个赞
知道大有可为答主
回答量:5344
采纳率:77%
帮助的人:4663万
展开全部

既然你用了单片机的PD5,并且这单片机有PWM功能,你为何还要用模拟时序的方式?浪费啊!

举个例子,设置TC1为快速PWM方式,输入频率为1MHz时,在PD4和PD5输出非反相的PWM,频率1M/100=10KHz,占空比通过设置OCR1A和OCR1B来实现:

PORTD=0x00;
DDRD=0x30;
TCCR1A=0xA2;
TCCR1B=0x19;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;  //ICR设置PWM频率
ICR1L=0x63;
OCR1AH=0x00; //设置PD4输出占空比
OCR1AL=0x22;
OCR1BH=0x00; //设置PD5输出占空比
OCR1BL=0x22;
更多追问追答
追问
TCNT1H=0x00;TCNT1L=0x00;这个寄存器的作用   好友能不能把另外两种输出pwm端口写出来  谢谢
追答
另外两种没试验过,我主要用的这种。
TCNT1H和TCNT1L寄存器的初值不用考虑。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式