完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
`最近学校进行项目设计,我们的设计中有一部分是利用小型的光电传感器(样式如下图), 利用学校所发的开发板上外接端口的3.3v和gnd端口作为传感器的电源,信号引脚接到另一个外接端口上,用来读取传感器发出的信号。当有障碍物接近时,信号输出为低,反之则高。当信号为高时,板子上的一个led小灯点亮。 问题是,无论信号如何变化,小灯始终没有反应,我的代码如下: 使用的软件是vivado(学校硬性要求),百度了很多帖子,没有找到类似的代码, 请各位大神指教,是我的代码本身就有问题还是其他的原因,谢谢!
` |
|
相关推荐
7个回答
|
|
首先确定是否是硬件问题:
1.图上的红外传感器需要进行灵敏度调节,即那个旋钮,用示波器看下out引脚电平是否有高低电平的输出,还有看下输出电压是否为3.3V; 2.对于FPGA来说在out引脚进行分配时,看下电平等级是否为3.3V。 3.LED灯,自己给个高低电平测试一下能不能亮。 软件问题: 仿真一下就知道了,时序是不是你要求的 |
|
|
|
不是不亮,是时间太短了。你的代码里,clk的每次上升沿都要判断输入信号下降沿(是否有障碍物),同时在跳边沿来临时刻点亮led,跳边沿过去之后,led就被赋值0了。但是这个跳边沿时间太短了吧,应该加一个延时,就能看到了。
|
|
|
|
这个传感器我以前用过,距离大一些就很不准了。在你的描述中,是接近障碍物输出信号为低,但是你的程序为什么捕捉的是上升沿??你捕捉的这个尖端脉冲是,忽然上升会使得cgq_vld置1,下个clk正跳变过来时候,led置1.
|
|
|
|
先说说程序的问题:
always @(posedge clk) cgq_dly <= cgq; assign cgq_vld = cgq & ~cgq_dly; //捕捉尖端脉冲信号 这一段你表达的意思是捕捉cgq的上升沿,因此cgq_vld信号长度至多一个时钟,那么也就是灯泡最多亮一个clk周期,不知道你的clk设置是多少,稍高一点恐怕肉眼难以看到。这种工作方式不知道是否和你需求一致。 再说硬件的问题: 光电传感器输入3.3V,你的开发板输出电平是否是3.3V?建议查原理图,或者接到示波器上看看。 |
|
|
|
时间太短了吧?一个脉冲是一个时钟周期,可以加个延时试试,可以加个ila抓下波形看看,进来的信号什么样。
|
|
|
|
如果是想看时序问题的话,写个testbench仿真一下较好的
另外我个人是不推荐去判断 wire 型数据的。 还有就是楼上所说的,你只给了一个周期的使能信号,感觉应该是看不到。 你可以将输入信号的上升沿作为使能的开始,下降沿作为使能的结束。 祝成功 |
|
|
|
你这是检测上升沿,然后让小灯亮的啊。首先,假设你的硬件没毛病。
1.当你检测到上升沿,也就是由0变为1,这个时刻,灯是亮的,然后还没等你看到灯亮呢,灯就灭了,也就是不管怎样压根看不到。 2.因为你让灯亮的条件是上升沿,而你的电平此后一直保持高,肯定不亮啊。 3.建议:把输入量cqg电平的高低直接作为灯亮判定条件,高电平----亮;低电平-----灭,很简单,不需要边沿检测。 4.拿个万用表,看一看你的输入量cqg是不是你加了障碍物和不加,会有高低电平的变化,并且高电平为3.3V,低电平0V.这很关键哈! |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
1476 浏览 1 评论
1266 浏览 0 评论
矩阵4x4个按键,如何把识别结果按编号01-16(十进制)显示在两个七段数码管上?
1471 浏览 0 评论
920 浏览 0 评论
2272 浏览 0 评论
1450 浏览 35 评论
5638 浏览 113 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-24 16:48 , Processed in 0.806917 second(s), Total 85, Slave 66 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号