Search This Blog

This thing started long ago when I got the laptop. I love it, but it really lacks a backlit keyboard. There was one excellent thread with people presenting solutions (add tiny switches, soldering to the bluetooth connector, to the USB breakout board etc.), but I found none of them really satisfying. I decided to void my warranty, build a circuit and connect it to the useless „P“-Button already available. After all: „If you can't open it, you don't own it!“ - MAKE: Magazine ;)

A friendly warning: This will void your warranty - all the way. You'll have to completely take apart your laptop, solder tiny SMD components to PCBs and hair-thin cables to your mainboard, cut traces and apply hot glue everywhere. Continue only if you know what you're doing! I take no responsibility whatsoever. There be dragons...

What you'll get:

A backlit keyboard

Brightness controlled by the „P“-button in 5 steps (from off->brighter...-> to off)

The keyboard I got from Ebay was ~30€. You can see the backlight LED supply cables already attached. The backlight is not very bright, but totally sufficient for me.

The keyboard I got from Ebay

1. Build the circuit board

First step is to build the circuit board. It is controlled by a PIC10F202T, a tiny 6-pin MCU running at 4MHz. This is the schematic:

The PIC controls a FET that is able to switch the current needed for the
backlight LEDs. The brightness is controlled by PWM . The FET should
have a low RON-resistance. I used a BSS138, but a 2N7002 might actually
be a better choice. The PIC input pins are connected to the „P“-Button
(P_BUTTON) for switching through backlight brightness levels (switches
to GND) and to the LCD display „backlight on“ pin (BL_ON). That one
provides 3,3V while the LCD backlight is on.
You can see the PCB for
the schematics at the right side. I provided solder pads for connecting
a PIC programmer (Vpp, D, C, …). You can cut that part off after you've
tested and are satisfied with the operation of the circuit and then
install the thing into the laptop. You have to remove the excess parts
of the circuit board to make it fit one of the openings below the
keyboard.
You'll need to use a PIC programmer to write code onto the
PIC. I used USBPICPROG, a cheap (~25€), open source programmer, with
free software. There
is a „3820_BL.production.hex“ file containing the binary under
„/dist/default/production/“ in the ZIP.
There's also source code provided in case you'd want to change
functionality. You can compile it with the excellent, free PIC
development system MPLAB X from Microchip (http://www.microchip.com/mplabx/).
This is more or less what it looks like when it is assembled and has wires connected (older revision btw.). You can see that it's pretty small...

2. Disassemble the laptop

After you've assembled, programmed and tested the circuit board you've got to solder wires to some points on the laptop mainboard.
First disassemble the laptop. Remove the keyboard using a screwdriver to carefully push the plastic pieces securing the keyboard in place back so you can lift the keyboard. There are 5 of them at the top part of the keyboard. Be careful with the ribbon cable below! Then remove all screws located below the keyboard, flip the laptop around and remove all screws at the bottom too. There are plenty. After opening the „hatch“ at the bottom remove the harddisk (left), the RAM (center), and carefully remove the WiFi and 3G card (right part). Be sure to take a photo of which antenna cable goes where (blue, yellow, black, white). Here's what mine looks like:

Use a thin piece of plastic to remove the front and back part of the case. When removing the front part of the case be careful to first detach all ribbon cables.

3. Modify the P-Button breakout board

The front part of the case has the breakout board with the RJ45 LAN-connector attached to it at the left side. Remove the screw, take it out, turn it around and peel the labels off. Notice switch SW3. That's the „P“-button. When pressed it connects the line to GND, but we want it to change its functionality, so you've got to cut the trace connecting it to the mainboard. That trace leads from the SW3 to the little solder spot just below the label „R11“ and then on to the connector that goes to the mainboard. That's where you want to cut it using a sharp „carpet“/exacto knife (see picture).
Solder a really thin wire to the top left connector of SW3 (see picture) and fix the wire to the board with some hot glue. After that you may put the breakout board back in place.

4. Power supply

We need a supply voltage for the whole thing which we can find at the pins of
U28, located on the front of the mainboard at the lower left. That
chip is a switch to toggle the USB ports at the left side of the
laptop on and off.

We want permanent power when the laptop is on, so
we connect the 5V pin of our circuit to pin 1 of U28 (pin 1, see
picture). GND can be connected to the big solder pad between „RTC“
and „EC93“ (see picture) or anywhere else you find GND. Solder
the wires and again fix them with some hot glue.

5. The BL_ON pin

Now it becomes a bit tricky. Take a look at the front side of mainboard and locate U17, the LPC controller (square, 128 pins, located at lower center). This chip controls the LCD backlight through pin 27 (BLON_OUT) which is connected to pin 5 of the LCD connector.

But both places are not solderable without bridging pins. Just above pin 27 is a via (connection to another layer of the mainboard). It is the left one of two vias close to each other (one over pin 25, one over pin 27, see picture). Use a „carpet“/exacto knife to CAREFULLY scratch off the lacquer until you see a copper „ring“. Dont scratch off too much, otherwise you might break the via and your LCD backlight will be gone... Once you've got a solderable spot, solder a wire that will be connected to BL_ON on our circuit board. Again, fix it with some hot glue, best directly where you've soldered it to the mainboard.

6. Putting it back together

That was the hard part. Now re-assemble the laptop again while making sure all wires end up coming out of the lower left opening in the front case below the keyboard (see picture below). There is space for the circuit board too.

7. Install the keyboard

You might need to prepare your keyboard so it fits in place of the old
one. It will probably be a bit too thick, so there's two things you need
to do. First bend down the „noses“ at the lower part of the key board
~10° using some universal pliers or whatever. Bend them until the
keyboard fits nicely...
Then you'll have to file down (or use a
„carpet“/exacto knife) the 7 „dents“ at the left, right and at the top
of the keyboard by a good amount (~1-2mm) so the plastic securing pins
can snap in place. Again you'll have to try what works in your case...
After
the keyboard fits solder all the wires from the mainboard to the
circuit board. Also solder the wires from the keyboard backlight to the
circuit board. Try if the keyboard backlight control works. You don't
have to boot up. Just enter the BIOS or something. Try pressing
„Fn“+“F6“ to turn the LCD backlight off.
When all's fine wrap
the circuit board in some tape and place it in the lower left opening
below the keyboard, then put the keyboard back in place.

