Friday, February 1, 2013

FrSky Voltage Sensor

One of the reasons I choose to upgrade my Turnigy 9x to the FrSky system was the telemetry(2-way) mode. This gives me signal strength data and most of all, the RX has two analog ports. These two analog ports (3.3v!) can be used for anything with a range of analog values. For example, with a few resistors, i made a voltage divider so that the 12.6v of a lipo is scaled down to 3.3v where it is then sent to the 9x and read out as a battery voltage on the 9x lcd. no need for lipo alarms! I have the ER9x firmware which made the frsky mod possible. also required here.

RX Setup


Here is the schematic. The color dots are the resistor color codes. AIN is A1 or A2 on the RX. Only connect one +. so if you had a 3s batt, you would connect it 12v+ to the 3s resistor.

TX Setup

Hardware Setup

-Build the above circuit for the battery you are using
-Connect it to the battery and RX(dont mess up polarity!)
Turn on your TX
-Power the RX with a bec or something

Voltage Calibration 

model page 10/12 (Telemetry 1)
-A1 channel 11.1v 13.0 line is showing the voltage of the battery 11.1v is a calibration value, 13.0 in this example is the actual battery voltage it reads.
-To set this up, measure the voltage of your battery with a volt meter. 
-Now this voltage should be in this screen. adjust the 11.1v number until the 13.0 number is equal to the volt meter reading
-press exit when done. now you have "calibrated" A1. 
-also, the the "v" from 11.1v can be changed to A for ex to measure the amps the model is drawing (with that amp sensor of course).

Alarms

alrm --- < 0.0v
alrm  --- < 0.0v

These are alarms you can set so it will beep when it is below certain level. 
-Select the "---" and choose yellow, orange or red. these would be the level of the battery. 
-Now, you can change the sign (< or >)most people will use less than (<) then you could set the 0.0v parameter to the a voltage that is related to the yellow orange or red. FOR example

alrm Yel < 11.1v 
this means you would have a yellow alert when the battery on the model drops below 11.1v
alrm Red < 10.0v 
this means you would have a red alert when the battery on the model drops below 10.0v
alrm Yel > 11.1v
this means you would have a yellow alerrt while the battery on the model is above 11.1v
alrm Red > 10.0v
this means you would have a yellow alert when the battery on the model is above 10.0v

Same for if you had a battery on A2

Model page 11/12 (Telemetry 2)
-TxRSSIalarm is a value to set for when the TX signal is less that whatever value. lets you know when youre going out of range
-RxRSSIalarm is the same for telemetry signal from the rx
-mAhalarm is for alarming you when you have drawn x amount of amps from the battery
-ALTalarm is for if you have a baro sensor and it will alarm you if you have gone too high.
-gpsaltmain uses the gps as a baro instead of the separate baro

-Custom Menu this allows you to change what values show on your Telemetry screen while using the TX. i did A1 A2 RSSI and TSSI


will add more pics :)!!

Assemble a HK 2-axis FPV Mount

I bought this to fill up one of my HK orders. Here is how i put it together

The parts in the bag.

The linkage endings. Press the little metal balls into the plastic.

Put them on the shaft like so.

Grab two servo horns like so. 

See if the holes will fit the bottom piece like so. If so, then use screws to hold the horn on to the piece. If it doesn't fit, you will have to use hot glue to hold it in place.


Like so.

Testing with a servo. Make sure you center the servo somehow before screwing it on.

Put the bearings in to the arms. Everything is press fit. Now, insert the camera mount plate into the bearings.

Put the little bearing covers on.

Once you have that, carefully spread the arms so that the base plate fits in (see bottom).

Put the servo arm on with the servo centered like so.

Use the itsy bitsy screws from the pack to attach the linkage to the servo arm and the base arm. i used a spacer on the servo arm for better movement. To get the angles right, i held the servo to the camera plate with my hand, and then used the HK servo tester to see what range the servo moved the camera plate. Then i moved it a bit up or down and repeated until the camera plate moved in a range i wanted.


Wednesday, January 30, 2013

FrSky DHT DIY 9x Mod with ER9x Integrated Telemtry

In one of my latest HK orders I got one of the FrSky DHT 8ch DIY Telemetry TX Modules. I'm definitely a DIY person and that's why i didn't get the 50$ module that fits in the JR style Turnigy 9x.
I needed:
-Single Core wire: for example: IDE ribbon cable.
-Xacto
-Solder stuff.
-9x with a programming header
-ER9x-FrSky firmware
-Basic hand tools

