HOME / SIMULATORS / SIMULATOR // I2C 1602 LCD TWIN & BITMASK DESIGNER
Arduino Uno R3 · PCF8574 I2C Expander · HD44780 LCD · 5x8 CGRAM

I2C 1602 LCD Display & Custom Character Bitmask Twin

Driving a parallel 16-pin HD44780 LCD consumes 6 precious GPIO pins. By soldering a PCF8574 I2C backpack, the entire display is controlled using just 2 analog pins (A4/SDA & A5/SCL). Use this live digital twin to test 16x2 text, calculate solder jumper addresses (0x27 vs 0x3F), and design custom 5x8 font bitmasks.

BUILD SPECIFICATIONS
MCU BUS:I2C (Wire) Pin A4 (SDA), A5 (SCL)
EXPANDER IC:PCF8574T (0x27) / PCF8574AT (0x3F)
DISPLAY FORMAT:16 Characters × 2 Rows (5×8 Font)
POWER RAIL:5.0V DC VCC / GND Rail
02 // Bill of Materials

Bench Parts & Hardware Components

4 CRITICAL BENCH COMPONENTS · 2-WIRE I2C ARCHITECTURE
Arduino Uno R3 Microcontroller MCU
CONTROLLER BOARD

Arduino Uno R3

Provides hardware 100kHz I2C clock on Analog Pin 5 (SCL) and data line on Analog Pin 4 (SDA).

Pins A4 & A5 I2C
1602 HD44780 Character LCD Display DISPLAY
CHARACTER SCREEN

1602 HD44780 LCD

16 character × 2 row dot-matrix LCD. Contains 8 custom CGRAM character slots (5×8 pixels each).

HD44780 Standard
PCF8574 8-Bit I2C I/O Expander
I2C BRIDGE
EXPANDER MODULE

PCF8574 I2C Backpack

Bridges the 16-pin parallel LCD bus to 2-wire I2C. Features 3 address solder jumpers (A0, A1, A2).

Default 0x27 / 0x3F
10KΩ Contrast Potentiometer
ANALOG
CALIBRATION TRIMPOT

10K Contrast Trimpot

Blue precision rotary trimpot on the backpack. Adjusts VO (Pin 3) contrast voltage so pixels become crisp.

V0 Contrast Adjust
COMPONENT QTY FUNCTION IN CIRCUIT ENGINEERING NOTE
Arduino Uno R3 / Q 1 Main Controller Pin A4 = SDA, Pin A5 = SCL; requires standard 5V USB power
1602 HD44780 LCD Display 1 Alphanumeric Output 16×2 character grid; displays ASCII text and custom CGRAM glyphs
PCF8574 I2C Serial Backpack 1 Parallel-to-I2C Converter Soldered to 16 pins of LCD; reduces wiring harness to VCC, GND, SDA, SCL
Female-to-Male Dupont Cables 4 Signal & Power Harness 4-pin harness connecting backpack header directly to Arduino headers
Bench Pitfall: Chipset Addressing (0x27 vs 0x3F) & Contrast Potentiometer

Two major pitfalls prevent LCD modules from displaying text:
1. IC Chip Identification: A PCF8574T chip defaults to address 0x27. A PCF8574AT chip defaults to address 0x3F. Using the wrong address causes silent I2C communication timeout errors.
2. Contrast Trimpot: If the backlight turns on but no text appears (or solid white block squares fill row 1), rotate the blue potentiometer on the backpack with a small Phillips screwdriver until characters snap into focus.

03 // Circuit Architecture & Live Bench Test

Interactive 1602 LCD & Address Twin

INTERACTIVE DOT MATRIX · SOLDER JUMPER CALC · 5×8 CGRAM BITMASK
HD44780 16×2 VECTOR TWIN
VIDEOTRONICMAKER
I2C 0x27 READY!
1:VSS 2:VDD 3:V0 4:RS 5:RW 6:E 15:A 16:K
16 / 16
16 / 16
I2C BUS PACKET ANALYZER (100kHz CLOCK) STATUS: ACTIVE POLLING
[0.000s] START > ADDR: 0x27 [WRITE] > ACK
[0.002s] CMD: 0x38 (FUNCTION_SET: 2-LINE 5x8) > ACK
[0.004s] CMD: 0x0C (DISPLAY_ON, CURSOR_OFF) > ACK
[0.006s] DATA: 'V' 'I' 'D' 'E' 'O' 'T' 'R' 'O' 'N' 'I' 'C' 'M' 'A' 'K' 'E' 'R'
[0.018s] STOP
I2C Address Solder Jumper Calc 0x27
EXPANDER IC CHIP VARIANT:
SOLDER PADS (CLICK TO TOGGLE BRIDGE):
PAD A2
1
OPEN
PAD A1
1
OPEN
PAD A0
1
OPEN
Open = Logic 1 (Pull-up) · Bridged with solder = Logic 0 (GND)
7-Bit Binary Address:0b0100111
7-Bit Hex Address:0x27
Arduino Constructor:LiquidCrystal_I2C lcd(0x27, 16, 2);
5×8 Custom CGRAM Bitmask Designer SLOT: byte[0..7]