Wow, you did a great job! I would like to make your design for my laptop, but paying setup costs to order just 1 or 2 pcbś is not nice. Maybe do you have a spare pcb lying around that I could buy? Or can you refer me to a company that can make small amounts cheaply?

Post a Comment

Popular Posts

Installing newer gcc/g++ versions is easy: sudo apt-get install gcc-4.7 g++-4.7
If your system does not provide the new versions, you might still be able to get them via a different repository. Add the toolchain repository to your system and update your sources:sudo add-apt-repository ppa:ubuntu-toolchain-r/testsudo apt-get update
Now you should be able to install gcc/g++. The real problem comes after that. How to make use of the newer versions?

Option #1 - Uninstall older versions
This is sometimes not an option, because lots of dependencies will be uninstalled which you might need, or you want to keep those versions around for compiling stuff that still uses them.

Option #2 - Use update-alternatives to switch versionsThis informative post describes it pretty well. I'll sum it up here. First remove all update-alternatives:sudo update-alternatives --remove-all gccsudo update-alternatives --remove-all g++
Now add update-alternatives for 4.6 and 4.7 and make the g++ configuration a s…

Wow. This was a royal pita. I wanted to build this wake-up-light-alarm-clock-media-thingy for my girlfriend. Well, I got my hands on a RPi Zero and needed an LCD display. I found this nice-looking "WaveShare 4" IPS display" on Ebay and spent days trying to get it to work properly. You want a hint? DONT DO IT! BUY A HDMI SCREEN! Refresh rate sucks, Kodi is not working with hardware-acceleration, Framebuffer copying never worked. Short: It sucked!

So. Next chapter: Bought a 5" HDMI screen here. It has an HDMI input and connects to the RPi GPIO pins for power and touch functionality... and works ALMOST out of the box on a fresh Raspbian install (from 5/2016). Nice!

Sometimes you are in the need to read back the OpenGL backbuffer, or other framebuffers. In my case the question was how to read back a downsampled framebuffer resp. its texture to system memory. There are different methods for this and I wrote a small benchmark to test them on various systems.

UPDATE #1: A thing I've totally overlooked is that you can actually blit the backbuffer to the downsampled framebuffer directly, saving you the FBO overhead (memory, setup, rendering time). I've updated the page and the code reflecting that.UPDATE #2: The code now works on Windows and Linux (via GLX). Maybe I'll port it to GLES2 for the Raspberry Pi too... :)UPDATE #3: The code works on the Raspberry Pi now using OpenGL ES 2.0. Reading the framebuffer is quite slow though even with an overclocked device. It's not the actual reading that is slow, but that we have to render to another framebuffer first and back to the screen. Atm all buffers and textures use RGBA8888, which might s…