芯路恒电子技术论坛

 找回密码
 立即注册
热搜: 活动
查看: 423|回复: 0

【开发板使用问题01】做其他实验时候蜂鸣器乱叫,LED乱亮

[复制链接]
  • TA的每日心情
    可爱
    2019-5-10 10:58
  • 208

    主题

    371

    帖子

    1万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    10834
    发表于 2019-6-16 12:08:53 | 显示全部楼层 |阅读模式
    现象描述(网友原话):做DDS实验的时候,我把输入频率降到665HZ,  发出了极其难听的噪音   ,简直要死, 频率升高之后就听不见了、


    经过确认噪声来源为开发板上的蜂鸣器。那么问题来了,网友表示,他的程序中并没有任何驱动蜂鸣器的代码,也没有给蜂鸣器分配管脚,那么为啥蜂鸣器会响呢?

    原理解析:
    其实,不只是蜂鸣器,开发板上的数码管、LED灯也经常会出现这些莫名其妙的现象,本来程序和他们一点关系都没有,也没有分配这些外设的管脚,为啥他们就会被驱动了呢?

    事实是因为Quartus软件在执行编译时,如果发现某个信号用户没有指定管脚,那么软件会默认随机指定一个空闲管脚到该端口上,而如果恰好该引脚又是一个功能引脚,就会驱动该功能产生相应现象,例如蜂鸣器、数码管、LED灯等容易看到现象的外设。
    如何确定是否有信号的管脚被默认分配到了该功能上呢,其实很简单,在quartus软件的引脚分配界面就可以查看,如下图,就是上面做DDS实验的网友的引脚分配界面:
    冲突位置.jpg

    可以看到,当前该网友还没有对这些信号分配引脚,所以对应的Location这一列有很多信号都是空着的,没有指定引脚,所以编译时候,quartus软件就会默认分配一个管脚给这个信号,软件默认分配的信号再Filter Location这一列里面,可以看到,在上面的截图中,q0[6]刚好被分配到了L6管脚,而L6管脚就恰好对应了AC620开发板的蜂鸣器功能,所以当程序运行时候,q0[6]信号就会驱动蜂鸣器发声了。

    再次总结下:
    • Location这一列是用户自己分配实际IO对应的管脚的列,
    • filtera Location这一列是软件布局布线是默认分配的
    • 如果用户在Location中自己填入了确定的引脚,那么分配完成后Location和Filter Location一列中的管脚就是一致的
    • 用户没有在Location一列中指定确定管脚,编译后软件会再Filter Location中默认指定一个管脚。

    同样的情况可能发生在任意一个没有分配的管脚上,比如LED、数码管等在当前工程中没有用到的功能。

    如果需要解决这个问题,最彻底的方案就是手动将该功能置一个确定值,例如在代码里加入蜂鸣器控制脚,并将其拉低,然后分配正确的引脚,比如在代码里加一个beep端口,并赋值为0,然后分配正确的蜂鸣器端口占用掉该蜂鸣器引脚,这样软件就无法默认分配该引脚给其他信号了,问题得以解决。


    回复

    使用道具 举报

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

    本版积分规则

    QQ|小黑屋|手机版|Archiver|芯路恒电子技术论坛  

    GMT+8, 2019-10-19 12:10 , Processed in 0.097026 second(s), 11 queries , File On.

    Powered by Discuz! X3.3

    © 2001-2017 Comsenz Inc. Template By 【未来科技】【 www.wekei.cn 】

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