打印
[AVR单片机]

大侠求救!!! AVR 调不了占空比 急急急急!!

[复制链接]
1064|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
gxbltao|  楼主 | 2014-12-9 16:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 gxbltao 于 2014-12-9 16:12 编辑

/*****************************************************************************
名字:avr pwm占空比  

环境:studio4.16+winAVR

MCU:Atmega16



******************************************************************************/

#define F_CPU  1000000UL
#include<avr/io.h>
#include<util/delay.h>
#include<avr/interrupt.h>

#define KEY_ON() (( PINB & _BV(PB0))==0x00)

//#include <macros.h>
int flag_bell=0;  
int unsigned x;

/*端口初始化*/
void port_init()   
{  
        DDRD|=(1<<PD5);  //配置PD5口为输出  
        PORTD|=(1<<PD5);  //PD5口的初始值为"1"
        DDRD|=(1<<PD4);
        DDRC|=(1<<PC0);         PORTC|=(1<<PC0); // LED 为输出高电平

        DDRD&=~_BV(PD2);//PD2为输入
        PORTD|=_BV(PD2);
}

/*PWM初始化*/
void pwm_init()
        {
         DDRB=0X00;PORTB=0XFF; // PB:按键输入
         
         TIMSK=(1<<OCIE1A); //使能比较匹配中断
         TCCR1A=0x63;      //配置定时器工作在快速PWM模式
         TCCR1B=0x19;     //无分频
         OCR1A=1000;    //设置捕捉比较输出初值  /** 调整输出频率 **/
         OCR1B=x+40;                             /** 调整占空比的 **/
    }

/**  中断初始化 **/
void INT_intt()
{
        GICR|=_BV(INT0);
        MCUCR=0x02;
     
}
/**  中断输入 **/

ISR(INT0_vect )
{
  //PORTC=0x00;
  //LED_ON=(1<<PC0);
  _delay_ms(3000);
}

/*PWM中断服务程序*/

int main()
{
        cli();
        port_init();
        void INT_intt();
        
        pwm_init();
        while(1)
   {
        if( KEY_ON())
        {
        //cli();
        PORTC=0x00;// LED 为输出高电平
        x++;
        
    }
        //_delay_ms(300);
   }
}


PWM.rar

37.38 KB

请看这份

相关帖子

沙发
gxbltao|  楼主 | 2014-12-9 16:09 | 只看该作者
额 怎么变成这样了

使用特权

评论回复
板凳
gxbltao|  楼主 | 2014-12-9 16:12 | 只看该作者
请以附件为准

使用特权

评论回复
地板
wangch_sh| | 2014-12-9 17:40 | 只看该作者
PWM波出来了吗?先确认按键是否正常,感觉按键写得有问题。

使用特权

评论回复
5
gxbltao|  楼主 | 2014-12-9 17:44 | 只看该作者
wangch_sh 发表于 2014-12-9 17:40
PWM波出来了吗?先确认按键是否正常,感觉按键写得有问题。

波形是出来了 就是调不了占空比 求救呀

使用特权

评论回复
6
gxbltao|  楼主 | 2014-12-9 17:48 | 只看该作者
小弟初学AVR  大侠们更否帮我修改下占空比可调  小弟不甚感激

使用特权

评论回复
7
wangch_sh| | 2014-12-9 17:52 | 只看该作者
OCR1B=x+40;                             /** 调整占空比的 **/
按下按键你应该改这个寄存器的值吧。

使用特权

评论回复
8
gxbltao|  楼主 | 2014-12-9 18:02 | 只看该作者
附件有原理图和整个工程文件 请各位大神 详解 谢谢

使用特权

评论回复
9
gxbltao|  楼主 | 2014-12-10 13:32 | 只看该作者
wangch_sh 发表于 2014-12-9 17:52
OCR1B=x+40;                             /** 调整占空比的 **/
按下按键你应该改这个寄存器的值吧。 ...

是改这个值呀  但是模拟的时候  没能改变  烦请帮我看下 该怎写才对

使用特权

评论回复
10
yifabin023| | 2014-12-10 13:40 | 只看该作者
OCR1B=x+40;这一句要放到while(1)里面去,不然系统不会更新OCR1B的值的!

使用特权

评论回复
11
gxbltao|  楼主 | 2014-12-10 15:10 | 只看该作者
yifabin023 发表于 2014-12-10 13:40
OCR1B=x+40;这一句要放到while(1)里面去,不然系统不会更新OCR1B的值的!

哦 是这样子的吗 我先试试  我刚学单片机 很多不懂的

使用特权

评论回复
12
gxbltao|  楼主 | 2014-12-12 18:58 | 只看该作者

16553

本帖最后由 gxbltao 于 2014-12-13 10:46 编辑

12432434

使用特权

评论回复
13
gxbltao|  楼主 | 2014-12-12 19:01 | 只看该作者
yifabin023 发表于 2014-12-10 13:40
OCR1B=x+40;这一句要放到while(1)里面去,不然系统不会更新OCR1B的值的!

OCR1B=x; 这一句已经放到while(1)里面去了  按下按键还是调不了呀  

大侠 烦请帮忙看看呗  小弟不甚感激!
12# 楼已附上压缩包  占空比.rar 请查看
谢谢了

使用特权

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

本版积分规则

6

主题

45

帖子

0

粉丝