×
模拟电子 > 模拟电路设计 > 详情

Mojo v3 FPGA板与16×2液晶显示模块的接口

发布时间:2022-03-18 发布时间:
|

本文将讨论一个基本的16×2液晶模块与FPGA接口的细节。

在本教程中,我们将使用Veriloghdl设计一个与基于HD 44780液晶控制器/驱动芯片的通用液晶模块接口的数字电路。采用MOJO V3 FPGA板实现该设计。本文使用的液晶模块是162 A显示器。

HD 44780兼容液晶模块

在前面的文章中,我们讨论了使用HD 44780液晶控制器/驱动芯片的LCD模块的细节。这些LCD模块的突出显示如图1所示。

图1.图片由AAC提供。

如您所见,有三个控制引脚(RS、R/W和E)以及八个数据引脚(DB7到DB0)。对于写操作,我们需要对这些引脚施加适当的电压,如下图2的时序图所示。

图2.日立的礼遇。

下表给出了上述时序图的不同延迟值:

表1.日立的礼遇。

有几个指令可以用来配置液晶模块。您可以在此数据表的第24页找到这些说明的完整列表。下面列出了一些重要的说明。

表2

设计积木:路径1

我们要显示“你好世界!”在液晶显示器上。让我们看看我们的数字系统需要哪些模块来与LCD模块通信。我们需要一个ROM来存储消息字符的ASCII代码。如图3所示,ROM的输出将连接到LCD模块的八个数据引脚。

图3

“你好世界!”消息有12个字符,我们可以使用12✕8位ROM来存储消息.然而,让我们考虑一个16✕8位ROM的消息,以便我们可以显示长达16个字符(长度的第一行液晶显示器)。

你可能想知道为什么上面的数字显示一个20✕8位ROM,如果我们的消息是最多16个字符长。这些额外的四个字节将用于存储与LCD指令相关的数据,这些指令允许我们配置模块。例如,如表2所示,我们可以将十六进制值0x38应用于LCD数据引脚,以指定LCD模块应该接收/发送8位长度的数据。就像字符代码一样,命令的十六进制值被应用到数据引脚上,因此,我们可以将它们存储在同一个ROM中。

在本文中,我们将使用四个命令-0x38、0x06、0x0C和0x01-来配置LCD。您可以在表2中找到这些命令的简要说明。有关详细说明,请参阅本文。因此,我们有一个20✕8位ROM,其中前四个字节是0x38、0x06、0x0C和0x01。接下来的16个字节存储我们的消息的ASCII代码。

考虑到图2的时序图,我们观察到应用于DB7-DB0的数据不应该在一定的时间内改变,以便LCD能够成功地读取它。因此,如图3所示,我们需要一组D型触发器(DFF)来在一定时间内保持ROM地址(因此,DB7-DB0)不变。在LCD读取数据后,我们需要将地址值增加一个,才能将下一个字符/命令应用到LCD上。因此,如图4所示,应该在DFF之前放置一个复用器和增量器。

图4

使用复用器的SELECT输入,我们可以指定地址值应该保持不变(S1=0)还是递增(S1=1)。复用器还有第三个选项,允许我们将地址值重置为00000...这可以通过重置DFF来实现。我们将把所有这些区块称为路径1,如图所示。正如本文后面讨论的,我们将使用沙一控制电路的信号路径1封锁。这个阿德雷格信号将用于监视路径1.

值得一提的是,虽然上面的数字只显示了一个DFF,但实际上有五个DFF(因为20字节ROM需要一个5位地址总线)。

设计积木:实现延迟

如上所述,应用于LCD控制输入的波形应遵循图2的时序图。在RW和RS引脚改变状态后,我们必须等待TAS才能将E引脚设置为高逻辑。然后,E上从高到低的转换开始写操作.然而,在之前(TDSW)和E(Th)下降边缘之后的一段时间内,数据不应该改变。

因此,为了成功地与LCD进行通信,我们必须实现延迟的TAS、tDSW和TH。这可以通过计数器来实现。由于我们有时需要停止计数器或重置它,我们将在计数器的DFF之前放置一个多路复用器。如下图5所示。

图5

这样,我们就可以使用s2输入来控制计数器和CNT雷格输出将给出计数器的状态,这是经过时间的指示。根据时序图,我们需要三个不同的时间延迟:TAS=40 ns,tDSW=80 ns,th=10 ns。注意到MOJO V3板的时钟频率为50 MHz(时钟周期为20 ns),我们可以计算每个时间延迟所需的计数数。

然而,事实证明,我的16×2液晶显示器需要更长的延迟操作。这可能是因为我使用相对较长的电线和一块面包板来测试我的设计。在本文中,我将实现TAS=10 ms和th=3 ms。我会保持高E信号58毫秒(PWEH=58毫秒)。我的设计应该能够与更短的延迟一起工作。你可以做一些实验,为你的设计调整这些数字。

柜台需要多少位数?选择延迟时,总延迟为10+58+3ms=71 ms。考虑到Mojo的时钟周期(20 Ns),可以通过计数从0到3 549 999实现71 ms的延迟。因此,如图5所示,我们需要一个22位计数器.

设计积木:控制路径

我们需要的最后一个构建块是一个控制路径1路径2适当地块,以便为LCD模块生成所需的波形。这可以通过有限状态机(Fsm)来实现。阿德尔雷格CNT雷格信号(状态)路径1路径2)并生成适当的沙一S2信号。此FSM的初始设计如图6所示。

图6

请注意,图表仅显示状态转换(未显示FSM的输出)。有三种状态:在闲散说明信号得到它们的初始值。这个液晶显示器State应用LCD配置命令;这就是状态转换条件为(addr_reg=3&&cnt_reg=355万)的原因。换句话说,我们有四个命令,当第四个命令(addr_reg=3)被应用于71ms的LCD(cnt_reg=355万)时,我们应该转到液晶打印向LCD发送消息数据的状态。当我们到达ROM的末尾(addr_reg=19)时,我们应该等待71 ms(cnt_reg=355万),然后转换到闲散状态。

这个项目的困难部分几乎完成了。现在,我们只需要设计FSM并编写它的Verilog代码。这些任务将在本文的下一部分中讨论。

结语

对于FPGA,我们通常必须从设计的最低层次来考虑这个问题。我们所拥有的是逻辑门和一些基本的构建块,如加法器和比较器。虽然这使得FPGA的设计变得困难,但是FPGA确实提供了一些优势。本文研究了FPGA与普通16×2液晶模块的接口模块。为了实现FPGA到LCD接口,需要一个ROM、一些DFF和多路复用器.此外,我们需要一个FSM来控制这些积木。下一篇文章将详细介绍FSM的设计和Verilog代码的编写。然后,我们将编程MojoV 3板,以验证我们的设计。


『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
基于lm358的碱性电池充电管理电路设计