基于FPGA的ADC0809数字电压表设计Verilog代码Quartus仿真

名称:基于FPGA的ADC0809数字电压表设计Verilog代码Quartus仿真(文末获取)

软件:Quartus

语言:Verilog

代码功能:

ADC0809数字电压表设计

1、设计代码驱动ADC0809芯片

2、根据ADC0809模数转换的量化值,换算成电压值,电压保留2位小数

1. 工程文件

2. 程序文件

3. 程序编译

4. RTL图

5. 仿真图

整体仿真图

仿真图分析:AD输入1100101对应十进制为202,202*0.02V=4.04V,故数码管显示4.04。同理00111000对应十进制为56,计算得电压值为56*0.02v=1.12v。

ADC0809模块仿真

仿真图分析:

AD0809的控制时序为:首先输入3位地址,并使ALE=1,将地址存入地址锁存器中。此地址经译码选通8路模拟输入之一到比较器。START上升沿将逐次逼近寄存器复位。下降沿启动 A/D转换,之后EOC输出信号变低,指示转换正在进行。直到A/D转换完成,EOC变为高电平,指示A/D转换结束,结果数据已存入锁存器,这个信号可用作中断申请。当OE输入高电平 时,输出三态门打开,转换结果的数字量输出到数据总线上。

电压计算模块仿真

AD为8位,对应量为0~255,即256

电压量程为5V,因此电压分辨率=5v/256=0.01953125≈0.02v

计算AD对应的电压值,电压

公式:voltage_data=DATA*0.02V

数码管显示模块

将voltage_data转换为个位、十分位、百分位分别用3个数码管显示

使用7段数码管显示,每个数码管输入为8位,对应下图中的abcdefg dp 8段,当输入0时对应的段点亮,当输入为1时,对应的段灭。

根据上图可以观察到,若要显示数字“4.”,需要DP+GFCB亮(对应值为0时亮),也就是对应编码为“00011001”,其中从左到右依次对应DP+GFEDCBA。

部分代码展示:

// 首先输入3位地址,并使ALE=1,
// 将地址存入地址锁存器中。
// 此地址经译码选通8路模拟输入之一到比较器。
// START上升沿将逐次逼近寄存器复位。
// 下降沿启动 A/D转换,之后EOC输出信号变低,指示转换正在进行。
// 直到A/D转换完成,EOC变为高电平,指示A/D转换结束,
// 结果数据已存入锁存器,这个信号可用作中断申请。
// 当OE输入高电平 时,输出三态门打开,转换结果的数字量输出到数据总线上。
module ADC0809(
input clk,//时钟
input reset,//复位
output reg ADDA,//地址
output reg ADDB,//地址
output reg ADDC,//地址
output reg ALE,//ALE
output reg START,//START
output reg OE,//OE
input EOC,//EOC
input [7:0] DB,//AD量化值
output reg [7:0] DATA
);
reg [2:0] state=3'd0;
//定义状态
parameter s_idle=3'd0;
parameter s_start=3'd1;
parameter s_ADDR=3'd2;
parameter s_ALE=3'd3;
parameter s_wait=3'd4;
parameter s_OE=3'd5;
parameter s_DATA=3'd6;
parameter s_END=3'd7;
always@(posedge clk or posedge reset)
if(reset)
state<=s_idle;//复位
else
case(state)
s_idle:
state<=s_ADDR;//输入地址
s_ADDR:
state<=s_ALE;//锁存地址
s_ALE:
state<=s_start;//开始转换
s_start:
if(EOC==0)
state<=s_wait;//等待
else
state<=s_start;
s_wait://等待转换完成
if(EOC==1)
state<=s_OE;//转换完成
s_OE://使能三态门
state<=s_DATA;
s_DATA://读取AD值
state<=s_END;
s_END://结束
state<=s_idle;
default:;
endcase
//输入地址
always@(posedge clk or posedge reset)
if(reset)
begin
ADDA<=0;
ADDB<=0;
ADDC<=0;
end
else
if(state==s_ADDR)//输入地址状态,选择通道1
begin
ADDA<=0;
ADDB<=0;
ADDC<=1;
end

源代码

 扫描文章末尾的公众号二维码

  • 13
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值