9x Mods

Ill start with the Turnigy 9x part of the mod. We need to move two aux switches to extra digital pins so that the original pins can be used for UART communication with the FrSky Module. Cut the traces, and solder on the two wires for RX and TX.

 
Open up the case.

Disconnect the cable between the two halves. Wiggle and pull gently.

An un-modded Turnigy 9x will look just like this.

I had already modded mine with the programming port, so mine looks like this. Except, it is slathered in hot glue to protect the programming wires from popping off. At that point i didn't expect to do another mod, so i didn't even think about how it would affect later things. That hot glue causes a lot of problems  here, so i recommend to do all mods at once or don't use hot glue. I had to carefully pick off the glue.

Cut the traces on the PCB where shown by the yellow marks. Use a sharp Xacto and be sure not to press so hard that you loose control and cut another trace. Check it with the continuity function of a multimeter.

Use the Thin piece of wire (seen in pic) to connect the blue marked spot to the blue pin on the top side of the atmega64. Same for red. Use a bit of flux and be sure to not bridge anything. Check for no continuity again.

This image shows what we are doing next, and also is a brief overview of what we just did. The GND, VCC, MOSI, MISO, SCK, and RST bubbles need to be connected to a programming header so that we can program the ER9X-Frsky firmware. Then there are the two bubbles that have two labels: RX0/MOSI and TX0/MISO. These two pins double as the TX and RX from the FrSky telemetry module and for programming now that the AIL and THR switches are on other pins. Thanks to Marc G at rchacker.com for this image: original post.

This is looking into a female 6 and 10 pin isp connector. Simply connect all of the pads on the board to their respective pins on the connector. Then take two more pieces of wire and solder them to the MISO and MOSI pads so that they can go to the FrSky module.

My Results

As i mentioned before, i had issues with hot glue. This is what i ended up with (working!). In the first test i realized that the THR and AIL switches were mixed, so rather than re-soldering to the atmega use IDEcable wire), i just cut the wires before and swapped: green to brown and vice versa. The next screw up is the resistor wrapped in tape. I couldn't get a wire connected to the SMD resistor right next to the TX0/MISO pad, so i put in a through-hole resistor. The caps at the top left are to replace the 22uf one that blew when i plugged the battery in with opposite polarity: i was lucky that i didn't blow anything else! As you can see this mod isnt without risk, but now i could nearly do it in my sleep (so to say)!


FrSky Module Mods

In this part we will open the FrSky module and grab the TTL level TX and RX to connect with the 9x. The FrSky module converts the 3.3v TTL to RS232 as it has better quality but this outdoes matter for the distance from the FRSky module to the atmega.. We don't need RS232 since were going to the atmega and dont want to spend 50$ for their telemetry JR module. This mod involves cutting a few traces, and soldering some wires and resistors. The important thing to remember here is that the FrSky module runs at 3.3v so we might need to do a little protection between it and the atmega 5v (like the 3.3v bluetooth module).

The bag from HK 

The top one is the included 2db antenna. below it is a 5db antenna that I've had laying around. This is a a pretty important topic. The higher the "db" of an antenna, the higher signal power, but this comes at a sacrifice. More power means less unidirectional distribution of that power. If you have a high gain antenna  you risk loosing control of your model because of this narrower range of power, if you don't use these antennas properly. To deal with this people have made antenna trackers. Basically, these have super high gain antennas that are pointed to the model at all times using GPS, so no matter what, it will have good signal.

Here is the binding PCB with an LED and a momentary switch.

the SMA connector with the 2db antenna. NOTE: NEVER EVER turn on the TX without an antenna as you risk frying the transmitter module. It's sorta like a LED with 5v: you must have the resistance, or it will fry because of too much current.

The RX mode toggle.

TTL Level FrSky Module Output

Cut open the case (Careful!). It's some sort of thin, hard plastic shell. Rips pretty well.

Cut traces marked by yellow

and here


Scratch off the light green protective layer over the TX and RX lines so we can solder onto them. 

TX/RX pins on the FrSky module.
Solder a wire from TX (next to the MCU) to the TX on the pin header (red line).

You have two choices to connect the RX line:
1. The atmega RX can take these 3.3v levels from the FrSky TX. The RX of the FrSky will need the resistors as a 3.3v MCU isn't compatible with 5v on the serial port. Put a 20k resistor from the FrSky RX pad to GND and a 10k from the RX pad to RX on the pin header. (Safer)

