The MP3mobile

First of all: a disclaimer. Basically, all this worked for me. If it doesn't work for you, burns down your house/car/household pet, that's your problem. People building PSUs, it's a good idea to test them (voltage, current, etc) under load (eg: a partially dead hard disk) before plugging in an expensive PC motherboard which it may well blow up.

For those of you looking for a complete, built, in-dash player should look at my empeg unit (http://www.empeg.com which is very cute ;)

As this page is getting pretty big now, here's an index:

Why the mp3mobile was created

How it looks - pictures of it in operation

Techie details on the power supply and so on

Software - including bits to download

Commercial version in development

News - TV appearance & all! (updated 8th April 1999)

6 or 10 CDs isn't a very big choice - even blowing your own CDRs with your favourite music, it still means that you have a pretty limited selection, and the slow disc change doesn't help when you're flitting around tunes trying to find what you want.

The boot in the MX5 is small enough already without an autochanger box taking up room.

The price of a new head unit and autochanger is awfully close to a complete PC.

The final result is immensely wonderful, and impresses the hell out of most hackerish people (like me). Non-computer people just wonder why you havn't got a CD player. But, with my setup (based on RedHat Linux 5.0) I can do these things:

NFS mount my car from my laptop (there's a loose 10-base-T cable behind the drivers seat) and squirt new tunes into it.

Hook up my GSM-modem to the car (so you can telnet into it and run emacs at 60mph :-) ).

Hook up a GPS unit, so you could finger the car and find out exactly where a car full of computer equipment suitable for stealing is located.

Compile as I go round bends.

Coredump as I change gear :-)

Future plans include:

418Mhz low-power radio link to allow me to upgrade the software when the car is in the garage 30m or so from the flat.

Link into the car's engine management to monitor boost pressure, etc

Voice-command of the music functions.

How it looks

...and yes, I own all the CDs that the music on the system has been compressed from. Below you see the ridiculous looking exclaimation mark on the VFD display :-)





And if you type *2, you get a random play of tunes from the year you enter (via the ID3 year tag). Very 'golden year', isn't it?





The Techie Details

Where?

The Processor & hard drive

Quite soon, I found the Advantech PCM-5862 'biscuit PC'. This board puts an entire Pentium PC (including: 2 72-pin SIMM sockets, Socket7 (to 200Mhz), 10-base-T Ethernet, 16-bit audio, 2xUSB, EIDE, Floppy, 4xSerial, Parallel, PCI slot, PC/104 slot, SVGA with monitor and LCD drive) into the footprint of a 5.25" disk drive - and best of all, runs from a single +5v supply. I found an importer, found out the price (urk, not cheap - I paid 293+VAT from UCS in the UK), screamed a bit, then bought it anyway: it's still cheaper than an autochanger...

Next was a CPU - I didn't need anything powerful, and ended up with a secondhand Cyrix P150: this is actually fairly marginal for mp3 decoding - I'd underestimated how bad the FPU is in those things when compared to a genuine Intel. It soon got replaced by a P166MMX (see below).

The hard disk I chose was a Hitachi 2.1Gb 2.5" laptop drive - after much umming and aaahing, I decided to go for a 2.5" even though the capacity was way down on what I could get for the same price in 3.5". Basically, the Hitachi drive could withstand operating shock of 100G (300G non-operating), and ran off a teensy little 0.5A at +5v. The Adavantech board's EIDE is on a 2.5" drive connector anyway, so attaching it was no problem. I had thought of using a small HDD and a 5-CD EIDE changer, but the fact that most CD-ROMs nowadays are incredibly plasticky put me off somewhat.

Power Supply

As the Advantech manual notes, if you give it a +12v supply to the board, you get higher quality audio (it isolates the analogue audio bits from the switching noise of the logic circuitry), so I put on a SGS-Thompson L4940V12 (Farnell code 413-197), 12v low-drop-out (LDO) regulator, to give me a maximum of 1.5A at 12v - might be useful if I ever fit a CD-ROM...

If you're building the PSU: please note that everything needs to be bolted to a heatsink - this means the 4970, the 4940 and the 1545 Schottky diode used in the 4970 circuit. However, the heatsink tag on the 1545 is NOT GROUND and needs an insulator so that it isn't connected to case ground otherwise things will go bang - these are easily available from electronics suppliers. I suggest you check it with a multimeter before powering it up!

UPDATE! I've just (4th September 1998) replaced the 5v PSU with a better part. See the news section for details.

