在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 3651|回复: 6

[求助] 关于FPGA的AD转换有人做过么?

[复制链接]
发表于 2010-5-24 23:49:36 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

x
本帖最后由 lincoln24 于 2010-5-25 12:19 编辑

我用的是AD0804,按时序图写出的状态机程序,但是在数码管老是无法正常显示,数字不是老跳就是定在一个值不动,我让其每隔0.5秒就转换一次





  1.         always@(posedge clk)
  2.                 if(sw)
  3.                         begin
  4.                         cs<=1;
  5.                         rd<=1;
  6.                         wr<=1;
  7.                         statead<=idle;
  8.                         end
  9.                 else
  10.                         case(statead)
  11.                                 idle:
  12.                                         if(reset)
  13.                                                 begin
  14.                                                 statead<=start;
  15.                                                 cs<=0;
  16.                                                 end
  17.                                         else
  18.                                                 statead<=idle;
  19.                                 start:
  20.                                         begin
  21.                                         statead<=deng;
  22.                                         wr<=0;
  23.                                         cntwr<=0;
  24.                                         end
  25.                                 deng:
  26.                                         if(cntwr==4'd6)
  27.                                                 begin
  28.                                                 cntwr<=0;
  29.                                                 wr<=1;
  30.                                                 statead<=nobusy;
  31.                                                 cntbusy<=0;
  32.                                                 end
  33.                                         else
  34.                                                 cntwr<=cntwr+1;
  35.                                 nobusy:
  36.                                         if(cntbusy==19'd5000)
  37.                                                 begin
  38.                                                 cntbusy<=0;
  39.                                                 statead<=trans;
  40.                                                 rd<=0;
  41.                                                 cnttrans<=0;
  42.                                                 end
  43.                                         else
  44.                                                 cntbusy<=cntbusy+1;
  45.                                 trans:
  46.                                         if(cnttrans==4'd10)
  47.                                                 begin
  48.                                                 cnttrans<=0;
  49.                                                 vol<=db;
  50.                                                 rd<=1;
  51.                                                 statead<=final;
  52.                                                 end
  53.                                         else
  54.                                                 cnttrans<=cnttrans+1;
  55.                                 final:
  56.                                         begin
  57.                                         statead<=idle;
  58.                                         cs<=1;
  59.                                         end
  60.                         endcase


复制代码

注意打****号的语句,我感觉问题是不是就是出在这里,按datasheet里wr置高后有一段nobusy又有一段busy的时间,这段时间我一直不知道到底该取多少。。。请问这个延时过长的话或过短的话分别会造成什么情况啊?当然。。。我认为可能是这里有错误,可能其他地方时序也有不对,能有哪位好心人能全部看看就最好不过了
发表于 2010-5-25 09:21:02 | 显示全部楼层
把代码重新排版一下
 楼主| 发表于 2010-5-25 12:16:07 | 显示全部楼层
本帖最后由 lincoln24 于 2010-5-25 12:20 编辑

2# falloutmx 额。。。整理好了
这位仁兄是不是有用过这个?
 楼主| 发表于 2010-5-26 13:16:28 | 显示全部楼层
?????
发表于 2010-6-5 14:52:58 | 显示全部楼层
你好,我做过fpga对ad的采集,这个数值跳变的原因有很多,可能是你模拟电路部分AD电源有纹波,导致ad采集每次数值不一样。建议你在固定周期内多次采集,将数据求和取平均值显示,这样可以保证数据比较稳定,你可以尝试一下。
发表于 2011-9-1 22:59:37 | 显示全部楼层
同意楼上建议……
发表于 2011-9-2 10:41:50 | 显示全部楼层
非要用状态机,建议学习一下三段式状态机的写法。
还有ADC采样,注意ADC的采样时钟和自己的电路工作时钟是否同源。
如果不是需要FIFO。
没有仔细看你的代码,对代码的逻辑是否存在逻辑错误不做评价。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条

小黑屋| 手机版| 关于我们| 联系我们| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2025-2-2 15:42 , Processed in 0.032684 second(s), 8 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表