2. These STM MCUs (processors) are 5v tolerant. That means you can hook the STM RX pad directly to the RX on the pin header. Just be careful with the wiring. This is shown in the first picture above. (i did this; no issues) 

Now connect FrSky pinheader TX to RX (MOSI) of the atmega, and FrSky pinheader RX to atmega TX (MISO)

Connecting to the 9x

Power, Ground and PPM connect to pads I have pointed out on the top of the main board. Some people unscrew the main board and solder to the bottom of the connector (the one just to the right of all the labeled wires) that goes to the other half of the TX. That doesn't make sense as these front side solder pads are so much easier to get to.

Frsky wire : 9x Connection
Black        : Ground
Red          : +12v
Yellow:      : PPM
Ignore the wires. This pic was from a different mod, but gave me what i needed for the markings.

Switches

Mount these some where on the outside of the case so you can change modes quickly. the toggle is for changing between 1-way (a regular RX), 2-way (receive telemetry from the RX to your TX), and the FW setting fro uploading new FW to the FrSky module. The button and LED are for binding.

I'd recommend putting the toggle somewhere else. Mine got in the way of the antenna a bit and required some extra work.

You're Done! 

Enjoy longer range, signal strength, telemetry, and that feeling of accomplishment. Look in the manual you received with the FrSky DIY module for binding instructions.
The final insides. I used tape because the original plastic cover was ruined (you wont see it anyways :D).


Credits!

Big thanks to Zen09 from RCG for the FrSky TX/RX pictures and rchacker for it's picture and info!

Wednesday, December 26, 2012

DIY USB to TTL with Nokia CA-42

I don't know exactly how, but i came across this page that went through the process. Basically, the idea is to take an old Nokia phone USB adapter and use its serial TX/RX lines as a FTDI device for MCUs or any thing that uses TTL. I found one on ebay here (USA, Buy it now) and awaited for its arrival. After it sat in the local Post Office for a day because a snowplow took out our mail box (thanks dude), i finally got it.


The Build

The guide said to solder on wires to the serial push pins of the phone connector. But, i didn't like the possibly skimpy connections and the bulkiness of the connector, so, i cut off the rubber case and planned to solder male pins directly to the wires. To my surprise there were only three wires connected on the end of the cable (green, blue and white). Weird, there should be at five: TX, RX, VCC, GND, and DTR. I then found  the image below. Without taking off the rubber case i wouldn't have known that  those wires are missing and therefore little level shifter from the guide wouldn't worked. Green and white are serial and blue is ground, but what about  VCC and DTR? FTDI isn't much use without them.



I thought that the other wires might have been left out as a clone and hoped that they would be on the PCB with the USB plug. Luckily, the case was just plastic pins press fit into some plastic receptors. AKA, i could just pry apart the case, and not have to cut it apart like the phone side. The pads for DTR and VCC are on the PCB, yay! And labels too! But, gets better: VCC is 5v unlike in the image above and the guide, so im hoping that TX/RX are also 5v so that i don't have to do 3.3v -> 5v level shifting. If the chip in the Nokia phone that uses this adapter is 5v tolerant, then that is why only gnd, rx and tx are broken out to the connector.

With two more pins, i had to replace the stock cable. I found some ribbon cable in my scrap bin (from an old rear projection TV). I simply peeled off five lines, soldered them onto the board, and soldered 5 breadboard pins onto the other side. I followed a modified FTDI scheme as this serial converter doesn't have CTS. It went like so: DTR, RX, TX, VCC, GND. Regular FTDI is RTS, RX, TX, VCC, CTS, GND. Finally, I finished them up with hot glue.


Testing

Since i already had the arduino IDE installed, i used that to test the serial adapter. To do this i connected the TX and RX lines together which essentially just sends back what you sent (make sure if you dont use Arduino IDE, that the "display what you send" feature isnt on). If it works you will  receive back what you typed. You might want to do this earlier on, or periodically throughout.

The final test: Arduino. It works with no level shifter! i uploaded the blink sketch with the Arduino IDE in Ubuntu (linux). The DTR ( auto reset on code upload) doesnt work, but pressing reset when "Binary sketch size:" appears works just fine for now!

Conclusion

If you're comfortable with a little soldering then this is a great cheapo DIY FTDI. One last note: if you get a CA-42 that has all the wires like the one in the guide and the second pic, you will have to do some level shifting.

Tuesday, December 11, 2012

