Saturday, September 6, 2014

Hacked up USB for a Phillips HDD1420 GoGear

MP3 players... getting shoved aside by smartphones. A hand me down that spent too much time at the back of a cupboard. Empty battery, no charger, no connector, no memory. How I brought the Phillips HDD1420 back to life!

The first attempt was to power the device via the battery conector only to be greeted with an error message insisting to conect the player to a computer... Tracing the connector I found some suspicous looking traces and soldered a USB cable to it. GND, D+ and D-. Nope... not working, checked the cable and it was defective, swap it for a better one and still nothing...

Looking at the information the USB pins I used are correct... maybe it needs the 5V from the USB? Need to probe the board to find a place to solder the 5V to... Bingo! We have communication! Mass storage device detected in Windows... but that's it. No disk drive shows up... Time to go to Phillips' website and find out what is going on. Fortunatly they have the "Phillips Device Manager" software that will reset you device to a working state!

Oh, I't doens't work on Windows 7? Ok, I'll try on an old Notebook running Windows XP...

Oh, I't can't find any devices to fix? If it's mass storage I'll just connect the 4GB Hard Drive Disk to the computer with a card reader (not all card readers support Microdrives, so keep that in mind)...

Oh, I't won't open the drive? I'll try another Microdrive... Yup it works fine...

Turns out the original Hard Drive is dead... Crack on the bottom of the player + non functional hard drive = Previous owner dropped it. OK! Let's replace the Hard Drive with an 8GB Microdrive...

Now windows shows a drive and lets me open it... but still no boot and a nice error message still telling me to connect it to a PC. Oh, and the "Device Manager" still doesn't find a GoGear Player.

Format drive, copy the official firmware to the drive in the correct directory but still not working...

After finding and reading the service manual it states that the technician must replace system files, so it sounds like there is more than just the firmware file...

Time to check if the awesome project RockBox supports the Phillips devices as the last time I checked there was not much support for various players. Of course they had it! Good ol' RockBox!

I used the RockBox installer and the player was booting up fine! Tried the Oficial Firmware and it booted great aswell.

This is where I could remove RockBox from the player and keep the original firmware, but I wanted to use RockBox. The problem was with charging. The GoGear HDD1*** Series come with an external power adapter for charging and the player can also charge over USB at either 100mA or 500mA.
The GoGear has a hardware IC that handles charging and power selection of either External Adapter (AC) or USB power. The IC is the BQ24032 from Texas Instruments. The OF handles the USB charging at either 100mA or 500mA via the control pins on the charger IC. However in the RockBox firmware this is not implemented as it is assumed that you have the external AC adapter.

Now, thanks again to RockBox for providing the schematics of the GoGear player I found a suitable test point for the external power input, a decoupling capacitor very close to the BQ24032 charge IC! Let the software hacking begin!

Now, the GoGear HDD1*** Series are powered by a PP5022B-TFF, This Portal Player System on a Chip (SoC) houses two 32-bit ARM7TDMI processors. It has many more features and is a 261 pin BGA IC. That is a lot of pins, and best of all there is no available documentation for it! To get RockBock running on this platform LOTS of work went into it. Fortunatly with some patience and looking at the source code for RockBox you can get a rought idea of what pin does what... except for the ones that are not used, like the USB charge current select of either 100mA or 500mA...

After much digging around the source code I found out how bits were SET or CLEARED in a pretty safe manner.
Do not change an INPUT to an OUTPUT unless you are sure of what you are doing. You could damage the PortalPlayer IC or the GoGear.
First decide witch GPIO port you want to modify, you can choose from A to L (8bit wide?) or the 32bit wide GPO.
    GPIO*_OUTPUT_VAL |= 0xh;
    GPIO*_OUTPUT_EN  |= 0xh;
    GPIOB_OUTPUT_VAL &=~0xh;
    GPIOB_OUTPUT_EN  |= 0xh;
Replace * with a letter from A to L
Replace h with a hex value of the pins you want to change.

An IRC user by the nick pamaury suggested PortB and we determined that PortB.5 is the external power detect pin and PortB.2 is USB power detect. Pamaury also suggested PortB.1 based on his dissasembly of the OF as the current control pin ISET2 on the BQ24032 charge IC.

I decided to place the code in the bootloader to start the fast charging as soon as it boots.
Did I mention Rockbox has a Development Ubuntu image for VM's? Download, run, follow instructions!

Open up a terminal and...
-Get rockbox source code;
"git clone git:// ./Desktop/rockbox"
-Go to the rockbox directory;
"cd ./Desktop/rockbox"
-Make a new folder inside the rockbox folder;
"mkdir build"
-Go to the build directory;
"cd build"
-Setup the enviroment;
-enter "101" for Phillips GoGear HDD1630
-enter "N" for Compiling the firmware or "B" for compiling the bootloader.
-Make the RockBox Firmware/Bootloader;
"make" or use "make -j 4" if you have a 4 core processor
-Make a zip if you want to move all of the files easily to the player;
"make zip"
-Extract the zip file to the device, safely extract the device and reboot it!

