完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
本帖最后由 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里 也是如此 百思不得其解 请大大们不吝赐教 感激不尽 谢过! |
|
相关推荐 |
|
只有小组成员才能发言,加入小组>>
AVR Atmega16 Bootloader程序与上位机LabView程序
5182 浏览 6 评论
#include <ioavr.h>这个头文件我应该下什么编译器
7796 浏览 0 评论
3078 浏览 2 评论
3128 浏览 1 评论
10110 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-25 22:12 , Processed in 0.372946 second(s), Total 40, Slave 31 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号