关于FPGA的AD转换有人做过么?

lincoln24 2010-05-23 06:09:14
我用的是AD0804,按时序图写出的状态机程序,但是在数码管老是无法正常显示,数字不是老跳就是定在一个值不动,我让其每隔0.5秒就转换一次
always@(posedge clk)
if(sw)
begin
cs<=1;
rd<=1;
wr<=1;
statead<=idle;
end
else
case(statead)
idle:
begin
statead<=start;
cs<=0;
end
start:
begin
statead<=deng;
wr<=0;
cntwr<=0;
end
deng:
if(cntwr==4'd6)
begin
cntwr<=0;
wr<=1;
statead<=nobusy;
cntbusy<=0;
end
else
cntwr<=cntwr+1;
nobusy:
****** if(cntbusy==16'd50000)
begin
cntbusy<=0;
statead<=trans;
rd<=0;
cnttrans<=0;
end
else
cntbusy<=cntbusy+1;
trans:
if(cnttrans==4'd10)
begin
cnttrans<=0;
vol<=db;
rd<=1;
statead<=final;
end
else
cnttrans<=cnttrans+1;
final:
begin
statead<=idle;
cs<=1;
end
endcase

注意打****号的语句,我感觉问题是不是就是出在这里,按datasheet里wr置高后有一段nobusy又有一段busy的时间,这段时间我一直不知道到底该取多少。。。请问这个延时过长的话或过短的话分别会造成什么情况啊?当然。。。我认为可能是这里有错误,可能其他地方时序也有不对,能有哪位好心人能全部看看就最好不过了
...全文
962 20 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
Peasant_Lee 2010-05-27
  • 打赏
  • 举报
回复
应该是芯片本身的问题,程序就两种情况,一就是读不出来,或者读错,二,读出来了,那肯定是你芯片转换出来的数据。
lincoln24 2010-05-27
  • 打赏
  • 举报
回复
现在终于能出来了。。。不过测得数总是偏大,不知道这会是芯片本身的问题还是我程序的问题?
数小的时候会相差0.2左右,数大会相差0.4左右。。。。
dream17953 2010-05-27
  • 打赏
  • 举报
回复
没学过FPGA,不过听说它是模拟大量电子元件的,用编程做成ADC应该不成问题吧
lincoln24 2010-05-27
  • 打赏
  • 举报
回复
恩,多谢
Peasant_Lee 2010-05-26
  • 打赏
  • 举报
回复
就是 FD引脚,我刚才还特意查了一份资料。的确是0804,不知道为什么你那个没有。
lincoln24 2010-05-26
  • 打赏
  • 举报
回复
额……那那个引脚是第几管脚?
我现在外接io口很奇怪啊,我人为的用5V电源接了一下其中一个外接口(等于给其中一个灯接了高电平?),但是他却有两个灯熄灭了,不知道这是什么问题啊…?
Peasant_Lee 2010-05-25
  • 打赏
  • 举报
回复
对的。在AD转换之后,你的ad要输出数据,就不应该设为高阻态。

还有,你是否确定你的显示部分是正确的?因为你的系统,现在有两部分:AD检测部分,和LED显示部分。要排除问题,确定LED显示部分没有错,这样,显示乱才代表是检测到数据是错的。
lincoln24 2010-05-25
  • 打赏
  • 举报
回复
我是用8位LED来显示8位AD所转换后的数,没反应即是说灯就一直全亮(低电平时会亮),乱跳即是说LED显示出来的值不固定而且值相差很大,而我输入的是直流电
FD设了高阻态。。?额。。有这个可能,可我LED初始化时就设为8'hff了,你是说这里有问题?
Peasant_Lee 2010-05-25
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 lincoln24 的回复:]
那敢问这位仁兄有用过AD么?不知是用的哪个型号的?用什么控制的啊?
[/Quote]
AD肯定用过,是用mcu控制的,一般是mcu自带的,不过则这独立的AD我也在读书的时候做过,单单就控制DA正常工作,不难的,就一些控制信号。
lincoln24 2010-05-25
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 peasant_lee 的回复:]

你的ad芯片0804有个输出高阻态的引脚设置,你看看那个引脚有没有接?给什么电平了?看是否是AD输出高阻态了。
[/Quote]

没找到这个引脚。。。DATASHEET上面貌似没说啊
话说我现在IO口很奇怪啊。。。我用手碰他们LED有些灯也会灭掉,这是什么原因啊(未接芯片时)
Peasant_Lee 2010-05-25
  • 打赏
  • 举报
回复
就是说,你现在用FPGA来控制AD芯片,但是结果是检测到的AD值,一就是没反应,二就是经常乱跳。你所说的没反应,是不是就是没检测到AD值?还是固定一个AD值?

假如硬件没问题,我还是怀疑控制信号控制的不好,比如cs 或者转换结果输出的FD, 是否设了高阻态,之类的。。。
lincoln24 2010-05-25
  • 打赏
  • 举报
回复
恩,我也是觉得不难,我也严格按时序图做了但是就是出不来,我还怕延时不够索性把转换延时加的很长,不过他要不就是没反应要不就是数字乱跳,话说延时过长的话会不会也有影响?
kyzf 2010-05-25
  • 打赏
  • 举报
回复
楼主 采用FPGA 控制LED数码管 ,是采用静态扫描 还是动态扫描??

感觉楼主的问题,在于LED数码管的刷新频率 没有弄好;

楼主 注意调试 下LED的刷新频率,以及对应的延时。

楼主可以百度或GOOGLE下,看动态扫描来控制LED 时,为了保证人的视觉感受,对应的刷新频率的设置。
Peasant_Lee 2010-05-25
  • 打赏
  • 举报
回复
你的ad芯片0804有个输出高阻态的引脚设置,你看看那个引脚有没有接?给什么电平了?看是否是AD输出高阻态了。
lincoln24 2010-05-25
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 peasant_lee 的回复:]

