页数:45页文件大小:1.28 MB来源: EDA技术及数字系统的应用ppt课件
本课件为FPGA综合设计实践,围绕VGA图像与字符显示、PS/2键盘鼠标接口设计、通用异步收发器UART的波特率与收发时序、单总线温度传感器DS18B20的读写流程与LCD1602显示控制等典型项目,给出完整的设计思路与模块划分。
《EDA技术及数字系统的应用》第八章封面,主题为FPGA综合设计实践。
学习目标和要求
8.1 VGA图像显示的设计与应用VGA作为一种标准的显示接口采用光栅扫描方式,对于CRT显示器来说,轰击荧光屏的电子束在屏幕从左到右(受水平同步信号HSYNC控制)、从上到下(受垂直同步信号VSYNC控制)做有规律的移动,从而实现显示。光栅扫描又分逐行扫描和隔行扫描。目前微机所用显示器几乎都是逐行扫描的。显示屏上的一个显示点即像素点可有多种颜色,由表示该像素的二进位数(又称像素的位宽)决定。像素位宽为8bit,则每个像素有28=256种颜色;位宽为16bit,则有216=65536种颜色;位宽为24bit,则有224,即1700多万种颜色。显示卡内的D/A(数/模)转换电路将每个像素的位宽(二进位整数)转换成对应亮度的R、G、B(红、绿、蓝)模拟信号,Red、Green、Blue引脚上恰好是某个模拟电压,那么屏幕上的这个像素点就显示这个模拟电压对应的颜色。
1、VGA显示接口和标准时序VGA接口是一种D型接口,上面共有15针孔,分成三排,每排五个,如图8.1所示。其中除了2根NC(Not Connect)信号、3根显示数据总线和5个GND信号外,比较重要的是3根RGB彩色分量信号和2根扫描同步信号HSYNC和VSYNC针。图8.1 VGA接口图8.2 VGA接口的电阻网络DAC
实现VGA的显示,除了RGB数据信号外就是水平(行)同步和垂直(场)同步信号,这两个同步信号是VGA正常显示的关键。水平同步信号保证每一行扫描的正确,垂直同步信号保证每一屏显示的正确。行扫描时,水平同步信号的时序图如图8.3所示。场同步信号的时序与行同步信号的时序相似,只不过每一段的时间比水平时序要长得多。图8.3 VGA水平信号的时序图
VGA时序控制是整个显示的关键部分,最终输出的行、场同步信号必须严格按照VGA时序标准产生相应的脉冲信号。显示器的分辨率和刷新频率给定后,VGA的同步时序中行同步HSYNC和场同步信号VSYNC的参数通过表8-1可查。场时序/行数行时序/像素点像素频率/MHz显示模式srqpoedcba5251048033280016640489625.175640×480@605001480163840166401206431.5640×480@7562816002341056408008812840800×600@6062516002131056168001608049.5800×600@7580637682961344241024160136651024×768@608001768283131216102417617678.81024×768@7510661102438316884812802481121081280×1024@608281800243168064128020013683.461280×800@6093219002831904801440232152106.471440×900@60
2、系统的功能要求和设计思想本实例的设计要求是,在VGA显示屏上显示一幅图片和几行文字字符,在显示器的底部显示的中文字符可以从屏幕右边到左边自动移动显示。图8.4 VGA显示的结果示意图在VGA显示器上主要有四部分显示:图片128×128×12(可以放大2倍、3倍、4倍)、秒表计时(显示格式:小时:分:秒. 1/100秒)、自动移动的一组中文文字、放大倍数指示(×3)。图8.4中的四个虚线框表示了在显示屏上显示的这四部分的位置关系,图片保持在显示屏的正中央(即使放大),秒表计时显示在显示屏的顶部中央;放大倍数显示在显示屏右上角;自动移动的一组中文文字显示在显示屏的底部。
3、各功能模块的设计根据图8.5所示系统的原理图,下面将分别介绍图中的三个模块:
各个模块的输出数据都要经过该模块处理后送到显示器。该模块的输出信号直接连到VGA接口,它是屏幕显示控制模块与显示器进行通信的桥梁。1)VGA控制模块(VGA_controller模块)
VGA_controller模块是按照表8-1中VGA模式800×600@60的时序参数,编写Verilog代码(见教材)。行计数器H_Cont产生行同步信号,场计数器V_Cont产生场同步信号。在显示有效区:( H_Cont>=X_START && H_Cont<X_START+ H_SYNC_ACT &&V_Cont>=Y_START && V_Cont<Y_START+V_SYNC_ACT)中Red、Green、Blue才能有效输出,并且在显示有效区内像素单元地址生成,即水平坐标oCoord_X和垂直坐标oCoord_Y。oCoord_X和oCoord_Y为mid模块提供显示图片和文字的位置坐标。该模块是实现屏幕上显示图/文内容的位置坐标,以及显示方式。mid模块主要控制四部分显示:图片(放大2倍、3倍、4倍)、秒表计时、移动的中文、放大倍数指示。该模块还包括两个ROM模块:显示秒表计时结果的字符存储模块char_rom_d、显示移动中文的文字存储模块move_word_rom。char_rom_d模块存储数字(0~9)、小写字母(a~z)、大写字母(A~Z)、点(.)和冒号(:)等64个字符。每个字符的大小为8×16 (16行、8列);move_word_rom模块存储中文文字32个,每个文字的大小为16×32 (32行、16列)。该模块的VHDL代码(见教材)。2)屏幕显示控制模块(mid模块)
--------图片存储器(imgrom)地址计算-------------------------temp_yy<=conv_integer ( vcnt-tempyy ) / k;temp_xx<=conv_integer ( hcnt-tempxx ) / k;romaddr_control <=conv_std_logic_vector( ( temp_yy*128+temp_xx),14 );-------------显示图片IMGROM_bmp.mif-----------------------IF((vcnt <tempyy) or ( vcnt >tempyy+long*k ) ) THENqout_temp<=BLUE;--显示backclocrELSIF((hcnt>tempxx )and (hcnt<tempxx + wide*k ) ) THENqout_temp<=qin;--显示图片内容IMGROM_bmp.mifELSE qout_temp<= BLUE;END IF;注:k为放大倍数 ; 图片的显示
--------中文文字存储器(move_word_rom)调用及地址计算--------word_rom : move_word_rom PORT MAP( clock=>clk, address=>word_addr,q=> word16_data );word_addr<=conv_std_logic_vector(((conv_integer(hcnt-count_addr)/16)*32+conv_integer(vcnt-563)mod 32), 10) ;ch<=conv_integer(hcnt-count_addr-9)mod 16;-----------------显示移动的中文字符------------------------IF((hcnt>=1)and(hcnt<1+799)and(vcnt>=563)and(vcnt<595))THENIF word16_data(ch)='1' THEN qout_temp<= CYAN;else qout_temp <=WHITE;END IF ; END IF; 字符(文字)的显示(字符的大小为16×32)对于文字字符的存储器ROM,在屏幕指定位置(x,y)显示一串文字,其方法与图片ROM的方法有一点不同。例如,一个文字字符的大小为16×32,采用逐行取字模的方法。这样字符ROM的每个存储单元为16位,表示一个字符的一行(16个像素点),每两个字符存储地址相差32。因此文字存储器ROM的地址计算为((hcnt-x)/16)*32+(vcnt-y)mod 32,以下为显示一串移动的中文字符的语句:如果显示的图片大、色彩丰富,就需要选择FPGA的外部存储器如ROM、SDRAM等。采用何种存储器将最终决定读取控制模块的数据读取方式。例如,ROM可用直接产生地址信号的方式对芯片进行访问,而SDRAM常常利用DMA控制方式配合CPU进行读写操作。本设计由于显示的图片大小为128×128,色彩显示为12位(可显示4096颜色),故可以采用FPGA的内部存储器。其方法是利用MegaWizard管理器来定制ROM宏功能模块,3)图片存储器(imgrom模块)在定制ROM宏功能模块时,还需要建立ROM的初始化文件(mif文件),其方法是通过一个图/字取模软件提取该图/字数据,然后转化为mif文件格式。对于图片的取模软件有Image2Lcd,对于文字字符的字模提取软件有PCtoLCD2002、lcmpisp等。它们的输出一般为C51或A51格式,再使用C2Mif软件(也可其他方法)来转化为mif文件格式。
4)屏幕显示控制模块(mid模块)该模块是实现屏幕上显示图/文内容的位置坐标,以及显示方式。为了完成图8.4所示的显示结果,mid模块主要控制四部分显示:图片(放大2倍、3倍、4倍)、秒表计时、移动的中文、放大倍数指示。该模块还包括两个ROM模块:显示秒表计时结果的字符存储模块char_rom_d、显示移动中文的文字存储模块move_word_rom。char_rom_d模块存储数字(0~9)、小写字母(a~z)、大写字母(A~Z)、点(.)和冒号(:)等64个字符。每个字符的大小为8×16 (16行、8列);move_word_rom模块存储中文文字32个,每个文字的大小为16×32 (32行、16列)。注意:在屏幕上能实现图片和字符的正常显示,对存储器的地址计算是很重要的。
例如,对于一个图片(128×64),在屏幕指定位置(x,y)显示图片,由于显示器显示方式是逐行扫描(hcnt和vcnt),当显示器像素点扫描到(x,y)位置时,就开始对图片存储器的地址进行访问,从而显示存储的图片数据(一个像素点)。因此,存储器ROM的地址计算为(hcnt-x)+(vcnt-y)×128,并且指定图片显示范围。以下为图片显示语句:IF((vcnt > y ) and (vcnt< y+64 )and (hcnt>x) and (hcnt<x +128)) THENqout_temp<=qin;ELSE qout_temp< = BLUE;--显示backclocrEND IF;
对于文字字符的存储器ROM,在屏幕指定位置(x,y)显示一串文字,其方法与图片ROM的方法有一点不同。例如,一个文字字符的大小为16×32,采用逐行取字模的方法。这样字符ROM的每个存储单元为16位,表示一个字符的一行(16个像素点),每两个字符存储地址相差32。因此文字存储器ROM的地址计算为((hcnt-x)/16)*32+(vcnt-y)mod 32,以下为显示一串文字(10个)的语句:IF((hcnt>=x) and (hcnt<x+16*10)and(vcnt>=y)and (vcnt<y+32)) THENIF q((hcnt-x-9)mod 16)='1' THEN qout_temp<= RED;else qout_temp <=WHITE;END IF ;END IF;8.2(8.3)PS/2接口设计与VGA显示PS/2接口是计算机最常用的接口之一,用于鼠标、键盘等输入设备。是实现人机交互的重要途径。随着标准PS/2键盘技术的不断成熟,在嵌入式系统中,用标准PS/2键盘会越来越广泛。因此,用硬件描述语言设计基于FPGA的标准PS/2接口,接收标准键盘和鼠标(PS/2接口)的信号,PS/2接口是通过6脚的mini-DIN连接器和外设连接的。如图8.8所示为PS/2接口的引脚图(孔)。PS/2接口的引脚只有四个脚有意义:时钟(Clock脚)、数据(Data脚)、电源(+5V脚)和地(电源Ground地)。图8.8PS/2接口的引脚图(孔)
PS/2设备有主从之分,现在广泛使用的PS/2键盘鼠标均工作在从设备方式下。使用中,主设备提供+5V电源给PS/2接口,PS/2接口的时钟与数据线都是集电极开路结构,必须外接上拉电阻,一般上拉电阻设置在主设备中,它们平时保持高电平,有输出时才被拉到低电平,之后又自动上浮到高电平。主从设备之间的数据通信采用双向同步方式传输,时钟信号一般由从设备产生。PS/2通信协议是一种双向同步串行协议。即每在时钟线上发一个脉冲,就在数据线上发送一位数据。任何一方如果想抑制另外一方通信时,只需要把Clock(时钟脚)拉到低电平即可。如果是PC和PS/2键盘间的通信,则PC必须做主机,也就是说,PC可以抑制PS/2键盘发送数据,而PS/2键盘则不会抑制PC发送数据。一般两设备间传输数据的最大时钟频率是33kHz,大多数PS/2设备工作在10~20kHz。推荐值在15kHz左右,
1.标准PS/2键盘数据输出格式:包含1个起始位(逻辑0)、8个数据位(扫描码)、1个奇偶验位、1个停止位(逻辑1),共计11位。标准PS/2键盘数据输出格式如果发现有按键按下、释放或长按,键盘就发送"扫描码"的信息到主机。扫描码有两种不同的类型:通码和断码。当一个键被按下去或长按时,键盘就发送通码;当一个键被释放时,键盘就发送断码。每个键盘被分配了唯一的通码和断码,这样主机通过查找唯一的扫描码就可以确定是哪个按键被按下或释放。
通过键盘的字符输入,完成把键盘按键的扫描码转换成字符ASCII码的过程,成功实现了标准PS/2键盘的字符输入在VGA显示器上的信息显示。PS/2键盘接口与VGA显示的顶层原理图图中去掉了VGA控制模块,只画出键盘字符模块(ps2_char模块)和字符屏幕显示模块(text_vga模块)。kb_data和kb_clk两个输入信号为PS/2键盘接口的数据和时钟线,键盘字符模块实现串并数据和扫描码到ASCII码的转换,字符屏幕显示模块完成字符的显示方式,
键盘字符模块(ps2_char)只对键盘的数字(0~9)、字母(小写a~z和大写A~Z)、空格键(Space)、换行(Enter)、退格键(Backspace)和其他一些符号进行了扫描码转换为ASCII码输出。敲击键盘的Shift键可进行大小写字母转换的输入显示。该模块对于组合按键不能进行处理。字符屏幕显示模块(text_vga)通过ps2_char模块输出的ASCII码,提取该字符的点阵字模库,在显示屏的指定窗口中显示字符。因此需要有存储显示字符点阵字模的存储器ROM,一个字符的字模大小为8×16点阵。由于字符的ASCII码是连续的,这样与字模存储器ROM的地址可以形成一种对应关系,通过ASCII码就可以访问到该字符字模ROM的存储范围。该模块只完成了ASCII码中第32个字符(Space)到第126字符(~)的输入显示。
2. PS/2鼠标的工作模式和数据格式标准的PS/2鼠标支持的输入有X(左右)位移、Y(上下)位移、左键、中键和右键。鼠标以一个固定的频率读取这些输入并更新不同的计数器,然后标记出反映的移动和按键状态。标准的鼠标有两个计数器保持位移的跟踪:X位移计数器和Y位移计数器,可存放9位的二进制补码,并且每个计数器都有相关的溢出标志。它们的内容连同三个鼠标按键的状态一起以三字节数据包的形式发送给主机。按照PS/2通信协议发送每字节。Bit0Bit1Bit2Bit3Bit4Bit5Bit6Bit7左键右键中键1X符号Y符号X溢出Y溢出Byte1X位移Byte2Y位移Byte3
本设计利用FPGA实现PS/2鼠标接口,在以VGA作为输出设备上初步实现图形化用户界面的方案,用窗口菜单和文字图标取代了传统的键盘操作。鼠标左键按下时箭头光标改变颜色并选中图标,还可以随着光标指针移动选中的窗口。在利用FPGA进行设计的过程中,简化了通信协议,对PS/2鼠标的操作只用了一条指令,即使能数据报告(0xF4)。利用鼠标上电自动复位并进入Stream模式后,发送使能数据报告指令(0xF4),便完成对鼠标的初始化。之后便可以接收PS/2鼠标发送过来的数据包。该方案的优点是简化设计、节省资源;缺点是不能软复位,即鼠标由于出现异常情况而不能正常工作时,不能用软件复位,只能重新插拔鼠标。
图中VGA控制模块已经省去,只包括了两个模块:鼠标模块(mouse模块)和屏幕显示控制模块(mid模块)。nouse_DATA和mouse_CLK两个信号(双向)为PS/2鼠标接口的数据和时钟线,mouse模块随着鼠标移动实现光标坐标和鼠标左键状态的输出(Mouse_Col[9..0]、Mouse_Row[9..0]、left_mouse),mid模块完成屏幕显示控制,mid模块的输出(qout[11..0])连接VGA控制模块。
屏幕显示控制模块(mid模块)的VHDL代码见书P368~373鼠标在屏幕上显示的箭头形光标的图案大小为10×16,使用了两个存储器:一个显示箭头图案(mouse_cur_rom.mif),另一个显示箭头轮廓图案(mouse_sur_rom.mif),它们随着mouse模块输入的光标坐标(xx,yy)而移动。为了让光标图案保持在屏幕上的最前面,在显示进程中,显示箭头形光标图案的语句应在最后面描述,这样光标图案与其他图形重叠时,光标总在其他图形的前面。要实现光标拖动一个窗口或图片,首先确定光标(xx,yy)是否进入窗口或图片中(左上角坐标(tx,ty)为窗口或图片位置,long和wide为窗口的长和宽),当光标进入窗口或图片中按下鼠标左键,输入信号left_mouse立刻产生上升沿,此时计算出光标与窗口左上角坐标的位置差值(tx_xx <= xx-tx; ty_yy<= yy-ty),继续按着鼠标左键不松开(left_mouse为1),窗口或图片(tx <= xx-tx_xx; ty <= yy-ty_yy)随着光标拖动而移动。
8.4通用异步收发器设计通用异步收发器(Universal Asynchronous Receiver/Transmitter,UART)是一种通用串行数据总线,该总线双向通信,可以应用于短距离串行传输。在计算机中,串行外设用到的RS-232C异步串行接口,一般采用专用的集成电路即UART实现。使用VHDL将UART的核心功能集成,在FPGA器件上可以实现多个UART单元。UART串行传输一个数据帧的格式与标准PS/2接口的数据格式相同,数据以每次一位的方式传输和接收。每一个字符数据的前面都有一位起始位(低电平),字符本身有5~8bit数据位(低位在前,高位在后)组成,接着是一位校验位(也可以没有校验位),最后是一位(或一位半、二位)停止位,停止位后面是不定长度的空闲位。停止位和空闲位都规定为高电平,这样就保证了起始位开始处一定有一个下降沿。UART与标准PS/2接口都是串行通信,但是标准PS/2接口采用的是同步通信,而UART使用异步通信协议。
数据的传输没有时钟信号,发送方和接收方分别有各自独立的时钟,传输的速度(波特率)由双方约定,使用起止式异步协议(采用起始位和停止位来实现字符的界定或同步)。起止式异步协议的特点是以每一个字符为单位进行传输,字符之间没有固定的时间间隔要求,每个字符都以起始位开始,以停止位结束。在计算机中,串行外设是RS-232C异步串行接口,UART相连于产生兼容RS-232C规范信号的电路。RS-232C标准定义逻辑"1"信号相对于地为-15~-3V,而逻辑"0"相对于地为3~15V。UART这里指的是TTL电平的串口;RS-232C指的是RS-232C电平的串口。UART主要有由数据总线接口、控制逻辑、波特率发生器、发送部分和接收部分等组成,基本的UART通信只需要两条信号线:RXD和TXD。TXD是UART的发送端,RXD是UART的接收端,实现全双工串行数据传输和接收。
利用FPGA实现UART的发送和接收数据的功能,采用基本的UART通信即两条信号线:RXD(接收端)和TXD(发送端),实现全双工串行数据传输和接收。UART单元电路只需要三个模块:UART波特率(clk_generator)模块、UART接收(uart_receive)模块和UART发送(uart_transfe)模块。如图8.16所示为UART单元电路连接图。1. UART单元电路设计图8.16UART单元电路连接图
波特率(Baud)是每秒传输串行数据的位数。其单位是b/s(位/秒,也可写成bps)。波特率用来衡量串行数据传输速率。虽然波特率可以由通信双方任意定义为每秒多少位,但在串行通信中,是采用标准的波特率系列,如110,150,300,600,1200,2400,4800,9600,19200,115200,38400b/s等。有时也用"位周期"来表示传输速率,即传输1位数据所需的时间。显然,位周期是波特率的倒数。例如,串行通信的数据传输率为1200b/s,则每一个数据位的传输时间Td为波特率的倒数:Td=1位/Baud=1b/(1200b/s)=0.833ms在串行通信传输过程中,二进制数据序列是以数字信号波形的形式出现的,如何将这些数字信号波形定时发送出去或接收进来,以及如何对发送/接收双方之间的数据传输进行同步控制的问题就引出了发送/接收时钟的应用。发送/接收时钟的作用有二:
为了提高发送/接收时钟对串行数据中数据位的定位采样频率,避免或减少假启动和噪声干扰。发送/接收时钟的频率,一般都设置为波特率的整数倍,如1、16、32、64倍。并且,把这个波特率的倍数叫做波特率因子(factor),或波特率系数。异步通信常采用16b-1;同步通信则必须取factor=1b-1。发/收时钟脉冲与波特率之间的关系是:TXC = Baud * Factor(3)波特率因子
例如,某一串行接口电路的波特率为1200b/s,波特因子为16b-1,则发送时钟的频率:TxC=16b-1×1200b/s=19200Hz实际上,波特率因子可理解为发送/接收1位数据所需的时钟脉冲个数,即:在发送端,需要多少个发送时钟脉冲才移出1位数据,在接收端,需要多少个接收时钟脉冲才移进1位数据。引用波特率因子的目的是为了提高定位采样的分辨率。传送数据起始位0/10/1采样时钟位1位281616检测到起始位前沿的时钟确定已检测到起始位位采样时钟
从图中可看出,利用这种经16倍波特率的接收时钟对串行数据流进行检测和定位采样,过程如下:在停止位或空闲位的后面,接收器利用每个接收时钟的上升沿对从通信线上来的输人数据流进行采样,并检测是否有8个连续的低电平,来确定它是否为起始位,如果都是低电平,则确认是起始位,且对应的是起始位中心,然后以此为时间基准,每隔16个时钟周期采样一次,以定位检测一个数据位;如果不是8个连续低电(即使8个采样值中有一个非"0"),则认为这一位是干扰信号,把它删除。可见,采用16倍频措施后,不仅有利于实现收发同步,而且有利于抗干扰和提高异步串行通信的可靠性。传送数据起始位0/10/1采样时钟位1位281616检测到起始位前沿的时钟确定已检测到起始位位采样时钟
UART波特率(clk_generator)模块在异步串行的数据传输中没有时钟信号,发送方和接收方分别有各自独立的时钟,数据传输的速度需由双方约定。因此数据的传输速度是用波特率来描述的,即每秒钟传送数据位的数目来表示,它说明数据传送的快慢。常用的标准波特率:4800、9600、19200、38400、43000、56000、57600、115200等。波特率发生器实际上就是分频器,可以根据系统的时钟频率(晶振时钟)和要求的波特率计算出分频的分频系数。假设系统的时钟频率为50MHz,波特率为9600bps,因此要设计分频模块,其分频系数等于50MHz / 9600Hz = 5208.333。也可以写成232/ 824634=5208.332,这与要求的分频比很接近,这样可使用32位的累加器,有利于HDL语言的描述,其语句如下:reg[31:0]bps_cnt;always@( posedge clk50m )bps_cnt <= bps_cnt1+32'd824634;//Bps=9600bpsIf ( bps_cnt < 32'h7FFF_FFFF )clk_bps <= 0;else clk_bps <= 1;clk_generator模块的输出端有两个,一个输出信号clk_bps(9600bps)提供给UART发送(uart_transfe)模块,另一个输出信号clk_ smp(9600bps*16)提供给UART接收(uart_receive)模块。这是因为UART接收器必须通过一定的机制与接收到的输入信号同步,一般使用16倍于波特率的采样时钟对接收到的信号进行采样,使每一次都检测到正确的每位数据。由于输入的串行数据帧与接收时钟是异步的,当UART接收模块的输入端rxd由高电平转为低电平可以被视为一个数据帧的起始位。为了能够检测到正确的起始位信号,必须要求接收到的起始位在信号clk_smp(波特率clk_bps*16)采样的过程中至少有一半都是低电平,才可以认定接收到的是起始位。然后每隔16个clk_smp周期被采样一次数据位。 ; UART接收(uart_receive)模块
由于采样时钟clk_smp周期是波特率时钟频率的16倍,所以起始位需要至少8个连续clk_smp周期的低电平被接收到,才能确认接收到的是起始位。接着每隔16个clk_smp周期采样每个数据位,这样保证了每数据位的中点处被采样,确保接收的每位数据正确。当接收完一个字节数据时,数据接收标志rxd_flag产生一个上跳脉冲信号。
uart_transfe模块只要每隔一个clk_bps周期(波特率)输出一个数据即可,数据帧顺序遵循第1位是起始位,接着八位数据位,最后1位是停止位,共计10位。在本设计中没有校验位。uart_transfe模块使用Verilog HDL描述的代码见书。 ; UART发送(uart_transfe)模块
8.5单线(1-Wire)温度测量与LCD1602显示1-Wire总线技术是美国DALLAS(达拉斯)半导体公司近年推出的新技术。它将地址线、数据线、控制线合为1根信号线,允许在这根信号线上挂接多个1-Wire总线器件。单总线技术具有节省I/O资源、结构简单、成本低廉、便于总线扩展和维护等优点,而基于这种技术的数字芯片和产品为各种应用系统的小型化创造了极其有利的条件。因此在分布式测控系统中有着广泛应用。DS18B20是采用1-Wire总线技术的典型产品。1. DS18B20数字温度传感器DSl8B20作为检测元件,测温范围-55℃~125℃,分辨率最大可达0.0625℃。DSl8B20可以直接读出被测温度值。而且采用3线制与控制器相连,减少了外部硬件电路,使用户可轻松地组建传感器网络,为测量系统的构建引入全新概念。一线总线将独特的电源和信号复合在一起,并仅使用一条线,每个芯片都有唯一的编码(64位的序列号),支持联网寻址,简单的网络化的温度感知,零功耗等待等特点。
引脚说明:1:GND地2:DQ数据I/O3:VDD(可选电源电压)图8.17DS18B20引脚排列DQ为数据输入/输出引脚,对于单线操作漏极开路。当工作在寄生电源模式时用来提供电源。DS18B20的电源供电方式有2种:外部供电方式和寄生电源方式。工作于寄生电源方式时,VDD和GND均接地,它在需要远程温度探测和空间受限的场合特别有用,
DS18B20中有一个64位只读存储器ROM储存器件唯一序列号,其内部包含了8个连续字节的寄存器,前两个字节是测得的数字温度数值寄存器,第1个字节的内容是温度的低8位,第2个字节是温度的高8位。第3个和第4个字节是存放高温度报警TH和低温度报警TL,第5个字节是配置寄存器,配置寄存器允许用户将温度的精度设定为9、10、11或12位。这3个字节的值可以保存在电可擦除的只读存取器(E2PROM )中,掉电后数据不丢失,第6,7, 8个字节内部保留。第9个字节是循环冗余检验CRC字节。两个字节温度寄存器的格式如下:LSByteMSByte
单总线系统包括一个总线控制器和一个或多个从机。DS18B20总是充当从机。当只有一只从机挂在总线上时,系统被称为"单点"系统;如果由多只从机挂在总线上,系统被称为"多点"。所有的数据和指令的传递都是从最低有效位开始通过单总线。如图8.18所示为控制器与DS18B20电路连接图。TXRX控制器图8.18控制器与DS18B20电路连接图DS18B20的单总线端口(DQ引脚)是漏极开路式的,单总线需要一个约5KΩ的外部上拉电阻。单总线的空闲状态是高电平。在暂停某一执行过程,如果还想恢复执行,总线必须停留在空闲状态。
控制器通过单线总线端口访问DS18B20的操作流程如下:
控制器发出温度转换命令后,DS18B20采集温度并进行A/D转换,产生的温度转换结果数据以2个字节的形式被存储在RAM的字节0和字节1,而后DS18B20保持等待状态。执行温度转换指令则控制器必须等待,一般转换时间为500uS。如执行数据读写指令则需要严格遵循18B20的读写时序来操作。DS18B20的数据读写是通过时序处理位来确认信息交换的。
控制器发起读时序时,DS18B20仅被用来传输数据给控制器。因此,控制器在发出读指令(BEH)、读电源模式指令(B4H)和发出温度转换指令(44h)后必须立刻开始读时序。若要读出当前的温度数据需要执行两次工作周期,第一个周期为复位、跳过ROM指令、执行温度转换存储器操作指令、等待500uS温度转换时间。紧接着执行第二个周期为复位、跳过ROM指令、执行读RAM的存储器操作指令、读数据(最多为9个字节,中途可停止,只读简单温度值则读前2个字节即可)。2.字符型LCD1602LCD1602就是一种专门用来显示字母、数字、符号等的点阵型液晶模块。它显示的内容为16字×2行(即32个字符:可以显示两行,每行16个字符),每个字符由5×7点阵字符位组成,每个点阵字符位之间有一个点距的间隔,每行之间也有间隔,
LCD1602内部是由LCD显示器、LCD驱动器、LCD控制器(与HD44780兼容)三部份所组成。内部包含标准的ASCII码(含大小写英文字母、阿拉伯数字及特殊符号等)。该模块具有16根引脚端(含背光)说明符号引脚号为电源地VSS1接5V电源正极VCC2对比度调整端,接正电源时对比度最弱,接地电源时对比度最高(可以通过一个10K的电位器调整对比度)。V03高电平1时选择数据寄存器,低电平0时选择指令寄存器。RS4为读写信号线,高电平时进行读操作,低电平时进行写操作。R/W5为使能端:下降沿脉冲写命令\数据。E6为8位双向数据端。DB0~DB77~14空脚或背灯电源。15脚背光正极,16脚背光负极。BLA、BLK15~16
LCD1602提供各种控制命令,如:清屏、字符闪烁、光标闪烁、显示移位等多种功能。有80字节显示数据存储器DDRAM;内建有192个5×7点阵字型的字符发生器CGROM;8个可由用户自定义的5×7的字符发生器CGRAM。LCD1602可显示的字符码如表8-7所列。
本设计是以数字温度传感器DS18B20测量零度以上的室温,并且在LCD1602模块实时显示测量的温度值。显示的温度值包括两位整数和两位小数部分。该系统是以FPGA作为一个总线控制器,在单总线系统上挂接一只DS18B20从机,实现FPGA的控制器对传感器DS18B20的数据读写,以及LCD1602的数据显示。图8.23DS18B20的数据读写单元电路
DS18B20的数据读写单元电路如图8.23所示,包括数据读取模块(ds1820模块)和二进制数转换BCD码模块即binary_to_BCD模块(整数部分)和float_to_bcd模块(小数部分)。LCD1602的显示控制单元电路如图8.24所示,包括分频CLK_DIV模块、计数cont模块和显示控制lcdm_data模块。由于LCD1602显示器是一个慢速度的器件,分频模块(CLK_DIV)将高的时钟频率(50MHz)分频为几千Hz。计数模块cont为显示控制模块提供操作(写指令/数据)的顺序步骤。显示控制模块按照LCD1602显示要求实现LCD1602显示。RW输出端恒为低电平,表明显示控制单元电路对LCD1602只进行数据输出(写操作)。图8.24LCD1602的显示控制单元电路
下载地址:{{downurl}}
{{{a}}}
{{#b}}{{{b}}}
{{/b}} {{/title}} {{#nolog}}登陆注册
{{/nolog}} {{#djsx}}点我刷新
{{/djsx}} {{#gocz}} {{/gocz}} {{#ffqr}} {{/ffqr}}