Quad Booting Windows 7/8, OS X, and Ubuntu on a PC

The goal of this is to quad boot all four of these OSes on my computer. Ill start off a few months ago. The main reason I re-installed Windows 7 on my computer was because of the various programs i didnt need, leftovers in the registry, and the general slow down over time. I started off with a clean install of windows 7 and then installed all of my programs etc. Last, i made an image of it so that if anything were to go wrong in the future, i could simply restore the image without worrying about losing data, or having to re-install all of my programs. I used UBCD4WIN and is Image for Windows program.

Just a few weeks ago my computer became very laggy and ran the CPU cores up to 100% when the Task Manager wasn't running. This was an obvious sign a of a virus. I first though of simply restoring the image i made, but that would be no fun, of course! I decided to quad boot Windows 7, Windows 8, Ubuntu and OSX. Win7 is what i mainly use, I dumped Win8 a while back because the driver support was crap, and Ubuntu and OS X are for fun and what i will mainly use now because they are less prone to viruses.

Now, enough filler; onto the "meat".  The first thing i considered was the MBR format's limitation on partitions. Most would think that since its a quad boot and MBR supports a max of four primary partitions (primary are the only ones you can install OSes on), that it would work fine. Wrong! Windows installs another partition called "System Reserve" that contains a start-up fixer if windows doesn't start up properly (this is also Primary). There are ways to get around it, but i decided to simply choose a entirely different route.

Another format is called GPT. This will replace MBR because it has:
-An infinite amount of Primary partitions for OSes or data.
-A max hard drive size of 9.4 ZB (That is 9.4 Zetabytes = 9.4 BILLION Terrabytes). With 3TB HDDs  already being sold, and most computers not compatible with GPT this creates a disaster for us techies who want 2 or more TB on one drive. 2TB is the max MBR HDD size and you can still use 2TB+ HDDs on non supporting OSes, but you will only see 2TB.
 
To get my quad boot working i had to choose the GPT format. and as i said above, most computers don't have a GPT supporting OS, including mine. But there is a workaround: HybridMBR. This shows a legacy MBR to Windows 7 and others that dont support GPT, while still having all of the GPT pros and working with GPT native OSes. That being said, i couldve simply installed Windows 8 as it has GPT support, but then i would miss some drivers (Arduino, PPJOY) that Win8 doesn't support. In my quad boot Windows 7 is the "trouble causer". Ubuntu, OS X, and Win8 support GPT.

Here is how the process went. All of it is based upon this site. Thank him a ton!!!
1. Backup all data, or in my case i have the image.
2. Grab Ubuntu from here and burn it to a CD or make a liveUSB (ill do that in another post :)).
3. Go to gparted, delete all the partitions, make the HDD to GPT.
4. Create your partitions. Mine went like so:
---A) 1MB ext2 partition with bios_grub flag. REQUIRED!
---B) 250GB Windows 7 partition. Formatted to ntfs.
---C) 75GB Windows 8 Partition. ntfs.
---D) 75GB Ubuntu partition. ext4.
---E) 75GB OS X partition. Unallocated.
---F) The rest is a data partition formatted to ntfs as it is the easiest to r/w in all of my OSes.
5. Go to terminal and type sudo apt-get install gptsync.
6. Run gptsync /dev/sda2 in terminal and allow it to sync the partitions. This is the HybridMBR being made. sda2 is the HDD i made all of the partitions on in step 4. look at gparted to find this.
7. Install Windows 7 and 8 / restore the image.
8. Install OSX86.
9. Install the Chameleon bootloader. The one to rule them all (LOTR reference :D). This loader will detect all of the OSes and allow you to choose any of them.

Interfacing a PlayStation 2 (PS2) Controller with Arduino

I got a free PS2 controller, but with no PS2 to use it with I had to do SOMETHING with it, haha. That, of course, was taking it apart and using it with an Arduino as a control system.

Here is the inside:


Inside the connector:



Pinout Inside Controller 


Pinout of the connector:

You can see on the PCB which wires are for each pin. Then where the wires go on the connector.

Connections to Arduino:

