Testing (Ruining) an LCD Screen

Testing (Ruining) an LCD Screen...

Tags

lcd screen, transparent screen, read the manual, ruining

Assignment

  • group assignment
    • measure the power consumption of an output device
  • individual assignment
    • add an output device to a microcontroller board you've designed, and program it to do something

What to make

If you have read my final project roadmap, you will know that I'm desparately trying to find a way to make a transparent screen for the HyperCarousel.

If you search for 'transparent lcd' on Amazon, you won't find anything
If you search for 'transparent lcd' on Amazon, you won't find anything

If you search on Amazon, you will only find OLED screens, which is emmisive / additive and not suitable for subtracting light from the already bright projection light source.

Waveshare 2inch Mini LCD Screen, SPI Interface
Waveshare 2inch Mini LCD Screen, SPI Interface© Amazon Vendor

The best one I found is this one from Waveshare. It has a nice size comparable to a 35mm film slide, and it's SPI interface, which is easy to interface with a microcontroller.

Something from Fab Inventory

I found a Lumex LCM-S01602DTR/M LCD screen in the fab inventory. It's a TFT LCD screen, and the back looks easy to peel off.

Package of Lumex LCM-S01602DTR/M LCD screen says do not do what I do
Package of Lumex LCM-S01602DTR/M LCD screen says do not do what I do

Well, if you look at the back of the package, it says "DO NOT TOUCH THE POLARIZER OR REFLECTOR". But I'm doing it anyway to find out it probably doesn't work the hard way.

Peel off the polarizer and reflector

We are peeling off the polarizer and reflector to see if it will block light properly through a light source.

Peel off the polarizer and reflector
Peel off the polarizer and reflector
It's off
It's off

Wiring the LCD screen

I have a XIAO ESP32 S3 Sense board in hand for my final project, so I can use it to test the LCD screen.

I found the datasheet from Digikey, and the footprint and symbol from SnapMagic.

I fed the datasheet to Claude Sonnet 4.5 and it tells me to connect like this:

LCD Pin
LCD Name
ESP32-S3 Pin
Description
1
VSS
GND
Ground
2
VDD
5V
Power supply
3
V0
Potentiometer
Contrast (0.5V-1.0V)
4
RS
GPIO4
Register Select
5
R/W
GND
Read/Write (tie to GND)
6
E
GPIO5
Enable
7
D0
Not connected
Not used in 4-bit mode
8
D1
Not connected
Not used in 4-bit mode
9
D2
Not connected
Not used in 4-bit mode
10
D3
Not connected
Not used in 4-bit mode
11
D4
GPIO6
Data bit 4
12
D5
GPIO7
Data bit 5
13
D6
GPIO8
Data bit 6
14
D7
GPIO9
Data bit 7
15
LED+
5V + resistor
Backlight positive (optional)
16
LED-
GND
Backlight negative (optional)

After importing the footprint and symbol to KiCad, I connected the pins like above.

Schema of the LCD screen and the XIAO ESP32 S3 Sense board
Schema of the LCD screen and the XIAO ESP32 S3 Sense board
PCB design of the LCD screen and the XIAO ESP32 S3 Sense board
PCB design of the LCD screen and the XIAO ESP32 S3 Sense board

Making the PCB

I made these black and white images from the Gerber files.

Black and white images from the Gerber files
Black and white images from the Gerber files

Then I make the toolpath for the Carvera machine on modsproject.com.

Toolpath for the Carvera machine
Toolpath for the Carvera machine

Then I got the PCB done! (will write about some problems later)

PCB with nice holes and traces
PCB with nice holes and traces

Then I spent a lot of time soldering the components on the PCB. I couldn't figure out how to solder the RS pin to the ground without touching other pins. So I ended up soldering a jumper wire to the RS pin.

Soldered PCB
Soldered PCB

Testing the LCD screen

I put a test program on the XIAO ESP32 S3 Sense board to test the LCD screen. It's using the LiquidCrystal library to control the LCD screen, and it displays a pingpong block bouncing back and forth.

#include <LiquidCrystal.h>

LiquidCrystal lcd(4, 5, 6, 7, 8, 9);

int col = 0;
int row = 0;
int dirCol = 1;  // 1 = right, -1 = left
int dirRow = 1;  // 1 = down, -1 = up

void setup() {
  lcd.begin(16, 2);
  lcd.clear();
}

void loop() {
  lcd.clear();

  // Draw block
  lcd.setCursor(col, row);
  lcd.write(255);

  // Move diagonally
  col += dirCol;
  row += dirRow;

  // Bounce off left/right edges
  if (col >= 15 || col <= 0) {
    dirCol = -dirCol;
    col = constrain(col, 0, 15);
  }

  // Bounce off top/bottom edges
  if (row >= 1 || row <= 0) {
    dirRow = -dirRow;
    row = constrain(row, 0, 1);
  }

  delay(300);
}

Here's a video of the test program running on the LCD screen. You can see it struggles to display the block properly at an off angle, a classic problem of TFT LCD screens. I think this is because of polarization?

Demo of the test program running on the LCD screen

Moment of Truth

I'm testing it in the dark with a phone flashlight. It didn't work... Case closed.

Demo of the test program running on the LCD screen in the dark

Design Files

To be added!