Click pixels below to design a custom glyph (battery gauge, heart, bell, wifi). Generates Arduino C++ bitmask code instantly.

QUICK PRESETS:
GENERATED C++ BYTE ARRAY:
byte customChar[8] = {
  0b00000,
  0b01010,
  0b11111,
  0b11111,
  0b01110,
  0b00100,
  0b00000,
  0b00000
};
04 // Firmware Implementation

Verified Arduino C++ Firmware Sketch

Wiring Pinout Matrix
VCC ▶ 5V (Arduino)
GND ▶ GND (Arduino)
SDA ▶ Analog Pin A4
SCL ▶ Analog Pin A5
Required Arduino Library: Install LiquidCrystal I2C by Frank de Brabander via the Arduino Library Manager or VTM Studio Code Mode.
FILE: vtm_i2c_1602_lcd_twin.ino VERIFIED ARDUINO 1.8.x & 2.x
/*
 * VideotronicMaker — I2C 1602 LCD Alphanumeric Display & Custom CGRAM Twin
 * Hardware: Arduino Uno R3 / Q + PCF8574 I2C Backpack + HD44780 LCD
 * Pins: A4 (SDA), A5 (SCL), 5V, GND
 */

#include <Wire.h>
#include <LiquidCrystal_I2C.h>

// Address 0x27 for PCF8574, or 0x3F for PCF8574A
LiquidCrystal_I2C lcd(0x27, 16, 2);

// Custom 5x8 Heart Character Bitmask
byte heartChar[8] = {
  0b00000,
  0b01010,
  0b11111,
  0b11111,
  0b01110,
  0b00100,
  0b00000,
  0b00000
};

void setup() {
  Wire.begin();
  Serial.begin(115200);
  Serial.println("VTM: I2C 1602 LCD Initializing...");

  // Initialize LCD and enable backlight
  lcd.init();
  lcd.backlight();

  // Load custom glyph into CGRAM slot 0
  lcd.createChar(0, heartChar);

  // Print Line 1 Header
  lcd.setCursor(0, 0);
  lcd.print("VIDEOTRONICMAKER");

  // Print Line 2 with custom glyph
  lcd.setCursor(0, 1);
  lcd.print("I2C 0x27 ");
  lcd.write(0); // Renders custom heart glyph
  lcd.print(" READY!");

  Serial.println("VTM: Telemetry Online. 100kHz I2C Bus Active.");
}

void loop() {
  // Continuous bench loop or sensor updates
  delay(1000);
}
SIMULATOR FAQ // HARDWARE TWIN SPECS

Frequently Asked Questions

Technical details on how this digital twin models PCF8574 address calculations, 5×8 CGRAM custom character bitmasks, contrast voltage, and C++ sketch generation.

1. How does this simulator model the physical 1602 LCD and PCF8574 I2C backpack? +
This interactive digital twin accurately simulates an HD44780 LCD controller connected via a PCF8574 I2C expander: interactive A0/A1/A2 address solder pad calculation, real-time 16×2 character grid matrix rendering, an interactive 5×8 pixel CGRAM custom character bitmask designer, contrast potentiometer simulation, and 1:1 Arduino C++ code generation.
2. How do the A0, A1, and A2 solder bridge pads alter the I2C address? +
The PCF8574 uses base address 0x20 and adds 3 bits from the A0, A1, and A2 pins (defaulting pulled high to 1, giving 0x27). Bridging a solder pad pulls that address pin to GND (0). For example, shorting A0 drops the address to 0x26. If your backpack uses the PCF8574A variant (base address 0x70), the default open address is 0x3F and shorting all three pads gives 0x38.
3. How does custom character creation work in the HD44780 CGRAM memory? +
The HD44780 has 64 bytes of Character Generator RAM (CGRAM), which stores up to 8 user-defined 5×8 pixel glyphs (slots 0 to 7). Each custom character is defined by an array of 8 bytes, where the 5 lowest bits of each byte define a single horizontal row of pixels (1 for dark, 0 for clear). In Arduino C++, you upload the pattern using lcd.createChar(index, customChar) and print it with lcd.write((uint8_t)index).
4. Why does the physical LCD display 16 solid blocks on the top row when powered on? +
Seeing a row of solid dark rectangles on row 0 while row 1 is blank indicates that the LCD controller received power but has not completed its software initialization handshake (or received wrong I2C communication packets). First, turn the blue contrast potentiometer on the back of the module slightly counterclockwise. Second, verify that the I2C address in your sketch matches the actual hardware address detected by an I2C scanner sketch.
5. How does this 1602 LCD simulator integrate with VTM Studio? +
This simulator pairs with VTM Studio Reference Mode (for instant character mapping tables and I2C backpack pinouts) and Code Mode (for compiling and uploading custom character sketches). You can design icons directly in this browser twin, copy the generated C++ byte array, and paste it into VTM Studio Code Mode with zero manual binary calculation.