Wim Huiskamp / TextLCD

Committer:
wim
Date:
Sat Apr 18 11:33:02 2015 +0000
Revision:
38:cbe275b0b647
Parent:
37:ce348c002929
Child:
39:e9c2319de9c5
Fixed Adafruit I2C/SPI portexpander pinmappings, fixed SYDZ Backlight control

Who changed what in which revision?

UserRevisionLine numberNew contents of line
wim 37:ce348c002929 1 /* mbed TextLCD Library, for LCDs based on HD44780 controllers
wim 34:e5a0dcb43ecc 2 * Copyright (c) 2014, WH
wim 34:e5a0dcb43ecc 3 * 2014, v01: WH, Extracted from TextLCD.h as of v14
wim 35:311be6444a39 4 * 2014, v02: WH, Added AC780 support, added I2C expander modules, fixed setBacklight() for inverted logic modules. Fixed bug in LCD_SPI_N define
wim 36:9f5f86dfd44a 5 * 2014, v03: WH, Added LCD_SPI_N_3_8 define for ST7070
wim 37:ce348c002929 6 * 2015, v04: WH, Added support for alternative fonttables (eg PCF21XX)
wim 37:ce348c002929 7 * 2015, v05: WH, Clean up low-level _writeCommand() and _writeData(), Added support for alt fonttables (eg PCF21XX), Added ST7066_ACM for ACM1602 module, fixed contrast for ST7032
wim 38:cbe275b0b647 8 * 2015, v06: WH, Performance improvement I2C portexpander
wim 38:cbe275b0b647 9 * 2015, v07: WH, Fixed Adafruit I2C/SPI portexpander pinmappings, fixed SYDZ Backlight
wim 34:e5a0dcb43ecc 10 *
wim 34:e5a0dcb43ecc 11 * Permission is hereby granted, free of charge, to any person obtaining a copy
wim 34:e5a0dcb43ecc 12 * of this software and associated documentation files (the "Software"), to deal
wim 34:e5a0dcb43ecc 13 * in the Software without restriction, including without limitation the rights
wim 34:e5a0dcb43ecc 14 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
wim 34:e5a0dcb43ecc 15 * copies of the Software, and to permit persons to whom the Software is
wim 34:e5a0dcb43ecc 16 * furnished to do so, subject to the following conditions:
wim 34:e5a0dcb43ecc 17 *
wim 34:e5a0dcb43ecc 18 * The above copyright notice and this permission notice shall be included in
wim 34:e5a0dcb43ecc 19 * all copies or substantial portions of the Software.
wim 34:e5a0dcb43ecc 20 *
wim 34:e5a0dcb43ecc 21 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
wim 34:e5a0dcb43ecc 22 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
wim 34:e5a0dcb43ecc 23 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
wim 34:e5a0dcb43ecc 24 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
wim 34:e5a0dcb43ecc 25 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
wim 34:e5a0dcb43ecc 26 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
wim 34:e5a0dcb43ecc 27 * THE SOFTWARE.
wim 34:e5a0dcb43ecc 28 */
wim 34:e5a0dcb43ecc 29 #ifndef MBED_TEXTLCDCONFIG_H
wim 34:e5a0dcb43ecc 30 #define MBED_TEXTLCDCONFIG_H
wim 34:e5a0dcb43ecc 31
wim 34:e5a0dcb43ecc 32 //Select hardware interface options to reduce memory footprint (multiple options allowed)
wim 34:e5a0dcb43ecc 33 #define LCD_I2C 1 /* I2C Expander PCF8574/MCP23008 */
wim 34:e5a0dcb43ecc 34 #define LCD_SPI 1 /* SPI Expander SN74595 */
wim 34:e5a0dcb43ecc 35 #define LCD_I2C_N 1 /* Native I2C bus */
wim 35:311be6444a39 36 #define LCD_SPI_N 1 /* Native SPI bus */
wim 36:9f5f86dfd44a 37 #define LCD_SPI_N_3_8 1 /* Native SPI bus */
wim 34:e5a0dcb43ecc 38 #define LCD_SPI_N_3_9 1 /* Native SPI bus */
wim 34:e5a0dcb43ecc 39 #define LCD_SPI_N_3_10 1 /* Native SPI bus */
wim 34:e5a0dcb43ecc 40 #define LCD_SPI_N_3_16 1 /* Native SPI bus */
wim 34:e5a0dcb43ecc 41 #define LCD_SPI_N_3_24 1 /* Native SPI bus */
wim 35:311be6444a39 42
wim 34:e5a0dcb43ecc 43 //Select options to reduce memory footprint (multiple options allowed)
wim 34:e5a0dcb43ecc 44 #define LCD_UDC 1 /* Enable predefined UDC example*/
wim 34:e5a0dcb43ecc 45 #define LCD_PRINTF 1 /* Enable Stream implementation */
wim 34:e5a0dcb43ecc 46
wim 37:ce348c002929 47 //Select option to activate default fonttable or alternatively use conversion for specific controller versions (eg PCF2119C)
wim 37:ce348c002929 48 #define LCD_DEFAULT_FONT 1
wim 37:ce348c002929 49
wim 34:e5a0dcb43ecc 50 //Pin Defines for I2C PCF8574/PCF8574A or MCP23008 and SPI 74595 bus expander interfaces
wim 37:ce348c002929 51 //Different commercially available LCD portexpanders use different wiring conventions.
wim 37:ce348c002929 52 //LCD and serial portexpanders should be wired according to the tables below.
wim 34:e5a0dcb43ecc 53 //
wim 37:ce348c002929 54 //Select Serial Port Expander Hardware module (one option only)
wim 34:e5a0dcb43ecc 55 #define DEFAULT 1
wim 34:e5a0dcb43ecc 56 #define ADAFRUIT 0
wim 34:e5a0dcb43ecc 57 #define DFROBOT 0
wim 35:311be6444a39 58 #define YWROBOT 0
wim 35:311be6444a39 59 #define GYLCD 0
wim 35:311be6444a39 60 #define SYDZ 0
wim 34:e5a0dcb43ecc 61
wim 34:e5a0dcb43ecc 62 #if (DEFAULT==1)
wim 34:e5a0dcb43ecc 63 //Definitions for default (WH) mapping between serial port expander pins and LCD controller
wim 34:e5a0dcb43ecc 64 //This hardware supports the I2C bus expander (PCF8574/PCF8574A or MCP23008) and SPI bus expander (74595) interfaces
wim 34:e5a0dcb43ecc 65 //See https://mbed.org/cookbook/Text-LCD-Enhanced
wim 34:e5a0dcb43ecc 66 //
wim 34:e5a0dcb43ecc 67 //Note: LCD RW pin must be connected to GND
wim 34:e5a0dcb43ecc 68 // E2 is used for LCD40x4 (second controller)
wim 34:e5a0dcb43ecc 69 // BL may be used to control backlight
wim 38:cbe275b0b647 70
wim 38:cbe275b0b647 71 //I2C bus expander (PCF8574/PCF8574A or MCP23008) interface
wim 38:cbe275b0b647 72 #define LCD_BUS_I2C_D4 (1 << 0)
wim 38:cbe275b0b647 73 #define LCD_BUS_I2C_D5 (1 << 1)
wim 38:cbe275b0b647 74 #define LCD_BUS_I2C_D6 (1 << 2)
wim 38:cbe275b0b647 75 #define LCD_BUS_I2C_D7 (1 << 3)
wim 38:cbe275b0b647 76 #define LCD_BUS_I2C_RS (1 << 4)
wim 38:cbe275b0b647 77 #define LCD_BUS_I2C_E (1 << 5)
wim 38:cbe275b0b647 78 #define LCD_BUS_I2C_E2 (1 << 6)
wim 38:cbe275b0b647 79 #define LCD_BUS_I2C_BL (1 << 7)
wim 34:e5a0dcb43ecc 80
wim 38:cbe275b0b647 81 #define LCD_BUS_I2C_RW (1 << 6)
wim 38:cbe275b0b647 82
wim 38:cbe275b0b647 83 //SPI bus expander (74595) interface, same as I2C
wim 38:cbe275b0b647 84 #define LCD_BUS_SPI_D4 LCD_BUS_I2C_D4
wim 38:cbe275b0b647 85 #define LCD_BUS_SPI_D5 LCD_BUS_I2C_D5
wim 38:cbe275b0b647 86 #define LCD_BUS_SPI_D6 LCD_BUS_I2C_D6
wim 38:cbe275b0b647 87 #define LCD_BUS_SPI_D7 LCD_BUS_I2C_D7
wim 38:cbe275b0b647 88 #define LCD_BUS_SPI_RS LCD_BUS_I2C_RS
wim 38:cbe275b0b647 89 #define LCD_BUS_SPI_E LCD_BUS_I2C_E
wim 38:cbe275b0b647 90 #define LCD_BUS_SPI_E2 LCD_BUS_I2C_E2
wim 38:cbe275b0b647 91 #define LCD_BUS_SPI_BL LCD_BUS_I2C_BL
wim 38:cbe275b0b647 92
wim 38:cbe275b0b647 93 #define LCD_BUS_SPI_RW LCD_BUS_I2C_RW
wim 34:e5a0dcb43ecc 94
wim 34:e5a0dcb43ecc 95 //Select I2C Portexpander type (one option only)
wim 34:e5a0dcb43ecc 96 #define PCF8574 1
wim 34:e5a0dcb43ecc 97 #define MCP23008 0
wim 35:311be6444a39 98
wim 35:311be6444a39 99 //Inverted Backlight control
wim 35:311be6444a39 100 #define BACKLIGHT_INV 0
wim 34:e5a0dcb43ecc 101 #endif
wim 34:e5a0dcb43ecc 102
wim 34:e5a0dcb43ecc 103 #if (ADAFRUIT==1)
wim 34:e5a0dcb43ecc 104 //Definitions for Adafruit i2cspilcdbackpack mapping between serial port expander pins and LCD controller
wim 34:e5a0dcb43ecc 105 //This hardware supports both an I2C expander (MCP23008) and an SPI expander (74595) selectable by a jumper.
wim 35:311be6444a39 106 //Slaveaddress may be set by solderbridges (default 0x40). SDA/SCL has pullup Resistors onboard.
wim 34:e5a0dcb43ecc 107 //See http://www.ladyada.net/products/i2cspilcdbackpack
wim 34:e5a0dcb43ecc 108 //
wim 34:e5a0dcb43ecc 109 //Note: LCD RW pin must be kept LOW
wim 34:e5a0dcb43ecc 110 // E2 is not available on this hardware and so it does not support LCD40x4 (second controller)
wim 34:e5a0dcb43ecc 111 // BL is used to control backlight
wim 38:cbe275b0b647 112 //Note: The pinmappings are different for the MCP23008 and the 74595!
wim 38:cbe275b0b647 113
wim 38:cbe275b0b647 114 //I2C bus expander (MCP23008) interface
wim 38:cbe275b0b647 115 #define LCD_BUS_I2C_0 (1 << 0)
wim 38:cbe275b0b647 116 #define LCD_BUS_I2C_RS (1 << 1)
wim 38:cbe275b0b647 117 #define LCD_BUS_I2C_E (1 << 2)
wim 38:cbe275b0b647 118 #define LCD_BUS_I2C_D4 (1 << 3)
wim 38:cbe275b0b647 119 #define LCD_BUS_I2C_D5 (1 << 4)
wim 38:cbe275b0b647 120 #define LCD_BUS_I2C_D6 (1 << 5)
wim 38:cbe275b0b647 121 #define LCD_BUS_I2C_D7 (1 << 6)
wim 38:cbe275b0b647 122 #define LCD_BUS_I2C_BL (1 << 7)
wim 34:e5a0dcb43ecc 123
wim 38:cbe275b0b647 124 #define LCD_BUS_I2C_E2 (1 << 0)
wim 38:cbe275b0b647 125 #define LCD_BUS_I2C_RW (1 << 0)
wim 38:cbe275b0b647 126
wim 38:cbe275b0b647 127 //SPI bus expander (74595) interface
wim 38:cbe275b0b647 128 #define LCD_BUS_SPI_0 (1 << 0)
wim 38:cbe275b0b647 129 #define LCD_BUS_SPI_RS (1 << 1)
wim 38:cbe275b0b647 130 #define LCD_BUS_SPI_E (1 << 2)
wim 38:cbe275b0b647 131 #define LCD_BUS_SPI_D7 (1 << 3)
wim 38:cbe275b0b647 132 #define LCD_BUS_SPI_D6 (1 << 4)
wim 38:cbe275b0b647 133 #define LCD_BUS_SPI_D5 (1 << 5)
wim 38:cbe275b0b647 134 #define LCD_BUS_SPI_D4 (1 << 6)
wim 38:cbe275b0b647 135 #define LCD_BUS_SPI_BL (1 << 7)
wim 38:cbe275b0b647 136
wim 38:cbe275b0b647 137 #define LCD_BUS_SPI_E2 (1 << 0)
wim 38:cbe275b0b647 138 #define LCD_BUS_SPI_RW (1 << 0)
wim 34:e5a0dcb43ecc 139
wim 34:e5a0dcb43ecc 140 //Force I2C portexpander type
wim 34:e5a0dcb43ecc 141 #define PCF8574 0
wim 34:e5a0dcb43ecc 142 #define MCP23008 1
wim 35:311be6444a39 143
wim 35:311be6444a39 144 //Inverted Backlight control
wim 35:311be6444a39 145 #define BACKLIGHT_INV 0
wim 34:e5a0dcb43ecc 146 #endif
wim 34:e5a0dcb43ecc 147
wim 34:e5a0dcb43ecc 148 #if (DFROBOT==1)
wim 34:e5a0dcb43ecc 149 //Definitions for DFROBOT LCD2004 Module mapping between serial port expander pins and LCD controller
wim 34:e5a0dcb43ecc 150 //This hardware uses PCF8574 and is different from earlier/different Arduino I2C LCD displays
wim 35:311be6444a39 151 //Slaveaddress hardwired to 0x4E. SDA/SCL has pullup Resistors onboard.
wim 35:311be6444a39 152 //See http://arduino-info.wikispaces.com/LCD-Blue-I2C
wim 35:311be6444a39 153 //
wim 35:311be6444a39 154 //Definitions for DFROBOT V1.1
wim 35:311be6444a39 155 //This hardware uses PCF8574. Slaveaddress may be set by jumpers (default 0x40).
wim 35:311be6444a39 156 //SDA/SCL has pullup Resistors onboard and features a voltage level converter 3V3 <-> 5V.
wim 35:311be6444a39 157 //See http://www.dfrobot.com/index.php?route=product/product&product_id=135
wim 35:311be6444a39 158 //
wim 35:311be6444a39 159 //
wim 35:311be6444a39 160 //Note: LCD RW pin must be kept LOW
wim 35:311be6444a39 161 // E2 is not available on default Arduino hardware and so it does not support LCD40x4 (second controller)
wim 35:311be6444a39 162 // BL is used to control backlight
wim 38:cbe275b0b647 163
wim 38:cbe275b0b647 164 //I2C bus expander PCF8574 interface
wim 38:cbe275b0b647 165 #define LCD_BUS_I2C_RS (1 << 0)
wim 38:cbe275b0b647 166 #define LCD_BUS_I2C_RW (1 << 1)
wim 38:cbe275b0b647 167 #define LCD_BUS_I2C_E (1 << 2)
wim 38:cbe275b0b647 168 #define LCD_BUS_I2C_BL (1 << 3)
wim 38:cbe275b0b647 169 #define LCD_BUS_I2C_D4 (1 << 4)
wim 38:cbe275b0b647 170 #define LCD_BUS_I2C_D5 (1 << 5)
wim 38:cbe275b0b647 171 #define LCD_BUS_I2C_D6 (1 << 6)
wim 38:cbe275b0b647 172 #define LCD_BUS_I2C_D7 (1 << 7)
wim 38:cbe275b0b647 173
wim 38:cbe275b0b647 174 #define LCD_BUS_I2C_E2 (1 << 1)
wim 35:311be6444a39 175
wim 38:cbe275b0b647 176 //SPI bus expander (74595) interface, same as I2C
wim 38:cbe275b0b647 177 #define LCD_BUS_SPI_RS LCD_BUS_I2C_RS
wim 38:cbe275b0b647 178 #define LCD_BUS_SPI_RW LCD_BUS_I2C_RW
wim 38:cbe275b0b647 179 #define LCD_BUS_SPI_E LCD_BUS_I2C_E
wim 38:cbe275b0b647 180 #define LCD_BUS_SPI_BL LCD_BUS_I2C_BL
wim 38:cbe275b0b647 181 #define LCD_BUS_SPI_D4 LCD_BUS_I2C_D4
wim 38:cbe275b0b647 182 #define LCD_BUS_SPI_D5 LCD_BUS_I2C_D5
wim 38:cbe275b0b647 183 #define LCD_BUS_SPI_D6 LCD_BUS_I2C_D6
wim 38:cbe275b0b647 184 #define LCD_BUS_SPI_D7 LCD_BUS_I2C_D7
wim 38:cbe275b0b647 185
wim 38:cbe275b0b647 186 #define LCD_BUS_SPI_E2 LCD_BUS_I2C_E2
wim 38:cbe275b0b647 187
wim 35:311be6444a39 188
wim 35:311be6444a39 189 //Force I2C portexpander type
wim 35:311be6444a39 190 #define PCF8574 1
wim 35:311be6444a39 191 #define MCP23008 0
wim 35:311be6444a39 192
wim 35:311be6444a39 193 //Inverted Backlight control
wim 35:311be6444a39 194 #define BACKLIGHT_INV 0
wim 35:311be6444a39 195 #endif
wim 35:311be6444a39 196
wim 35:311be6444a39 197 #if (YWROBOT==1)
wim 35:311be6444a39 198 //Definitions for YWROBOT LCM1602 V1 Module mapping between serial port expander pins and LCD controller.
wim 35:311be6444a39 199 //Very similar to DFROBOT. This hardware uses PCF8574.
wim 35:311be6444a39 200 //Slaveaddress may be set by solderbridges (default 0x4E). SDA/SCL has no pullup Resistors onboard.
wim 34:e5a0dcb43ecc 201 //See http://arduino-info.wikispaces.com/LCD-Blue-I2C
wim 34:e5a0dcb43ecc 202 //
wim 34:e5a0dcb43ecc 203 //Note: LCD RW pin must be kept LOW
wim 35:311be6444a39 204 // E2 is not available on default hardware and so it does not support LCD40x4 (second controller)
wim 34:e5a0dcb43ecc 205 // BL is used to control backlight, reverse logic: Low turns on Backlight. This is handled in setBacklight()
wim 38:cbe275b0b647 206
wim 38:cbe275b0b647 207 //I2C bus expander PCF8574 interface
wim 38:cbe275b0b647 208 #define LCD_BUS_I2C_RS (1 << 0)
wim 38:cbe275b0b647 209 #define LCD_BUS_I2C_RW (1 << 1)
wim 38:cbe275b0b647 210 #define LCD_BUS_I2C_E (1 << 2)
wim 38:cbe275b0b647 211 #define LCD_BUS_I2C_BL (1 << 3)
wim 38:cbe275b0b647 212 #define LCD_BUS_I2C_D4 (1 << 4)
wim 38:cbe275b0b647 213 #define LCD_BUS_I2C_D5 (1 << 5)
wim 38:cbe275b0b647 214 #define LCD_BUS_I2C_D6 (1 << 6)
wim 38:cbe275b0b647 215 #define LCD_BUS_I2C_D7 (1 << 7)
wim 34:e5a0dcb43ecc 216
wim 38:cbe275b0b647 217 #define LCD_BUS_I2C_E2 (1 << 1)
wim 38:cbe275b0b647 218
wim 38:cbe275b0b647 219 //SPI bus expander (74595) interface, same as I2C
wim 38:cbe275b0b647 220 #define LCD_BUS_SPI_RS LCD_BUS_I2C_RS
wim 38:cbe275b0b647 221 #define LCD_BUS_SPI_RW LCD_BUS_I2C_RW
wim 38:cbe275b0b647 222 #define LCD_BUS_SPI_E LCD_BUS_I2C_E
wim 38:cbe275b0b647 223 #define LCD_BUS_SPI_BL LCD_BUS_I2C_BL
wim 38:cbe275b0b647 224 #define LCD_BUS_SPI_D4 LCD_BUS_I2C_D4
wim 38:cbe275b0b647 225 #define LCD_BUS_SPI_D5 LCD_BUS_I2C_D5
wim 38:cbe275b0b647 226 #define LCD_BUS_SPI_D6 LCD_BUS_I2C_D6
wim 38:cbe275b0b647 227 #define LCD_BUS_SPI_D7 LCD_BUS_I2C_D7
wim 38:cbe275b0b647 228
wim 38:cbe275b0b647 229 #define LCD_BUS_SPI_E2 LCD_BUS_I2C_E2
wim 34:e5a0dcb43ecc 230
wim 34:e5a0dcb43ecc 231 //Force I2C portexpander type
wim 34:e5a0dcb43ecc 232 #define PCF8574 1
wim 34:e5a0dcb43ecc 233 #define MCP23008 0
wim 35:311be6444a39 234
wim 35:311be6444a39 235 //Inverted Backlight control
wim 35:311be6444a39 236 #define BACKLIGHT_INV 0
wim 34:e5a0dcb43ecc 237 #endif
wim 34:e5a0dcb43ecc 238
wim 35:311be6444a39 239 #if (GYLCD==1)
wim 35:311be6444a39 240 //Definitions for Arduino-IIC-LCD GY-LCD-V1 Module mapping between serial port expander pins and LCD controller.
wim 35:311be6444a39 241 //Very similar to DFROBOT. This hardware uses PCF8574.
wim 35:311be6444a39 242 //Slaveaddress may be set by solderbridges (default 0x4E). SDA/SCL has pullup Resistors onboard.
wim 35:311be6444a39 243 //See http://arduino-info.wikispaces.com/LCD-Blue-I2C
wim 35:311be6444a39 244 //
wim 35:311be6444a39 245 //Note: LCD RW pin must be kept LOW
wim 35:311be6444a39 246 // E2 is not available on default hardware and so it does not support LCD40x4 (second controller)
wim 35:311be6444a39 247 // BL is used to control backlight, reverse logic: Low turns on Backlight. This is handled in setBacklight()
wim 38:cbe275b0b647 248
wim 38:cbe275b0b647 249 //I2C bus expander PCF8574 interface
wim 38:cbe275b0b647 250 #define LCD_BUS_I2C_D4 (1 << 0)
wim 38:cbe275b0b647 251 #define LCD_BUS_I2C_D5 (1 << 1)
wim 38:cbe275b0b647 252 #define LCD_BUS_I2C_D6 (1 << 2)
wim 38:cbe275b0b647 253 #define LCD_BUS_I2C_D7 (1 << 3)
wim 38:cbe275b0b647 254 #define LCD_BUS_I2C_E (1 << 4)
wim 38:cbe275b0b647 255 #define LCD_BUS_I2C_RW (1 << 5)
wim 38:cbe275b0b647 256 #define LCD_BUS_I2C_RS (1 << 6)
wim 38:cbe275b0b647 257 #define LCD_BUS_I2C_BL (1 << 7)
wim 35:311be6444a39 258
wim 38:cbe275b0b647 259 #define LCD_BUS_I2C_E2 (1 << 5)
wim 38:cbe275b0b647 260
wim 38:cbe275b0b647 261 //SPI bus expander (74595) interface
wim 38:cbe275b0b647 262 #define LCD_BUS_SPI_D4 LCD_BUS_I2C_D4
wim 38:cbe275b0b647 263 #define LCD_BUS_SPI_D5 LCD_BUS_I2C_D5
wim 38:cbe275b0b647 264 #define LCD_BUS_SPI_D6 LCD_BUS_I2C_D6
wim 38:cbe275b0b647 265 #define LCD_BUS_SPI_D7 LCD_BUS_I2C_D7
wim 38:cbe275b0b647 266 #define LCD_BUS_SPI_E LCD_BUS_I2C_E
wim 38:cbe275b0b647 267 #define LCD_BUS_SPI_RW LCD_BUS_I2C_RW
wim 38:cbe275b0b647 268 #define LCD_BUS_SPI_RS LCD_BUS_I2C_RS
wim 38:cbe275b0b647 269 #define LCD_BUS_SPI_BL LCD_BUS_I2C_BL
wim 38:cbe275b0b647 270
wim 38:cbe275b0b647 271 #define LCD_BUS_SPI_E2 LCD_BUS_I2C_E2
wim 35:311be6444a39 272
wim 35:311be6444a39 273 //Force I2C portexpander type
wim 35:311be6444a39 274 #define PCF8574 1
wim 35:311be6444a39 275 #define MCP23008 0
wim 35:311be6444a39 276
wim 35:311be6444a39 277 //Force Inverted Backlight control
wim 35:311be6444a39 278 #define BACKLIGHT_INV 1
wim 35:311be6444a39 279 #endif
wim 35:311be6444a39 280
wim 35:311be6444a39 281 #if (SYDZ==1)
wim 35:311be6444a39 282 //Definitions for SYDZ Module mapping between serial port expander pins and LCD controller.
wim 38:cbe275b0b647 283 //Very similar to DFROBOT. This hardware uses PCF8574A.
wim 38:cbe275b0b647 284 //Slaveaddress may be set by switches (default 0x70). SDA/SCL has pullup Resistors onboard.
wim 35:311be6444a39 285 //See ebay
wim 35:311be6444a39 286 //
wim 35:311be6444a39 287 //Note: LCD RW pin must be kept LOW
wim 35:311be6444a39 288 // E2 is not available on default hardware and so it does not support LCD40x4 (second controller)
wim 38:cbe275b0b647 289 // BL is used to control backlight
wim 38:cbe275b0b647 290
wim 38:cbe275b0b647 291 //I2C bus expander PCF8574A interface
wim 38:cbe275b0b647 292 #define LCD_BUS_I2C_RS (1 << 0)
wim 38:cbe275b0b647 293 #define LCD_BUS_I2C_RW (1 << 1)
wim 38:cbe275b0b647 294 #define LCD_BUS_I2C_E (1 << 2)
wim 38:cbe275b0b647 295 #define LCD_BUS_I2C_BL (1 << 3)
wim 38:cbe275b0b647 296 #define LCD_BUS_I2C_D4 (1 << 4)
wim 38:cbe275b0b647 297 #define LCD_BUS_I2C_D5 (1 << 5)
wim 38:cbe275b0b647 298 #define LCD_BUS_I2C_D6 (1 << 6)
wim 38:cbe275b0b647 299 #define LCD_BUS_I2C_D7 (1 << 7)
wim 35:311be6444a39 300
wim 38:cbe275b0b647 301 #define LCD_BUS_I2C_E2 (1 << 1)
wim 38:cbe275b0b647 302
wim 38:cbe275b0b647 303 //SPI bus expander (74595) interface, same as I2C
wim 38:cbe275b0b647 304 #define LCD_BUS_SPI_RS LCD_BUS_I2C_RS
wim 38:cbe275b0b647 305 #define LCD_BUS_SPI_RW LCD_BUS_I2C_RW
wim 38:cbe275b0b647 306 #define LCD_BUS_SPI_E LCD_BUS_I2C_E
wim 38:cbe275b0b647 307 #define LCD_BUS_SPI_BL LCD_BUS_I2C_BL
wim 38:cbe275b0b647 308 #define LCD_BUS_SPI_D4 LCD_BUS_I2C_D4
wim 38:cbe275b0b647 309 #define LCD_BUS_SPI_D5 LCD_BUS_I2C_D5
wim 38:cbe275b0b647 310 #define LCD_BUS_SPI_D6 LCD_BUS_I2C_D6
wim 38:cbe275b0b647 311 #define LCD_BUS_SPI_D7 LCD_BUS_I2C_D7
wim 38:cbe275b0b647 312
wim 38:cbe275b0b647 313 #define LCD_BUS_SPI_E2 LCD_BUS_I2C_E2
wim 35:311be6444a39 314
wim 35:311be6444a39 315 //Force I2C portexpander type
wim 35:311be6444a39 316 #define PCF8574 1
wim 35:311be6444a39 317 #define MCP23008 0
wim 35:311be6444a39 318
wim 35:311be6444a39 319 //Force Inverted Backlight control
wim 38:cbe275b0b647 320 #define BACKLIGHT_INV 0
wim 35:311be6444a39 321 #endif
wim 34:e5a0dcb43ecc 322
wim 34:e5a0dcb43ecc 323 //Bitpattern Defines for I2C PCF8574/PCF8574A, MCP23008 and SPI 74595 Bus expanders
wim 37:ce348c002929 324 //Don't change!
wim 38:cbe275b0b647 325 #define LCD_BUS_I2C_MSK (LCD_BUS_I2C_D4 | LCD_BUS_I2C_D5 | LCD_BUS_I2C_D6 | LCD_BUS_I2C_D7)
wim 38:cbe275b0b647 326 #if (BACKLIGHT_INV == 1)
wim 38:cbe275b0b647 327 #define LCD_BUS_I2C_DEF (0x00 | LCD_BUS_I2C_BL)
wim 38:cbe275b0b647 328 #else
wim 38:cbe275b0b647 329 #define LCD_BUS_I2C_DEF 0x00
wim 38:cbe275b0b647 330 #endif
wim 34:e5a0dcb43ecc 331
wim 38:cbe275b0b647 332 #define LCD_BUS_SPI_MSK (LCD_BUS_SPI_D4 | LCD_BUS_SPI_D5 | LCD_BUS_SPI_D6 | LCD_BUS_SPI_D7)
wim 38:cbe275b0b647 333 #if (BACKLIGHT_INV == 1)
wim 38:cbe275b0b647 334 #define LCD_BUS_SPI_DEF (0x00 | LCD_BUS_SPI_BL)
wim 38:cbe275b0b647 335 #else
wim 38:cbe275b0b647 336 #define LCD_BUS_SPI_DEF 0x00
wim 38:cbe275b0b647 337 #endif
wim 38:cbe275b0b647 338
wim 34:e5a0dcb43ecc 339
wim 34:e5a0dcb43ecc 340 /* PCF8574/PCF8574A I2C portexpander slave address */
wim 34:e5a0dcb43ecc 341 #define PCF8574_SA0 0x40
wim 34:e5a0dcb43ecc 342 #define PCF8574_SA1 0x42
wim 34:e5a0dcb43ecc 343 #define PCF8574_SA2 0x44
wim 34:e5a0dcb43ecc 344 #define PCF8574_SA3 0x46
wim 34:e5a0dcb43ecc 345 #define PCF8574_SA4 0x48
wim 34:e5a0dcb43ecc 346 #define PCF8574_SA5 0x4A
wim 34:e5a0dcb43ecc 347 #define PCF8574_SA6 0x4C
wim 34:e5a0dcb43ecc 348 #define PCF8574_SA7 0x4E
wim 34:e5a0dcb43ecc 349
wim 34:e5a0dcb43ecc 350 #define PCF8574A_SA0 0x70
wim 34:e5a0dcb43ecc 351 #define PCF8574A_SA1 0x72
wim 34:e5a0dcb43ecc 352 #define PCF8574A_SA2 0x74
wim 34:e5a0dcb43ecc 353 #define PCF8574A_SA3 0x76
wim 34:e5a0dcb43ecc 354 #define PCF8574A_SA4 0x78
wim 34:e5a0dcb43ecc 355 #define PCF8574A_SA5 0x7A
wim 34:e5a0dcb43ecc 356 #define PCF8574A_SA6 0x7C
wim 34:e5a0dcb43ecc 357 #define PCF8574A_SA7 0x7E
wim 34:e5a0dcb43ecc 358
wim 34:e5a0dcb43ecc 359 /* MCP23008 I2C portexpander slave address */
wim 34:e5a0dcb43ecc 360 #define MCP23008_SA0 0x40
wim 34:e5a0dcb43ecc 361 #define MCP23008_SA1 0x42
wim 34:e5a0dcb43ecc 362 #define MCP23008_SA2 0x44
wim 34:e5a0dcb43ecc 363 #define MCP23008_SA3 0x46
wim 34:e5a0dcb43ecc 364 #define MCP23008_SA4 0x48
wim 34:e5a0dcb43ecc 365 #define MCP23008_SA5 0x4A
wim 34:e5a0dcb43ecc 366 #define MCP23008_SA6 0x4C
wim 34:e5a0dcb43ecc 367 #define MCP23008_SA7 0x4E
wim 34:e5a0dcb43ecc 368
wim 34:e5a0dcb43ecc 369 /* MCP23008 I2C portexpander internal registers */
wim 34:e5a0dcb43ecc 370 #define IODIR 0x00
wim 34:e5a0dcb43ecc 371 #define IPOL 0x01
wim 34:e5a0dcb43ecc 372 #define GPINTEN 0x02
wim 34:e5a0dcb43ecc 373 #define DEFVAL 0x03
wim 34:e5a0dcb43ecc 374 #define INTCON 0x04
wim 34:e5a0dcb43ecc 375 #define IOCON 0x05
wim 34:e5a0dcb43ecc 376 #define GPPU 0x06
wim 34:e5a0dcb43ecc 377 #define INTF 0x07
wim 34:e5a0dcb43ecc 378 #define INTCAP 0x08
wim 34:e5a0dcb43ecc 379 #define GPIO 0x09
wim 34:e5a0dcb43ecc 380 #define OLAT 0x0A
wim 34:e5a0dcb43ecc 381
wim 34:e5a0dcb43ecc 382 /* ST7032i I2C slave address */
wim 34:e5a0dcb43ecc 383 #define ST7032_SA 0x7C
wim 34:e5a0dcb43ecc 384
wim 34:e5a0dcb43ecc 385 /* ST7036i I2C slave address */
wim 34:e5a0dcb43ecc 386 #define ST7036_SA0 0x78
wim 34:e5a0dcb43ecc 387 #define ST7036_SA1 0x7A
wim 34:e5a0dcb43ecc 388 #define ST7036_SA2 0x7C
wim 34:e5a0dcb43ecc 389 #define ST7036_SA3 0x7E
wim 34:e5a0dcb43ecc 390
wim 37:ce348c002929 391 /* ST7066_ACM I2C slave address, Added for ACM1602 module */
wim 37:ce348c002929 392 #define ST7066_SA0 0xA0
wim 37:ce348c002929 393
wim 34:e5a0dcb43ecc 394 /* PCF21XX I2C slave address */
wim 34:e5a0dcb43ecc 395 #define PCF21XX_SA0 0x74
wim 34:e5a0dcb43ecc 396 #define PCF21XX_SA1 0x76
wim 34:e5a0dcb43ecc 397
wim 34:e5a0dcb43ecc 398 /* AIP31068 I2C slave address */
wim 34:e5a0dcb43ecc 399 #define AIP31068_SA 0x7C
wim 34:e5a0dcb43ecc 400
wim 34:e5a0dcb43ecc 401 /* SSD1803 I2C slave address */
wim 34:e5a0dcb43ecc 402 #define SSD1803_SA0 0x78
wim 34:e5a0dcb43ecc 403 #define SSD1803_SA1 0x7A
wim 34:e5a0dcb43ecc 404
wim 34:e5a0dcb43ecc 405 /* US2066/SSD1311 I2C slave address */
wim 34:e5a0dcb43ecc 406 #define US2066_SA0 0x78
wim 34:e5a0dcb43ecc 407 #define US2066_SA1 0x7A
wim 34:e5a0dcb43ecc 408
wim 34:e5a0dcb43ecc 409 /* AC780 I2C slave address */
wim 34:e5a0dcb43ecc 410 #define AC780_SA0 0x78
wim 34:e5a0dcb43ecc 411 #define AC780_SA1 0x7A
wim 34:e5a0dcb43ecc 412 #define AC780_SA2 0x7C
wim 34:e5a0dcb43ecc 413 #define AC780_SA3 0x7E
wim 34:e5a0dcb43ecc 414
wim 34:e5a0dcb43ecc 415 //Some native I2C controllers dont support ACK. Set define to '0' to allow code to proceed even without ACK
wim 34:e5a0dcb43ecc 416 //#define LCD_I2C_ACK 0
wim 34:e5a0dcb43ecc 417 #define LCD_I2C_ACK 1
wim 34:e5a0dcb43ecc 418
wim 34:e5a0dcb43ecc 419
wim 34:e5a0dcb43ecc 420 // Contrast setting, 6 significant bits (only supported for controllers with extended features)
wim 34:e5a0dcb43ecc 421 // Voltage Multiplier setting, 2 or 3 significant bits (only supported for controllers with extended features)
wim 34:e5a0dcb43ecc 422 #define LCD_DEF_CONTRAST 0x20
wim 34:e5a0dcb43ecc 423
wim 34:e5a0dcb43ecc 424 //ST7032 EastRising ERC1602FS-4 display
wim 34:e5a0dcb43ecc 425 //Contrast setting 6 significant bits
wim 34:e5a0dcb43ecc 426 //Voltage Multiplier setting 3 significant bits
wim 37:ce348c002929 427 #define LCD_ST7032_CONTRAST 0x28
wim 34:e5a0dcb43ecc 428 #define LCD_ST7032_RAB 0x04
wim 34:e5a0dcb43ecc 429
wim 34:e5a0dcb43ecc 430 //ST7036 EA DOGM1603 display
wim 34:e5a0dcb43ecc 431 //Contrast setting 6 significant bits
wim 34:e5a0dcb43ecc 432 //Voltage Multiplier setting 3 significant bits
wim 34:e5a0dcb43ecc 433 #define LCD_ST7036_CONTRAST 0x28
wim 34:e5a0dcb43ecc 434 #define LCD_ST7036_RAB 0x04
wim 34:e5a0dcb43ecc 435
wim 34:e5a0dcb43ecc 436 //SSD1803 EA DOGM204 display
wim 34:e5a0dcb43ecc 437 //Contrast setting 6 significant bits
wim 34:e5a0dcb43ecc 438 //Voltage Multiplier setting 3 significant bits
wim 34:e5a0dcb43ecc 439 #define LCD_SSD1_CONTRAST 0x28
wim 34:e5a0dcb43ecc 440 #define LCD_SSD1_RAB 0x06
wim 34:e5a0dcb43ecc 441
wim 34:e5a0dcb43ecc 442 //US2066/SSD1311 EastRising ER-OLEDM2002-4 display
wim 34:e5a0dcb43ecc 443 //Contrast setting 8 significant bits, use 6 for compatibility
wim 34:e5a0dcb43ecc 444 #define LCD_US20_CONTRAST 0x3F
wim 34:e5a0dcb43ecc 445 //#define LCD_US20_CONTRAST 0x1F
wim 34:e5a0dcb43ecc 446
wim 34:e5a0dcb43ecc 447 //PCF2113, PCF2119 display
wim 34:e5a0dcb43ecc 448 //Contrast setting 6 significant bits
wim 34:e5a0dcb43ecc 449 //Voltage Multiplier setting 2 significant bits
wim 34:e5a0dcb43ecc 450 #define LCD_PCF2_CONTRAST 0x20
wim 34:e5a0dcb43ecc 451 #define LCD_PCF2_S12 0x02
wim 34:e5a0dcb43ecc 452
wim 34:e5a0dcb43ecc 453 //PT6314 VFD display
wim 34:e5a0dcb43ecc 454 //Contrast setting 2 significant bits, use 6 for compatibility
wim 34:e5a0dcb43ecc 455 #define LCD_PT63_CONTRAST 0x3F
wim 34:e5a0dcb43ecc 456
wim 34:e5a0dcb43ecc 457
wim 34:e5a0dcb43ecc 458 #endif //MBED_TEXTLCDCONFIG_H