码迷,mamicode.com
首页 > 其他好文 > 详细

verilog实验3:AD转换后串口输出到PC端

时间:2018-02-12 00:20:49      阅读:240      评论:0      收藏:0      [点我收藏+]

标签:body   data   gpo   ilo   tput   inpu   ini   可变   span   

一、实验任务

       通过tcl549AD转换芯片将模拟电压信号转换为数字信号,并通过串口显示到电脑上。此AD转换芯片为串行转换芯片,且转换速率要和串口选择的速率匹配。等待串口发送完后,再进行下一次AD转换。就实际应用而言,此转换速率有点低。

二、代码开发

       根据AD芯片的芯片手册编写程序。以下为顶层程序。

       

//将实时转换的数字结果通过串口传输到PC上
module adc_top
    (
        clk,
        rst,
        ad_cs_out,//--TLC549片选信号
        ad_clk_out,//--TLC549时钟信号
        ad_data_in,//--TLC549数字的输入
        txd_out   //--串口输出
    );


    
input clk,rst,ad_data_in;
output ad_cs_out,ad_clk_out,txd_out;

reg ad_cs_out,ad_clk_out;
wire clk_100k,txd_out;
reg [4:0] cnt;
reg [7:0] addata;

wire TxClk,TxFinish;
reg XmitPlus;

//416分频的,产生115200的时钟
defparam Gen_RxClk.divdFACTOR=208,Gen_RxClk.divdWIDTH=7;//分频时钟
gen_divd Gen_RxClk(.reset(rst),.clkin(clk),.clkout(TxClk));//端口名称关联


//480分频的,产生100k的时钟
defparam Gen_100k.divdFACTOR=240,Gen_100k.divdWIDTH=7;//分频时钟
gen_divd Gen_100k(.reset(rst),.clkin(clk),.clkout(clk_100k));//端口名称关联

//串口发送
uart_t UartTx(.Bclk(TxClk),.Resett(rst),.Txd(txd_out),
                .XmitCmdp(XmitPlus),.TxdBuf(addata),.TxDone(TxFinish));


always @(posedge clk_100k or negedge rst)
begin
    if(!rst)
        begin
            cnt<=5d0;
            ad_cs_out<=1b1;
            ad_clk_out<=1b0;
            XmitPlus<=1b0;
        end
    else
        begin
            cnt<=cnt+1b1;
            case(cnt)
                0:begin ad_cs_out<=1b0;ad_clk_out<=1b0;end
                1:begin ad_clk_out<=1b1;end
                2:begin addata[7]<=ad_data_in;ad_clk_out<=1b0;end
                3:begin ad_clk_out<=1b1;end
                4:begin addata[6]<=ad_data_in;ad_clk_out<=1b0;end
                
                5:begin ad_clk_out<=1b1;end
                6:begin addata[5]<=ad_data_in;ad_clk_out<=1b0;end
                7:begin ad_clk_out<=1b1;end
                8:begin addata[4]<=ad_data_in;ad_clk_out<=1b0;end
                
                9:begin ad_clk_out<=1b1;end
                10:begin addata[3]<=ad_data_in;ad_clk_out<=1b0;end
                11:begin ad_clk_out<=1b1;end
                12:begin addata[2]<=ad_data_in;ad_clk_out<=1b0;end
                
                13:begin ad_clk_out<=1b1;end
                14:begin addata[1]<=ad_data_in;ad_clk_out<=1b0;end
                15:begin ad_clk_out<=1b1;end
                16:begin addata[0]<=ad_data_in;ad_clk_out<=1b0;end


                17:begin ad_cs_out<=1b1;end//--拉高CS,等待ADC内部转换,时间<=17us
                //18:;
                //19:;
                //20:;
                21:begin XmitPlus<=1b1; end
                //22:;
                29:begin XmitPlus<=1b0;end
                30:
                    begin
                        if(TxFinish==1b1)//等待发送完成
                            cnt<=5d31;//发送完成,再按一次复位键,重新一次转换发送
                        else
                            cnt<=5d30;
                    end
            
                default:;
            endcase
        end
end    
endmodule

三、感悟

       通过改变开发板上的可变电阻来改变串口调试助手的显示数字,其实速率真的是很低。毕竟串口就是一个很慢的转换,115200。而AD也只分频100k。楼主正在做一个40M的AD还是并行的,不知道能不能测试成功,希望能够赶紧把这个项目结束。

verilog实验3:AD转换后串口输出到PC端

标签:body   data   gpo   ilo   tput   inpu   ini   可变   span   

原文地址:https://www.cnblogs.com/amberwang2018/p/8443473.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!