极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 20301|回复: 5

[求助]最小系统tone扬声器错误问题[已解决]

[复制链接]
发表于 2013-3-19 12:43:23 | 显示全部楼层 |阅读模式
本帖最后由 donggan 于 2013-3-19 21:57 编辑

自制了一个最小系统,之前在mango上正常的tone发声程序(《Arduino入门教程--第八课--用蜂鸣器模拟警报器》)。在最小系统上只能发出几个单调的声音,请问可能是什么原因?

最小系统环境:ATMEGA8A-PU、16M晶振+22p瓷片电容*2、VCC(PIN7)和GND(PIN8)间接了一个104瓷片电容(手上没有独石电容)、没有接PIN 20(AVCC)/21(AREF)/22 (GND)。扬声器正极串联了一个10uf电解电容。(最小系统测试控制LED、读取A0口数据是正常的)

已经测试过VCC和GND之间加不加电容、扬声器的正负极间加不加电容,声音都是不对。可能是什么地方错误呢?

==============分割线=====================
使用第三方库Tone替代tone(),可解决发声不对的问题。见4楼。
回复

使用道具 举报

 楼主| 发表于 2013-3-19 21:54:14 | 显示全部楼层
使用第三方Tone库发声正确。

代码如下:使用noteplayer.play(i); 代替 tone(4,i); 。发出了正确的警报声音。


  1. #include <Tone.h>

  2. Tone noteplayer;

  3. void setup()
  4. {
  5.     pinMode(4, OUTPUT);
  6.     noteplayer.begin(4);
  7. }

  8. void loop()
  9. {
  10.     int count = sizeof(notes);
  11.     for(int i=200;i<=800;i++)                    //用循环的方式将频率从200HZ 增加到800HZ
  12.     {
  13.        noteplayer.play(i);                            //在四号端口输出频率
  14.        delay(5);                              //该频率维持5毫秒   
  15.     }
  16.     delay(2000);                            //最高频率下维持2秒钟
  17.     for(int i=800;i>=200;i--)
  18.     {
  19.         noteplayer.play(i);
  20.         delay(5);
  21.     }

  22.     noteplayer.stop();
  23.     delay(1000);
  24. }
复制代码


Tone库


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 1 反对 0

使用道具 举报

发表于 2013-3-19 17:26:35 | 显示全部楼层
M8是有这种问题~~~貌似暂时无解,只能换168或者328芯片。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-3-19 17:34:28 | 显示全部楼层
谢谢弘毅{:soso_e179:}。死心了现在就去买328
回复 支持 反对

使用道具 举报

发表于 2013-3-20 08:59:32 | 显示全部楼层
{:soso_e103:}居然有这么神奇的第三方库。。。不错不错。。。又学习了
回复 支持 反对

使用道具 举报

发表于 2015-1-23 15:36:54 | 显示全部楼层
收藏了感谢,找了很久
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-4-26 15:17 , Processed in 0.043879 second(s), 22 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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