I was used to use easy-to-use MDs in car with my Sony
MDX-C5960R MD player. However, my new Ford Focus (year 2004 model) was going to
be equipped as standard with Ford's own CD player 6000CD with remote control
stalk near the steering wheel. Finally, after my friend already driving with
Focus said that the remote controller is a great thing to have, I needed to find
a solution for it when replacing the original player with my Sony.
Note that the interface described here applies only to cars equipped originally with a Ford 6000CD or compatible player (e.g. Ford Focus 2004). Cars designed for other player models may have a different remote controller interface.
As you guess, Ford's remote control and Sony's RM-X4S are not compatible with each other. However, after searching the web for a while, I found out that both of them are simple resistor networks (as the remote controller of my Sony MZ-R2 MD Walkman).
My measurements of the Focus controller matched with Half_Geek's message on the Unofficial Empeg BBS:I have checked later the Focus controller schematics from Ford's wiring diagrams, and it is correct. (Resistance values were not present in the manual.)
Because I do not own any Sony RM-X4S to measure, I had to rely on this Polish web page that shows the following circuit for the Sony RM-X2S remote control:My MDX-C5960R officially supports RM-X4S controller. However, it seems to work correctly with these RM-X2S resistances. Now the only thing I needed was a circuit that converts the resistances used in Ford's controller to those used by Sony. The Ford controller has five buttons and I decided to use them as follows:
Ford function |
Ford resistance |
Sony function |
Sony resistance |
---|---|---|---|
VOL- |
54 Ω |
VOL- |
23.6 kΩ |
VOL+ |
147 Ω |
VOL+ |
16.8 kΩ |
SEEK+ |
301 Ω |
SEEK+ |
8.8 kΩ |
SEEK- |
562 Ω |
SEEK- |
12.1 kΩ |
MODE |
1037 Ω |
SOURCE |
2.2 kΩ |
(none) |
5057 Ω |
(none) |
high impedance |
You may think that the simplest way to use the remote with Sony unit would be
changing the resistors in the Ford controller. However, there are three reasons
why I did not want to do it that way:
I decided to use inexpensive and easy-to-find microcontroller PIC12C508.
However, this most common (and old) 8-pin PIC does not have any integrated AD
converter so I needed to read the Ford stalk by measuring the time constant of
an RC circuit with I/O pin GP2 (the only Schmitt Trigger input). The resistor
network for the Sony output required 4...5 output pins, and because GP3 is an
input-only pin, it has no use in this circuit. GP2 is then used for both sensing
the capacitor voltage (in the input mode) and charging the capacitor (in the
output mode). Q1 amplifies the charcing current and ensures that the capacitor
is charged enough also when there is a low impedance on the FORD IN
connector.
Component |
Type |
Comment |
---|---|---|
U1 |
LP2950-5.0 |
Any low-quiescent current 5 V voltage regulator (up to 100 mA) |
U2 |
PIC12C508-04 |
One-Time-Programmable 8-pin microcontroller +
socket |
Q1 |
2N3904 |
Probably any NPN switching transistor (check the
pin-out!) |
D1 |
1N4005 |
Any rectifier diode |
C1, C2 |
10 µF 35 V tantalum |
Good margin for the voltage specification |
C3 |
100 nF |
Critical component, preferably a polyester
capacitor? |
R1 |
2 kΩ | Not so critical |
R2 |
21.4 kΩ | |
R3 |
10.0 kΩ | |
R4 |
2.1 kΩ | |
R5 |
16.9 kΩ | |
J1 |
pin header, 2.54 mm pitch |
Something to be attached to the Ford connector |
J2 |
3.5 mm stereo plug |
Preferably a 90-degree plug? |
Note that the newer mask version PIC12C508A has slightly different electrical
properties and may not work here without changes in the time constants defined
in the software.
I recommend using a screw connector for connections
because it easies mounting the adapter on radio's wiring harness. The circuit
board fits in a film box. DIL-packaged microcontroller allowed building the
circuit on a copper-striped board without the effort of etching a PCB.
I used a five-pin pin header (actually a piece of some connector) for the Ford connection. Two pins are enough but five pins shows implicitly the place of the Ford connector where to plug the header (there is only one five-hole group on the connector). The plastic guides prevent reversed insertion of the header to the connector.
The cable is soldered to the correct pins on pin header (see Figure 3) and
then insulated with shrinking tubes and hot-melt glue.
When the device is idle, all GPIO pins are in high-impedance state (i.e.
configured as inputs). R1 keeps Q1 closed so the power consumption is minimized.
The Sony unit sees high impedance on J2 (= no button pressed). When a reading
cycle starts, C3 is charged via Q1 by setting GP2 to output '1' level for 4 µs.
Then the software waits for five predefined moments checking the state of C3
with GP2 input after each timeout.
When C3 has been discharged via the resistors in the Ford
remote controller, the GP2 input changes to '0'. Because GP2 is a Schmitt
Trigger input, the voltage over C3 must drop considerably before GP2 input
detects the change. How quickly this happen depends on the button pressed (if
any) on the Ford controller. If C3 is not discharged enough after those five
timeouts, the connected resistance is so high (> 3 kΩ) that no button is
pressed on the controller. In such case, the PIC goes into low-power sleep mode
and wakes up for a new reading cycle after watchdog timeout (set to nominal 36
ms). This low-power operation drops the average current consumption of the
circuit down to 150 µA (including the voltage regulator loss) so the adapter may
be connected to the car battery all the time.
If '0' state is detected on GP2, the number of the timeout
loop specifies the button which has been pressed on the Ford controller. To
avoid incorrect results due to EMI or buttons pressed/released during the
measurement cycle, the program repeats the reading cycle until 64 consecutive
same results are detected. This will take time up to ~20 ms depending on the
button pressed (if any).
After 64 same results, the PIC changes the output resistance by switching the pins GP0, GP1, GP4, and GP5 between '0' output and high-impedance. The selected combination depends on the detected button.
Sony function |
GP0 |
GP1 |
GP4 |
GP5 |
Resistance on J2 |
---|---|---|---|---|---|
VOL- |
0 |
Z |
Z |
Z |
23.5 kΩ |
VOL+ |
Z |
Z |
Z |
0 |
16.9 kΩ |
SEEK+ |
0 |
0 |
Z |
Z |
8.9 kΩ |
SEEK- |
Z |
0 |
Z |
Z |
12.1 kΩ |
SOURCE |
Z |
Z |
0 |
Z |
2.1 kΩ |
(none) |
Z |
Z |
Z |
Z |
high-impedance |
This simple way of using three-state outputs and resistors for generating the
output impedances works because the Sony unit reads the remote control
resistance using a voltage less than the PIC power supply (5 V).
I made a mistake in the software of my own adapter which reversed the SEEK+
and SEEK- functions (compared to the original Ford radio and car handbook).
However, I started to like the way of "going back" (seek down, previous track)
by pulling the SEEK button and "going up" (seeking up, next track) by pushing
it. You may select which way you like:
File name |
Description |
---|---|
fordsony.hex |
Standard software (pull SEEK for SEEK+) |
fordsonr.hex |
Reversed SEEK button (push SEEK for SEEK+) |
fordsony.zip |
Source code for Microchip's MBLAB |
You may program your PIC with any compatible programming tool. I used JDM's incredible
simple PIC programmer on MS-DOS.
To test the adapter, power it with a 12 VDC power supply or battery.
Change on J2 |
T0 (original timeout) |
R0 (target resistance) |
Parameter name |
---|---|---|---|
23.5 to 16.9 kΩ | 10 µs |
100 Ω | VOL_DOWN |
16.9 to 8.9 kΩ | 23 µs |
224 Ω | VOL_UP |
8.9 to 12.1 kΩ | 44 µs |
432 Ω | SEEK_UP |
12.1 to 2.1 kΩ | 81 µs |
800 Ω | SEEK_DOWN |
2.1 kΩ to infinite |
310 µs |
3047 Ω | MODE |
For example, if the change from 23.5 kΩ to 16.9 kΩ on J2 is
detected at potentiometer resistance R1 = 130 Ω, you need to change the
VOL_DOWN
parameter from T0 = ".10" to T1 = 10 µs *
100 Ω / 130 Ω = 7.7 µs ~ ".8"
Note that PIC12C508 is one-time-programmable (OTP). You need to use a new PIC
for the changed timeout values. However, there is some space reserved for
timeout modifications in FORDSONY.ASM. If you want to reuse the same PIC, remove
one movlw H'FF'
in each five loops and add a nop
after
the last movlw
command. For example:
Original code |
Modify to |
---|---|
movlw H'FF' |
movlw H'FF' |
movlw H'FF' |
movlw VOL_DOWN |
movlw VOL_DOWN |
nop |
This allows you to program the same PIC again after changing the timeout values in FORDSONY.INC.
Ford does not use standard ISO radio connectors so
connecting a Sony to a Ford requires an inexpensive Ford-to-ISO wiring harness
adapter. That is why the complete harness will be rather huge.
To get power for your adapter you need to add some wires
to your wiring harness: Branch the +12 V Continuous and Ground
wires and isolate the branches carefully. I recommend protecting the connections
with shrinking tube. (You may probably use also the +12 V Switched
instead but the current consumption of the adapter is so low that it does not
drain car's battery even if it is continuously powered.)
Connect the power wires and input/output wires to the adapter and close the
adapter in its box before connecting the wiring harness to your car. The pin
header connector is connected to the FORD IN and GND terminals, and the 3.5 mm
plug is connected to SONY OUT and GND terminal. (I used a 3.5 mm plug from
inexpensive headphones but the green cable was so thin that I had to solder it
directly on the adapter circuit board instead of using the screw terminal.) Be
careful when making any connections -- bad connections may cause short-circuits,
and the short-circuit current is limited only by car's fuse!
Installation of the adapter is simple. Just connect the pin
header to the correct pins (see Figure 3) on the Ford's connector and
plug the 3.5 mm plug into the Sony unit. -- And remember to test the operation
before inserting the main unit into the slot...