These are using the PSX code below. they can be changed in code.
Arduino, PS2 PCB Label, Full Name, Color
13,,,,,,,,,, CLK,,,,,,,,,,,,,,,,, (Clock),,,,,,, Brown
11,,,,,,,,,, DO,,,,,,,,,,,,,,,,,,, (Command), Orange
10,,,,,,,,,, CS,,,,,,,,,,,,,,,,,,,, (Attention),,, Red
12,,,,,,,,,, DI,,,,,,,,,,,,,,,,,,,,, (Data),,,,,,,,,, Green
GND,,,,, GND,,,,,,,,,,,,,,,, (Ground),,,,,, Black
N/C,,,,,,,,ACK,,,,,,,,,,,, (Acknowledge),, White
3.3V,,,,,,,3.3v,,,,,,,,,,,,,,,,,, (3.3v),,,,,,,,,,, Yellow
7.5V,,,,,,,See Below,,,,,,,, See Below,,, Blue

7.5v triggers the feedback motor inside of the controller. Too use this you will have to use a digital pin to trigger a mosfet/transistor to supply the 7.5v. 

Code:

Get the library from here.

#include <PS2X_lib.h>  //for v1.6

PS2X ps2x; // create PS2 Controller Class

//right now, the library does NOT support hot pluggable controllers, meaning
//you must always either restart your Arduino after you conect the controller,
//or call config_gamepad(pins) again after connecting the controller.
int error = 0;
byte type = 0;
byte vibrate = 0;

void setup(){
 Serial.begin(57600);

 //CHANGES for v1.6 HERE!!! **************PAY ATTENTION*************

 error = ps2x.config_gamepad(13,11,10,12, true, true);   //setup pins and settings:  GamePad(clock, command, attention, data, Pressures?, Rumble?) check for error

 if(error == 0){
   Serial.println("Found Controller, configured successful");
   Serial.println("Try out all the buttons, X will vibrate the controller, faster as you press harder;");
  Serial.println("holding L1 or R1 will print out the analog stick values.");
  Serial.println("Go to www.billporter.info for updates and to report bugs.");
 }
 
  else if(error == 1)
   Serial.println("No controller found, check wiring, see readme.txt to enable debug. visit www.billporter.info for troubleshooting tips");
 
  else if(error == 2)
   Serial.println("Controller found but not accepting commands. see readme.txt to enable debug. Visit www.billporter.info for troubleshooting tips");
 
  else if(error == 3)
   Serial.println("Controller refusing to enter Pressures mode, may not support it. ");
 
   //Serial.print(ps2x.Analog(1), HEX);
 
   type = ps2x.readType();
     switch(type) {
       case 0:
        Serial.println("Unknown Controller type");
       break;
       case 1:
        Serial.println("DualShock Controller Found");
       break;
       case 2:
         Serial.println("GuitarHero Controller Found");
       break;
     }

}

