我正在使用VHDL进行编程并尝试配置LCD。我的问题与LCD接口时序和上电启动所需的时间有关。
在进行初始化时,有一些时序限制,例如在用户指南中说明如下:
当我向LCD写入0x30时,我应该尊重240ns +接口时序的次数吗? (用于设置,启用高电平,启用保持,启用低电平)。
如果我错了,请纠正我,但我认为当我初始化时我不关心接口时序。当我发送命令(如功能设置,显示开/关等)时,我会处理接口时序。
感谢。 !
答案 0 :(得分:1)
在向显示控制器写入任何内容时,您始终需要遵守接口时序,否则您可能会发送无效数据。较长的超时通常是为显示控制器提供运行各种软件例程的时间,这可能会阻止它监视接口端口。
所以,是的,在初始化序列中写入0x30时需要遵守接口时序。
答案 1 :(得分: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时钟最大值,因此如果您使用更快的时钟,则可能需要进行一些数字时钟管理。