8624|2

1

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

AD7658 adbusy信号正常,但是输出不对 [复制链接]

各位坛友,小弟最近在用FPGA配一块AD7658芯片,   并行输出到FPGA。发现输出不读,然后我就用chipscope抓了下信号线,如下:


可是,无论我输入是多少,抓出来的数据都是 0111 1111 1111(第一路数据,也就是ad_rd的第一个低电平对应的数据,这个芯片支持六路)。
现在是我把ad_convsta拉高以后,ad_busy跟着拉高,按手册上的说法应该是ad已经进入了转换模式了,ad_busy也正常拉低,可是读出来就是不对,时钟是500KHz。困扰我两天了。
这是手册上的时序图:

这是我的原理图:

这是我的代码:
module ad7658(
                                                        input wire sysclk,
                                                        input wire rst_b,
                                                        input wire sel,                //6路和4路选项     1--6路    0--4路
                                                        input wire ad_busy,
                                                        input wire[11:0] ad_data,
                                                        output reg ad_convsta,
                                                        output reg ad_convstb,
                                                        output reg ad_convstc,
                                                        output wire ad_cs,                //低电平有效
                                                        output reg ad_rd,                //低电平有效
                                                        output reg ad_reset,        //高电平有效
                                                        //6路数据
                                                        output reg[11:0] data1,
                                                        output reg[11:0] data2,
                                                        output reg[11:0] data3,
                                                        output reg[11:0] data4,
                                                        output reg[11:0] data5,
                                                        output reg[11:0] data6
                                                       
    );



reg[3:0] state;
//分频
reg[7:0] div_cnt;
reg ad_clk;

always @(posedge sysclk or negedge rst_b)
begin
        if(!rst_b)
                begin
                        div_cnt <= 7'h0;
                        ad_clk  <= 0;
                end
        else if(div_cnt == 7'd49)
                begin
                        div_cnt <= 7'h0;
                        ad_clk <= ~ad_clk;
                end
        else
                begin
                        div_cnt <= div_cnt + 1;
                        ad_clk <= ad_clk;
                end
end


//ad7658配置
assign ad_cs = 0;
always @(posedge ad_clk or negedge rst_b)
begin
        if(!rst_b)
                begin
                        ad_reset <= 1;
                        data1    <= 12'h000;
                        data2    <= 12'h000;
                        data3    <= 12'h000;
                        data4    <= 12'h000;
                        data5    <= 12'h000;
                        data6    <= 12'h000;
                        state                <= 4'd0;
                end
        else
                case(state)
                        4'd0:
                                        begin
                                                ad_reset   <= 0;
                                                ad_convsta <= 0;
                                                ad_convstb <= 0;
                                                ad_convstc <= 0;
                                                ad_rd                  <= 1;
                                                state             <= 4'd1;
                                        end
                        4'd1:
                                        begin
                                                ad_convsta <= 1;
                                                ad_convstb <= 1;
                                                ad_convstc <= 1;
                                                ad_rd                  <= 1;
                                                state                  <= 4'd2;
                                        end
                        4'd2://开始采样
                                        begin
                                                ad_convsta <= 1;
                                                ad_convstb <= 1;
                                                ad_convstc <= 1;
                                                ad_rd                  <= 1;
                                                if(ad_busy == 0)
                                                        state   <= 4'd3;
                                                else
                                                        state   <= 4'd2;
                                        end
                        4'd3:
                                        begin
                                                ad_convsta <= 1;
                                                ad_convstb <= 1;
                                                ad_convstc <= 1;
                                                ad_rd      <= 0;//50MHz晶振20分频,T=400ns > t9=6ns
                                                data1      <= ad_data;  //第一路
                                                state      <= 4'd4;
                                        end
                        4'd4:
                                        begin
                                                ad_convsta <= 1;
                                                ad_convstb <= 1;
                                                ad_convstc <= 1;
                                                ad_rd      <= 1;
                                                state                  <= 4'd5;
                                        end
                        4'd5:
                                        begin
                                                ad_convsta <= 1;
                                                ad_convstb <= 1;
                                                ad_convstc <= 1;
                                                ad_rd      <= 0;
                                                data2                  <= ad_data;  //第二路
                                                state                  <= 4'd6;
                                        end
                        4'd6:
                                        begin
                                                ad_convsta <= 1;
                                                ad_convstb <= 1;
                                                ad_convstc <= 1;
                                                ad_rd                  <= 1;
                                                state                  <= 4'd7;
                                        end
                        4'd7:
                                        begin
                                                ad_convsta <= 1;
                                                ad_convstb <= 1;
                                                ad_convstc <= 1;
                                                ad_rd      <= 0;
                                                data3                  <= ad_data;  //第三路
                                                state                  <= 4'd8;
                                        end
                        4'd8:
                                        begin
                                                ad_convsta <= 1;
                                                ad_convstb <= 1;
                                                ad_convstc <= 1;
                                                ad_rd                  <= 1;
                                                state                  <= 4'd9;
                                        end
                        4'd9:
                                        begin
                                                ad_convsta <= 1;
                                                ad_convstb <= 1;
                                                ad_convstc <= 1;
                                                ad_rd      <= 0;
                                                data4                  <= ad_data;  //第四路
                                                if(sel == 1)   //共6路
                                                        state        <= 4'd10;
                                                else                                //共4路
                                                        state <= 4'd14;
                                        end
                        4'd10:
                                        begin
                                                ad_convsta <= 1;
                                                ad_convstb <= 1;
                                                ad_convstc <= 1;
                                                ad_rd                  <= 1;
                                                state                  <= 4'd11;
                                        end
                        4'd11:
                                        begin
                                                ad_convsta <= 1;
                                                ad_convstb <= 1;
                                                ad_convstc <= 1;
                                                ad_rd      <= 0;
                                                data5                  <= ad_data;  //第五路
                                                state                  <= 4'd12;
                                        end
                        4'd12:
                                        begin
                                                ad_convsta <= 1;
                                                ad_convstb <= 1;
                                                ad_convstc <= 1;
                                                ad_rd                  <= 1;
                                                state                  <= 4'd13;
                                        end
                        4'd13:
                                        begin
                                                ad_convsta <= 1;
                                                ad_convstb <= 1;
                                                ad_convstc <= 1;
                                                ad_rd      <= 0;
                                                data6                  <= ad_data;  //第六路
                                                state                  <= 4'd14;
                                        end
                        4'd14:
                                        begin
                                                ad_convsta <= 1;
                                                ad_convstb <= 1;
                                                ad_convstc <= 1;
                                                ad_rd                  <= 1;
                                                state                  <= 4'd0;
                                        end
                        default:
                                        begin
                                                ad_convsta <= 0;
                                                ad_convstb <= 0;
                                                ad_convstc <= 0;
                                                ad_rd                  <= 1;
                                        end
                endcase
end
                                       
                                       
                                       
endmodule



求各位坛友帮忙指正下问题,谢谢~

最新回复

您好,我使用AD7658时也遇到了BUSY信号正常单读书错误的问题。请问你是怎么解决的呢?谢谢~  详情 回复 发表于 2016-5-30 17:17
点赞 关注
 
 

回复
举报

5979

帖子

8

TA的资源

版主

沙发
 
这是个好问题啊,容我好好看看
个人签名生活就是油盐酱醋再加一点糖,快活就是一天到晚乐呵呵的忙
===================================
做一个简单的人,踏实而务实,不沉溺幻想,不庸人自扰
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
您好,我使用AD7658时也遇到了BUSY信号正常单读书错误的问题。请问你是怎么解决的呢?谢谢~
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表