From 59e12dfe8f3718bb2275188581689bcf9cc19f5f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maja=20K=C4=85dzio=C5=82ka?= Date: Thu, 27 Nov 2025 17:57:08 +0100 Subject: [PATCH 1/2] Make sure to wait after issuing slow commands during init sequence MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The first of these delays was necessary in my experiments with a 50 kHz I²C clock, while the second one – for a 400 kHz I²C clock. --- src/driver/hd44780/adapter.rs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/driver/hd44780/adapter.rs b/src/driver/hd44780/adapter.rs index d8401d6..71c0089 100644 --- a/src/driver/hd44780/adapter.rs +++ b/src/driver/hd44780/adapter.rs @@ -51,7 +51,9 @@ where self.send_command_to_controller(controller, LCD_CMD_DISPLAYCONTROL | display_control)?; self.send_command_to_controller(controller, LCD_CMD_ENTRYMODESET | display_mode)?; self.send_command_to_controller(controller, LCD_CMD_CLEARDISPLAY)?; + self.device_config().delay.delay_ms(2); self.send_command_to_controller(controller, LCD_CMD_RETURNHOME)?; + self.device_config().delay.delay_ms(2); } // set up the display self.set_backlight(true)?; From 7f0187d345decd51ba8689287b937b500534019d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maja=20K=C4=85dzio=C5=82ka?= Date: Thu, 27 Nov 2025 18:01:23 +0100 Subject: [PATCH 2/2] Observe address setup time I couldn't create an experimental setup in which this particular issue prevents my LCD unit from working, but the datasheet does ask for a setup time. --- src/driver/hd44780/adapter.rs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/driver/hd44780/adapter.rs b/src/driver/hd44780/adapter.rs index 71c0089..ebe4c25 100644 --- a/src/driver/hd44780/adapter.rs +++ b/src/driver/hd44780/adapter.rs @@ -145,8 +145,10 @@ where self.set_rs(rs_setting); self.set_rw(false); - // now write the low nibble self.set_data(value & 0x0F); + // first write value without the enable strobe + // to ensure that the address set-up time t_AS = 40 ns is observed + self.write_bits_to_gpio()?; self.set_enable(true, controller)?; self.write_bits_to_gpio()?; self.set_enable(false, controller)?;