还有,你是否确定你的显示部分是正确的?因为你的系统,现在有两部分:AD检测部分,和LED显示部分。要排除问题,确定LED显示部分没有错,这样,显示乱才代表是检测到数据是错的。
[/Quote]

LED应该是没问题吧。。不就是你给0他就亮,你给1他就灭么,如果数据输出是全1,他就应该全灭。。应该没有错的可能吧

在AD转换之后,你的ad要输出数据,就不应该设为高阻态。
-----------AD的输出应该跟芯片自己有关吧,他输出多少我LED灯就显示多少,难道有哪里可以设置高阻态还是非高阻么。。。如果你指的是我LED是否设为高阻,我已经在复位时让他等于ff了,AD转换后把值赋予他的时候他难道会变成高阻么。。?
lincoln24 2010-05-24
  • 打赏
  • 举报
回复
那敢问这位仁兄有用过AD么?不知是用的哪个型号的?用什么控制的啊?
Peasant_Lee 2010-05-24
  • 打赏
  • 举报
回复
就是有效电平的持续时间咯,呵呵。首先我看不懂硬件描述语言,这些保持时间要符合硬件要求,datasheet要求延时多长,你就按照它就OK了,假如还不行,估计不是延时的问题,时序。。。
lincoln24 2010-05-24
  • 打赏
  • 举报
回复
。。。。??
lincoln24 2010-05-23
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 peasant_lee 的回复:]

你是说WR持续时间?
[/Quote]

否,就是转换时间,WR变低再变高不是要等待一段时间吗?然后再让RD变低变高
Peasant_Lee 2010-05-23
  • 打赏
  • 举报
回复
你是说WR持续时间?
项目背景1.1 AD转换 AD转换就是模数转换。顾名思义,就是把模拟信号转换成数字信号。主要包括积分型、逐次逼近型、并行比较型/串并行型、Σ-Δ调制型、电容阵列逐次比较型及压频变换型。 A/D转换器是用来通过一定的电路将模拟量转变为数字量。模拟量可以是电压、电流等电信号,也可以是压力、温度、湿度、位移、声音等非电信号。但在A/D转换前,输入到A/D转换器的输入信号必须经各种传感器把各种物理量转换成电压信号。 AD转换的技术指标,一般有如下几个: 1. 分辨率(Resolution) 指数字量变化一个最小量时模拟信号的变化量,定义为满刻度与2^n的比值。分辨率又称精度,通常以数字信号的位数来表示。 2. 转换速率(Conversion Rate)是指完成一次从模拟转换到数字的AD转换所需的时间的倒数。积分型AD转换时间是毫秒级属低速AD,逐次比较型AD是微秒级属中速AD,全并行/串并行型AD可达到纳秒级。采样时间则是另外一个概念,是指两次转换的间隔。为了保证转换的正确完成,采样速率 (Sample Rate)必须小于或等于转换速率。因此有人习惯上将转换速率在数值上等同于采样速率也是可以接受的。常用单位是ksps和Msps,表 示每秒采样千/百万次(kilo / Million Samples per Second)。 3. 量化误差 (Quantizing Error) 由于AD的有限分辨率而引起的误差,即有限分辨率AD的阶梯状转移特性曲线与无限分辨率AD(理想AD)的转移特 性曲线(直线)之间的最大偏差。通常是1个或半个最小数字量的模拟变化量,表示为1LSB、1/2LSB。 4. 偏移误差(Offset Error) 输入信号为零时输出信号不为零的值,可外接电位器调至最小。 5. 满刻度误差(Full Scale Error) 满度输出时对应的输入信号与理想输入信号值之差。 6. 线性度(Linearity) 实际转换器的转移函数与理想直线的最大偏移,不包括以上三种误差。 其他指标还有:绝对精度(Absolute Accuracy) ,相对精度(Relative Accuracy),微分非线性,单调性和无错码,总谐波失真(Total Harmonic Distotortion缩写THD)和积分非线性。

6,163

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 硬件设计
社区管理员
  • 硬件设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