打印
[AVR单片机]

Mega8控制的蜂鸣器会受T1输出的PWM的影响么?

[复制链接]
1218|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
qq0901001|  楼主 | 2014-7-1 09:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 qq0901001 于 2014-7-1 10:04 编辑

各位大大,我在用Mega8做一个台灯项目,唤醒模式有这样一个要求
唤醒时间到达后,触发开机动作
我把开机过程分解为以下几个步骤:
【1】前30s,PWM从0开始,每3s增加100,同时蜂鸣器响一下(我用的是T1输出PWM——范围:0~1023,蜂鸣器是通过CPU延时来做)
【2】30~60s,PWM不再增加(此时PWM应该已经到了1000),但是蜂鸣器逐渐加快DI声速度:DI...DI...DIDI...DIDI...DIDIDIDID....
【3】60s过后,停止DI声
【4】要求:自动唤醒的过程中,如果有按键按下,就停止蜂鸣器提示,并停留在当前PWM下,完成开机

//蜂鸣器函数
void DI()
{
        uchar a;
        for(a=0;a<100;a++)
        {
                BEEP();  _delay_ms(1);
        }
}

//T1——工作于PWM模式,初始化配置
void Init_PWM()
{
        TCCR1A=0xa3;
        TCCR1B=0x02;//10位相位修正PWM
}

在处理这一过程的时候,我是这样
if(wakeup_flag == 1) //唤醒标志位置位
{
   if(t<=30) //前30s动作
   {
      if( t%3 == 0 )  //每3s动作一次
      {
         PWM_SET(OCR1A,OCR1A+100,OCR1B,OCR1B+100); //PWM渐变函数,两路同时输出
         DI();   // 蜂鸣器发生
      }
   }

   else if(t>30 && t<=60)    DI();

   else;
}

这样出来的结果是,蜂鸣器不能够正常发生,而是“刺啦刺啦”的伴随着PWM的增加,不是一声清脆的DI声

我试着注释掉 PWM输出这一行,就没问题,请问下大大们,是因为T1的PWM输出影响了这个蜂鸣器么


我开始以为是PWM输出频率太高,拖慢了CPU的速度,导致蜂鸣器用延时方法做会出现这种情况

我把蜂鸣器单独放到定时器0里  也是如此   百思不得其解   请大大们不吝赐教   感激不尽   谢过!

相关帖子

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

本版积分规则

2

主题

11

帖子

1

粉丝