The Install (version 1)
The Processing Unit (Mk 1)

The main unit is built on an socket-7 embedded PC motherboard in a small
aluminium box (12"x6"x2"), with power supply and hard drive all in the same
case. It was done this way to keep things neat and compact (at least with the
lid on :-). I didn't want to mess around with external power supplies or power
converters. The processor is a regular P233 MMX, underclocked to 210MHz to
reduce power consumption, with 128Mb EDO ram to keep it happy. The chipset on
the motherboard is a TX chipset with 512Kb pipeline burst L2 cache, so the
whole thing runs pretty quickly.

The internals are slightly messy, partially due to the cramped enclosure, and
partly due to it being the prototype. The case (available from Maplin) is a
perfect fit for the embedded motherboard. Some space was left at the end,
enough for a small switched mode power supply to convert the 14V to 12V and 5V
for the system. The 6.5Gb Hitachi 2.5" laptop harddrive fits perfectly between
the processor and IO connectors, slung from a piece of stripboard, fastened by
a couple of fuse clips on an old PC chassis rail and fixed on the other side
with stacked PC standoffs and a cheesehead screw. The harddrive is attached via
three large rubber grommits in an attempt to protect the drive from shock. 2.5"
drives are a lot better than 3.5" drives for resistance to shock, but they can
still use all the help they can get.
The Processing Unit (Mk 2)

There was quite a lot of space at the end of the case, especially after the
smaller mk2 power supply was built. With the mk2 power supply, the efficiency
went up, the heat went down and the power supply went over the motherboard.
This pretty much rendered the space at the end of the case completely empty,
and so I reduced the length of the case. The case was reduced to 8.5"x6"x2"
with no loss of functionality (in fact it gained an infra red receiver). With
the increase in efficiency of the power supply I could afford to increase the
processor clock back up to the full 233MHz.
The Control Unit (Mk 1)

The control unit is a 128x64 LCD and four buttons in a gameboy sized case. The
whole thing hooks up to the parallel port, and has a small amount of TTL (yep,
I'm still into that...!) interface logic. It's a tight fit, I will eventually
come up with a PIC solution, and build in infra red at the same time. The
display module itself is quite neat. It is based on the Toshiba T6963C
controller chip, and has graphics and text planes, which can be combined in a
variety of fashions. It also has some spare memory to store user character
sets.

Here are some shots of the system in action, specifically the control unit. On
the left is the CD list (I now have 88 CDs loaded and I still have room for
more). On the right is the song list. Only the three left hand buttons are
active, and the legends change on the screen depending on the mode that the
player is in. The system should hold around 100 CDs once it is full. I really
do need to come up with a better menu system for the CDs - scrolling through 88
CDs is no fun.

There was a small amount of interface logic required for the 128x64 dot matrix
LCD. This allows a parallel port (modified to supply +5V power) to power and
drive the LCD. The NME0512S generates a -12V supply which is dropped by a zener
to drive the contrast input. The 74LS245 buffer allows bidirectional data on
the LCD bus, and the 74LS08 combines the status bits into one bit for reading
by the parallel port (by this time, I was running out of signal lines). The
port buttons are momentary types, with 1k pull-up resistors. The unit worked,
but suffered a small amount of data loss (screen corruption is visible in the
screen shot above). For the most part it was pretty much unnoticable though.
The Control Unit (Mk 2)

Eventually I finally decided that the LCD display had to go. It was difficult
to see sometimes, and was awkward with it being on the end of a parallel cable.
I switched it for a Futaba 20x4 Vacuum Fluorescent Display (VFD). I still have
the buttons to sort out, and some of the cabling, but the display is a nice fit
in the flip down ashtray under the radio. The VFD is hooked up directly to the
parallel port using a 4 bit interface to keep the number of wires down (I use
8-core cable which does power, data and control wires). The buttons are also
attached to the parallel port, and provide up, down and play options for the
menus.
The Control Unit (Mk 3)

The buttons had to go. They were untidy and I couldn't work out a nice way to
integrate them with the dash. I built a
Universal Infrared Receiver(UIR) and put this in the case - less wires
to disconnect when removing the unit for use in the house, more buttons to work
with and the possibility of any one in the car being able to select songs (even
from the back of the car). The UIR fits nicely on the side of the hard drive
bracket. The circuit board layout can be seen on the same sheet as the Mk2
power supply below.
The Power Supply (Mk 1)

The PSU is fairly conventional, a 2A 7812 to drop the 14V to 12V for the
motherboard, and an L296 based switcher for the high current 5V supply. For
this motherboard, the 12V line dropping out occasionally due to low headroom on
the 12V linear regulator doesn't seem to be a problem (I suspect that the 12V
is primarily used for powering the audio circuitary on the motherboard - the
HDD requires only 5V). Fortunately the motherboard had efficient switching
supplies for the processor voltages, so 5V supply current wasn't astronomical.
The supply has been measured to consume less than 2.5A at 14V when the computer
is running, and the system draws about 3.8A on the 5V line. The 12V requires
are negligible (the laptop harddrive helps out here, the 12V probably only
spins the processor fan and powers a small amount of serial port and audio
circuitary).

The schematic can be seen by clicking on the image to the left. The PSU is very
compact, being built on a circuit board 2.3" x 2.7". It includes the relay to
allow the head unit to switch the unit on (see head unit section below for
details). The same unit is used when running the mp3 player in the house too.
The use of an unregulated mains power supply feeds approx 15v into the dc2dc
supply and the unit operates as if it were in the car. The use of two extra
pins on the Neutrik Speakon connector shorted only on the house supply
connector allows the switch on relay to be bypassed in the house configuration
(whilst still affording the protection of the fuse which is upstream from the
relay). This is necessary since there is no head unit to supply this signal,
and I didn't feel like providing a nice stabilised supply for driving the
relay.

The unregulated mains supply was built from a car battery charger transfomer
and a capacitor bank (to smooth the rectified ac). It was all recased for
neatness. It is therefore capable of supplying large amounts of current (8A
approx - not that it needs it) at a sensible voltage for feeding the dc2dc
converter. The fan and heatsink are necessary to keep the bridge rectifier cool
at the high currents required - the bridge rectifiers dissipates some 5 watts
with the unit running, but with the heatsink and fan everything stays nice and
cool. The underclocking of the processor helps further.
|
For the Mk 1 power supply, the main processor was underclocked from 233MHz to
210MHz. Dropping the FSB from 66MHz to 60MHz seemed to have most benefit
(leaving the clock multiplier at 3.5). The power consumption on the 12v and 5v
lines for these clock rates were measured as shown on the right. You can see
that the win is significant for only a small drop in performance. The decoder
runs with about 20% cpu utilisation even at the lower clock frequency, so I
have plenty of cpu spare.
|
|
Clock rate
|
5v current
|
12v current
|
|
233MHz (FSB=66MHz, Mul=3.5)
|
3.8 A
|
0.38 A
|
|
210MHz (FSB=60MHz, Mul=3.5)
|
3.49 A
|
0.38 A
|
|
The Power Supply (Mk 2)
The Software
The Ogg Vorbis and MP3 codecs chosen for my player are the libvorbis and mpg123
modules. Both were ported to DOS, and a frontend written to take care of
playlist loading, display handling and the input device.
The frontend simply presents a list of CDs (playlists) and then plays the
selected one. The playlists are built as a binary file from the ID3 and Ogg
Vorbis info in the songs. The binary file is much faster to load than parsing
each song file individually, and allows the entire playlist information to be
available immediately on boot.
The frontend also takes care of streaming the songs into memory. At any one
time, there is at least one whole song ready for play, and sometimes as much as
two. This means that there is never any skipping, and the hard drive can be
shut down between songs reducing the risk of head crashes. At some point I plan
to increase this caching to load as much as possible (perhaps a whole CDs
worth).
The sound chip on the motherboard I selected provided SoundBlaster
compatibility. Unfortunately the sound quality wasn't up to the required
standards. To get CD quality output I had to write a native ES1869 sound
driver. This enabled me to get to the 44100 Hz 16 bit stereo output that this
chipset offered.
Boot time is around 25 seconds from power on to music playing. About 20 seconds
of this is the motherboard POST, the remaining time being taken to boot DOS,
and load the player and binary playlists.
The software is compiled on the player box itself, using Watcom 10.5, and the
DOS extender is dos4g. I did start out with djgpp, and the cwsdpmi server, but
ran into virtual/logical/physical address mapping problems when putting
together the DMA transfer routines for the sound chip driver. Usually I code
for other platforms at work, it had been a long time since I had done any DOS
work, and I don't mind admitting I was a bit rusty.
The head unit modifications

I have modified the head unit to provide an aux in input (switched by an
internal relay to be driven from the parallel port). The audio signal is
switched at the input to the TDA7348 audio processor in the head unit - the
original audio processor inputs are routed to this circuit, along with aux-in
and a switching signal, and the output is then routed into the audio processor.
A ground loop isolator is used to eliminate the alternator whine which is
caused by the difference in grounding points of the computer and the stereo
(the ground loop isolator is internal to the head unit on the final
modification, so causes little trouble).

I have also modified the head unit to provide a power on switch for the PC.
This switches the PC on whenever the head unit is on. Since the head unit can
be switched on with a 1 hour timer without the ignition being on, it means that
the mp3 player is not reliant on the accessory line for power. This has the
useful side effect of preventing reboots whilst restarting the car (the
accessory line switches off whilst cranking). I picked off the power switch
signal from the amplifier chip (a TDA7372A in the CAR300 stereo modified here)
and used it to drive an open collector transistor capable of switching a relay.
The schematic to the left shows the circuits used to make the modifications.
Again this board was eventually built on a custom circuit board and mounted
securely in a convenient empty space inside the CAR 300 unit.
Getting songs to the player (Mk 1)
|
Data is transferred to the system using a laplink like solution. A standard
25-pin D-type all-pins-connected parallel cable (male to male) is combined with
a cross-over circuit constructed in a breakout box. Then receive software is
run on the target (mp3 player), and transmit software run on the host (the pc
containing the mp3s). The music is then transferred across the parallel cable
at a rate of approximately 3Mb/minute (each byte is transferred as two
nibbles). The transfer software is available in the downloads section.
|
|
25 Pin D-type Male
|
25 Pin D-type Female
|
|
2
|
15
|
|
3
|
13
|
|
4
|
12
|
|
5
|
10
|
|
6
|
11
|
|
15
|
2
|
|
13
|
3
|
|
12
|
4
|
|
10
|
5
|
|
11
|
6
|
|
21
|
21
|
|
Getting songs to the player (Mk 2)
The parallel link was found to be very slow, and occasionally unreliable. Since
I had bought a motherboard with a fast 100BaseT network card on board, I
decided to investigate DOS drivers for it. With a little info from
www.wown.com I was able to install the NDIS drivers supplied with my
motherboard under DOS. I now can mount a shared drive from my home PC and
transfer files both ways much faster.
The installation

When the lid is on, and it's sitting on the shelf, you'd hardly know it was
there...! And I've since sprayed it matt black, so it's even less noticable.
The fan gives off a slight whirr when running, and you get a quiet beep from
the BIOS as the system comes up, but other than that, it's fairly unobtrusive.
I never really found much use for that crazy little shelf before anyway. The
ugly wires hanging out all over the place were a temporary thing (this is an
old picture). The power lines are now not visible at all, the tape adapter is
not needed with the aux in mod on the head unit. The keypad has been replaced
by an integrated IR receiver. There are now no visible wires.
Disclaimer
I TAKE NO RESPONSIBILITY FOR ANYTHING YOU DO TO YOUR OWN CAR OR STEREO SYSTEM
USING THIS INFORMATION. THIS INFORMATION IS PROVIDED PURELY AS A GUIDE TO WHAT
I DID TO ACHIEVE THE EFFECTS I DESIRED, NOT AS INSTRUCTIONS FOR OTHERS TO
FOLLOW.