The very first step, is to identify what i was looking for: Looking to see how it works? No. See how the chips are interconnected? No. What i am looking for, is to see how to interface this module with the 18-pin ribbon cable that it carries. So, first of all, i need to identify what each cable does, or at least, where it is connected. But first, i need to see what help i can get more. So, i googled for the chips that are vidible on the PCB. There are actually 4 different chips:
I managed to find the datasheets for two of them, and it proved that it was just enough:
These two chips are responsible for the horizontal and vertical scanlines, which is obvious if you see the arrangement on the PCB. I also removed the LCD from its PCB to see what is hidden in between, but i found only PCB traces and vias.
This is one of the 4 chips responsible for the horizontal data
This is one of the 3 chips responsible for the vertical scan lines
Between the LCD and the PCB there is only the backlit
Now that i have some datasheet in my armory, i can start identifying what each pin of the 18-pins connector does. First of all, i had to find the VDD and VSS pins. There should be some! So, i began from the VSS and VDD signals from one of the chips that i had the datasheet. Within half an hour, using of course my magnifier glass (i am getting old), i had some first results:
Pin 4: GND
Pin 5: VDD
Pin 6: GND
Pin 9: GND
Pin 11: GND
Pin 13: GND
Pin 15: GND
Do you see something strange? There is one VDD and plenty GND (VSS) signals. Why? I did not know by i could suppose that it is used to avoid inter-talking between data lines. This is a very usual technique. If you have ribbon cables and there are data lines with high speed data transmition, then you put between them grounding wires to avoid inter-talking between them. Anyway. There are some more pins to identify. Slowly and carefully i followed all the lines and wrote down where each one goes. Here are all the pins:
Pin description (datasheet)
IC7 - PIN 82
IC5-7 PIN 96
Bidirectional shift register's shift clock (trigger in on trailing edge)
IC1-4 PIN 99
CP display data acquisition clock (falling edge)
IC1-4 PIN 85 | IC5-7 PIN 84
IC1-4 PIN 89 | IC5-7 PIN 89
IC1-4 PIN 98
IC1-4 PIN 97
IC1-4 PIN 96
IC1-4 PIN 95
LCDs are sensitive in temperature changes, so it is normal to find a thermistor nearby for temperature compensation.
I was right. between the GND lines there are data lines, D1 through D4.
Also, there are 2 more pins which i did not mention so far, pin 17 and 18. I followed these lines, and they both ended up on the leads of a tiny SMD part. Nothing else. The part had the ID "TH1"... Does this means THermistor? LCDs are sensitive in temperature changes regarding their contrast, so it is normal to find a thermistor near by for contrast temperature compensation. I put my voltmeter and got a resistance measurements. Then i touched this smd part and the resistance began to decrease. I let it again and the resistance began to increase... It is clearly a NTC thermistor for temperature compensation. That was easy.
Lets give some POWER!
I checked and double checked the lines with the voltmeter to make sure that i did not mark as "GND" a "VDD" line, because this would be a mistake that i could do only once... I need to make this LCD work, and i only have one in stock. That makes the challenge harder. When i was sure, i took the ribbon cable out and cut one end. Then i soldered my 0.1'' 18-pins male connector, to plug it in on a breadboard. I connected all the GND wires to the 0 volts, and the VDD to 5 volts. Of course, i previously had read carefully both datasheet. Some chips operate at lower voltages! I hate the smell of a burning chip, especially when there is no re-try. Trial and error does not apply here.
I decided to put PIN 1 on the oscilloscope (to see what this DIO80 is). I connected Pin 2 and 3 to my function generator. Not directly of-course! Through a transistor to have absolute control of current and voltage. Pin 8 obviousely had to be connected to +5 volts (according to the description). As for the 4 data lines, i pulled half of them down and half of them up through resistors. POWER UP!!!
Nothing, nothing at all! I was almost sure that this would happen, because i had Pin 7 on the air. But what is this "VEE"? In the datasheets it says that this is the VDD-VEE voltage difference for power supply of the LCD block... Did not make any sense. So, armed with courage i connected it to 5 volts through a resistor... nothing... -5.. nothing. 5 without a resistor... -5 directly... nothing at all.
Then something happened. With my finger, i touched the wire from Pin 1 (that was connected to the oscilloscope). The LCD blinked for an instance! ITS ALIVE! How stupid of me. This pin was an input and NOT an output. I connected it to +5 volts (through a resistor). I also put pin 7 to ground. And guess what!!!
This is the very first screen that i got from this LCD. Nothing fancy now that i look it again, but for a moment, i looked like the lost masterpiece of Michelangelo. Obviously, this first pin was the key to start sending scan lines. But hey, if i have it all time on +5, what are these random gaps? Well, when i opened the LCD, i must have moved the connector a little bit and it lost contact. So i re-opened it and re-closed it, this time more carefully. Then, i got a completely black screen.
But hey, again. If i give 1-0-1-0 to data, why i get a black screen? What is the meaning of these data-lines anyway? A more closely look on the LCD revealed the final secret. Half of the lines were black, and the other half lines were very dark gray. This is obviously the result of a bad contrast, isn't it? Is there a pin that could adjust the contrast? If you thought of this damn pin 7, then you thought correct. I put a 5K potentiometer between this pin and ground, and here are the results:
That was good but too easy. The next part is to program a PIC and give some life to this sweet LCD. Did i mention that this is 320 by 220 pixels? The external dimensions are 15.5 x 12.5cm, and the visible area is 13.5 by 10.5 cm. I suppose that this is a 6.5'' B/W LCD with backlit. I have not work yet with this backlit. I will later on.
@kiranvarma-npeducations which software do you mean? The PIC software? It is very messy and i made it only for testing the LCD. If this is what you want, i can certainly give it to you. But it is not commented.
Is that software shown in video is designed by you, its cool! simply generating binary code for bitmap images and serializing.. to LCD panel via some controller (i think from Philips). Which language that u have used to develop software. Final output in LCD panel is mind blowing, you are genius in both software and hardware part. Really amazing video, really reverse engineering. Thanks for such wonderful project tutorial. I will bookmark your site for my learning benefit
@Annonymois sure there are methods for this, but not by hacking the LCD that way. There are programs for example for PCs and others for telephones to do this, there are also very VERY cheap gadgets (http://www.ebay.com/sch/?_kw=gsm%20spy&_clu=2&_fcid=5&_localstpos=&_sop=15&_stpos=&gbr=1). If i were you, i would start with a simple PC format, and then install a firewall on the PC. Any surveillance program installed would then be erased.
Hi. I saw your YouTube video about reverse engineering an LCD screen. And some posters had said this process is used by hackers in order to spy on people through their computer screens? And I started googling this questions because I perceive I am being watched by people I know. I don't know how. I suspect there is a website where the hackers stream the audio and visuals to the recipients who include friends and so-called family members. They drop subtle hints to me as to the fact they they know what I'm doing by posting comments on YouTube videos I've just watched or they repeat the words I've just spoken by writing it down on my Facebook wall or in my junk email subject line. If you google gang stalking, cause stalking, gas lighting, you will see that there are a lot of people who are experiencing electronic surveillance. It's crazy. I know I saw a real life police show once and they were receiving visual feed from the cell phone of a criminal. I don't know how they did it. But I have been abused by people I know at work and in the last year by my own family because they used to like / love me and now they hate me. My brothers family in particular and my nephew from my sister have been befriended by these cause stalkers and they constantly let me know I'm being watched. They don't admit it but I've heard them talk about private conversations I've had when they were no where near me! It's crazy.
Once again the question is: can I be seen when I'm in my pajamas in front of my PC monitor, iPhone screen, even if the camera is not pointed at me. Just through the screens? Thank-you
I finally got my display working! It's only 160x80 so I can get great refresh rates from a pic... right now the controller is an 18f2455 and i'm using it's internal ram for the display. Currently it only displays a test image that I stored in program memory, but I plan to add a 5x7 font, a gal for timing logic, external serial display ram, and serial character input... then I'll use it for console output on a couple of hacked linux devices. Thanks for all the information!!
Found the spec for your panels on-line. Just making a physical connection to those panels would be very difficult because of the 60+ FPC connector on the stupid thing... unless you have a breakout board in the works? If you can physically connect to it, making a controller is certainly doable. You might need an fpga or something else that's pretty fast to do the more complicated rgb timings.
I have obtained a large (200-300) lot of bare LCD Screens (no driver/controller boards). About half of them are 3.8" Sharp LQ038 screens. These were stored loose in a box and many are obviously broken. I would like to do something with these and I am at this point looking for a simple circuit so that I can test them, also possibly a way to turn them into digital photo frames. I am an Electrical Engineer, but it has been a while since I have done detailed component work like this and I have never worked with Color LCD displays before. Can someone direct me to where I can find some circuit designs that I may be able to use?
Just recently got back to my lcd project... The M signal is to drive the LCD voltages: the col/seg drivers use it to alternate the voltage applied to the cells, otherwise the lifespan is shortened. The pic simply alternates M from high to low every frame.
My lcd is only 160x80, and I've generated a test image with a pic18f2455... I'm only running at 20MHz right now but the refresh rate is good because it's a much smaller screen. Thanks again!!
@vga the problem that i faced with vga is the speed. a 1024x768 @60hz monitor will receive data with a rate of abput 47.2MHz (1024*768*60). Moreover, the signal comes in 3 analog lines, 0 to 0.7 volts. My knowledge is not sufficient to select the proper chips for the job, read and recreate the signal correctly.
Can you reverse engineer VGA?
I have 4 identical LCD monitors.
I like to wire them together in one LCD screen.
So from PC will go one vga cable to a box. In this box will be 4 vga outputs for my other 4 screens.
You are very good at debugging (reverse engineering). I like your honesty when you talk about your projects/experiments. You also inspire me to explore some of my broken devices parts. Hang on to the curiosity you have and it will be kind to you in the future I'm sure. Thx for the website.....
So, when I say that this is not very flexible, I mean that you have to do everything by yourself, example: Let's say you want to print a string on the screen.
With your design, you have to take the fonts, calculate the exact position on the screen, take care of the background (and not delete it) and load the image in the external memory.
With a smart controller, like the SED, you just say that you want to output on the screen the specific string. It will take care of it. I will also not delete the background image, so, when you take the letters out, the background will be there.
My first monochrome LCD, like yours, didn't have a smart controlle, I put the LC7981 controller on it and it worked. My second monochrome LCD was this:
I had to do a change there. It's been a long time and I don't remember but here is bottom line: The SED1335 supports a 16 bit address bus and the memory on this LCD is only 8 kBytes. I found an 32 kBytes RAM with the same layout as the 8 kBytes. The difference was that the 8 kBytes RAM had two NC lines in the place of the two extra address lines on the 32 kBytes RAM. So, I replaced the RAM, hardwired the NC pins to the correct SED1335 pins and it worked perfectly :)
@Tom 1. Yes, square wave signal for both
2. i am not sure what these pins do. in my case, the 3 79430 chops have their 3 M pins connected to a strange chip labeled 73101YXA at pin #3. When i began to RE, i could not find any info about this chip. Luckily, i did not have to. If you manage to find something about pin M or this chip, please email me to upload it for others.
Nice work! You gave me the idea to work on my own 160x80 lcd which has the same common and segment driver. Two questions if you don't mind...
1. you said you connected your pins 2 and 3 (CP for the 79431 and 79401) to your function generator - was this just a square wave connected to both CP inputs?
2. what is the M pin (pin 94 on the 79430 and pin 86 on the 79401) on your lcd connected to? i have a pin on my connector that goes to M on the drivers and i'm not sure what to do with it... the specs say M is an input - "LCD drive output alternating current (AC) signal"
Once I figure those two points out I'll make up some programmable logic to take the place of all the discrete TTL chips. Thanks!!
I got exactly the same lcd optrex dmf 500081n f.fw-2 96z2m1.
They were used in so called "Maas" cofee machine prepaid system.
it came also with the complete controller and keypad.
If needed i can provide the datasheet of the lcd .
The solution you are taking, although very creative, it is not too flexible. You cannot do many things with this design.
What I would suggest, after of course you finish with the current design, is to put a SED1335 controller hooked up in there. The controller is so easy to play with, you will find so many drivers in C or assembly.
And if you want to re-invent the wheel (I assume you want, we engineers are the same yes?) then you can write them yourself!
You can buy the SED1335 on a board if you like
I think the 16F1934 can do it without extra hardware, using the MSSP and sacrificing four I/O lines.
You can have a 32MHz INTOSC (8MHz with 4x PLL; see section 184.108.40.206 of the 16F1934 data sheet). You can also use the MSSP to fetch bytes from the external memory for you at one bit per CPU cycle while sending the previous byte to the LCD, or get display data from internal program memory or even RAM instead.
Instead of 11*80 instructions to display a line, try 14*40 or less, something like:
; send one line to LCD
; RD[7..4] LCD data, RD[3..0] N/C, RB0 -DCLK
; setup FSR1L/H and dotcnt (6)
MOVF INDF1,W ;1 (2 for PM, try MOVIW for internal mem)
INCF FSR1L ; 1 (remove for SSPBUF)
MOVWF tmp70,F ;1 store byte
MOVWF PORTD,F ;1 output high nybble
BCF PORTB,0 ;1 strobe
BSF PORTB,0 ;1 unstrobe
SWAPF tmp70,W ;1 read low nybble
MOVWF PORTD,F ;1 output
BCF PORTB,0 ;1 strobe
BSF PORTB,0 ;1 unstrobe
DECFSZ dotcnt ;1 next byte
GOTO do_dots ;2
FSR1 could point to SSPBUF (which can easily keep up), linear RAM, or program memory (+1 cycle per 8 bits). If using RAM, save one cycle by removing the write to tmp70 and changing SWAPF INDF1,W. If using internal memory, try the MOVIW INDF1++ instruction instead of the MOVF/INCF pair to save 1 cycle.
At 138000 cycles per frame (worst case rounded up), you can maintain a ~58Hz refresh rate at 32MHz with no extra hardware.
Of more interest is that with small changes you can store tiles in program memory for easy character display. It is slightly slower, but can (barely) achieve 50Hz screen refresh with a fully tile-based screen layout. For example, code to choose among 64 tiles, 16x16 pixels in size (2kword program memory), might look like:
; draw 16 lines with tiles
; set FSR0 to tile index base
; set FSR1H to tile bitmap base, must be 256-byte aligned
MOVLW 80h ;1
ADDWF lineoffset ;1
BTFSC STATUS,Z ;1
INCF FSR1H ;1
MOVLW 14h ;1
MOVWF dotcnt ;1
MOVIW INDF0++ ;1 (2 for PM)
ANDLW 3Fh ;1 just for safety, can be eliminated
IORWF lineoffset,W ;1
MOVWF FSR1L ;1
; [MOVF INDF1,W... essentially the old inner loop, twice...
; but instead of INCF FSR1L, do BSF FSR1L,6 to get 2nd byte]
ADDFSR FSR1,-20 ;1 correct tile index ptr for next scan
; [strobe LCLK...]