- 1、本文档共8页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据采集及显示系统设计
一、实验内容
设计一个 ADC0809 数据采集及显示系统。采样间隔为0.5 毫秒,系统时钟为512KHz。
AD 转换得到的8 位数据进行译码显示(显示可采用两位的LED)。
二、系统框架分析与设计
ADC0809是8位逐次逼近型A/D转换器,ADC0809内部没有时钟电路,故时钟需要由外部输入,允许范围为10KHz~1280KHz,典型值为640KHz,每一通道的转换需66~73个时钟周期。ALE是地址锁存使能信号输入端,在ALE信号的上升沿,ADDA~ADDC上的地址码被锁存、译码后,选通与8个模拟输入端对应的多路开关。START是启动信号输入端,在START信号的上升沿复位A/D转换器,下降沿启动A/D转换器。根据分析,系统可分为采样控制模块、数据转换模块和显示译码模块三个部分,如图1所示:
三、模块实现
(1)采样时钟产生模块:由输入、输出时钟的比例关系可知由256 分频器即可实现。具体VHDL代码如下:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY clkdiv IS
PORT( RESET,CLK: IN STD_LOGIC;
CLK2: OUT STD_LOGIC );
END;
ARCHITECTURE ONE OF clkdiv IS SIGNAL FULL : STD_LOGIC;
BEGIN
P_REG: PROCESS(CLK)
VARIABLE CNT8 : STD_LOGIC_VECTOR(7 DOWNTO 0);
BEGIN
IF RESET = 1 THEN
CNT8 :=
ELSIF CLKEVENT AND CLK = 1 THEN
IF CNT8 =THEN
CNT8 :=
FULL = 1;
ELSE CNT8 := CNT8 + 1;
FULL = 0;
END IF;
END IF;
END PROCESS P_REG;
P_DIV : PROCESS(FULL)
VARIABLE CNT2 : STD_LOGIC;
BEGIN
IF FULLEVENT AND FULL = 1 THEN
CNT2 := NOT CNT2;
IF CNT2 = 1 THEN CLK2 =1;
ELSE CLK2 = 0;
END IF;
END IF;
END PROCESS P_DIV;
END;
(2)采样控制模块:根据时序要求来产生ADC0809 正常工作所需的各个控制信号,采用有限状态机设计方法实现采样控制模块,状态由ADC0809 的工作时序确定。ADC0809 的工作时序如图2所示:
具体VHDL代码如下:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY adc_ctrl IS
PORT( CLK1,CLK2,RESET,EOC:IN STD_LOGIC;
ALE,START,OE,ICLK:OUT STD_LOGIC );
END adc_ctrl;
ARCHITECTURE ONE OF adc_ctrl IS
TYPE STATES IS(S0,S1,S2,S3,S4,S5,S6,S7);
SIGNAL CURRENT_STATE,NEXT_STATE: STATES := S0;
BEGIN
PROCESS(CLK1,RESET)
BEGIN
IF(CLK1EVENT AND CLK1=1 AND RESET=0)THEN
CURRENT_STATE=NEXT_STATE;
END IF;
END PROCESS;
P_STATE1: PROCESS(CURRENT_STATE,RESET,CLK2,EOC)
BEGIN
CASE CURRENT_STATE IS
WHEN S0 =
IF(RESET=0 AND CLK2=1) THEN NEXT_STATE = S1;
ELSE NEXT_STATE = S0;
END IF;
WHEN S1 =
IF(RESET=0) THEN NEXT_STATE = S2;
ELSE NEXT_STATE = S0;END IF;
WHEN S2 =
文档评论(0)