我有一个HD44780液晶显示屏,我一直在使用随Arduino开发包提供的LiquidCrystal Library。但是,它不可靠。我注意到它有一些问题,而不是被中断驱动,只要开发人员认为芯片应该执行操作,它就会睡觉。
从规格表中,BUSY标志在执行时将被置位,这意味着它可以被中断驱动。
有没有人知道实际执行此操作的库,是否需要连接所有8位,还是可以将其保存在4个引脚上?
答案 0 :(得分:3)
我认为你不需要中断。查看Arduino发行版中的LiquidCrystal.cpp,您只需更改LiquidCrystal::write4bits
,LiquidCrystal::write8bits
和LiquidCrystal::pulseEnable
代码即可。前两种方法应该在写入数据之前监视忙线(BD7),最后一种方法将被修改以消除100us暂停。
我认为在默认代码中没有这样做的原因是这些LCD的许多用户只是将R / W连接到地,因此显示器始终处于写入模式,因此无法读取BUSY信号。但是,通过将_rw_pin设置为-1将其传递到库中,因此脉冲和写入代码可以有条件地使用r / w引脚作为检测忙碌的方式进行速度优化。
答案 1 :(得分:1)
可以在三个引脚上使用8位;你只需要一个移位寄存器。我正在使用mouser.com的HEF4094BP(运费比实际芯片更贵)
移位寄存器的接线图和代码修改如下:http://www.arduino.cc/playground/Code/LCD3wires
答案 2 :(得分:0)
前段时间我修改了LiquidCrystal lib以支持busy标志。
请注意,实际中断驱动操作不可能 - 对于每次读取,您需要将E
nable线切换两次。因此,您需要轮询忙标志。
然后我做了一些基准测试,轮询忙标志慢而不是等待大多数命令。 (例外情况是'clear'和'home'命令)。原因是,在读取模式和写入模式之间切换需要额外的步骤,例如对digitaWrite
的8次额外调用和对pinMode
的8次额外调用。即使使用16MHz的Arduinos,这也不仅仅等待100μs。
之后我编写了一个直接操作引脚寄存器并以批量模式操作的库 - 所有8个引脚都具有一个寄存器访问权限。之后,我在球场上通过民意调查获得了一些好处。