void loop(){
   /* You must Read Gamepad to get new values
   Read GamePad and set vibration values
   ps2x.read_gamepad(small motor on/off, larger motor strenght from 0-255)
   if you don't enable the rumble, use ps2x.read_gamepad(); with no values
 
   you should call this at least once a second
   */
 
 
 
 if(error == 1) //skip loop if no controller found
  return;

 if(type == 2){ //Guitar Hero Controller
 
   ps2x.read_gamepad();          //read controller
 
   if(ps2x.ButtonPressed(GREEN_FRET))
     Serial.println("Green Fret Pressed");
   if(ps2x.ButtonPressed(RED_FRET))
     Serial.println("Red Fret Pressed");
   if(ps2x.ButtonPressed(YELLOW_FRET))
     Serial.println("Yellow Fret Pressed");
   if(ps2x.ButtonPressed(BLUE_FRET))
     Serial.println("Blue Fret Pressed");
   if(ps2x.ButtonPressed(ORANGE_FRET))
     Serial.println("Orange Fret Pressed");
   

    if(ps2x.ButtonPressed(STAR_POWER))
     Serial.println("Star Power Command");
 
    if(ps2x.Button(UP_STRUM))          //will be TRUE as long as button is pressed
     Serial.println("Up Strum");
    if(ps2x.Button(DOWN_STRUM))
     Serial.println("DOWN Strum");


    if(ps2x.Button(PSB_START))                   //will be TRUE as long as button is pressed
         Serial.println("Start is being held");
    if(ps2x.Button(PSB_SELECT))
         Serial.println("Select is being held");

 
    if(ps2x.Button(ORANGE_FRET)) // print stick value IF TRUE
    {
        Serial.print("Wammy Bar Position:");
        Serial.println(ps2x.Analog(WHAMMY_BAR), DEC);
    }
 }

 else { //DualShock Controller

    ps2x.read_gamepad(false, vibrate);          //read controller and set large motor to spin at 'vibrate' speed
 
    if(ps2x.Button(PSB_START))                   //will be TRUE as long as button is pressed
         Serial.println("Start is being held");
    if(ps2x.Button(PSB_SELECT))
         Serial.println("Select is being held");
       
       
     if(ps2x.Button(PSB_PAD_UP)) {         //will be TRUE as long as button is pressed
       Serial.print("Up held this hard: ");
       Serial.println(ps2x.Analog(PSAB_PAD_UP), DEC);
      }
      if(ps2x.Button(PSB_PAD_RIGHT)){
       Serial.print("Right held this hard: ");
        Serial.println(ps2x.Analog(PSAB_PAD_RIGHT), DEC);
      }
      if(ps2x.Button(PSB_PAD_LEFT)){
       Serial.print("LEFT held this hard: ");
        Serial.println(ps2x.Analog(PSAB_PAD_LEFT), DEC);
      }
      if(ps2x.Button(PSB_PAD_DOWN)){
       Serial.print("DOWN held this hard: ");
     Serial.println(ps2x.Analog(PSAB_PAD_DOWN), DEC);
      }

 
      vibrate = ps2x.Analog(PSAB_BLUE);        //this will set the large motor vibrate speed based on
                                              //how hard you press the blue (X) button  
 
    if (ps2x.NewButtonState())               //will be TRUE if any button changes state (on to off, or off to on)
    {
   
     
       
        if(ps2x.Button(PSB_L3))
         Serial.println("L3 pressed");
        if(ps2x.Button(PSB_R3))
         Serial.println("R3 pressed");
        if(ps2x.Button(PSB_L2))
         Serial.println("L2 pressed");
        if(ps2x.Button(PSB_R2))
         Serial.println("R2 pressed");
        if(ps2x.Button(PSB_GREEN))
         Serial.println("Triangle pressed");
       
    }
       
 
    if(ps2x.ButtonPressed(PSB_RED))             //will be TRUE if button was JUST pressed
         Serial.println("Circle just pressed");
       
    if(ps2x.ButtonReleased(PSB_PINK))             //will be TRUE if button was JUST released
         Serial.println("Square just released");  
 
    if(ps2x.NewButtonState(PSB_BLUE))            //will be TRUE if button was JUST pressed OR released
         Serial.println("X just changed");  
 
 
    if(ps2x.Button(PSB_L1) || ps2x.Button(PSB_R1)) // print stick values if either is TRUE
    {
        Serial.print("Stick Values:");
        Serial.print(ps2x.Analog(PSS_LY), DEC); //Left stick, Y axis. Other options: LX, RY, RX
        Serial.print(",");
        Serial.print(ps2x.Analog(PSS_LX), DEC);
        Serial.print(",");
        Serial.print(ps2x.Analog(PSS_RY), DEC);
        Serial.print(",");
        Serial.println(ps2x.Analog(PSS_RX), DEC);
    }
 
 
 }


 delay(50);
   
}

LT-2115 Gateway Netbook Teardown!

This began when i thought the USB port on the left side was broken. When i tried to plug in a flash drive, it went partially in at a 35deg angle. In the end i realized that the little piece of plastic in the USB port of this laptop are fairly flexible and if a flash drive (etc) is plugged in upside down, it will sorta go in (as i mentioned before). I pretty much took it apart for no reason and wasted ~2 hours. 

Here are a few pics.
Before, at the Chameleon OS X boot loader.

Prying off the keyboard. Don't worry, the laptop was off, just a test.

Keyboard assembly off.

My tools and the top plate (track pad, keyboard, etc) off of the laptop.

Close Up of laptop in previous image. You can see the motherboard (has vga, usb and power ports) on the left. On right is connector board (more usb, audio, card reader ports). WiFi and bluetooth on bottom right-center.  The blue PCB next to the laptop is the link between the motherboard and secondary board.

The "culprit". Bottom side of motherboard. Fan, memory slot, sata etc.

As i was taking it apart, I looked for some additional ports on the motherboard that i could solder onto and more functionality (USB ports etc) like the eee pc. Sadly, i didn't find any, but found a few things left unsoldered (top left of the motherboard in this pic)

Another here: bottom left.

Shadowy close-up of the connector board!

After i put everything back together ( no extra screws :D), the keyboard didnt work! Turns out i was putting the ribbon cable in wrong. You can see in the pic above that the cable goes below the gray lock-bar, in the rest of the computer, though, the cables went above this lock-bar.