搜索
bottom↓
回复: 10

请教马老师:m8的pwm1驱动蜂鸣器输出正常,一段时间后关断pwm,改用端口引脚来控制,但是我

[复制链接]

出0入0汤圆

发表于 2010-1-5 20:32:36 | 显示全部楼层 |阅读模式
请教马老师:m8的pwm1驱动蜂鸣器输出正常,一段时间后关断pwm,改用端口引脚来控制,
    就是关断后我想让它一直输出低电平,即PORTB &= 0xf8;
    我用的pwm1的oc1a,但是我怎么也不能控制它,
    相应引脚上的电平用示波器看,发现是不定的,有的时候一直保持高,有的时候低,请问是怎么回事,谢谢

出0入0汤圆

发表于 2010-1-5 20:46:10 | 显示全部楼层
把timer1改成其他模式而不是PWM模式,应该就可以直接控制IO了。

出0入0汤圆

发表于 2010-1-5 20:47:21 | 显示全部楼层
顺便不解的问一句,在PWM模式下,也可以一直输出低的,有什么特殊原因不用吗?

出0入0汤圆

 楼主| 发表于 2010-1-5 20:56:47 | 显示全部楼层
我用的是快速PWM  方波的

出0入0汤圆

 楼主| 发表于 2010-1-5 20:59:16 | 显示全部楼层
/**********************************************************************************************
**  函数名称:   void timer1_init()                 
**  功能描述:   定时器1初始化, TIMER1 initialize
**  入口参数:   无
**  时钟选择:   8分频
**  工作模式:   14) PWM fast, TOP=ICRn
**  期望值  :   4.000KHz
**  实际值  :   3.906KHz (2.4%)
**********************************************************************************************/
void timer1_init(void)//PWM
{
TCCR1B = 0x00;                             // stop
TCNT1H = 0x00;                             // setup
TCNT1L = 0x00;
OCR1AH = 0x00;
OCR1AL = 0x10;                             // 占空值
ICR1H  = 0x00;
ICR1L  = 0x1f;                             // TOP值
TCCR1A = 0x82;
TCCR1B = 0x18;                             // start Timer
}

出0入0汤圆

 楼主| 发表于 2010-1-5 21:03:06 | 显示全部楼层
主程序中用 TCCR1B |= (1<<1);开PWM
一段时间后
    接着用 TCCR1B &= ~(1<<1);关PWM
跟一条指令 PORTB &= ~(1<<1);即让PWM对应的IO口输出低电平
    但是控制不了

出0入0汤圆

发表于 2010-1-5 21:26:06 | 显示全部楼层
理论必须与实践结合,这是搞应用的科学。

蜂鸣器有“有源”和“无源”的区别。

有源的只要加上5V,它自己就会响,因为内部已经有555产生固定的震荡方波。而无源的需要使用方波信号驱动。

你的蜂鸣器是“有源”还是“无源”的?确定后就知道是什么原因了。

出0入0汤圆

 楼主| 发表于 2010-1-5 21:31:57 | 显示全部楼层
谢谢马老师 不是蜂鸣器的问题 我说蜂鸣器只是举个例子 说的更加具体直观点

我用的就是无源的 所以用PWM 通过三极管来驱动 就是当timer1停止后 我后面是跟了一条指令来让口线拉低的

但用示波器看却有的时候一直口线是高电平 也就是说timer1停止后 口线好像不能控制 不知道是怎么回事

出0入0汤圆

发表于 2010-1-5 22:42:29 | 显示全部楼层
PWM输出到一个I/O口有一个控制位。

如果你设置了PWM输出到I/O口,那么该I/O口就只能受PWM输出的控制。

如果PWM停止了,你还必须设置把PWM的输出与该I/O断开,此时该I/O口可以通过程序设置了。

具体查一下手册。

出0入0汤圆

 楼主| 发表于 2010-1-5 23:04:23 | 显示全部楼层
哦 谢谢马老师 应该是把TCCR1A的高两位选择成普通io口吧 就是高两位设置成00

明天去公司试试 谢谢马老师!受益匪浅!

出0入0汤圆

发表于 2010-1-5 23:29:12 | 显示全部楼层
应该是的。

嵌入式的设计是针对具体的应用的,越简单越好,从硬件设计开始就应该注意。蜂鸣器如果只是应用于提示和报警(不是放音乐),那么应该使用有源的,控制起来非常方便和省事,并且成本基本是一样的。如果你不是控制蜂鸣器的话,控制马达就另说了。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-3 02:51

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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