aboutsummaryrefslogtreecommitdiffstats
path: root/sw/deps/hd44780-driver/src
diff options
context:
space:
mode:
authorMatthias P. Braendli <matthias.braendli@mpb.li>2020-12-18 10:43:40 +0100
committerMatthias P. Braendli <matthias.braendli@mpb.li>2020-12-18 10:43:40 +0100
commit18bcf61935b1d27d83ce03a490789365da799592 (patch)
treeb111a66ba716bca1efae801ea36f4c5c3fa787dd /sw/deps/hd44780-driver/src
parent28bc0e6d03f221b4292be8e76e4bd019ebcc4616 (diff)
downloadpicardy-18bcf61935b1d27d83ce03a490789365da799592.tar.gz
picardy-18bcf61935b1d27d83ce03a490789365da799592.tar.bz2
picardy-18bcf61935b1d27d83ce03a490789365da799592.zip
LCD: fix setup and hold for I2C commands
Diffstat (limited to 'sw/deps/hd44780-driver/src')
-rw-r--r--sw/deps/hd44780-driver/src/bus/i2c_mcp23008.rs5
-rw-r--r--sw/deps/hd44780-driver/src/lib.rs32
2 files changed, 36 insertions, 1 deletions
diff --git a/sw/deps/hd44780-driver/src/bus/i2c_mcp23008.rs b/sw/deps/hd44780-driver/src/bus/i2c_mcp23008.rs
index 1ccb479..09a7f2b 100644
--- a/sw/deps/hd44780-driver/src/bus/i2c_mcp23008.rs
+++ b/sw/deps/hd44780-driver/src/bus/i2c_mcp23008.rs
@@ -84,6 +84,11 @@ impl<I2C: Write> DataBus for I2CMCP23008Bus<I2C> {
delay.delay_ms(1);
+ let pins = rs | backlight | (upper_nibble << 3);
+ self.set_pins(pins)?;
+
+ delay.delay_ms(1);
+
let pins = rs | backlight | (lower_nibble << 3);
self.set_pins(pins)?;
diff --git a/sw/deps/hd44780-driver/src/lib.rs b/sw/deps/hd44780-driver/src/lib.rs
index 5211346..44421ce 100644
--- a/sw/deps/hd44780-driver/src/lib.rs
+++ b/sw/deps/hd44780-driver/src/lib.rs
@@ -438,7 +438,37 @@ where
// Wait for the command to be processed
delay.delay_us(100);
- self.bus.write(0x28, false, delay)?;
+ /* Taken from Arduino's LiquidCrystal.cpp
+ const LCD_FUNCTIONSET : u8 = 0x20;
+ const LCD_2LINE : u8 = 0x08;
+ const LCD_5X8DOTS : u8 = 0x00;
+ let display_function = LCD_FUNCTIONSET | LCD_2LINE | LCD_5X8DOTS;
+ self.bus.write(display_function, false, delay)?;
+ delay.delay_ms(2);
+
+ // turn the display on with no cursor or blinking default
+ const LCD_DISPLAYCONTROL : u8 = 0x08;
+ const LCD_DISPLAYON : u8 = 0x04;
+ const LCD_BLINKOFF : u8 = 0x00;
+ const LCD_CURSOROFF : u8 = 0x00;
+ let display_control = LCD_DISPLAYON | LCD_CURSOROFF | LCD_BLINKOFF;
+ self.bus.write(LCD_DISPLAYCONTROL | display_control, false, delay)?;
+ delay.delay_ms(2);
+
+ const LCD_ENTRYLEFT : u8 = 0x02;
+ const LCD_ENTRYSHIFTDECREMENT : u8 = 0x00;
+ const LCD_ENTRYMODESET : u8 = 0x04;
+ self.bus.write(LCD_ENTRYMODESET | LCD_ENTRYLEFT | LCD_ENTRYSHIFTDECREMENT, false, delay)?;
+ delay.delay_ms(2);
+
+
+ // Clear Display
+ const LCD_CLEARDISPLAY : u8 = 0x01;
+ self.bus.write(LCD_CLEARDISPLAY, false, delay)?;
+ delay.delay_ms(2);
+ */
+
+ self.bus.write(0x28, false, delay)?;
// Wait for the command to be processed
delay.delay_us(100);