LCD配置:发送和传输时序
Posted
技术标签:
【中文标题】LCD配置:发送和传输时序【英文标题】:Configuration of LCD: sending and transmission timing 【发布时间】:2011-12-24 04:31:39 【问题描述】:我正在使用 VHDL 编程并尝试配置 LCD。我的问题与 LCD-interface-timing 和 Power-On-Initilization 所需的时间有关。
在进行初始化时,有一些时间限制,例如用户指南中的内容如下:
-
等待 15 毫秒
写入 0x30 并等待 240ns
等待 4.1 毫秒
等等等等
当我将 0x30 写入 LCD 时,我应该尊重 240ns + 接口时序的时间吗? (那些用于设置,启用高,启用保持,启用低)。
如果我错了,请纠正我,但我认为当我在初始化时,我不关心接口计时。当我发送命令(如功能设置、显示开/关等)时,我会处理接口时序。
谢谢。 !
【问题讨论】:
【参考方案1】:在向显示控制器写入任何内容时,您始终需要遵守接口时序,否则您可能会发送无效数据。较长的超时时间通常是为了让显示控制器有时间运行各种软件例程,这可能会阻止它监控接口端口。
所以,是的,在写入 0x30 作为初始化序列的一部分时,您需要尊重接口时序。
【讨论】:
好的,谢谢你说清楚!但现在我遇到了另一个问题。对于第 2 点(在上面的列表中),它说,写入 0x30 并等待 240ns,对于接口时序,它说 40ns(setup and E-高)+ 230ns(保持)+ 10ns(E-low)+ 1000ns(上下半字节之间) 这是1560ns ...所以这次(时序接口) i> 比其他 (power-on-init) 大,这让我感到困惑......我应该只考虑最大的时间吗?【参考方案2】:新答案:
遵循 cmets 中提供的数据表 http://www.xilinx.com/support/documentation/boards_and_kits/ug334.pdf
值得注意的是,您的大多数 cmets 都声称接口时序比设置时序长。这是倒退。设置时间比与 LCD 通话要长。
为了使这对我来说更容易,我将创建一个名为 pulse LCD_E 的伪函数调用,您每次都可以在脑海中替换它。
Definition of pulse LCD_E
wait a minimum of 40 ns (2 clock cycles at 50 MHz)
set LCD_E high
wait a minimum of 230 ns (12 clock cycles at 50 MHz)
set LCD_E low
wait a minium 10 ns before changes (.5 clock cycle)
标准写命令的时序图要求你
set LCD_RS, LCD_DB(7:4), LCD_RW
pulse LCD_E
reset LCD_RS, LCD_DB(7:4), LCD_RW for lower nibble
wait 1 us
pulse LCD_E
wait a minium of 40 us before repeating
初始化非常相似,尽管您有一个初始等待时间并且只编写 4 位命令,中间等待时间较长。
这样做是为了初始化
wait at least 15 ms (750,000 clock cycles at 50 MHz)
set LCD_DB<7:4> = 0x3
pulse LCD_E
wait 4.1 ms or longer, which is 205,000 clock cycles at 50 MHz.
set LCD_DB<7:4> = 0x3,
pulse LCD_E
wait 100 μs or longer, which is 5,000 clock cycles at 50 MHz.
set LCD_DB<7:4> = 0x3
pulse LCD_E
wait 40 μs or longer, which is 2,000 clock cycles at 50 MHz.
set LCD_DB<7:4> = 0x2
pulse LCD_E
wait 40 μs or longer, which is 2,000 clock cycles at 50 MH
Initialization complete
如果您出于某种原因需要加快写入时间,您可以在较长的等待期间设置下一个数据输入,并在脉冲 LCD_E 中删除初始等待
为我的旧答案辩护。来自数据表~~
After power-on, the display must be initialized to establish the required communication
protocol. The initialization sequence is simple and ideally suited to the highly-efficient
eight-bit PicoBlaze embedded controller. After initialization, the PicoBlaze controller is
available for more complex control or computation beyond simply driving the display.
旧答案:
如果这是在 FPGA 上进行并且您有其他时序限制(例如等待时间),您可以考虑使用它
http://en.wikipedia.org/wiki/PicoBlaze
它是一个 8 位微控制器的 VHDL 实现,对于设置、写入和从 LCD 读取信息非常有用。芯片组非常简单,很容易上手。此外,您还可以编写自己的外围设备:)
它是免费软件,我想你可以在这里全部下载。它带有自己的 IDE 和调试器。
http://www.picoblaze.info/tools.html
如果它只是针对一个小项目,您可能只想自己完成所有编码以防延误。但是如果它进入一个更大的项目,这非常有用并且值得学习。我认为它运行在最大 50 MHz 时钟上,因此如果您使用更快的时钟,您可能需要进行一些数字时钟管理。
【讨论】:
感谢您的回答。事实上,这是一个小项目,我正在学习 FPGA 的东西,想法是学习基础知识,然后使用 picoBlaze。但让我感到困惑的是,接口计时时间比 Power-On-Init 的时间要长。 为什么这会让你感到困惑?开机顺序只需配置 LCD,以便准备好接收数据。接口时序必须读取数据,发送有关是否收到数据的反馈,将数据写入 LCD,将内存更新为屏幕上的内容,增加光标位置等。这是一组非常通用的可能性,但其中许多可能是正确的。 是的,那部分很清楚。让我困惑的是时间问题。当 Power-On-Init 有一个步骤说等待 240ns,但在 Interface-timing 中说 40ns(设置上半字节)+ 230ns(启用高并保持)+ 1000ns(在下半字节之前等待)+ 40ns 设置下半字节)+ 230ns(启用高并保持)...所以只是进行初始化,我应该注意什么时间? 240ns 或完整的时序接口 aprox 1540ns ?? 您能否分享指向用户指南的链接,以便我们查看这些时序要求?基本上,如果它在指南中列出如何以逐步顺序设置 LCD(如 1. 等待 5 毫秒 2. 将所有输入位设置为高 3. 等待 20 毫秒 4. 将低半字节设置为 0 5. 等待 10 毫秒。)然后,您应该逐字逐句地遵循它。通常,它们将包含一个非常明确的时序图。接口时序部分是否有关于“这是您在设置 LCD 后执行的操作”或类似内容的内容? 第 53 和 54 页 xilinx.com/support/documentation/boards_and_kits/ug334.pdf以上是关于LCD配置:发送和传输时序的主要内容,如果未能解决你的问题,请参考以下文章
Linux MIPI DSI驱动调试笔记-LCD时序参数配置