Now I also did some other tweaks here and there, so lots of transfering the firmware to the player was going on... switching back to windows to copy the files and extract the device was a pain. A little bit of glue and the proces was a simple as running a script!

To share a folder between the virtual machine and windows you will need to instal the Guest Additions CD image from the VM Device menu. Find a tutorial on how to get it running properly. I updated the Ubuntu OS.
Also I used RemoveDrive to set up a BATCH scrip that copied the files to the player and safely removed it from the PC;
copy %~dp0sharedfldr\build\rockbox.mi4 H:\.rockbox /Y
copy %~dp0sharedfldr\bootloader_build\FWImage.ebn H:\System /Y
"%~dp0RemoveDrive.exe" "GoGear"
This BATCH file gets launched from withing the virtual machine via a program called winexe thanks to the following line;
winexe -U user_name%password // "C:\Users\OiD-W\Desktop\Ubuntu\copy.bat"
So about 40 lines of code later and I have a little menu that can handle my lazy needs:

After digging around the code I have found the following interesting bits;
The header file for the main processor, pp5020.h, that contains lots of information about the chip.
Some examples of bit/port manipulation in button-hdd1630.c and lcd-hdd1630.c.
Power control code for handling charging is placed in the power-hdd.c file.
And of course the main thread in main.c as a starting point of the program.

For the bootloader there is main-pp.c and that is where I have placed my code for the high speed charging.

I'd like to make a menu option for enabling the charging and some other minor changes here and there. See if I can have a look at a few bugs and generaly mess around with the device. Then see if I can upload the code to the GitHub.

Once the USB pins were found a more robust solution was needed. I placed a mini USB conector from another media player and soldered it the original conector and a large ground pad where one of the screws went. I also used enammeled copper wire for the data signals. Looking back twisting them together wouldn't be a bad idea. The 5V orange wire is multicore and it should handle the 500mA without a problem. Not seen in the photo is a small wire from the GND pin of the USB connector to the chassis GND. This is important because cheap USB cables don't use the connector chassis for GND.

A small notch needed to be cutout from the rubber hard drive support.

And part of the metal chassis also needed to be cut out.

I had choosen to place the USB in its current position because one of the plastic clips that held the player together was broken. Turns out it was no the best of ideas... There is a small gap but that could be fixed by gluing the parts togther. I'll try to find a less permanent solution.
Also to note is the cut bezel of the original conector, a method of securing it is also needed.

Thanks for reading! Happy hacking!

Read More!

Wednesday, August 6, 2014

A Photoduino variation

Well, I'm sure someone has heard of the Photoduino. A DIY controller for cameras and flash units based around the Arduino.

The Photoduino has a bunch of sensors such as audio, light, pressure and can control various devices such a camera, flash units, laser, LED, solenoid and whatever you can plug in to it.
I  built mine based on the photoduino website and made a few changes, mostly software. The biggest difference is the screen, wich originaly is a small LCD with a parallel interface. I had this lovely VFD display lying around and it ended up in the project.

Now the VFD is a serial device so that meant changing the code and making the software play nice with it. While doing so I decide to do some modifications with the buttons, menus, configurations, multiple languadge support, volume control, extra control ports and provably other minor changes.
The software is based on version 9 and hence the ALT meaning alternative version.

A small mishap (or rather, a string of bad luck) meant burning:
2 Atmega328
1 Atmega8u2
1 USB to serial adapter
1 Disconfigured VFD
If you include the eBay shenanigans, other things breaking, burnt fingers, having to travel 200km for parts and forget something then you could say it was a pretty depressing week!

I never really figured out what killed the Arduinos. The VFD used to share the serial TX from the Arduino so when I programmed the sketch I had to remember to turn the display off or garbage would be displayed on the device. But worse than garbage is changing the configuration parameters of the VFD and it's subsequent lack of functionality, hence the 200km trip to pick up the original VFD wires, install a virtual windows XP (the software only works on XP or previous), setting the configuration and getting everything back up and running.
During this proces the USB adapter and Arduinos died. All 5V TTL signals, current limiting resistor on the serial lines, working in a ESD safe area, verifying the dead microcontrollers with AVRDude, all grounds connected... No idea of what happened.

The photoduino now runs on a damaged arduino with a dead Atmega8u2 programmed via ICSP and the VFD runs on a sofware serial pin with an apropiate current limiting resistor (even the atmega8u2 had resistors on the serial lines and died)