For input power, I used a Neutrik speaker connector (Speakon) which will pass an ungodly amount of amps, and as a side-effect both looks cool and has the most addictive push-and-twist to lock docking motion of any connector I've ever used :-) It's also got 4 poles, which is useful for the ignition sense (see below).

Casing it

The hard disk is mounted hanging from the lid of the computer's box in a small cradle, slightly shock mounted on little rubber gromits, and mounted the right way up (it'd have been a lot easier to put it upsidedown, but I was a bit nervous about that!).

Some pictures of inside/outside of the unit can be found here.

Power Control & input

It used shedloads of power and got very hot.

If the input voltage went below 12v, the 5v line sagged down to about 4v, meaning bye bye PC operation.

The other problem was that car batteries are usually about 12v, but can be below this with the engine off (with it on, they're usually about 14v) - this wasn't really a problem, as I didn't plan to listen to music with the engine off much, anyway. The problem was to ensure the machine got powered off reliably, and after it was shut down properly (it runs RedHat Linux 5.0) - so, a PIC16LC84 was bought and I breadboarded a little power control circuit.

Basically, this circuit does two things:

It scans the keypad matrix, a standard 12-key telephone item from Farnell on a long lead (so it could be used then dropped on the floor), and converted this to serial data to be fed into the Linux box via COM1:. The keypad is totally passive, with a keypress just joining together the appropriate row and column lines on the keypad connector.

It monitors the state of the ignition, and controls the power to the main switch-mode PSU, using a VN05 high-side driver. This chip will switch up to 12A and can be driven from a a logic level output (eg: direct from a PIC). It's protected against everything, from over current to over heating, and doesn't cost and arm and a leg either.

When you get into the car and want music, you just hit any key on the keypad: if the ignition is on, it powers up the PC, and then sends any keypresses to COM1 as ASCII (0-9, * & #). If the PC is on and the car engine is switched off, the PIC notices this, and sends '!' to the PC on COM1 every second for 30 seconds, then turns off the PC power supply: the PC takes about 15-20 seconds to complete a /sbin/halt, so that works out nicely. Update! someone built this circuit, progammed my code, then couldn't get it working... I forgot to mention that now you have to type "123" in sequence to start the main computer - I changed this from any key to prevent accidental powerups.

The PIC binary (in intel hex format) is here: remember to set the correct options before programming the pic - I use an XT oscillator, watchdog timer off, boot timer on. I've not included the source as some of it was from the PIC C compiler examples which are copyright (and also, this requires you to have the PIC C compiler!). The pinout is as follows:

A0, serial tx (to pc, via MAX232)

A1, serial rx (from pc, via MAX232 - not used as yet)

A2, ignition sense (high=on, take ignition line through a 10k resistor to this pin, with a 5.1v Zener pointing UP from ground to this pin to limit the voltage)

A3, pc power control (high=on, this goes directly to the high-side driver)

A4, pc reset (low=reset, this generates a small reset pulse a second after powering the PC on: it's not actually used as the Advantech resets OK).

B0, keypad column 1 (Pulled to 5v via a 10k resistor)

B1, keypad column 2 (Pulled to 5v via a 10k resistor)

B2, keypad column 3 (Pulled to 5v via a 10k resistor)

B3, keypad row 1 (Pulled to 5v via a 10k resistor)

B4, keypad row 2 (Pulled to 5v via a 10k resistor)

B5, keypad row 3 (Pulled to 5v via a 10k resistor)

B6, keypad row 4 (Pulled to 5v via a 10k resistor)

The display

The display was hooked up to the low 3 bits of the PC's parallel port and I worked out the command set (having drawn a blank on finding programming data on the OKI 1937 VFD driver on internet) - the display can be dimmed and you can set the cursor position, basically. There are some other bits I havn't worked out which seem to give super-bright, but I can't repeat the results reliably! I had thought of using a PIC to drive the display from a standard COM port, but the protocol is so simple and with only 16 characters to refresh a 'hit the hardware' approach doesn't munch too much Linux CPU time.

Both the display and keypad come out on a single 25-way D type, allowing me to unplug everything easily when I want to take the PC inside: soon, I won't be able to do this, as I'll have bolted down the plate which covers the access to the duct - but I'm not doing this until I'm sure I can deal with it not fsck'ing properly without removing the machine!

Audio output

The audio comes out on two poncy gold-plated (99p each) phonos on the outside of the case.

Software

Currently, the software's pretty basic. On boot, it loads a pre-compiled ID3 database (this can be rebuilt using *8). I can then select tunes by year, random play, play group, artist, and so on, using a simple back/forward/select mechanism from the keypad (unfortunately, the keypad doesn't have the ABC, DEF, and so on printed on the keys like a phone, which would have helped a lot...). I can mute the tune with #, pause, restart, skip forward and back and so on - it's great!

The display by default shows the artist & title (scrolling in a 12 character field), one space, and then M.SS (the dot takes no space, as it gets turned on in the M segment's display) - * goes into command mode, allowing you to pick functions 0-9 (or * to return to play mode). *1 is artist select, *2 is year select, *8 does a rescan of the filesystem/rebuild of the ID3 database, and *9 will do a shutdown if you need to shutdown without turning the ignition off. At any point I can key 9 to build a random playlist: eg: *19 builds a random playlist of everything in the database, *1 (then select an artist) #9 gives me random play of tunes from that artist, and so on.

People have asked for source for various bits of the system: below are some snippets that should help people doing the same sort of things. Please note that this is quick-hack code, so don't expect prettyness/whatever. It just works. Also, please don't mail me if you have no idea how to do anything with these files: I've not got time to teach people programming, these are just bits to point people in the right direction (or at least a direction).

display.c, a program which will display a string on a parallel-port attached VFD using a unix command, eg ./display "hello there". Note that it doesn't blank-pad the data, so you may need to use spaces in the string to clear the display.

id3.c, a fragment which reads an ID3 tag from a song.

keypad.c, a fragment which opens COM1, sets it to 1200bps, and also a 'check for user input' function.

rxaudio.c, a fragment which launches rxaudio, attaches it to a pty, and has code to send and receive messages to/from it.

Commercial version

News

News: 8th April 1999



TV appearance online - Benjamin Bayliss kindly Vivo-encoded the main bit of the MP3mobile's TV appearance: you don't get to see it playing in this clip, but you get to see where it goes in the car... click here (you need a Vivo player). Power supplies available commercially Someone is making MAX787-based power supplies and selling them here, along with their own in-car MP3 player. I've not seen one of these PSUs, but it's an idea for those of who averse to soldering! News: 29th September 1998



Ashis Vaidya's amp (automobile mpeg player) Another in-car player, this time using DOS and a parallel-port interfaced LCD (plus numeric-keypad in ps/2 compatible form). See here News: 22nd September 1998



empeg website is up! Finally, the empeg website is up: info on the commercial player can be found there, plus registration to reserve your place in the queue. News: 15th September 1998



PaulB's CAJUN audio jukebox Paul's just mailed me about his jukebox project, which uses more off-the-shelf PC bits (for those without too much soldering ambition) but has a bigger display, an onboard radio, and it looks really neat. Of course, he runs Linux too :-) Take a look: here News: 4th September 1998



General updates I've gone through the page and added Farnell order codes for parts as appropriate. Farnell trade almost everywhere and you can get pricings in your local currency from www.farnell.com New power supply The original 5v PSU documented above wasn't going too well. At times (for example, after a long journey (when the PSU was hot) and the headlights and fan were on) I'd get dropouts in the music: the display kept scrolling, but the music stopped. This turned out to be the 5v rail drooping enough to cause the HDD to spin-down, although the PC was unaffected (remembering that the CPU runs on 2.9v, a droop in the +5v rail doesn't affect it too much). So, I upgraded the PSU. As now (unlike when I started the project) I knew that 5A at 5v was sufficient, I tracked down a different switch-mode PSU chip, the Maxim MAX787 (Farnell order code 787-530). Again, using the example circuit in the datasheet (see Maxim's website & download the .pdf), this was built up and worked perfectly. Unlike the L4970A, the MAX787 is fine down to input voltages of 8v, which means that the battery would have to be completely dead for the computer not to work correctly - and also, it needs almost no external components: big electrolytics on the input and output, a timing capacitor and resistor, the inductor (50uH this time - I used a 47uH - Farnell code 482-572) and a MBR745 (Farnell code 364-230). Note that like the 1545 in the old PSU, the heatsink mounting point on this diode is NOT GROUND and will need a mica spacer and other bits to insulate it - although the MAX787 is short-circuit protected, so if it shorts you won't blow anything up, you'll just get no +5v rail. This setup runs much cooler - on the old one, the heat from the 4970 was major, even after only 30 seconds, whereas the 787 runs warm as opposed to hot. You'll still need a heatsink, though. I rescued the old L4940V12 (Farnell code 413-197) from the old PSU and reused it, as I'd had no problems with this. One other thing: my system takes less than 5A. If you use a higher voltage processor (eg: non-MMX pentium, Cyrix, etc) then you'll probably need a heftier supply, or possibly two of these in parallel. The MAX787 has a current limiter set at 6.5A, so you shouldn't fry anything by mistake, but be careful. Remember there will be a current peak when turning the think on (eg: Inrush and HDD spinup) so it's only the "operational" current you have to get worried about. TV appearance Yes, the mp3mobile is going to be on TV! Yesterday, Dave Green from the '404 not found' programme on [.tv], Sky's new computer channel, came round and filmed me, the car, and the mp3mobile. Hopefully, it should be on in a couple of weeks - I'll give more info when I have it - 404 not found is shown on Tuesday nights at 7pm UK-time. Tuning information: Astra 1D satellite, 10.847GHz, Vertical polarisation. [.tv] only broadcast from 6pm, so before that you get some Granada channel... No idea on encryption and that sort of stuff, it might be in the clear: would someone from Europe tell me if [.tv] is encrypted? I know it's part of the free Sky package, but I don't know if that means it's encrypted or not... Commercial version update Things are going well: we've got the PCBs for the production prototype back about a week ago, and Patrick surface-mounted everything by hand (brave man...) and it worked! It's a totally sexy 6-layer PCB, measuring only 6"x5", and can support up to 16Gb of disk :-). I'm currently working on the low-level firmware for the unit, then Linux will be fiddled with and plonked onto it. More news, a mailing to the announcement list, and www.empeg.com's opening will come shortly!

News: 11th August 1998



Commercial version & other bits The commercial version is going nicely, with the first production prototype PCB about to be sent off to the PCB-producers. Some of the highlights: same size as a euro car stereo (Blaupunkt, Pioneer, etc), graphic display, IR remote, IrDA on the front panel for Palmpilot (etc) interface, USB, RDS/RBDS FM tuner, high-speed serial for those without USB... and more. Still runs linux, too :-) When we've got it in its box, www.empeg.com will go up with pictures and so on, and there will be a mailing to the annoucement list. Completely separately, someone has mailed me who hasn't had time to complete their own MP3mobile project and wants to sell their bits:



New Advantech PCM-5862 (retails for $525)



PCB-10586-2000 (wiring kit: I didn't use this, but wish I had - brings the headers of the advantech board out to standard connectors)



Intel Pentium 150Mhz



16Mb RAM



He wants $450 for the above, and also has a laptop drive for sale. If you're interested, mail him (removed - now sold - thanks!)

News: 13th June 1998

New domain! In preparation for the commercial site I've just got a catchy new domain... there's nothing there (yet) but it's where the info on the commercial version will go, and where mailing list stuff will come from. It's www.empeg.com, which is very cheesy but quite cool (IMHO) :-) Mobile rc5 cracking :-) I've finally got round to putting rc5-64 on the mp3mobile, so in the free CPU time (about 50%, now the CPU is clocked at 166Mhz) my car is trying to crack some RSA encryption. I wonder how many keys/gallon it gets? I have to move the keyfiles around on the laptop at the moment, but when I get round to wiring the mobile phone up it'll be much easier to do key dumps... For those of you who want to help, I'm in the rc5@ant.org (Team 553) team, so join it & help us! Distributed.net are (unsuprisingly) at www.distributed.net. Software updates I've been tweaking slightly, and now have added code so that in random play mode, if (say) you hear an Oasis tune, and want another one, hitting 8 during play resorts the rest of the playlist so that there's a tune by the same artist played next. Good for mood continuation :-)

News: 12th May 1998

Paris (1st-4th May, 1998) The Paris trip was brilliant (thankyou Ronald!) only marred by the fact that the mp3mobile packed up when we arrived at the hotel, meaning that the UK people has seen it in action on the trip down, but noone else :-( The problem was traced to the board deciding it was now not interested in running at anything below 166Mhz: when in Paris I tried running it slower (incase it was a PSU fault and reducing the current might help) but didn't think of running it faster! (and it worked fine from then...). Since then, someone who looked at the Intel datasheets said that the MMX chips don't like running at <166Mhz, as no slower variants were every made. Hmm. Strange it didn't even work at 150Mhz, but there you go... Source and stuff I've put up some bits of UNIX source and the PIC object code, and updated some bits on the PSU page.



Hugo

Page first created 8th April 1998

Last modified 8th April 1999 (woo! first anniversary!)

