基于fpga的数据采集器(编辑修改稿)内容摘要:
线就处于空闲状态。 接收器件收到一个完整的数据字节后,有可能需要完成一些其它工作,如处理内部中断服务等,可能无法立刻接收下一个字节,这时接收器件可以将SCL 线拉成低电平,从而使主机处于等待状态。 直到接收器件准备好接收下一个字节时 ,再释放 SCL 线使之为高电平,从而使数据传送可以继续进行。 连接到 I2C 总线上的器件,若具有 I2C 总线的硬件接口,则很容易检测到起始和终止信号。 对于不具备 I2C 总线硬件接口的 FPGA 来说,为了检测起始和终止信号,必须保证在每个时钟周期内对数据线 SDA 采样两次 .图 给出了 I2C 规定的起始和终止信号。 14 图 起始和终止信号 I2C 规定每一个字节必须保证是 8 位长度。 数据传送时,先传送最高位( MSB),每一个被传送的字节后面都必须它收到最后一个数据字节后,必须向从机发出一个结束传送的信号。 这个信号是由 对从机的 “ 非应答 ” 来实现的。 然后,从机释放 SDA线,以允许主机产生终止信号跟随一位应答位(即一帧共有 9 位)。 由于某种原因从机不对主机寻址信号应答时(如从机正在进行实时性的处理工作而无法接收总线上的数据),它必须将数据线置于高电平,而由主机产生一个终止信号以结束总线的数据传送。 I2C 总线上传送的数据信号是广义的,既包括地址信号,又包括真正的数据信号。 在起始信号后必须传送一个从机的地址( 7 位),第 8 位是数据的传送方向位( R/),用 “0” 表示主机发送数据( T), “1” 表示主机接收数据( R)。 每次数据传送总是由主 机产生的终止信号结束。 但是,若主机希望继续占用总线进行新的数据传送,则可以不产生终止信号,马上再次发出起始信号对另一从机进行寻址。 典型的 I2C 通信方式下图所示。 S 从机地址 O A 数 据 A 数 据 A|A P 图 典型的 I2C通信数据帧 “ 0” 表示数据由主机向从机传送, “ 1” 则表示数据由从机向主机传送。 A 表示应答, A 表示非应答(高电平)。 S 表示起始信号, P 表示终止信号。 通过分析可知, 由于 FPGA 不具备 I2C 接口,在设计过程中我们必须保证 FPGA 不断对通信总线进行扫描,而且每个周期内扫描两次。 并且要严格的按照 I2C 协议给出SCL 信号,以保证整个通信过程准确无误。 由于 FPGA 的 IO 口需要进行大量数据处理,因此 FPGA 的速度和硬件接口速度将会产生较大的偏差。 为此, I2C 数据总线上的数据传输要有一个较长的起始过程加以引导。 至此,针对温度采集所面临的问题基本得以解决。 按照分析结果,温度采集模块由两部分组成: AD7416 控制模块和 I2C 通信模块。 根据已有的资料和自己不断总结, 15 最终得到了实现目标要求的代码。 部分代码如下所示: designed by L_YM and H_YS the I2C BLOCK ENTITY simple_i2c IS PORT( clk : in std_logic。 enable : in std_logic。 nReset : in std_logic。 clk_t : in unsigned(7 downto 0)。 4x SCL input signals start,stop,read_1,write_1,ack_in : std_logic。 Din : in std_logic_vector(7 downto 0)。 output signals cmd_ack : out std_logic。 ack_out : out std_logic。 Dout : out std_logic_vector(9 downto 0)。 i2c signals SCL : inout std_logic。 SDA : inout std_logic )。 END ENTITY simple_i2c。 designed by H_YS and L_YM the ad7416 BLOCK entity AD7416_I2C_TEST is port ( clk_sys : in std_logic。 50MHz nReset : in std_logic。 Dout : out std_logic_vector(9 downto 0)。 data read from AD7416 I2C_OTI: in std_logic。 warning : out std_logic。 error : out std_logic。 no correct ack received SCL : inout std_logic。 SDA : inout std_logic 16 )。 end entity AD7416_I2C_TEST。 上面两段代码表示 AD7416模块的接口定义。 ADC0809电压采样模块 由第二节分析我们知道 ADC0809 采样原理比较 简单:首先我们给出一个有效的START 信号(高电平),随后状态信号 EOC 随即变成低电平。 此时进入转换状态,周期约为 100181。 s。 转换结束后, EOC 变为高电平,此时外部可以控制 OE 由低电平变为高电平,进入有效输出阶段。 下图是 ADC0809 的采样状态图。 图 ADC0809 采样状态图 由状态图我们可以发现,运用状态机来控制 ADC0809 模块无疑是最佳选择。 其核心代码如下: designed by L_YM and H_YS BEGIN CASE current_state IS when st0= next_state=st1。 when st1=next_state=st2。 when st2= IF(EOC=39。 139。 )THEN next_state=st3。 ELSE next_state=st2。 END IF。 when st3=next_state=st4。 when st4=next_state=st0。 when OTHERS = next_state=st0。 17 END CASE。 END PROCESS。 由于 ADC0809 采用通用串口通信方式。 此种通信方式比较简单,并且 FPGA 的IO 口也支持此种通信协议。 因此 ADC0809 在与 FPGA 通信时,无需再对 IO 口进行编程,它的数据总线可以直接与 FPGA 的 IO 口连接,进行数据交换。 LCD12232 显示模块 液晶显示屏已广泛应用于人们的日常生活中,在各种领域中起到越来越重要的位置。 为了方便数据监测,并使的设计具有实用性,在本次设计中,加入 LCD12232模块,用来显示系统采集到的数据。 在第 节我们已经对 LCD12232 进行了初步的探讨,线面我们将深入的对 LCD12232 进行分析。 LCD12232 由两片 SED1520 芯片通过主从方式控制。 控制 LCD 的输出,从本质上来讲就是控制 SED1520 芯片。 SED1520 控制指令有 13 条,在本次设计中我们只使用最常用的 8 条指令。 下面给出了本次设计中使用到的 SED1520 芯片的指令集。 指令代码( 2 进制) 代码功能 格 式 1 1 1 0 0 0 1 0 复位 1 0 1 0 0 1 0 0 中断休眠 1 0 1 0 1 0 0 X 占空比设置 1 0 1 0 0 0 0 1 AC 显示 1 1 0 L4 L3 L2 L1 L0 起始行设置 1 0 1 0 1 1 1 X 显示开关 1 0 1 1 1 1 P1 P0 页地址选择 0 C6 C5 C4 C3 C2 C1 C0 列地址选择 表 SED1520 指令集 对于占空比设置,当 X=1 时,为 1/16,当 X=0 时为 1/32。 对于起始行设置,由于液晶屏共有 32 行,其地址从 00H 开始到 1FH 截止。 对于显示开关,当 X=1 时,显示开, X=0 时显示关。 页地址为 B8H 到 BBH,列地址从 00H 到 4FH。 在使用时,只需将填入指定地址即可。 LCD12232 是字符点阵液晶。 列地址指针和页地址寄存器组合唯一指定了显示屏上的一个点。 值得注意的是列地址指针在每次操作后都会自加 1,这使我们的设计难度下降了许多。 字符点阵液晶的显示原理非常简单,即当显示屏上某一点所对应寄存器值为逻辑值“ 1”时,该点就显示。 因此欲实现对 LCD12232 显示的控制,除了要熟悉它的指令集之外,还必须了解它的显示方法与待显示字字符模型。 通过实验我们得到结论:液晶显示屏共有 2 屏(左、右屏), 4 页。 其显示方法为,先显示高位寄存器,再显 示低位寄存器(针对同一列)。 也就是说,它采用的是自顶 18 向下的显示方法。 因此在生成字模时,我们应将待显示字“取反”后,再生成。 LCD12232同样采用通用串行通信方式。 因此只需将其数据总线与 FPGA 的 IO 相连即可进行数据传递。 SED1520 的读写时序如下图所示: 图 SED1520 的读写时序 通过 FPGA控制 SED1520显示芯片的步骤如下: ( 1)初始化显示屏,设置占空比为 1/32,采用顺时针( AC)显示模式,打开显示开关,设定初始页地址与列地址。 ( 2)由于 SED1520的显示寄存器在初始化后 均默认存储数值为 “1”,显然这不利与我们进一步的显示操作。 因此我们将 SED1520显示寄存器全部清零,实现清屏的效果。 ( 3)通过使能信号选中左半屏(由主 SED1520控制),将已产生的字模送往显示寄存器。 在这里需要指出的是, LCD12232每半屏只有 61列,因此为了显示的美观,我们需要精确的确定每个字符的大小。 ( 4)选中右半屏,发送数据给显示寄存器 ( 5)设定刷新频率,检测数据更新,操作结束。 其接口部分代码如下: ENTITY LCD12232 IS PORT( CLR,CLK : IN STD_LOGIC。 CLK 50M AD7416 : IN STD_LOGIC_VECTOR(9 DOWNTO 0)。 ADC0809 : IN STD_LOGIC_VECTOR(7 DOWNTO 0)。 UART : IN STD_LOGIC_VECTOR(7 DOWNTO 0)。 E1, E2 : OUT STD_LOGIC。 RW, A0 : OUT STD_LOGIC。 Reset : OUT STD_LOGIC。 19 DB : OUT STD_LOGIC_VECTOR(7 DOWNTO 0))。 END ENTITY LCD12232。 从代码我们看出, LCD12232 控制模块的任务是接收 AD741 ADC080串口的数据,控制 LCD 的工作状态,显示待显示的数据。 串口通信模块 异步串行 通信 要求的传输线。基于fpga的数据采集器(编辑修改稿)
相关推荐
TITY LADDER IS PORT(CLK,RESET:IN STD_LOGIC。 Q:OUT STD_LOGIC_VECTOR(7 DOWNTO 0))。 END LADDER。 ARCHITECTURE LADDER_ARC OF LADDER IS BEGIN PROCESS(CLK,RESET) VARIABLE TMP:STD_LOGIC_VECTOR(7 DOWNTO 0)。
第 7 页 西华大学课程设计说明书 4 控制系统硬件设计 混合液系统控制主电路图如图 41 所示。 图 41 混合液位控制系统主电路图 控制柜的安装布置设计 控制柜的面板和内部安装布置如下图所示。 图 4— 2 混合液位控制系统面板及内部电路 第 8 页 西华大学课程设计说明书 5 控制系统软件设计 自动控制程序的 执行对硬件可靠性的要求是很高的,如果机械限位开关、机械开关
经过的时间,求解用户的三维运动速度。 以上定位原理说明,用 GPS技术可以同时实现三维定位与接收机时间的定时。 一般来说 ,利用 C/A码进行实时绝对定位,各坐标分量精度在 5l0m左右,三维综合精度在 1530m左右。 利用军用 P码进行实时绝对定位,各坐标分量精度在 13m左右,三维综合精度在 36m左右。 利用相位观测值进行绝对定位技术比较复杂,目前其实时或准实时各坐标分量的精度在 ,事后
脸照片来实现的。 因为岁数、形态、表情、光照、妆容等等原因,人脸不是一成不变的,他是千变万化的,是以使得人脸识别技术显得难以控制,大大提高了人脸识别的挑战性。 人脸识别技术的发展现状 当今社会,研究人脸识别技术的组织及个人很多很多,比如说美国的 MIT(Media lab)、 CMU 和耶鲁大学,还有日本的少许研究机构。 与国外相比,中国关于人脸识别技术的研究开展的就相比晚许多
可以按照常规方法进行编程,也可以在线编程。 其将通用的微处理器和 Flash 存储器结合在一起,特别是可反复擦写的 Flash 存储器可有效地降低开发成本。 2) 管脚说明: VCC:供电电压。 GND:接地。 P0 口: P0 口为一个 8 位漏级开路双向 I/O 口,每脚可吸收 8TTL沈阳大学职业技术学院毕业设计(论文) 11 门流。 当 P1 口的管脚第一次写 1 时,被定义为高阻输入。
延时子程序 === DELY10MS: MOV R6,10 D1: MOV R7,248 DJNZ R7,$ DJNZ R6,D1 RET 中断服务子程序。 ==== 中断服务子程序 === INT_T0: MOV TH0,STH0 MOV TL0,STL0 CPL RETI 武汉纺织大学 2020 届毕业设计论文 23 音符参数表。 ==== 音符参数表 === TABLE: DB 3FH