Io 用于Arduino的中断驱动HD44780库

Io 用于Arduino的中断驱动HD44780库,io,arduino,hd44780,Io,Arduino,Hd44780,我有一个HD44780 LCD屏幕,我一直在使用Arduino开发包提供的Liquidcystal库。然而,这并不可靠。我注意到它有一些问题,它没有被中断驱动,只要开发人员认为芯片应该执行操作,它就会休眠 从规格表中,BUSY标志将在执行时设置,这意味着它可能是中断驱动的 有没有人知道有一个库真的能做到这一点,它需要连接所有8位,还是我能将它保持在4个引脚?我想你不需要中断。在Arduino发行版中,您只需要更改liquidcystal::write4bits,liquidcystal::wri

我有一个HD44780 LCD屏幕,我一直在使用Arduino开发包提供的Liquidcystal库。然而,这并不可靠。我注意到它有一些问题,它没有被中断驱动,只要开发人员认为芯片应该执行操作,它就会休眠

从规格表中,BUSY标志将在执行时设置,这意味着它可能是中断驱动的


有没有人知道有一个库真的能做到这一点,它需要连接所有8位,还是我能将它保持在4个引脚?

我想你不需要中断。在Arduino发行版中,您只需要更改
liquidcystal::write4bits
liquidcystal::write8bits
,以及
liquidcystal::pulseEnable
代码。前两种方法应在写入数据之前通过监测占线(BD7)开始,最后一种方法将被修改以消除100us暂停


我认为在默认代码中没有这样做的原因是,这些LCD的许多用户只是将R/W连接到地上,因此显示器始终处于写入模式,因此无法读取忙信号。但是,通过将_rw_pin设置为-1,这会被传递到库中,因此脉冲和写入代码可以有条件地使用r/w pin作为一种检测忙的方式,作为速度优化。

可以在三个pin上使用8位;你只需要一个移位寄存器。我使用的是mouser.com上的HEF4094BP(运费将比实际芯片贵)


移位寄存器的接线图和代码修改如下:

不久前,我修改了LiquidCrystal库以支持忙标志。 请注意,真正的中断驱动操作是不可能的-对于每次读取,您需要切换
E
enable行两次。因此,您需要轮询忙碌标志

然后我做了一些基准测试,发现轮询busy标志比只等待大多数命令要慢。(例外情况是“清除”和“主”命令)。原因是,在读模式和写模式之间切换需要传统的步骤,如对
digitaWrite
的8个额外调用和对
pinMode
的8个额外调用。即使使用16MHz Arduinos,这也比仅等待100µs要慢


在此之后,我编写了一个库,直接以批量模式操作管脚寄存器-所有8个管脚都有一个寄存器访问。从那以后,我一直在努力通过投票获得一些好处。

这个周末我会试试。