0

我正在用 VHDL 编程并尝试配置 LCD。我的问题与 LCD 接口时序和上电初始化所需的时间有关。

进行初始化时,有一些时间限制,例如用户指南中的内容如下:

  1. 等待 15 毫秒
  2. 写入 0x30 并等待 240ns
  3. 等待 4.1ms 以此类推

当我将 0x30 写入 LCD 时,我应该尊重 240ns + 接口时序的时间吗?(那些用于设置,启用高,启用保持,启用低)。

如果我错了,请纠正我,但我认为当我在初始化时我不关心接口计时。当我发送命令(如功能设置、显示开/关等)时,我将处理接口时序。

谢谢。!

4

2 回答 2

1

在向显示控制器写入任何内容时,您始终需要尊重接口时序,否则您可能会发送无效数据。较长的超时通常是为了让显示控制器有时间运行各种软件例程,这可能会阻止它监控接口端口。

所以,是的,在写入 0x30 作为初始化序列的一部分时,您需要尊重接口时序。

于 2011-11-08T12:21:39.837 回答
1

新答案:

遵循评论中提供的数据表 http://www.xilinx.com/support/documentation/boards_and_kits/ug334.pdf

值得注意的是,您的大多数评论都声称接口时间比设置时间长。这是倒退。设置时间比与 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 时钟上,因此如果您使用更快的时钟,您可能需要进行一些数字时钟管理。

于 2011-11-08T13:54:07.690 回答