diff options
author | Matthias P. Braendli <matthias.braendli@mpb.li> | 2020-12-18 10:43:40 +0100 |
---|---|---|
committer | Matthias P. Braendli <matthias.braendli@mpb.li> | 2020-12-18 10:43:40 +0100 |
commit | 18bcf61935b1d27d83ce03a490789365da799592 (patch) | |
tree | b111a66ba716bca1efae801ea36f4c5c3fa787dd /sw/deps/hd44780-driver | |
parent | 28bc0e6d03f221b4292be8e76e4bd019ebcc4616 (diff) | |
download | picardy-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')
-rw-r--r-- | sw/deps/hd44780-driver/src/bus/i2c_mcp23008.rs | 5 | ||||
-rw-r--r-- | sw/deps/hd44780-driver/src/lib.rs | 32 |
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); |