From 2b567d1df55b9762f79736df7c9eb9f64e22cc73 Mon Sep 17 00:00:00 2001 From: Bob Clough Date: Mon, 25 Feb 2013 14:22:14 +0000 Subject: [PATCH] Added I2C port expander support to HD44780 --- Marlin/Configuration.h | 4 +-- .../ultralcd_implementation_hitachi_HD44780.h | 26 ++++++++++++++----- 2 files changed, 22 insertions(+), 8 deletions(-) diff --git a/Marlin/Configuration.h b/Marlin/Configuration.h index 75dcc3cc4f..bd0ac931fb 100644 --- a/Marlin/Configuration.h +++ b/Marlin/Configuration.h @@ -354,8 +354,8 @@ const bool Z_ENDSTOPS_INVERTING = true; // set to true to invert the logic of th //The LCD is attached via an I2C port expander. //#define LCD_I2C #ifdef LCD_I2C - // Port Expander Type - PCF8574 or MCP23008 - #define LCD_I2C_TYPE PCF8574 + // Port Expander Type - 0=PCF8574 or 1=MCP23008 + #define LCD_I2C_TYPE 0 // I2C Address of the port expander #define LCD_I2C_ADDRESS 0x20 #endif diff --git a/Marlin/ultralcd_implementation_hitachi_HD44780.h b/Marlin/ultralcd_implementation_hitachi_HD44780.h index 1d19b7718d..526dd8df07 100644 --- a/Marlin/ultralcd_implementation_hitachi_HD44780.h +++ b/Marlin/ultralcd_implementation_hitachi_HD44780.h @@ -7,11 +7,16 @@ **/ #if LANGUAGE_CHOICE == 6 -#include "LiquidCrystalRus.h" -#define LCD_CLASS LiquidCrystalRus + #include "LiquidCrystalRus.h" + #define LCD_CLASS LiquidCrystalRus #else -#include -#define LCD_CLASS LiquidCrystal + #ifdef LCD_I2C + #include + #define LCD_CLASS LiquidCrystal_I2C + #else + #include + #define LCD_CLASS LiquidCrystal + #endif #endif /* Custom characters defined in the first 8 characters of the LCD */ @@ -25,7 +30,12 @@ #define LCD_STR_CLOCK "\x07" #define LCD_STR_ARROW_RIGHT "\x7E" /* from the default character set */ -LCD_CLASS lcd(LCD_PINS_RS, LCD_PINS_ENABLE, LCD_PINS_D4, LCD_PINS_D5,LCD_PINS_D6,LCD_PINS_D7); //RS,Enable,D4,D5,D6,D7 +#ifdef LCD_I2C + LCD_CLASS lcd(LCD_I2C_ADDRESS, LCD_WIDTH, LCD_HEIGHT, LCD_I2C_TYPE); //address, columns, rows, type +#else + LCD_CLASS lcd(LCD_PINS_RS, LCD_PINS_ENABLE, LCD_PINS_D4, LCD_PINS_D5,LCD_PINS_D6,LCD_PINS_D7); //RS,Enable,D4,D5,D6,D7 +#endif + static void lcd_implementation_init() { byte bedTemp[8] = @@ -111,7 +121,11 @@ static void lcd_implementation_init() B00000, B00000 }; //thanks Sonny Mounicou - lcd.begin(LCD_WIDTH, LCD_HEIGHT); + #ifdef LCD_I2C + lcd.init(); + #else + lcd.begin(LCD_WIDTH, LCD_HEIGHT); + #endif lcd.createChar(LCD_STR_BEDTEMP[0], bedTemp); lcd.createChar(LCD_STR_DEGREE[0], degree); lcd.createChar(LCD_STR_THERMOMETER[0], thermometer);