I finally got around to labelling the conectors, a great improvement in functionality! Well... more like less wasting time guessing which conector does what.
Another change is an extra IO used exclusively for IR remote control of the camera.

The cheapest enclosure I found is a storage box from a hardware store. Such a waste of space...

Actually it doubles as a container for the sensors, cables and power supply!

Did I mention L.A.S.E.R.? Everything is better with mighty lasers!

Oh, yeah! And a sample shot that left me with a very oily kitchen and popcorn everywhere!

Read More!

Tuesday, July 1, 2014

Mini flash with optical slave

Normally each year around christmas I will be involved in a couple of Secret Santas and one of them is a "all hand made" type where buying the gift is not allowed. Some very creative gifts have showed up!

Turns out I had to come up with something for a photographer... being one myself I know there are many usefull things to make but many are expensive or take a decent amount of time to build.
In comes a mini slave flash with an optical trigger!

Like many projects things don't tend to run to well on schedules so I deadbuged the circuit of a disposable camera flash so it would fit inside the case and have room for the battery (nope, didn't happen!). Here is the circuit diagram for the flash from Sam's repair faq.

In order to squeeze the battery inside of the case everything needed to be small and well laid out. Unfortunatly the transformer is what ultimately stop my from my goal. I had to come up with a small and simple trigger for the flash unit. Provably too simple if used in broad daylight, but i works reliably in bright artificial lighting.

Three components make up the trigger. This conects directly to the trigger pins of the flash circuit.

Here is a side view of the little flash unit.

And another from the back. The beam pattern is maybe a bit too wide but it'll do!

And a size comparison to a comercial flash unit.

So what could it be used for? Small spaces, highlights, inside objects... lots of uses!

The person I gave it too seemed to enjoy it quite a bit. I hope he can find a use for it.

Read More!

Monday, June 30, 2014

Allegro 2917 Dual stepper shield

One day a came across a great find, a HeNe laser scanner/projector , a 2000W stroboscope with a color wheel, a Gobo/disco scanner,  a buch of HP printers and other various electronics.

I recently had aquired an Arduino UNO from cooking hacks and with the abundance of obtained stepper motors I wanted a small platform to easily control them. While disassembling the HP printers I noticed that they had a small IC to controll the motor. After a quick search of the part number I found out that they were dual H-bridge IC (45V 1.5A) with current controllable current limiting.
The project began! I found a template for the Arduino headers and got to work in Eagle. This was my first time using Eagle, and provably my third home made board, please forgive the horrible layout!

Not to mention that I placed many vias under the IC's... I had to make sure that they all made good contact and that they were flush with the board before placing the IC on top.
Solder, check, repeat. The same for the other IC.

 Things were going well, wrote some code in the Arduino IDE. Enable OK, phase OK, PWM... not ok. Motors would spin well with low supply voltages but would stutter with a higher supply voltage.
