名称:AD芯片ADC081S101测试试验设计Verilog代码VIVADO? ARTIX-7开发板
软件:VIVADO
语言:Verilog
代码功能:
AD芯片ADC081S101测试试验
定时采集输入模拟电压,显示到数码管上
FPGA代码Verilog/VHDL代码资源下载:www.hdlcode.com
本代码已在ARTIX-7开发板验证,ARTIX-7开发板如下,其他开发板可以修改管脚适配:
设计文档:
AD数码管显示例程
1实验简介
本实验练习使用ADC,实验中使用的ADC模块型号为ADC081S101EVAL,最大采样率为20MHz,精度为8位。实验中通过调节电位器R3,调整ADC采集电压值,并通过数码管显示电压值大小。
图1、ADC081S101EVAL电压采集电路
图2、6位数码管电路
2 实验过程
本实验例程,通过调节电位器调整ADC芯片采集的输入电压,FPGA提供ADC芯片驱动信号并读取其输出采集电压值的数据,同时通过数码管显示ADC采集电压值大小。
2.1、ADC时序
图3、ADC081S101时序图
通过此时序图,我们可以看到,无需对ADC芯片进行配置,只需要我们提供时钟SCLK和CS片选信号,芯片就可以直接进行数据采集了,操作非常简便。
2.2、数码管原理
图2所示的是6位共阳数码管,通过FPGA给与引脚低电平即可点亮数码管LED灯。在本实验中,由于ADC采集电压最大为3.3V,所以最左边数码管显示最高位,同时带小数点,右边5位数码管显示小数位。在数码管显示时,采用“同步动态扫描”,是指“行信号”和“列信号”同步扫描。
3 程序设计
程序设计比较简单,功能是FPGA驱动ADC081S101芯片不断采集电压值并送到数码管进行显示。
代码说明:
at7_prj9_top.v是顶层模块,包含ad_mod.v,ad_data_pro_mod.v,display1_mod.v,display2_6_mod.v和digled_time_mod.v模块。
ad_mod.v是ADC的电压读取模块,实时读取电压值;ad_data_pro_mod.v是十六进制转换十进制模块;display1_mod.v是数码管最左边一位带小数点的显示模块;display2_6_mod.v是数码管右边五位显示模块;digled_time_mod.v是数码管显示时采用“同步动态扫描”功能的模块。
引脚名称 |
FPGA引脚 |
FPGA引脚方向 |
功能描述 |
ad_sys_clk |
E3 |
Input |
FPGA输入时钟100MHz |
ad_cs |
K16 |
output |
ADC片选信号 |
ad_sdata |
K15 |
Input |
ADC数据输入输出 |
ad_clk |
J15 |
output |
ADC时钟输入 |
dg_a0 |
H1 |
output |
数码管位信号(左边第一位) |
dg_a1 |
K3 |
output |
数码管位信号(左边第二位) |
dg_a2 |
K2 |
output |
数码管位信号(左边第三位) |
dg_a3 |
L3 |
output |
数码管位信号(左边第四位) |
dg_a4 |
H5 |
output |
数码管位信号(左边第五位) |
dg_a5 |
J5 |
output |
数码管位信号(左边第六位) |
dg_a6 |
F4 |
output |
数码管位信号(左边第七位) |
dg_a7 |
A9 |
output |
数码管位信号(左边第八位) |
sdg_dp |
K5 |
output |
数码管段信号(点段) |
sdg_a |
J2 |
output |
数码管段信号(a段) |
sdg_b |
G3 |
output |
数码管段信号(b段) |
sdg_c |
H4 |
output |
数码管段信号(c段) |
sdg_d |
G4 |
output |
数码管段信号(d段) |
sdg_e |
M4 |
output |
数码管段信号(e段) |
sdg_f |
L4 |
output |
数码管段信号(f段) |
sdg_g |
L5 |
output |
数码管段信号(g段) |
4 实验现象
编译综合完成后下载程序到开发板中,可以看到数码管不断的显示ADC采集到的电压值,通过调节电位器R3可以看到电压值在实时变化,增加或者减小。
部分代码展示:
`timescale?1ns/100ps module?ad_data_pro_mod( ??????????????????????clk_8m?????, ??????????????????????rst_n??????, ??????????????????????ad_data????, ?????????????????????? ??????????????????????dig_led1???, ??????????????????????dig_led2???, ??????????????????????dig_led3???, ??????????????????????dig_led4???, ??????????????????????dig_led5???, ??????????????????????dig_led6???, ??????????????????????dig_led7???, ??????????????????????dig_led8??? ?????????????????????? ????????????????????); ???????????????? ?????????????? input?????????????????clk_8m?????; input?????????????????rst_n??????;?????????????????????? input????[7:0]????????ad_data????; output???[3:0]????????dig_led1???; output???[3:0]????????dig_led2???; output???[3:0]????????dig_led3???; output???[3:0]????????dig_led4???; output???[3:0]????????dig_led5???; output???[3:0]????????dig_led6???; output???[3:0]????????dig_led7???; output???[3:0]????????dig_led8???; reg??????[24:0]???????buf_data1??; reg??????[24:0]???????buf_data2??; reg??????[3:0]????????minus_state; reg??????[3:0]????????dig_led1???; reg??????[3:0]????????dig_led2???; reg??????[3:0]????????dig_led3???; reg??????[3:0]????????dig_led4???; reg??????[3:0]????????dig_led5???; reg??????[3:0]????????dig_led6???; reg??????[3:0]????????dig_led7???; reg??????[3:0]????????dig_led8???; reg??????[3:0]????????dig_led1_buf???; reg??????[3:0]????????dig_led2_buf???; reg??????[3:0]????????dig_led3_buf???; reg??????[3:0]????????dig_led4_buf???; reg??????[3:0]????????dig_led5_buf???; reg??????[3:0]????????dig_led6_buf???; reg??????[3:0]????????dig_led7_buf???; reg??????[3:0]????????dig_led8_buf???; always?@(posedge?clk_8m?or?negedge?rst_n) begin ?????if(!rst_n) ?????begin ??????????buf_data1?<=?25'd0; ?????end
点击链接获取代码文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=1334