发 帖  
原厂入驻New
[AVR问答]

[定时器计数器] Mega8控制的蜂鸣器会受T1输出的PWM的影响么?

2014-7-1 10:02:23  1473 蜂鸣器
分享
本帖最后由 qq0901001 于 2014-7-1 10:10 编辑

各位大大,我在用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) //唤醒标志位置位
{       uint x,y;
   if(t<=30) //前30s动作
   {
      if( t%3 == 0 )  //每3s动作一次
      {   
         x=OCR1A+100;
         y=OCR1B+100;
         PWM_SET(OCR1A,x,OCR1B,y); //PWM渐变函数,两路同时输出
         DI();   // 蜂鸣器发生
      }
   }

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

   else;
}

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

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

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

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




0
2014-7-1 10:02:23   评论 分享淘帖

只有小组成员才能发言,加入小组>>

385个成员聚集在这个小组

加入小组

创建小组步骤

关闭

站长推荐 上一条 /8 下一条

快速回复 返回顶部 返回列表