Re-check everything and find out that the stuttering only happened on one of each phase of each IC so I decided to sapw the chips over. The same behaviour on each phase of each IC. So basically the chips were damaged from the begining :(
For some reason I choose to take the board apart so I could stick it the oven pull the IC's off (pretty hard to do with a 25W soldering iron when 22 pins are part of the heatsink/ground plane).
Turns out the cheap boards I purchased were not FR4 material... well thats the end of that project!

For those that want the files they can find them here in Eagle's format.

Read More!

Wednesday, June 25, 2014

Tesla Coil

Any one who does electronics should know about Tesla and if you are into high voltage stuff then there is no escaping the Tesla Coil!
On Christmas break 2010 I was tidying up my room when I stumbled upon my second Tesla coil (my first being a micro coil on a Smarties tube) made from a giant Smarties tube. Suffice to say they were both pretty much a failure...

Misaka is not impressed...

So I decided to build a real Tesla coil! Well, actually it was on my mind for a while, I even managed to pick up a used Hameg HM203-6 20Mhz scope for 125€ (Yes, that is cheap. The lowest price I had found for a second hand scope...) to really help to tune the tank circuit.
After doing much research to properly understand the theory of opperation and minimum design requirements I chose to use JavaTC to do most of the calculations and ended up with a flat primary design to keep things simple. The coil has:
-A 901 turn secondary wound with 0.05mm wire and a lenght of 50cm and a diameter of 9cm.
-A 12 turn primary wound with 6mm wire and an inner diameter of 15cm and outer diameter of 32cm.
-A spherical topload with a diameter of 28cm.
-A 20nF 15kV MMC bank.
-A ballasted quad microwave oven transformer stack (aprox 5400W).
-A static spark gap with 5 18mm diameter pipes with a 4mm spacing in between and another adjustable gap.

The tesla coil is still not finished due to lack of time and funds but here is the proces so far!
From the start I was in a rush, xmas break is only for about 2 weeks and I had plenty of other commitments apart from tinkering with copper! There was no way I would be winding the secondary by hand so I used some wood and some skate wheels in much need of being changed to build a winding jig. I added a DC motor from an HP printer and a model train set power supply. I was crude and build in about 30 minutes. Suprinsingly it's still in one piece somewhere.

The PVC pipe used as the form for the coil got a good cleaning followed by lots of sanding to remove all traces of ink, dirt and other unwanted grime followed again by more washing and drying.
I needed a way to keep track of how many turns I had done so I resorted to the calculator method of "1+1="... on a computer.

The calculators I had either were too simple for this method, were not mine or good quality devices that I would rather not modify. So I cracked open a USB keyboard and traced the Intro key and wired up a magnetic reed switch:

The reed switches are the little black components on the PCB on the winding jig and come from a nice big DMX 2000W color strobe. Just add magnets!

The magnet (fragment) is from a hard drive and works very well with the reed switch. After a while and a few interruptions the coil started to take shape. It's important to do the coil properly and "save" your work with a bit of tape so that it doesn't completly unwind!

After much winding the secondary coil is finished. The coil is designed to be modular so the secondary can be simply droped into the primary so it is easier to transport. A stip of metal tape forms the ground contatc under the primary.

To make the secondary look even better and to stop humidity getting into it I painted it with some varnish. It also stops the coil from unwinding. To stop the varnish from sagging while it dried I applied the coats on the jig. I followed the instructions for the varnish but... It didn't dry properly!! ARRGGGH!!!

Here is a mockup of how the Tesla coil should look, notice how the top load is made from two Ikea bowls placed on the secondary.

The first low power tests were nothing impressive, but hey, no tuning at all!

The coil was being powered by a F.A.R.T neon sign transformer (Yes, they are a company named fart) that I got for free, sadly it was not fully functional but hey, it was free!

After much tweaking I found out that the topload was to big for my home made capacitor (the white box poking out the side of the cabinet) and that my capacitor was too small. Notice the color of the primary coil, it's not copper but steel cable witch is not very good for high frequency and high power jobs. Basically my coil was severly underpowered, the transformer, the capacitor, the tunning, the spark gap, the primary... nothing was perfect! I built an MMC with 10 1500V 100nF capacitors and got a slight improvement.

I needed more power. I wanted more power. More power is always better!!

In comes the 5400W MOT stack. It has a tendency to BURST INTO FLAMES when least expected. I need to get it under oil and improve the wiring. It is ballasted with a giant 2200W MOT with a shorted secondary. 16A breakers don't play nice with a 5400W Tesla coil, I need to find a way to soft start this beast and remove the ballast...

Next up is a better sparkgap with a more uniform separation of the electrodes plus an adjustable sparkgap (I can adjust it with a 3m wooden stick with a screwdriver on the end). It also has a hair drier blowind air over it.

A better MMC was also built, now it has a total capacitance of 20nF. I am still really pushing the 15kV rating... The plan was to build 4 strings of 15 capacitors for 26.5nF and 22kV but... money.

The primary coil got a major upgrade from steel cable to copper cable that was donated from a local workshop. The primary runs a bit cooler and that translates to less power loss!
The supports for the primary (and for the MMC) are made from 5mm acrylic sheets. I got these from a truckload of Point Of Sale units, they are the backlight difuser screen. Easy to work with and very strong.

The top load was also improved with a proper mounting method so I can take it apart easily. Made with more acrylic. Maybe the top load is too high now...

And that is my Tesla Coil so far. I hope to tune it better and get some decent wiring in place (flimsy alligator leads don't work well, they like to melt).

I also purchased a small AC motor from a scrap yard to try and convert it to a synchronous motor for use in a rotating spark gap.

This meant grinding two flats on the rotor. Grind too little and it's not synchronous, grind too much and it will overheat...

I managed to get it to rotate synchronously but the motor just got too hot to use. So that is another thing to improve!

So, how did these improvements affect the Tesla Coil? Quite well actually!! I believe there is plenty of room for improvement, I am getting 70cm long streamers and I am sure that could be improved to up to 90cm with some care.

The top load is provably too high and causes discharges from the secondary, these could be disastrous for the Tesla Coil and are also a safety hazard to the user if it strikes the primary coil. Another addition should be a ground ring just above the primary coil to help prevent secondary to primary strikes.
I honestly have no idea what it was striking... It never striked the grounded rod near the coil nor the step ladders on the wall but liked to strike the wall. Radio frequency high voltage is very hard to predict, so take speciall care around Tesla Coils!

In my case I don't just discharge the MMC bank, but also the top load (holds a decent charge) and the secondary coil (OUCH!). The varnish coating strores a tremendous amount of static charge wich I found out the hard way. Trust nothing, short everything!

Read More!