一、实验任务
通过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<=5‘d0; ad_cs_out<=1‘b1; ad_clk_out<=1‘b0; XmitPlus<=1‘b0; end else begin cnt<=cnt+1‘b1; case(cnt) 0:begin ad_cs_out<=1‘b0;ad_clk_out<=1‘b0;end 1:begin ad_clk_out<=1‘b1;end 2:begin addata[7]<=ad_data_in;ad_clk_out<=1‘b0;end 3:begin ad_clk_out<=1‘b1;end 4:begin addata[6]<=ad_data_in;ad_clk_out<=1‘b0;end 5:begin ad_clk_out<=1‘b1;end 6:begin addata[5]<=ad_data_in;ad_clk_out<=1‘b0;end 7:begin ad_clk_out<=1‘b1;end 8:begin addata[4]<=ad_data_in;ad_clk_out<=1‘b0;end 9:begin ad_clk_out<=1‘b1;end 10:begin addata[3]<=ad_data_in;ad_clk_out<=1‘b0;end 11:begin ad_clk_out<=1‘b1;end 12:begin addata[2]<=ad_data_in;ad_clk_out<=1‘b0;end 13:begin ad_clk_out<=1‘b1;end 14:begin addata[1]<=ad_data_in;ad_clk_out<=1‘b0;end 15:begin ad_clk_out<=1‘b1;end 16:begin addata[0]<=ad_data_in;ad_clk_out<=1‘b0;end 17:begin ad_cs_out<=1‘b1;end//--拉高CS,等待ADC内部转换,时间<=17us //18:; //19:; //20:; 21:begin XmitPlus<=1‘b1; end //22:; 29:begin XmitPlus<=1‘b0;end 30: begin if(TxFinish==1‘b1)//等待发送完成 cnt<=5‘d31;//发送完成,再按一次复位键,重新一次转换发送 else cnt<=5‘d30; end default:; endcase end end endmodule
三、感悟
通过改变开发板上的可变电阻来改变串口调试助手的显示数字,其实速率真的是很低。毕竟串口就是一个很慢的转换,115200。而AD也只分频100k。楼主正在做一个40M的AD还是并行的,不知道能不能测试成功,希望能够赶紧把这个项目结束。